【Matlab】如何使用Simulink进行电池建模和SOC预估

【Matlab】如何使用Simulink进行电池建模和SOC预估_第1张图片

                                                      “通过Simulink电池建模进行SOC预估,其实挺容易!” 

 

1 声明

  1. 本文只描述一般性电池建模方法,文中出现的电池相关数据来自一些论文或者外文文献,对数据的真实性不做任何保证。

  2. 本文参考了不少国内高校的硕士论文和外文文献,所以本篇文章只作为学术性交流,未经授权,禁止对本文的全部或者部分内容进行商业性的复制,修改,发行等。

  3. 科普性的知识,可以参看前面几期的推送:

    “为什么电池越来越不耐用了?”-- 浅谈BMS中的SOC与SOH等状态预估(一)

    “为什么电池越来越不耐用了?”-- 浅谈BMS中的SOC与SOH等状态预估(二)

    “为什么电池越来越不耐用了?”-- 浅谈BMS中的SOC与SOH等状态预估(三)

2 电池物理等效模型原理

有物理基础知识的童鞋们,如果有留意过电池充放电测试数据,随着电池充电、放电停止,然后静置若干时间,电池端电压呈现出来的特性是不是感觉很熟悉。如下图所示,是某电池从放电至静置过程中端电压的变化情况:

- A处开始放电

- C处放电停止,电压瞬间回弹至D点(类似流经电阻的电流突然消失带来的电压反弹),然后静置时电压慢慢继续回弹到E处(类似RC的充放电效应)

【Matlab】如何使用Simulink进行电池建模和SOC预估_第2张图片

 

所以根据上述表现出的电阻,电容特性,我们可以将电池进行物理等效模拟,下文以二阶RC模型为例。实际上,除了下面提到的二阶模型,还有PNGV模型,一阶的Thevenin模型,以及其他基于这几种模型改进的物理模型。不过归根到底,绝大部分的电池物理模型都是电容,电阻,理想电压源进行各式组合而成。

如下图所示,令n为2,则得到一个二阶的RC模型。其中E表示电池的OCV,R0为欧姆内阻,RnCn表示电池极化情况,U表示实际我们能量测到的电池电压(端电压)。

【Matlab】如何使用Simulink进行电池建模和SOC预估_第3张图片

3 开始进行参数识别

等效模型有了,那如何把里面的物理参数量化出来呢?别急,听我慢慢道来。

以放电参数为例。可以先将电池充满,静置足够长时间后,进行脉冲放电,例如以10% SOC为间距,通过测量电池由工作状态变为静置状态之间的端电压变化,得到若干组类似章节2中的图的测量数据。

- OCV:静置至电压不再变化,则得到OCV

- 根据C-D端电压变化,得到欧姆内阻

- 根据D-E端特性,求解两组RC(可以先用指数拟合,求出其中时间常数,再根据电容电压的响应求得C,然后反推并联的电阻阻值)

如此我们就可以得到不同SOC下的各个等效物理组件的参数。

【Matlab】如何使用Simulink进行电池建模和SOC预估_第4张图片

同样的,通过脉冲充电测试也可以得到上图的参数。一般来说,温度相同的情况下,充放电的参数虽有差异,但是相比电池电流而言,差异引发的误差可以接受,在实际应用中可以选择其中一组进行电池建模。

4 Simulink中建模

回到此图(令n为2即为二阶)。

【Matlab】如何使用Simulink进行电池建模和SOC预估_第5张图片

涉及到的物理组件都是可调的,可以使用到Simulink中simscape现成的一些模块:

OCV可以用Controlled Voltage Source(可控电压源) + Lookup Table(导入SOC-OCV表格)

【Matlab】如何使用Simulink进行电池建模和SOC预估_第6张图片

【Matlab】如何使用Simulink进行电池建模和SOC预估_第7张图片

类似的电阻、电容用可调组件 + Lookup Table。

【Matlab】如何使用Simulink进行电池建模和SOC预估_第8张图片

 

控制电源使用Controlled Current Source。

AH积分使用Integrator和一些数学运算模块进行累计和转换。

【Matlab】如何使用Simulink进行电池建模和SOC预估_第9张图片

涉及到Simscape和常规库原件的交互,使用PS-S和S-PS转换模块。

【Matlab】如何使用Simulink进行电池建模和SOC预估_第10张图片

搭好后总体如下:

【Matlab】如何使用Simulink进行电池建模和SOC预估_第11张图片

还有一些小Tips:

- 因为涉及到积分环节,所以可以将积分模块运行时间设定为定值或者总的solver设置为Fixed Step模式

- 相同或者同一类型信号可以使用同一个背景色,方便定位区分

- 同一信号可能在多处都使用到,为了布局明了,可以适当使用From和Goto模块

- 多个组件可以使用Create Sub-System功能封装为单独的模块,方便调用,以及后续创建自定义LIB模块,如下图

【Matlab】如何使用Simulink进行电池建模和SOC预估_第12张图片

话不多说,来个脉冲充电测试一把:

- 第一栏为端电压的变化,是不是跟前面的图形很像

- 第二栏为SOC的变化(嗯?怎么充电SOC反而减小)

- 第三栏为充电电流

【Matlab】如何使用Simulink进行电池建模和SOC预估_第13张图片

 

仔细检查一下,发现红框处应该替换为加法(此处应以充电方向为正电流)

【Matlab】如何使用Simulink进行电池建模和SOC预估_第14张图片

 

5 进一步思考与说明

  1. 使用纯数学表达式建模?

    为了更加直观,此文选用了物理组件进行建模,实际上也可以使用章节3的数学表达式进行建模,仿真速度应该会比物理模型快得多。

     

  2. 温度的影响?

    为了得到更准确的模型,应实际测量不同温度下的数据,然后用二维查表做进一步优化。

     

  3. 充放电滞回效应?

    许多论文其实并没有考虑这一影响,真实使用场景中,由于随机性充放电方向的切换,滞回效应会大大影响模型精度。有兴趣的可以深究一下。

     

  4. 测量误差、噪声的影响?

    实际运用模型进行预估SOC时,一般多结合EKF算法做进一步优化,详细的可以搜索一下相关文献,资料挺多的。

 

参考文献:

  1.  《混合动力汽车电池模型辨识及估计方法研究》

  2. 《电动汽车用磷酸铁锂电池建模与 SOC 估算研究》

  3. 《电动汽车动力电池模型参数在线辨识及 SOC 估计》

 

                                                                        作者:跨界程序员Vincent

 

【Matlab】如何使用Simulink进行电池建模和SOC预估_第15张图片

【Matlab】如何使用Simulink进行电池建模和SOC预估_第16张图片

你可能感兴趣的:(Matlab)