基于深度学习的锂离子电池容量估算

       引言: 上期讲到BMS管理系统中的电荷状态估计(SOC),但我们知道完整的电池管理系统仅仅有SOC估计还远远不够,电池的过充过放过热也会带来诸多安全隐患,这与其内部的化学物质的活性有关,因此电池的安全管理更是离不开BMS。

        随着新能源电动汽车出现,越来越多人关注起这一领域,人们往往关心汽车安全、续航、寿命等一系列问题。这次谈谈电池RUL(剩余使用寿命),电池寿命一般和电池容量有关。而SOH是指蓄电池容量、健康度、性能状态,简单的说是电池使用一段时间后性能参数与标称参数的比值,新出厂电池为100%,完全报废为0%。是电池从满充状态下以一定的倍率放电到截止电压所放出的容量与其所对应的标称容量的比值,简单的理解为电池的极限容量大小。电池的内阻与SOH存在一定的关系。SOH越低,锂离子电池内阻越大,通过检测电压、电流、温度等数据,间接计算出电池的内阻值,然后根据SOH与电池内阻的关系计算求得SOH。但是电池的内阻在SOH变化范围不大时变化不明显,而当电池老化严重时电阻值的变化较大,因而该方法在SOH变化较小时,测量的误差会较大。

        在此演示中,我使用 MATLAB 使用多通道充电配置文件实现了基于机器学习的锂离子电池容量估计。

        本例中使用的数据集来自 NASA的“电池数据集”。基本实现理论和方法参考了最近发表的论文,他们提出了基于机器学习和深度学习模型的多通道充电配置文件。
通过这个例子,我们将捕捉论文中描述的每一种方法,包括以下深度学习方法

  • FNN(前馈网络)
  • CNN(卷积神经网络)
  • LSTM(长短期记忆网络)       

***试验阶段***

为了观察充电曲线是否显示电池老化,我们需要探索通过电池老化的电压(V)、电流(I)和温度(T)路径。
在下图中,我们可以观察到,随着电池的老化,V、I和T的充电曲线发生了显著变化。

                         

 图1,实线表示一节电池第一次充放电循环,虚线表示第168次循环。

clear;
load B0005.mat
FTime = B0005.cycle(1).data.Time/60;
FreshCell_V = B0005.cycle(1).data.Voltage_measured;
FreshCell_I = B0005.cycle(1).data.Current_measured;
FreshCell_T = B0005.cycle(1).data.Temperature_measured;

ATime = B0005.cycle(168).data.Time/60;
AgedCell_V = B0005.cycle(168).data.Voltage_measured;
AgedCell_I = B0005.cycle(168).data.Current_measured;
AgedCell_T = B0005.cycle(168).data.Temperature_measured;

figure(1)
subplot(311)
plot(FTime, FreshCell_V, 'linewidth', 2), hold on, plot(ATime, AgedCell_V, 'r--','linewidth', 2)
hold off, legend('Fresh Cell(1st Cycle)', 'Aged Cell(168th Cycle'), ylabel('Voltage(V)')
ylim([3.5 4.5]), grid on
subplot(312)
plot(FTime, FreshCell_I, 'linewidth', 2), hold on, plot(ATime, AgedCell_I, 'r--', 'linewidth', 2)
hold off, ylabel('Current(A)'), ylim([0 2]), grid on
subplot(313)
plot(FTime, FreshCell_T, 'linewidth', 2), hold on, plot(ATime, AgedCell_T, 'r--', 'linewidth', 2)
hold off, ylabel('Temperature(^oC)'), ylim([22 30]), grid on, xlabel Time(Minute)

对168次循环充电过程,记录最终电容。可以很明显的看到三节电池,容量都随电池老化而下降。

                                  

 图2

***数据预处理***
为训练做好准备。[2]中提出的模型的输入是提取的特征,这些特征是通过对原始电池数据进行均匀采样而获得的。具体地说,他们通过将V、I、T充电分布串联起来,将输入矩阵配置为30维向量,每个充电分布具有10个样本。选择样本数量是为了考虑时间和模型复杂性的明显变化。此外,我们在采样间隔内对数据进行平均,以防止短时间间隔内的振荡。

charInput5 = extract_charge_preprocessing(B0005);
charInput6 = extract_charge_preprocessing(B0006);
charInput7 = extract_charge_preprocessing(B0007);
%%每个电池数据的初始容量如下所示提供在数据集中%%
InitC5 = 1.86;
InitC6 = 2.04;
InitC7 = 1.89;
%%为了更好地训练,因为它保留了除比例因子外的原始数据分布,并将所有数据转换到[0,1]的范围内%%
[xB5, yB5, ym5, yr5] = minmax_norm(charInput5, InitC5, cap5);
[xB6, yB6, ym6, yr6] = minmax_norm(charInput6, InitC6, cap6);
[xB7, yB7, ym7, yr7] = minmax_norm(charInput7, InitC7, cap7);

要测试的机器学习模型,我们将对5个机器学习模型进行实验,以比较预测结果。
从FNN(前馈神经网络)开始,我们还将测试CNN(卷积神经网络)和LSTM(长短期记忆网络)的容量估计。

***前馈网络***

对于FNN(前馈网络),这里选择6号电池进行测试,

 测试含有10个隐藏神经元。训练结果如下:

 测试含有40个隐藏神经元。训练结果如下:

 可以看到前者训练参数的预测值误差大约在0.03-0.05之间,后者即在0.01-0.03之间。

***卷积神经网络***

改变其卷积层的滤波器数量。

2层卷积层,滤波器数量分别为(10,5)、(30,15).学习率a=.0.01,迭代次数1000次其结果如下:

 **********************************************************************************************************

需要源代码,或二次开发   +q1815894754

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值