Simulink 的电池建模与仿真模型合集 (一)

2023-02-23 更新了安时积分法(包括模型),开路电压法(包括如何从实验散点获取查表表格)

2023-02-02 基于最新的 Battery 工具箱更新。

这个系列笔记是记录基于 Simulink/Simscape 搭建电池模型的各种方法。如果用到具体的模型,会在对应的章节提供下载链接。

建模方法

建模方法或基于物理原理、或基于数据,有了原理方程再用数据调参。不管你是用那种建模方法,总有款工具箱可以帮到你。下面以一张 MATLAB 平台的建模方法 PPT 截图作为说明,越往左越偏原理方法,越偏右越基于数据方法。

电池建模需求

有了模型之后就可以仿真了。

要搭建什么样的模型,取决这个问题的答案。

从闭环控制系统的角度来看,电池模型会出现在不同的地方。

  • 作为BMS的一部分,主要需要估算电池的 SOC (有时候也SOH)以及电池的充放电能力,作为 BMS 的决策依据。重要的是,它需要能生成嵌入式的 C 代码,作为算法模型的一部分;
  • 作为被控对象,它是 MIL/SIL/HIL 的一部分,用于闭环测试和验证各种电池相关的算法。它更多的是运行在桌面或者实时仿真机里,比如 speedgoat,dSpace或者NI等等。模型视为一个虚拟的电池,所有待测 BMS 算法里传感器需要的信息,它都需要能仿真出来。
  • 当然,还有可能运行在云端,作为“数字孪生”,更多的是作为状态监控和分析,剩余寿命预测为主。

“你这个模型是搭出来做什么用的?”的答案影响到这个模型必须要考虑什么因素,可以忽略什么因素。能做到这一点,至少得了解影响“因素”有哪些?

建模考虑的问题

通常

我们关心它的电特性,因为需要它提供电能;

我们也关心它的热特性,因为要保证用电安全;

通常,电芯模型是基础。

我画了张简图,后面如果有时间再分篇来讨论框里出现的各个主题。

Cell Electrical:模拟电芯在各种工况下的功率输出以及功率输出能力,常见等效电路方法。

  • Calendar Aging, Fade:电池的老化,前者类似放旧了,后者类似于用旧了。科学家们会用一些电池的特征参数来表征“老化”,比如容量,内阻。

Thermal:热通常由等效直流内阻发热计算而来,同时热量也会被冷却系统/环境带走,剩下的热量作用于电芯热容使电芯温度升高。

  • 电芯温度和电池的电特征参数互相影响,所谓的耦合。

还有其他的吗?

“道理我都懂,问题是这些特性如何实现为能跑起来的模型?”

接着,从电芯到模组到电池包。

  • 如果考虑真-模组的话,还存在电芯之间的传热、甚至是布局的影响等等;
  • 验证电池均衡算法也需要考虑电芯的不一致性;

“需要考虑吗?不需要吗?需要吗?不需要吗?怎么实现?”

电池的冷却

电芯温度不仅仅和自身产热有关,还少不了冷却系统的加成。

"我有了冷却示意图,怎么变成冷却模型?"

最后就是 Model Complexity 了。

模型跑起来好慢!

  • 是否可以直接把电池包简化为均值模型呢(图左上)?忽略模组中心电芯和两侧电芯温度差异,是否影响我的仿真目标?
  • 还是需要把每一个电芯的模型都单独计算(图右上),单独计算每个电芯,又会不会影响仿真速度不能接受?
  • 有没有折中的办法分组细化呢?比如对“危险”的地方精细计算,对“安全”的地方,粗放。
  • 我如果要反复切换不同的仿真颗粒度模式又该怎么处理?
  • 有没有电芯均衡控制需要体现出电芯的不一致性?

最后还是这个问题:

电芯建模方法

各种电池模型或者方法,都或多-或少-或详细-或简化的方式描述了电池。

  • 相对来说基于等效电路/方程的方式相对传统和应用广泛,基于神经网络或者深度学习的方式比较“新潮”。
  • SOC一般会用相对传统的方式,SOH在探索中用新潮方式的居多。不过我个人倒不认为SOH用基于数据训练的方式是最有效的(个人意见)。

基于原理建模方法

一般用等效电路的表达方式。

  • 瞬态响应模型

等效电路法是现在比较常见的模型抽象方法,大体上和下面这张 Simscape 电芯等效电路拓扑图差不多,也有的学者们会有各种变种结构。

就 Simscape 提供的电芯模型来说:

  • 可以设置 1~n 阶段等效电路模型;
  • 和电压源并联的 RSD 是自放电内阻,可以选择启用或者不启用;
  • 选择充放电不同直流内阻;
  • 所有参数都可以是温度和SOC的查表;
  • 基于查表或者既有公式来表达循环老化以及日历老化

目前常见的是基于脉冲充/放电数据进行特征参数标定,调用优化工具箱来标定参数表格。

如果只是需要一个近似的电池模型用来做算法的初步验证,也可以直接选择数据库里的电芯模型:

  • 系统级电池模型

如果不关心放电电池的瞬态波动,这类模型一般:Em(SOC) + R0(SOC,T) 就够了。相当于等效电路模型关闭中间的动态响应部分。

使用持续放电实验一般就可以得到 Em 和 R0 参数。

  • 下图是同一个温度,不同放电倍率曲线簇;同一个放电倍率,不同温度下的曲线簇;
  • 得到基于温度和放电倍率查表的 内阻 R0(SOC,T) 以及 Em(soc)

还有经验方程的表达方式

这部分就是学者们去研究的内容了,对于工程师们来说就是把研究成果转变为工程上易于实现和标定的方程。

  • 或者套上卡尔曼滤波

以上的方法,都需要有电池的原理抽象为支撑。

电化学方法

更夸张的,可能像燃料电池那样,写出它的原子级别的电化学过程。这种场合遇到的很少,或许做电池设计的会研究到这么底层的内容。

实现方式可以用 Simscape 或者 Simulink。选择自己舒服的工具就行。下图是个 Simscape 实现的例子,帮助文档搜索标题就行。

燃料电池参见这个系列:基于 Simscape/Simulink 的燃料电池系统建模与仿真(一) – 知乎 (zhihu.com)

从电芯到 Pack

有了电芯模型之后,

  • 实现 Pack 的过程可以很简单,平均值模型只需要电芯 串联(电压*Ns)和并联(电流*Np),
  • 但也可以很复杂,比如各种不同的空间布局对散热-温度-乃至电池性能的影响;
  • 同时这个模型可能会被用于不同的场合,可能还需要在不同电芯分辨率模型之间切换;

R22b 推出的新工具箱极大的简化了这个从 cell 到 pack 的过程。感兴趣的朋友稍等 R23a 的 App 会更好一点,现在是 preRelease 版本,等它发布了再来更新这里。

电池管理系统

SOC

确定电池的充电状态SOC是 BMS 的一个主要功能,用来:

  • 油表显示;
  • 计算并监控每个电芯的SOC,用于保证均匀充电/充电均衡;
  • 以及避免电池过冲过放;
  • 混动车需要支持再生制动的高充电功率,以及辅助boost的高放电功率。因此,电池必须保持在特定的SOC,既能释放所需要的功率,并有足够的空间能接受必要的再生制动功率,而不至于有过冲的风险;

安时积分

电池单元的初始 SOC ,再累计电流随着时间的积分带来的SOC变化。

理想情况下,根据理论公式进行积分操作就得到我们所需要的 SOC 了。这里直接用的 Coulomb Counting 模块。

但实际上,我们能测到的电流并不是真实的电芯充放电电流 i_true,还都包括了测量噪音、测量偏差、传感器的非线性影响,同时还不能反应自放电电流以及漏电流。

所以,时间长了这个误差会被累计。

同时,电流传感器有一定的采样时间,我们其实是基于采样点来进行积分。这就要求采样率必须足够快,不错过由于加速或者再生制动产生的的波峰/波谷电流。

开路电压法

这种等价为 OCV-SOC 查表。

对于图示场景,电池电压V和剩余容量SOC有比较优秀的对应关系时,比如铅酸电池(恒温恒放电速率),不管是查表还是曲线拟合,用 OCV 来直接映射到 SOC 这种方法还是很简单方便的。

https://www.mpoweruk.com/bms.htm

如果有试验数据点,即使不是标准的扫点工况,基于散点数据也可以用 Curve Fitter App 给插值出一个查表表格来。下面来介绍具体实现方法。

  • 比如下图的中黑色小点是我们的散点数据R(SOC,T),数据点投影到(SOC,T)平面上其实是不均匀分布的,因此不能直接把这里的 x,y,z 散点坐标值作为Lookup table 的参数;

这时候,可以用 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

电池健康状况衡量与新电池相比,现在的电池能够提供所需要的性能的能力(SOC评价短期能力),考虑比如容量、内阻、自放电、充放电能力等因素。

它衡量的是电池的长期性能,给出相对指标,表示电池消耗了多少可用的寿命,以及剩余多少,本质上是跟踪电池长期变化的监控功能。或许可以对标油车的里程表,作为一个衡量保养计划和报废的指标。

随着电池使用和日历老化发生了不可逆的物理化学变化,电池健康逐渐恶化,直到不可再用。

SOH 的评估,有些基于测量值来估算,或者叠加电池的使用历史(恶劣工况)来加权评估电池健康状况。

在 Battery 模块库里提供了一个线性插值的 SOH 模型。

把 R0 作为评价指标,根据卡尔曼滤波得到的当前内阻R0,加上根据实验得到的新电池和临终前电池内阻,按照下方公式计算比例关系。

RUL 估算:基于 AI

剩余寿命估算就更显得“玄学了”,不过可以直接调用工具箱可以降低对基础编码的要求,能把更多的时间放到业务分析上去。

之前读到的一个MATLAB案例还挺适合入门的:基于机器学习的电池寿命预测 MATLAB 代码 – 知乎 (zhihu.com)。这案例也是基于MIT的一篇论文。

热管理系统/冷却

说到电池的热管理,那自然会涉及到冷却/加热控制。

之前提到:

之前的电芯模型已经实现了电芯本体的热模型,还需要计算剩下的一部分:“被冷却系统/环境带走”的热量。

在 Battery 里提供了集中典型的冷却板模型。

包括各种典型的参数化冷却水道:

通过关联冷却水道和电芯节点,定义水冷模型。

如果冷却水道的基本单元是这几种,那么就可以直接用这些模块就行了。

总之,各种建模方法和软件工具,都有不同的人在实践。

发表回复

相关推荐

2死1伤!安徽对安庆市怀宁县8•23有限空间事故进行通报

8月31日,安徽省应急管理厅发布《关于安庆市怀宁县“8•23”有限空间事故的通报》。通报显示:2023年8月23日,安庆市怀宁县安徽 ...

· 33秒前

什么是接地?

什么是接地? 束海洋 收集整理 接地为防止触电或保护设备的安全,把电力电讯等设备的金属底盘或外壳接上地线;利用大地作电流 ...

· 1分钟前

除瞭美團哪個平臺還可以借錢?這幾個千萬別錯過瞭

美團APP也能提供無抵押借款服務瞭,有不少人雖然獲得瞭美團借錢資格並且申請到瞭額度,但是真正去借錢時卻沒有通過審核,不知...

· 2分钟前

WPF开发之Prism详解【内附源码】

在实际应用开发中,随着项目业务逐渐复杂,耦合度会越来越高,维护成本也会直线上升,所以解耦也变得越来越重要。Prism框架 ...

· 3分钟前

买油该选浸出油还是压榨油呢?

食品安全的问题,越来越受到大家的重视。菜米油盐酱醋茶,几乎每天每餐都离不开。

· 3分钟前