AI+电芯 | 使用部分充电数据曲线预测电池阻抗谱
快速开始:点击上方的 开始连接 按钮,选择 d2l-ai:pytorch镜像 和任意GPU配置机型即可开始。
锂离子电池(LIB)具有能量密度高、使用寿命长、环境友好等优点,广泛应用于电动汽车和便携式电子设备中。 然而,锂离子电池的老化对存储和使用过程中的安全性提出了巨大的挑战,这促使了电池预测技术的发展和应用。**电化学阻抗谱(EIS)**可用于呈现电池健康状态、电池内部阻抗以及锂离子(Li-ions)的动态扩散等。
EIS(electrochemical impedence spectroscopy, EIS)。它是在电化学电池处于平衡状态下(开路状态)或者某一稳定的直流极化条件下,按照正弦规律施加小幅度交流信号,研究电化学的交流阻抗随频率的变化关系的一种方法。广泛应用于锂离子电池、钠离子电池、燃料电池和腐蚀防护等领域,是一种常用的电化学检测手段,用于分析电极过程动力学、双电层和扩散等。
其原理可以直观地从上图获得:通过波形发生器产生小幅正弦电势信号,再通过恒电位仪施加到电化学系统上。将输出的电势/电流信号经过转换,最后利用锁相放大器、频谱分析仪输出阻抗模量、相位角~频率关系等(正弦波的频率不断变化)。我们可以将电化学系统看作是一个等效电路。该电路由电阻(R)、电感(L)、和电容(C)等通过串并联的方式组成。利用EIS的结果可以分析出各个等效电路原件的阻抗值等大小,并分析其含义,有助于测试者对所测的电化学系统做出判断(电化学系统的结构和电极过程的性质),或进行结果的得出或电化学系统的改进。奈奎斯特图(Nyquist plot)是一种常见的阻抗谱表现形式,如下图所示。
EIS已广泛用于识别等效电路模型(ECM) 的参数,以支持电池状态的估计,例如电池内部阻抗、充电状态(SOC) 和健康状况(SOH)等。 充电状态(SOC)是指蓄电池使用一段时间或长期搁置不用后的剩余容量与其完全充电状态的容量的比值,常用百分数表示。其取值范围为0~1,当SOC=0时表示电池放电完全,当SOC=1时表示电池完全充满。健康状况(SOH)是表征电池老化程度与健康状况的关键指标,其通常定义为当前可用最大容量与出厂额定容量之间的比值。随着电池老化程度的加深,SOH逐渐降低,在SOH下降到80%时,电池衰减至寿命终止。对于SOC的估计和SOH的预测也是AI+电芯的重要研究课题。
ECM模型的参数已被证明与电池老化状态具有高度相关性。因此,机器学习已被用来开发算法来估计SOH并通过输入整个 EIS 曲线或从 EIS 曲线中提取特征来预测电池的寿命。 此外,EIS结果可以赋予电池内部更多的物理老化意义,例如锂离子的扩散、界面阻抗的形成和欧姆阻抗。 然而,由于测量设备成本高、测试结果受SOC和温度变化的影响以及测量时间要求高,EIS测量的实施受到阻碍。 这些限制阻碍了基于EIS的在线电池健康预测方法的开发。因此,EIS的预测对于为电池健康预测提供阻抗信息至关重要。
通过可测量参数进行EIS准确预测有助于发展和推广基于EIS的先进预测方法并显着降低成本。已经有一些工作使用完整的电池充电数据基于机器学习实现了准确的阻抗谱预测1,均方根误差(RMSE)小于1.862 mΩ。 这种有前景的预测方法可以准确估计阻抗谱,并为基于 EIS 的实时电池状态估计和健康预测提供可能性。
这个Notebook通过电池充电曲线预测阻抗谱,基于序列到序列的预测,采用Encoder-Decoder机器学习算法来验证所提出的框架。
本文的算例模型与代码实现方法来自论文[2]2 [3]3,数据来自公开数据集4。值得一提的是,公开数据集的EIS分布并非按常见的SOC排序,而且在一个充放电流程中选取不同的时间点进行收集数据(见下图I 到 IX)。而由于数据集中有些数据EIS存在异常点,因此我们这里只选用其中的部分进行训练和预测。
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting ipython-autotime Downloading https://pypi.tuna.tsinghua.edu.cn/packages/b4/c9/b413a24f759641bc27ef98c144b590023c8038dfb8a3f09e713e9dff12c1/ipython_autotime-0.3.1-py2.py3-none-any.whl (6.8 kB) Requirement already satisfied: ipython in /opt/miniconda/lib/python3.7/site-packages (from ipython-autotime) (7.34.0) Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (3.0.31) Requirement already satisfied: pygments in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (2.13.0) Requirement already satisfied: traitlets>=4.2 in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (5.5.0) Requirement already satisfied: pickleshare in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (0.7.5) Requirement already satisfied: backcall in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (0.2.0) Requirement already satisfied: pexpect>4.3 in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (4.8.0) Requirement already satisfied: matplotlib-inline in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (0.1.6) Requirement already satisfied: jedi>=0.16 in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (0.18.1) Requirement already satisfied: setuptools>=18.5 in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (61.2.0) Requirement already satisfied: decorator in /opt/miniconda/lib/python3.7/site-packages (from ipython->ipython-autotime) (5.1.1) Requirement already satisfied: parso<0.9.0,>=0.8.0 in /opt/miniconda/lib/python3.7/site-packages (from jedi>=0.16->ipython->ipython-autotime) (0.8.3) Requirement already satisfied: ptyprocess>=0.5 in /opt/miniconda/lib/python3.7/site-packages (from pexpect>4.3->ipython->ipython-autotime) (0.7.0) Requirement already satisfied: wcwidth in /opt/miniconda/lib/python3.7/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython->ipython-autotime) (0.2.5) Installing collected packages: ipython-autotime Successfully installed ipython-autotime-0.3.1 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv time: 444 µs (started: 2023-09-06 10:33:12 +08:00)
加载pytorch、数据处理和画图的package
time: 3.83 s (started: 2023-09-06 10:33:12 +08:00)
设置随机数种子,确保每次训练和测试的结果一致。
time: 418 µs (started: 2023-09-06 10:33:16 +08:00)
接下来我们需要定义encoder的部分。在这里,我们定义了一个 LSTM 层,其输入维度为 1,隐藏状态维度为 256
time: 816 µs (started: 2023-09-06 10:33:16 +08:00)
然后是decoder的部分。在这里,我们定义了一个 LSTM 层,其输入维度为 2,隐藏状态维度为 256。然后,我们定义了一个全连接层,输入维度为 256(与 LSTM 的隐藏状态维度相同),输出维度为 2。输入输出维度由target数据的维度决定。
time: 774 µs (started: 2023-09-06 10:33:16 +08:00)
然后Encoder-Decoder类。
time: 1.27 ms (started: 2023-09-06 10:33:16 +08:00)
将定义好的encoder和decoder类组合成一个Encoder-Decoder模型。
EncoderDecoder( (encoder): Encoder( (lstm): LSTM(1, 256, num_layers=2, batch_first=True, dropout=0.5) ) (decoder): Decoder( (lstm): LSTM(2, 256, num_layers=2, batch_first=True) (dense): Linear(in_features=256, out_features=2, bias=True) ) ) time: 38.2 ms (started: 2023-09-06 10:33:16 +08:00)
time: 981 µs (started: 2023-09-06 10:33:16 +08:00)
这里输入充电数据的格式为[585,1],输出EIS的格式为[240,2] 一共八百零三组数据
803 [180, 201, 34, 212, 140, 36] time: 619 ms (started: 2023-09-06 10:33:16 +08:00)
(8, 10800) 180 (8, 12060) 381 (8, 2040) 415 (8, 12720) 627 (8, 8400) 767 (8, 2160) 803 (240, 2) torch.Size([1, 240, 2]) time: 510 ms (started: 2023-09-06 10:33:16 +08:00)
判断GPU是否可用
CUDE = True time: 5.6 s (started: 2023-09-06 10:33:17 +08:00)
定义loss function和优化器。这里我们使用均方误差和Adam优化器。因为数据量的原因,这里我们把epoch的数量设为1500,batch size设为4。
time: 879 µs (started: 2023-09-06 10:33:23 +08:00)
训练过程及记录。
使用测试数据集进行预测
Test Loss: 0.0057 Test RMSE: 0.0752 time: 522 ms (started: 2023-09-06 14:41:47 +08:00)
测试集预测结果与ground truth比较(4 state)
测试集预测结果与ground truth比较(每张图展示单一state下的比较结果)
计算并绘制出测试数据集的RMSE。
添加平均R2 score和绘图
总结
在这篇Notebook中,我们构建了一个机器学习模型。通过输入充电曲线(电压、电流等),预测了EIS阻抗谱。从结果中可以看出,使用充电电压和电流数据,预测精度保持在一个较好的水平。在当前数据集下,这几组试验的预测误差在绝大部分情况下小于100 mΩ。这给接下来我们探索电池性质和寿命预测提供了信心。