(图片摘自某米日历封面,侵删)
新年,春节,元宵可以不给祝福,但是劳动节不给,我良心会痛。
祝全世界劳动人民们节日快乐。
1 SOC定义的玄学
SOC,State of charge,译为荷电状态,表征电池当前剩余可用容量的大小。一般我们定义为当前电池可释放出来的容量与电池出厂时的额定容量的比值,用百分数形式表示。
然而,事实真的是如此吗?
首先明确几个问题:
1. 出厂时的额定容量是怎么定义的?
我们以《GB/T 31486-2015电动汽车用动力蓄电池电性能要求及试验方法》为例,在3.3中规定以室温下完全充电的蓄电池以1C电流放电,达到终止电压时所放出的容量,作为额定容量。1I1即为1C电流。
所以,当我们说额定容量时,一般都隐含了两个前提和两个可变假设:
- 前提1:特定温度(一般来说,低温下放出的容量会小不少)
- 前提2:特定倍率(同等条件下,通常倍率越大,放出容量越小)
- 可变假设1:完全充满电(完全充满电的方法,会影响充入容量的多少,进而影响放出的容量大小)
- 可变假设2:终止电压的选择,选的是安全边界下限的电压还是为了留足余量而设定的可用区间下限?
一旦任意一个条件有变化,则额定容量的值就会有变化。
2. 当前状态下可释放出的容量怎么预测?
如果是在完全充满电下,则Creleasable = Crated。
如果是在完全放空状态下,则Creleasable = 0。
如果是非完全充满电状态,我们则需要知道相比于上一次充满电时刻,电池充入和放出多少容量:
Creleasable = Crated - AHdischarge + AHcharge
或者相比于上一次放空时刻,电池充入和放出容量的差值:
Creleasable = AHcharge - AHdischarge
同样的,因为真实应用场景中,环境是复杂多变的,哪怕你的电流采样精度再高,能非常准确地算出AH变化量,但受温度和倍率因素的影响(此处先假定电池完全没有衰减),放出的容量也可能是不一样的。举例,额定容量为10AH的电池,在低温下只能放出8AH,那么满电和低温状态下放出7.9AH时,我们该认为SOC是(10-7.9)/ 10 = 21%呢?
还是(8-7.9)/8=1.25%?
3. 电池衰减了,SOC怎么算?
以手机电池为例,即便都是室温条件,同样的使用频率,手机刚买时100%的电量,你能用一天,一年后只能用半天,为什么?
电池随着使用年限的增加,容量会衰减。按照上面的手机电池例子,大致可以推断出,此时在室温条件下,电池满充容量可能已经衰减为原来的50%。如果按照最开始的SOC定义,那么理论上,只要容量衰减,你不可能看到100%电量的那一天,因为下式中的分子总是小于分母的。
但是实际上,你依然能看到手机电量充满至100%。因为此刻,SOC的定义偷偷变成了:
此处的SOH(State of health)即为电池健康状态。这个术语也有不同的定义方法,其中一种定义为:最近一次统计出的满充容量或者满放容量与额定容量的比值,用百分数表示:
2 电芯与电芯的差异,有时比电芯和狗的差异都大
随着电池制造工艺与过程控制的成熟,绝大部分一线电池厂已经能对同一批次制造出来的电芯的一致性,控制得非常好了。但控制得好,不代表就不存在差异,根据统计学规律,理论上电芯的任一一个性能参数(内阻,自放电率,同一条件下的衰减。。。)的分布规律也完全或者部分符合正态分布。
锂电池根据不同材料体系,额定电压会有一定的差异,但一般均在3.xV区间。由于电压较低,因此一个电池系统通常需要由N个电芯进行串联/并联/串并联混合等方式组合而成,所以这些问题会进一步导致SOC预估存在困难:
不同批次电芯的一致性如何?
电芯配组为模组后的一致性如何?
模组再组合为电池大包体呢?
实际使用中,不同区域电池的温场与电流差异呢?
就以温场这一单一变量为例,见下图。
(本图摘自网络,侵删)
不同位置的电芯在实际工作中,因为本身内阻、热传递、电流大小等情况的差异,会进而导致电芯与电芯之间的温度存在差异。而实际电池包在设计时,不可能为每个电芯都设立一个温度传感器,BMS(电池管理系统)也就无法准确测量出所有电芯的温度情况。而温度与电池可放出容量以及衰减速率是强相关的。
某电池温度与循环次数关系(图片来源网络,侵删)
3 各类高大上的SOC预估方法真就靠谱吗?
关注锂电池行业的童鞋,应该都或多或少听过不少高大上的算法来对SOC进行预估。以下两种比较常见。
1. 神经网络:原理为将电池当做一个黑盒子,提炼出输入参数(如电流、电压、温度等)和输出参数(SOC)之间的映射数据,然后在训练中反复试验确定。神经网络优点是适用于各种电池;但是建立好模型后,需要大量的数据,并且要对数据进行训练,因此该方法是建立在大数据基础上的,估算结构受训练数据和方法的影响较大。同时,网络的学习和记忆不稳定,如果增加了新的样本,需要重新对数据进行训练。在实际中,由于算法复杂度导致硬件要求极高,所以要想将该方法应用到嵌入式类的BMS产品中还是有一段距离的。目前已经有厂家将此方法应用于云BMS,即电池端BMS通过无线通信,将采集的电池数据传输到云端,利用云端强大的运算处理能力,进行神经网络学习和推演。
2. 扩展卡尔曼滤波法。卡尔曼滤波(Kalman Filtering,KF)算法的核心是:对动态系统的状态做出最优估计,评判标准是协方差最小。应用到电池方面,首先得建立状态和观测方程,SOC便是状态分量,利用 EKF 算法估算模型中的未知状态,其精度和鲁棒性相对较高。EKF 算法在经过多次更新后可以使估计结果很好的趋近真值,并且可以很好的修正容量初值,抗干扰能力强,利用这种方法理论上可以实现系统的动态估计,因此在研究领域,也被认为是可靠有效的方法之一。不过前提是建立的状态和观测方程要很准确,业内通常的做法是先通过参数识别,建立电池等效电路模型作为观测方程,安时积分作为状态方程,然后按照EKF迭代算法一起参与计算。因此无论运算量还是数据量都比较大。
划重点:看似高大上的算法,其本质都需要坐拥海量的数据与复杂的运算。
复杂的运算可以通过上更高端的ECU或者用云端解决。其实即便用云端运算,也还存在着数据实时性、传输稳定性和电压电流温度同节拍传送问题需要解决。
而海量的数据需要实打实的测试获取,涵盖不同温度、不同倍率、不同寿命、不同组合工况。因为神经网络的学习需要有可信的数据源和对照结果,卡尔曼滤波也需要通过数据先行获取较为精准的模型参数。
另外对于磷酸铁锂电池,存在着较为宽泛的平台区(见下图红色框图区域)。在这个平台区中,电池的开路电压,欧姆内阻与极化内阻等特性参数非常接近,所以在初始状态不确定的情况下,如果电池正好处于该工作区域,则无论用神经网络还是卡尔曼滤波,都很难预测准确。需要提炼出更加具有辨识度的方法进行区分才行。
即便两者都具备,参见前面两章节的内容,SOC要保证全生命周期的预估准确,代价不可谓不大。所以如果有厂家宣传能做到全生命周期的5%的精度,那大概率只是噱头而已,听听就好。单电芯应用倒是有可能做到。
4
AH积分与开路电压校准
无论是用哪种算法进行SOC预估,面临的困境都是一样的。阳春白雪与下里巴人,本就没有高低之分。任何方法用到极致,也一样能取得很好的效果。对于传统的AH积分与开路电压校准方法,以下几个问题确认与解决一样能取得不错的预估效果:
- 安时积分的精度:此处涉及电流采样的精度与频率。采样精度本身取决于传感器及其采样线路的精度。频率则需要考虑产品的实际工况,如果存在频繁脉冲式充放电,则电流采样的频率则需要比脉冲频率更高。
- 上电校准选择:一般BMS要在进入休眠前以及周期性地,将当前SOC及其相关数据,通过非易失存储器进行保存。这样BMS上电后,可以回读存储器的数据,对SOC值进行恢复。但如果是BMS首次上电,则需要结合出厂检测工序,将电池的初态情况写入。
- 开路电压的校准选择:电池的开路电压等于电池在断路时(即没有电流通过两极时)电池的正极电极电势与负极的电极电势之差。我们通常所说的SOC-OCV对应曲线中的开路电压,实质上还包含了约定俗成的规定,特指无电流静置一段时间后的电压。如果看过前面几期的内容,应该就知道,由于极化的关系,即便电流消失了,开路电压也需要一段时间的静置后才能无限接近于平衡电动势,有些测试标准规定静置时间为1H,有些是2H。所以只要没有充分静置,充电后与放电后测出的OCV是有差异的。即便同是充电,不同电流充电静置后测得的OCV也存在一定差异。
对应到开路电压校准选择时机,则要考虑到以下内容:
- 静置前是充电还是放电,电流大小是多少
- 产品实际使用工况,是否存在充分静置的条件
- 对于铁锂电池,大部分平台区域的OCV校准不可用,因为电压采样误差可能都比OCV区间差异大,甚至都一个OCV值,可能对应两个SOC(即SOC-OCV曲线非单调的),所以能用的是首尾两端单调区域
- 同样需要考虑不同温度下,SOC-OCV数据的提前获取
先只唠叨这些吧。对于BMS而言,SOC的预估只是其中一个相对比较重要的功能。BMS配合整体电池系统的设计,把电池管理好,安全性做好才是更为重要的职责。
往期阅读推荐:
“为什么电池越来越不耐用了?”-- 浅谈BMS中的SOC与SOH等状态预估(一)
“为什么电池越来越不耐用了?”-- 浅谈BMS中的SOC与SOH等状态预估(二)
“为什么电池越来越不耐用了?”-- 浅谈BMS中的SOC与SOH等状态预估(三)
【Matlab】如何使用Simulink进行电池建模和SOC预估
【Matlab视频讲解】如何用Simulink进行电池建模仿真
【Python】Matlab被禁了,用Python来一把电池建模仿真?
如有帮助,记得点赞,在看和转发哦。
作者:跨界程序员Vincent