2023-02-23 更新了安时积分法(包括模型),开路电压法(包括如何从实验散点获取查表表格)
2023-02-02 基于最新的 Battery 工具箱更新。
这个系列笔记是记录基于 Simulink/Simscape 搭建电池模型的各种方法。如果用到具体的模型,会在对应的章节提供下载链接。
建模方法或基于物理原理、或基于数据,有了原理方程再用数据调参。不管你是用那种建模方法,总有款工具箱可以帮到你。下面以一张 MATLAB 平台的建模方法 PPT 截图作为说明,越往左越偏原理方法,越偏右越基于数据方法。
有了模型之后就可以仿真了。
要搭建什么样的模型,取决这个问题的答案。
从闭环控制系统的角度来看,电池模型会出现在不同的地方。
“你这个模型是搭出来做什么用的?”的答案影响到这个模型必须要考虑什么因素,可以忽略什么因素。能做到这一点,至少得了解影响“因素”有哪些?
通常
我们关心它的电特性,因为需要它提供电能;
我们也关心它的热特性,因为要保证用电安全;
通常,电芯模型是基础。
我画了张简图,后面如果有时间再分篇来讨论框里出现的各个主题。
Cell Electrical:模拟电芯在各种工况下的功率输出以及功率输出能力,常见等效电路方法。
Thermal:热通常由等效直流内阻发热计算而来,同时热量也会被冷却系统/环境带走,剩下的热量作用于电芯热容使电芯温度升高。
还有其他的吗?
“道理我都懂,问题是这些特性如何实现为能跑起来的模型?”
接着,从电芯到模组到电池包。
“需要考虑吗?不需要吗?需要吗?不需要吗?怎么实现?”
电池的冷却
电芯温度不仅仅和自身产热有关,还少不了冷却系统的加成。
"我有了冷却示意图,怎么变成冷却模型?"
最后就是 Model Complexity 了。
模型跑起来好慢!
最后还是这个问题:
各种电池模型或者方法,都或多-或少-或详细-或简化的方式描述了电池。
一般用等效电路的表达方式。
等效电路法是现在比较常见的模型抽象方法,大体上和下面这张 Simscape 电芯等效电路拓扑图差不多,也有的学者们会有各种变种结构。
就 Simscape 提供的电芯模型来说:
目前常见的是基于脉冲充/放电数据进行特征参数标定,调用优化工具箱来标定参数表格。
如果只是需要一个近似的电池模型用来做算法的初步验证,也可以直接选择数据库里的电芯模型:
如果不关心放电电池的瞬态波动,这类模型一般:Em(SOC) + R0(SOC,T) 就够了。相当于等效电路模型关闭中间的动态响应部分。
使用持续放电实验一般就可以得到 Em 和 R0 参数。
还有经验方程的表达方式
这部分就是学者们去研究的内容了,对于工程师们来说就是把研究成果转变为工程上易于实现和标定的方程。
以上的方法,都需要有电池的原理抽象为支撑。
更夸张的,可能像燃料电池那样,写出它的原子级别的电化学过程。这种场合遇到的很少,或许做电池设计的会研究到这么底层的内容。
实现方式可以用 Simscape 或者 Simulink。选择自己舒服的工具就行。下图是个 Simscape 实现的例子,帮助文档搜索标题就行。
燃料电池参见这个系列:基于 Simscape/Simulink 的燃料电池系统建模与仿真(一) – 知乎 (zhihu.com)
有了电芯模型之后,
R22b 推出的新工具箱极大的简化了这个从 cell 到 pack 的过程。感兴趣的朋友稍等 R23a 的 App 会更好一点,现在是 preRelease 版本,等它发布了再来更新这里。
确定电池的充电状态SOC是 BMS 的一个主要功能,用来:
电池单元的初始 SOC ,再累计电流随着时间的积分带来的SOC变化。
理想情况下,根据理论公式进行积分操作就得到我们所需要的 SOC 了。这里直接用的 Coulomb Counting 模块。
但实际上,我们能测到的电流并不是真实的电芯充放电电流 i_true,还都包括了测量噪音、测量偏差、传感器的非线性影响,同时还不能反应自放电电流以及漏电流。
所以,时间长了这个误差会被累计。
同时,电流传感器有一定的采样时间,我们其实是基于采样点来进行积分。这就要求采样率必须足够快,不错过由于加速或者再生制动产生的的波峰/波谷电流。
这种等价为 OCV-SOC 查表。
对于图示场景,电池电压V和剩余容量SOC有比较优秀的对应关系时,比如铅酸电池(恒温恒放电速率),不管是查表还是曲线拟合,用 OCV 来直接映射到 SOC 这种方法还是很简单方便的。
https://www.mpoweruk.com/bms.htm
如果有试验数据点,即使不是标准的扫点工况,基于散点数据也可以用 Curve Fitter App 给插值出一个查表表格来。下面来介绍具体实现方法。
这时候,可以用 Curve Fitter App,先来个曲面拟合(剔除一些异常点),再根据指定的 soc, t 向量来差值得到最终的二维查表表格。
具体过程参见:
那这样,每天车重启的时候,根据 OCV 查表得到的 SOC 就可以用来校准我们之前安时积分漂移的 SOC 初始值。
但实际上,OCV 和SOC 的关系受实际电压、温度、放电速率和电池使用年限等影响,需要进行补偿。但至于怎么补偿……我不知道。
另外,即使不考虑这些补偿因素,某些材料比如锂电池会有类似下图这种平缓区段的曲线。在平缓段落,电池放电 SOC 不断降低,但是电压不会明显下降。这时候,很小的电压误差会带来较大的 SOC 估算误差。不太清楚如果使用使用 OCV 查表的厂家,怎么处理这种场景。
而且,在电池放电末尾电压会快速下降,虽然这可以作为一个电池即将完全放电的指标,但是在很多场合,我们需要知道更前面一点的 SOC 状态,限制 DOD(depth of discharge,放电程度),完全放电会很大影响锂电池的循环寿命。
刚刚搜了一下知乎,看了其他人分享的一些OCV-SOC曲线:
卡尔曼滤波解决了一个古老的问题,如何从“不准确的数据”中获得准确的信息。如何从远远不断的“不准确”数据中,更新模型得到系统的最佳预估输出。
库里倒是直接提供了基于卡尔曼滤波的 SOC 估算模块 SOC Estimator,这里用的是扩展卡尔曼滤波。
它的电池预测模型用的是 1 阶段 RC,原理模型如左下图。
比如神经网络,纯粹的利用数据训练出黑盒模型。不过倒也不是完全和机理无关,毕竟需要选择合适的输入输出,以及实验设计。
基于神经网络的SOC估算
电池健康状况衡量与新电池相比,现在的电池能够提供所需要的性能的能力(SOC评价短期能力),考虑比如容量、内阻、自放电、充放电能力等因素。
它衡量的是电池的长期性能,给出相对指标,表示电池消耗了多少可用的寿命,以及剩余多少,本质上是跟踪电池长期变化的监控功能。或许可以对标油车的里程表,作为一个衡量保养计划和报废的指标。
随着电池使用和日历老化发生了不可逆的物理化学变化,电池健康逐渐恶化,直到不可再用。
SOH 的评估,有些基于测量值来估算,或者叠加电池的使用历史(恶劣工况)来加权评估电池健康状况。
在 Battery 模块库里提供了一个线性插值的 SOH 模型。
把 R0 作为评价指标,根据卡尔曼滤波得到的当前内阻R0,加上根据实验得到的新电池和临终前电池内阻,按照下方公式计算比例关系。
剩余寿命估算就更显得“玄学了”,不过可以直接调用工具箱可以降低对基础编码的要求,能把更多的时间放到业务分析上去。
之前读到的一个MATLAB案例还挺适合入门的:基于机器学习的电池寿命预测 MATLAB 代码 – 知乎 (zhihu.com)。这案例也是基于MIT的一篇论文。
说到电池的热管理,那自然会涉及到冷却/加热控制。
之前提到:
之前的电芯模型已经实现了电芯本体的热模型,还需要计算剩下的一部分:“被冷却系统/环境带走”的热量。
在 Battery 里提供了集中典型的冷却板模型。
包括各种典型的参数化冷却水道:
通过关联冷却水道和电芯节点,定义水冷模型。
如果冷却水道的基本单元是这几种,那么就可以直接用这些模块就行了。
总之,各种建模方法和软件工具,都有不同的人在实践。
下一篇