![](https://habrastorage.org/webt/cq/0-/ae/cq0-aehjracqhanhf154fahkalk.png)
Сразу оговорюсь, что в статье речь пойдёт преимущественно о теоретической стороне проектирования батарей, нежели о практических рекомендациях по исправлению их технических проблем — жаль разочаровывать тех, кого больше интересует последнее.
Представьте, что работаете инженером в компании по производству электромобилей, и ваш начальник обращается к вам со следующими словами: «Джереми, у нас проблема! (и да, зовут вас Джереми). Всё эти чёртовы батареи! В машине их слишком много, что получается очень накладно. Но при этом мы хотим, чтобы клиенты могли спокойно проехать 400 миль на одном заряде».
Что вы в этой ситуации сделаете? Как вы оптимизируете батареи? Это же чёрный магический ящик, не так ли? Не так. Используйте симуляцию.
▍ Проблема «и»
Похоже, что на рынке сегодня нет хороших решений. Аккумуляторные батареи проектируются с акцентом либо на высокую ёмкость, либо на высокую мощность, но никак не обеспечивают и то, и другое. Если мы будем использовать в машине множество высокоёмких батарей, то сможем увеличить дальность поездки, но из-за низкой мощности и высоких энергопотерь в системе при ускорении такие батареи будут перегреваться. В итоге нам приходится прибегать к оверинжинирингу системы охлаждения (что увеличивает вес и себестоимость). Причём попутно мы выясняем, что при работе в состоянии перегрева батареи быстрее теряют ёмкость. Помимо этого, в их проектировании есть и другие ограничивающие факторы, такие как безопасность, срок службы, вес и, конечно же, стоимость.
Ниже я привёл показательную лепестковую диаграмму основных метрик, которые инженеры учитывают при проектировании или выборе ячеек батарей, и которые нередко конкурируют друг с другом.
![](https://habrastorage.org/webt/cq/0-/ae/cq0-aehjracqhanhf154fahkalk.png)
О проектировании ячеек аккумуляторов хорошо сказано на сайте batterydesign.net. Ниже вы видите взятое с того сайта фото, отражающее разницу между высокой ёмкостью и мощностью. Более тонкие электроды лучше подходят для получения высоких токов, так как на пути движения ионов присутствует меньше материала, но при этом в них находится больше неактивного материала (то есть токоотводов и сепараторов — на фото отмечены золотым, серым и жёлтым) на единицу объёма, что снижает их энергетическую плотность.
![](https://habrastorage.org/webt/ns/qv/at/nsqvathibdk1ihdtd96ha15n6p0.jpeg)
И эта проблема особенно актуальна при проектировании батарей для электрических летательных аппаратов, поскольку пиковая мощность, необходимая для взлёта и приземления, в 10 раз выше той, которая требуется для самого полёта. В итоге приходится жертвовать ёмкостью в пользу мощности — для летательных аппаратов тоже крайне трудно восполнить заряд во время полёта. Очень хорошо по этой теме и по теме необходимых метрик эффективности сказано в этой и этой статьях.
К счастью, у вас есть знакомый инженер в компании, поставляющей вашей организации батареи, и вы связываетесь с ним для обсуждения проблемы.
▍ Проклятие размерности
Поставщику батарей хорошо известны сложности с их проектированием, и он объясняет вам, что инженеры потратили годы на решение этой задачи, тестируя различные конструкции в попытке оптимизировать батареи для разных целей. Требуется не менее одного дня, чтобы разработать и полноценно протестировать один вариант конструкции, и не менее месяца, чтобы проверить выбранные ячейки при помощи ускоренных тестов износа.
В ходе таких тестов ячейки подвергаются серьёзным непрерывным нагрузкам, после чего полученные данные экстраполируются на реальный сценарий использования автомобиля (когда он бо́льшую часть времени проводит в припаркованном состоянии). Но перейти от одного сценария к другому не так-то просто, поскольку эффект износа изменяется нелинейно. Приблизительная стоимость сборки и тестирования батареи по новой схеме в пересчёте на одну ячейку (одну точку данных) составляет $1 000.
Список может показаться небольшим, но всё же оцените, сколько различных решений принимается в ходе разработки одной батареи. Во-первых, нужно выбрать материалы:
- анод;
- катод;
- электролит;
- сепаратор.
Каждый твёрдый материал подбирается по:
- толщине;
- пористости (отношение объёма пор к общему объёму твёрдого активного материала или электролита;
- размеру частиц;
- составу в случае смеси материалов.
Помимо этого, есть и геометрические аспекты вроде:
- форм-фактора: цилиндрический, призма, «мешочек»;
- размера, например 18650;
- числа контактов;
- толщины токовывода;
- мер безопасности вроде пробок вентиляции и сердечника ячейки.
Также можно изменять состав электролита, и именно здесь зачастую кроется секрет (но об этом мы, возможно, расскажем в другой раз).
Предположим, что вам нужно настроить 20 элементов. Если вы возьмёте 3 разных точки данных, влияющих на изменение этих элементов (изначальный дизайн, какое-то число больше, какое-то число меньше), и оставите все остальные составляющие постоянными (обычно это хороший научный подход), то уже получится 320 возможных комбинаций изменений.
Если точнее, то:
3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3 x 3
= 3,486,784,401
![](https://habrastorage.org/webt/e7/ah/-a/e7ah-aklcoiv7ohb2n8rvzrsxgk.gif)
Небольшой скрипт ниже наглядно демонстрирует проблемность задачи с тремя переменными. Сложно визуализировать 20-мерное пространство параметров, но суть вы явно уловили.
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
def plot_points(x, y, z):
# Создание 3D-графика
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111, projection='3d')
# Нанесение точек
ax.scatter(x.flatten(), y.flatten(), z.flatten(), s=10)
# Указание заголовков и меток
ax.set_title(f'{np.sum(np.array(np.shape(x)) > 1)}D Parameter Space')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
# Вывод графика
plt.show()
# Генерация данных для 3D-пространства
points = np.linspace(0, 1, 10)
x, y, z = np.meshgrid(points, 1, 1)
plot_points(x, y, z)
x, y, z = np.meshgrid(points, points, 1)
plot_points(x, y, z)
x, y, z = np.meshgrid(points, points, points)
plot_points(x, y, z)
![](https://habrastorage.org/webt/hm/up/lg/hmuplga1pjekatsa_pq_cemanwe.png)
![](https://habrastorage.org/webt/dx/ob/b0/dxobb0dssyjtj8mo9zmvl8yrvvk.png)
![](https://habrastorage.org/webt/3u/df/fe/3udffee0anch6wrhhh2iybbijt4.png)
Тестирование 3 486 784 401 батарей, очевидно, станет нелепой затеей. Ни один здравомыслящий разработчик не возьмётся проводить такое число экспериментов. Даже если вы сможете параллельно обрабатывать, скажем, 1 000 батарей и задействуете огромный тестовый отдел, который будет непрерывно их менять, каждой линии всё равно придётся провести более миллиона экспериментов, на что потребуется как минимум миллион дней и не менее $1 миллиарда.
Эта ситуация известна как «проклятие размерности» (чем больше у вас изменяемых элементов, тем экспоненциально больше комбинаций нужно тестировать) и, к сожалению, разработчики батарей сталкиваются с этим проклятием во всей его красе. На деле есть несколько уникальных компаний, которые практически весь бюджет тратят на исследования и разработку аккумуляторных батарей, но при этом пытаются вывести свою новейшую технологию на рынок, не установив ни единого элемента питания ни в один автомобиль.
![](https://habrastorage.org/webt/9f/ku/em/9fkuemi130jo1cc6nhshfs0bze0.gif)
▍ Есть ли у проблемы «и» решение?
Тем не менее компания, занимающаяся разработкой ваших батарей, готовит решение обозначенной проблемы. Она тестирует новый материал, который способен обеспечить повышенную энергоэффективность с сохранением высокой мощности. Речь идёт об изготовлении анода из сплава графита и кремния. Разработка ведётся в Кремниевой долине, и вас это радует, поскольку необходимого материала там должно быть в избытке. В итоге вы спрашиваете, когда сможете получить первые экземпляры батарей для проверки.
На это поставщик отвечает: «Мы ещё проверяем новый материал, и на это нужно какое-то время. Тем не менее первые лабораторные тесты дали обнадёживающие результаты, и на рынке уже есть батареи с кремнием, но в них были обнаружены определённые проблемы». Подробнее об этом чуть позже.
Как правило, проектировщики аккумуляторных ячеек вносят все изменения и проводят все тесты сами. У них есть собственный поставщик материалов, который также проводит множество тестов. Рассмотрим в качестве примера ту самую технологию изготовления анода.
Анод — это отрицательный электрод ячейки, который содержит ионы в так называемом активном материале. Ионы лития интеркалируют, то есть «внедряются» в кристаллическую решётку материала, вызывая изменение его размера. После того как они оказываются внутри, происходит процесс диффузии, то есть ионы перемещаются к центру материала (условно говоря, сферической частицы). Процесс повышения концентрации ионов лития в материале называется литированием. Это электрохимический процесс, требующий передачи электрона, которая происходит при подаче или получении тока из ячейки.
Ниже представлено прекрасное и понятное видео канала The Limiting Factor, демонстрирующее работу аккумуляторов на уровне частиц и атомов.
Добавление в анод кремния повышает ёмкость ячейки, поскольку на единицу объёма получается больше точек присоединения для ионов лития, но есть здесь и пара недостатков. Первый касается влияния на напряжение ячейки.
▍ Гистерезис напряжения
Как правило, процесс литирования включает несколько стадий, когда кристаллическая структура вещества по мере увеличения/уменьшения насыщенности литием принимает стабильные фазы (равновесные состояния). Химический потенциал литированных частиц напрямую связан со степенью литирования (измерить сложно), которая, по сути, обуславливает потенциал покоя, или напряжение материала (которое измерить уже проще).
Если не углубляться дальше в физику, можно просто сказать, что при зарядке и разрядке ионы насыщают материал либо покидают его, что приводит к изменению напряжения. Причём напряжение меняется медленнее, когда материал переходит из одной стабильной фазы в следующую. Внимательный анализ потенциала покоя и его изменения в результате литирования или изменения ёмкости (dVdQ) может показать, какой материал находится внутри, поскольку кристаллы «в некотором роде» предсказуемы. При определённых уровнях литирования напряжение достигает характерных уровней.
И напротив, если вам известен материал, вы можете спрогнозировать уровень заряда (state of charge, SoC) на основе напряжения (показатель, который очень интересен проектировщикам). Я говорю «в некотором роде», потому что кремний, к сожалению, подвержен гистерезису напряжения. То есть при циклической зарядке/разрядке оно изменяется по-разному, даже когда цикличность очень медленная, например 1 цикл в день.
![](https://habrastorage.org/webt/or/r6/m4/orr6m41lek_42svlfxzwx9kdyng.png)
Задача измерения уровня заряда батареи кажется для нас вполне тривиальной — можно же просто непрерывно измерять входящий и исходящий токи (техника, известная под названием кулоновский счётчик). Тем не менее такой подсчёт подвержен ошибкам по причине возможной неисправности датчика, его низкой точности или систематических сбоев. При этом можно измерять напряжение, которое непосредственно отражает состояние батареи, в связи с чем обычно используется в качестве индикатора уровня заряда.
Но можно ли полагаться на показания напряжения? Этот параметр тоже имеет свои проблемы и зависит от того, насколько далека система от состояния равновесия. Зачастую бывает так, что батарея какое-то время находится в бездействии, после чего параллельно подключенные ячейки начинают выравнивать своё напряжение покоя, восстанавливая баланс тока.
Общий остаточный заряд системы по-прежнему тот же, но напряжение покоя сдвинулось ближе к равновесию по сравнению с неактивным состоянием системы (это происходит как внутри ячеек, так и между ними). Напряжение также зависит от окружающей температуры, износа и того, заряжаете вы батарею, либо разряжаете (гистерезис).
▍ Набухание и растрескивание
Ещё одна загвоздка с кремнием в том, что его литированные частицы прибавляют в объёме примерно 80% по сравнению с нелитированными. И это является проблемой, поскольку перегружается сама частица, которая может просто разрушиться и больше не сформировать активную часть материала. Кроме того, этот процесс также может влиять на окружающий материал, разрушая его или нарушая связанность с ним. Эти механические эффекты способствуют ускоренному износу ячейки, когда активный материал истощается быстрее, и ёмкость ячейки снижается.
![](https://habrastorage.org/webt/yc/mw/sv/ycmwsv_71hirzv4lfve9rbg4uxe.png)
К счастью, уменьшение частиц помогает нивелировать гистерезис напряжения и сократить влияние набухания. Это также повышает площадь активной поверхности на единицу массы кремния, снижая потери, связанные с происходящими в батарее химическими реакциями.
Вы можете задаться вопросом, откуда я всё это знаю? Что ж, в некоторой степени у меня есть чутьё, плюс за моими плечами докторская степень и несколько лет исследований электрохимических систем. Но в основном это объясняется тем, что такие системы можно изучать, тестировать и оценивать при помощи компьютерных симуляций.
▍ PyBaMM в помощь
Рассмотрим кое-какие интересные приёмы, которые можно проделывать с помощью симуляции, и которые помогут вам отладить проблемные батареи. PyBaMM — это опенсорсный инструмент, написанный на Python (о чём, собственно, и говорит приставка Py). При этом BaMM означает Battery Mathematical Modelling.
Для начала разберёмся, что происходит внутри, когда я заряжаю/разряжаю аккумулятор, и почему напряжение изменяется именно тем или иным образом? Какие физические процессы и связанные с ними особенности структуры влияют на напряжение больше всего?
import pybamm
model = pybamm.lithium_ion.DFN()
parameter_values = pybamm.ParameterValues("Chen2020")
experiment = pybamm.Experiment(
[
"Discharge at 2C for 20 minutes",
"Rest for 10 minutes",
], period="30 seconds"
)
sim = pybamm.Simulation(model, experiment=experiment, parameter_values=parameter_values)
solution = sim.solve()
plotter = pybamm.QuickPlot(solutions=solution, time_unit="hours")
plotter.dynamic_plot()
Здесь мы отчётливо видим большую разницу в напряжении, когда прекращается разрядка батареи, и она переходит в состояние покоя. Но что конкретно происходит? Полезной особенностью PyBaMM является разделение напряжение на составляющие компоненты, называемые перенапряжением. При определённом уровне заряда, когда всё находится в равновесии, у батареи наблюдается идеальный потенциал, а именно потенциал покоя (open-circuit potential, OCP). Далее все потери напряжения возникают уже вследствие нарушения этого равновесия.
pybamm.plot_voltage_components(solution)
![](https://habrastorage.org/webt/du/8n/xk/du8nxkzaehfxckgn_sfsrvf7d6i.png)
По этой диаграмме можно сходу понять следующее:
- Значительная часть изменений напряжения ячейки отражает изменение напряжения покоя в результате литирования (SoC), но и другие процессы определённо имеют свою важность.
- В момент, когда ток останавливается, напряжение практически сразу ослабевает. На графике видно, как перенапряжение электрохимической реакции (зелёный), омическое перенапряжение электролита (фиолетовый) и омическое перенапряжение электрода (коричневый) постепенно исчезают. И это вполне логично, поскольку все эти процессы связаны с током и транспортом ионов.
- Оранжевый и частично красный сегменты концентрационного перенапряжения исчезают медленнее. Это говорит о том, что ионы продолжают движение внутри системы в отсутствии реакций из-за нарастания градиентов концентрации в активном твёрдом веществе и электролите.
- Потери электролита вследствие концентрационного перенапряжения в процессе разряда вполне ощутимы (около 100 мВ), но они исчезают гораздо быстрее, чем в активном материале. Это указывает на то, что в электролите диффузия происходит намного легче, чем в твёрдом материале.
Чтобы убедиться в этих выводах, можно просмотреть графики изменения концентрации в твёрдых частицах и электролите. Ниже представлены 5 снимков, сделанные в начале периода покоя и после него.
plotter = pybamm.QuickPlot(solutions=[solution], output_variables=[
"X-averaged negative particle concentration [mol.m-3]",
"X-averaged positive particle concentration [mol.m-3]",
"Electrolyte concentration [mol.m-3]"
])
plotter.plot(t=[1200]) # В момент покоя
plotter.plot(t=[1380])
plotter.plot(t=[1800])
![](https://habrastorage.org/webt/is/pb/nd/ispbndir-iygpqoi8kg_pynbsoq.png)
![](https://habrastorage.org/webt/i7/ae/9w/i7ae9wwsdux3dph02rfizt8xx_a.png)
![](https://habrastorage.org/webt/lv/su/na/lvsunaqf4r0nuswnbe90kqrx9kc.png)
Концентрация в положительной частице по-прежнему не коррелирует с изменением её радиуса. Тогда можно интуитивно предположить, что изменение какого-либо аспекта этой частицы может повлиять на процесс ослабевания напряжения ячейки. Посмотрим, какой у положительной частицы текущий радиус, и окажет ли изменение его значения ощутимый эффект.
parameter_values["Positive particle radius [m]"]
5.22e-06
parameter_values["Positive particle radius [m]"] = 3.0e-6
sim2 = pybamm.Simulation(model, experiment=experiment, parameter_values=parameter_values)
solution2 = sim2.solve()
pybamm.plot_voltage_components(solution2)
![](https://habrastorage.org/webt/qg/qm/ey/qgqmey741l-teeyinn9890i2wpe.png)
Теперь мы видим гораздо более быстрое выравнивание напряжения в покое и можем снова проверить концентрацию:
plotter = pybamm.QuickPlot(solutions=[solution, solution2], labels=["Big particle","Small particle"], output_variables=[
"X-averaged negative particle concentration [mol.m-3]",
"X-averaged positive particle concentration [mol.m-3]",
"Electrolyte concentration [mol.m-3]"
])
plotter.plot(t=[1200]) # В момент покоя
plotter.plot(t=[1800]) # В момент покоя
![](https://habrastorage.org/webt/rg/6t/nh/rg6tnhbcig53q2siwm52dpc7c5a.png)
![](https://habrastorage.org/webt/bu/lz/0i/bulz0ieneiuy0-rjgkvstgmw6au.png)
Теперь вклад положительной твёрдой частицы в напряжение покоя происходит намного быстрее. Дело в том, что уменьшенный размер частицы ведёт к более быстрому проникновению ионов лития в частицу и их выходу из неё. Это хороший пример того, как данную модель можно использовать для изучения влияния различных параметров на эффективность батареи.
Мы рассмотрели всего один вариант применения моделирования для решения проблемы с батареями. PyBaMM также содержит множество других примеров, включая моделирование гистерезиса в кремниевых анодах. Кроме того, здесь мы видим, что один эксперимент занимает считанные секунды, а в случае более простых моделей — даже миллисекунды. Это помогает инженерам бороться с проклятием размерности. Например, график Ragone ниже, отражающий вариацию пары типичных параметров, изучение изменения которых вас может интересовать, содержит 6 500 точек данных. Вычисление одной такой точки занимает менее 1 секунды, то есть просчитать их все на одноядерной машине можно примерно за 2 часа.
Такая возможность уже представляет огромную экономию в сравнении с неделями, которые бы потребовались описанной в начале статьи лаборатории с 1 000 параллельных тестовых линий (в лаборатории каждый эксперимент занимал бы менее часа, но ещё нужно подготовить материалы и собрать ячейки). Если же задействовать многопоточные вычисления, то указанные 2 часа можно сократить до минуты и даже меньше.
![](https://habrastorage.org/webt/zn/gx/8v/zngx8vitm-z95kkeadbdz8oqe6q.jpeg)
Если вы оценили это руководство и хотели бы узнать больше о моделировании батарей, то приглашаем на нашу страницу GitHub (и не забудьте поставить проекту ⭐).
Если же вы представляете компанию, которой нужна помощь в проектировании батарей, пишите мне на почту tom@ionworks.com или обращайтесь через наш сайт.
Весь рабочий код из статьи доступен здесь.
Telegram-канал со скидками, розыгрышами призов и новостями IT ?
![](https://habrastorage.org/webt/tp/sk/z-/tpskz-7w7a8e74isoowuep40xeg.png)
arheops
Пиковая мощность современных легких одномоторных самолетов меньше типичной мощности электроавтомобилей. Там вроде как все в емкость оптимизируют.