主要内容

退化电池系统的非线性状态估计

这个例子展示了如何使用Simulink®中的无气味卡尔曼滤波器估计非线性系统的状态。金宝app该示例还说明了如何开发基于事件的卡尔曼滤波器来更新系统参数,以获得更准确的状态估计。该示例可以使用控制系统工具箱™或系统识别工具箱™运行。该示例不需要预测性维护工具箱™。

概述

考虑具有以下等效电路[1]的电池模型

该模型由一个电压源组成E_m美元,串联电阻R_0美元和一个RC块R_1美元c₁美元。电池在充电和放电循环之间交替进行。在本例中,您使用测量的电池电流、电压和温度来估计电池模型的充电状态(SOC)。假设电池是一个非线性系统,使用无气味卡尔曼滤波器估计SOC。电池的容量随着每次充放电循环而降低,从而给出不准确的SOC估计。使用基于事件的线性卡尔曼滤波来估计电池在充电和放电之间转换时的容量。估计的容量反过来可以用来指示电池的健康状况。

Simu金宝applink模型包含三个主要部分:电池模型、无气味卡尔曼滤波块和基于事件的卡尔曼滤波块。下面几节将给出进一步的解释。

open_system (“BatteryExampleUKF /”

电池模型

使用Simscape™语言实现具有热效应的电池模型。

电池模型的状态转移方程为:

$ $ \压裂{d} {dt} \离开(& # xA; \开始{数组}{cc} & # xA;SOC \ \ & # xA;U_ {1} & # xA; \结束数组{}\右)= \左(& # xA; \开始{数组}{cc} & # xA;0 xA \ \ & #;- \压裂{1}{R_1 (SOC T_b) * c₁(SOC T_b)} U_1& # xA; \结束数组{}\右)+ \左(& # xA; \开始{数组}{cc} & # xA;- - - - - - \压裂{1}{3600 * C_q} \ \ & # xA;\压裂{1}{c₁(SOC T_b)} \结束数组{}\右)我# xA; + w # xA; $ $

在哪里T_b R_1美元(SOC)美元$ c₁(SOC, T_b)美元是RC块中的热和SOC相关电阻和电容器,$$ u_1 $$电压穿过电容器吗c₁美元我美元为输入电流,T_b美元是电池温度,C_q美元为电池容量,单位:Ah,W美元是过程噪声。

输入电流为电池放电时随机产生的脉冲,充电时为恒定电流,如下图所示。

测量方程为:

数组$ $ \开始{}{你}& # xA; E = E_m (SOC T_b) - U_1 IR_0 (SOC T_b) + v # xA; \{数组}$ $

在哪里E美元为被测电压输出,T_b R_0美元(SOC)美元是串行电阻,$E_m = E_m(SOC,T_b)$电动势是否来自电压源,和五美元是测量噪声。

在模型中,$ r_0, r_1, c_1 $E_m美元是2D查找表,依赖于SOC和电池温度。利用实验数据[1]确定了查询表中的参数。

估计荷电状态(SOC)

要使用无气味卡尔曼滤波块,需要定义用于状态和测量方程的MATLAB®或Simulink函数。金宝app这个例子演示了如何使用Simulink函数。金宝app由于unscented卡尔曼滤波器是离散时间滤波器,因此首先将状态方程离散化。在本例中,采用欧拉离散化。让采样时间不变$$ t $$。对于一般的非线性系统$\dot{x} = f(x,u)$,系统可离散为$x_{T+1} = x_{T} + f(x_{T},u_{T})*T $

非线性电池系统的状态向量为

$ $ x_T = \离开(\{数组}{cc}开始SOC_T \ \ U_ {1 _t} \结束数组{}\右)$ $

应用欧拉离散得到如下方程:

$ $ & # xA; \离开(& # xA; \开始{数组}{cc} & # xA;SOC_ {T + 1} \ \ & # xA;U_ {1 _ {T + 1}} & # xA; \结束数组{}\右)= \左(& # xA; \开始{数组}{cc} & # xA;SOC_ {T} \ \ & # xA;U_ {1 _ {T}} & # xA; \结束数组{}\右)+ \左(& # xA; \开始{数组}{cc} & # xA;- - - - - - \压裂{1}{3600 * C_q}我\ \ & # xA;- \压裂{1}{R_1 (SOC_T T_b) * c₁(SOC_T T_b)} U_1 + \压裂{1}{c₁(SOC_T T_b)}我# xA; \结束数组{}\右)ts # xA; + W_T& # xA; $ $

离散状态转移方程实现为一个名为“batteryStateFcn”的Simulink函数,如下图所示。金宝app函数输入x是状态向量,而函数输出xNext为下一步的状态向量,使用离散状态转移方程计算。您需要指定的信号尺寸和数据类型xxNext。在本例中,的信号维数xxNext是2,数据类型是double。附加输入是温度、估计容量和电流。注意,额外的输入是状态转换方程的输入,而不是UKF块所需要的。

测量功能也实现为一个名为“batteryMeasurementFcn”的Simulink函数,如下图金宝app所示。

配置block参数如下:

系统模型选项卡,指定块参数如下:

您可以指定以下参数:

  • 状态转换中的作用:batteryStateFcn

前面定义的实现离散状态转移方程的金宝appSimulink函数的名称。

  • 过程噪声:添加剂,具有时变协方差$\left[\begin{array}{cc} 22 -8 &0 \\ 0 &3 -7 \end{array} \right]$。的添加剂表示将噪声项直接加到最终信号中。

SOC的过程噪声和U_1美元根据电池系统的动态特性进行估计。该电池的标称容量为30ah,在15A的平均电流幅值下进行放电/充电循环。因此,一次放电或充电过程大约需要2小时(7200秒)。最大变化是100%的SOC和约4伏U_1美元

SOC和每一步的最大变化U_1美元$max(|dSOC|) \approx \frac{100% \%}{3600*2}*Ts$$max(|dU_1|) \approx \frac{4}{3600*2}*Ts$,在那里T_s美元为滤波器的采样时间。在这个例子中,T_s美元设为1秒。

过程噪声W美元是:

$ $ W =左\[开始\{数组}{cc} (max (| dSOC |)) ^ 2 & # 38;0 \\ 0 &(max (| dU_1 |)) ^ 2 \结束数组{}\]\大约\离开[\{数组}{cc} 2开始e-8 & # 38;0 \\ 0 &3 -7 \end{array} \right] $$

  • 初始状态$ $ \离开(\开始{数组}{cc} 1 \ \ 0 \结束数组{}\右)$ $

假设SOC的初始值为100%(充满电的电池),而初始值为U_1美元设为0,因为我们没有任何先验信息U_1美元

  • 最初的协方差

初始协方差表示初始猜测的准确性和可靠性。假设最大初始猜测误差为10%的SOC和1V的U_1美元。初始协方差矩阵设为$$ \left[\begin{array}{cc} 0.01 &0 \\ 0 &1 \end{array} \right] $$

  • 无气味转换参数:基于[2]设置

—Alpha: 1。确定sigma点在x周围的扩散。将Alpha设置为1以获得更大的扩散。—Beta: 2。用于结合分布的先验知识。贝塔的标称值是2。—Kappa: 0。二级缩放参数。Kappa的标称值为0。
  • 测量功能:batteryMeasurementFcn

前面定义的实现测量函数的Simu金宝applink函数的名称。

  • 测量噪声:添加剂时不变协方差为1e-3。

测量噪声是根据测量设备的精度来估计的。用于电池电压测量的电压表的精度约为1%。电池电压在4V左右。同样地,我们有$max(dE_m) \约4*1\% = 0.04$。因此,设置$V = (max(dE_m))^2 \约1e-3$

  • 样品时间Ts美元

估计电池退化

电池退化是通过容量递减来模拟的C_q美元。在这个例子中,电池容量被设置为每个充放电循环减少1 Ah,以说明退化的影响。由于容量退化率事先未知,设状态方程$$ C_q $$随机游走:

$C_{q_{k+1}} = C_{q_k} + W_{C_q}$

在哪里k美元充放电循环次数和美元W_ {C_q} $是过程噪声。

电池配置为充电状态为30%时自动充电,充电状态为90%时切换放电。利用这些信息通过积分电流来测量电池容量我美元在一个充电或放电周期内(库仑计数)。

的测量方程C_q美元是:

$ $ C_ {q_k} ^{测量}= C_ {q_k} + V_ {C_q} = & # xA; \压裂{\ int_ {t_ {k - 1}识别}^ {t_k}{我}dt}{(\三角洲SOC) _{名义}}& # xA; = \压裂{\ int_ {t_ {k - 1}识别}^ {t_k}{我}dt} {0.9 | -0.3 |} = & # xA; \压裂{\ int_ {t_ {k - 1}识别}^ {t_k}{我}dt} {0.6} $ $

在哪里美元V_ {C_q} $是测量噪声。

电池退化的状态和测量方程可表示为以下状态空间形式:

$$ C_{q_{k+1}} = A_{C_q} C_{q_k} + W_{C_q} $$

$ $ C_ {q_k} ^{测量}= C_ {C_q} C_ {q_k} + V_ {C_q} $ $

在哪里美元现代{C_q} $美元C_ {C_q} $都等于1。

对于上述线性系统,使用卡尔曼滤波来估计电池容量。估计C_q美元采用线性卡尔曼滤波改进SOC估计。在示例中,使用基于事件的线性卡尔曼滤波器进行估计C_q美元。自C_q美元在一个充电或放电周期内测量一次,只有在充电或放电结束时才启用线性卡尔曼滤波器。

配置块参数和选项如下:

点击模型参数指定厂房型号及噪音特性:

  • 模型来源:输入端口

要实现基于事件的卡尔曼滤波器,只有在事件发生时才启用状态方程。换句话说,状态方程也是基于事件的。对于线性系统$x_{t+1} = Ax_t + Bu_t + w_t$,设状态方程为

$ $间{t + 1} = \左\{\{数组}{cc}开始Ax_t + Bu_t + w_t, t = t_{启用}\ \ x_t识别,t \ neq t_{启用}\结束数组{}\识别正确的。$$

  • 一个左$ $ \ \{\{数组}{cc}开始现代{C_q}, t = t_{启用}\ \ 1识别,t \ neq t_{启用}\结束数组{}\识别正确的。$$。在这个例子中,美元现代{C_q} = 1美元。因此,一个美元总是等于1。

  • C: 1、从美元C_ {q_k} ^{测量}= C_ {q_k} + V_ {C_q} = \压裂{\ int_ {t_ {k - 1}识别}^ {t_k}{我}dt} {0.6} $

  • 初步估计对话框。中指定初始状态初始状态x[0]

  • 初始状态x[0]: 30。是电池的标称容量(30Ah)。

  • $$ \left \{\begin{array}{cc} 1, t=t_{enabled} \\ 0, t \neq t_{enabled} \end{array} \right。$$

这是过程噪声的协方差美元W_ {C_q} $。由于每个充放电循环的容量退化率约为1 Ah,因此将过程噪声设置为1。

  • R: 0.1。这是测量噪声的协方差美元V_ {C_q} $。假设容量测量误差小于1%。用电池容量为30ah时,测量噪声$V_{C_q} \近似(0.3)^2 \近似0.1$

  • 样品时间: Ts。

点击选项添加输入端口启用控制测量更新。启用端口用于根据充电/放电事件更新电池容量估计,而不是持续更新。

注意这个设置启用To 0不会禁用使用状态方程的预测。这也是将状态方程配置为基于事件的原因。通过为卡尔曼滤波块设置基于事件的A和Q,在以下情况下禁用使用状态方程的预测启用设为0。

结果

为了模拟系统,加载电池参数。该文件包含电池参数,包括美元$ E_m (SOC, T)美元$ R_0 (SOC, T)美元$ R_1 (SOC, T)等。

负载BatteryParameters.mat

模拟系统。

sim卡(“BatteryExampleUKF”

在每个时间步长,无气味卡尔曼滤波器提供了一个基于电压测量的SOC估计E_m美元。绘制实际SOC,估计SOC,以及它们之间的差异。

%同步两个时间序列[RealSOC, EstimatedSOC] = synchronize(RealSOC, EstimatedSOC,“十字路口”);图;次要情节(2,1,1)情节(100 * RealSOC,“b”“线宽”, 1.5);持有情节(100 * EstimatedSOC,“r——”“线宽”1);标题(“负责状态”);包含(“时间(s)”);ylabel (“SOC(%)”);传奇(“实际”“UKF估计”“位置”“最佳”“定位”“水平”);轴subplot(2,1,2) DiffSOC = 100*(RealSOC - EstimatedSOC);情节(DiffSOC。时间,DiffSOC。数据,“线宽”, 1.5);包含(“时间(s)”);ylabel ('\Delta SOC (%)'“翻译”“泰克斯”);传奇(“实际SOC和估计SOC的差异”“位置”“最佳”)轴

在初始估计误差后,SOC迅速收敛到实际SOC。最终估计误差在0.5%以内。无气味卡尔曼滤波给出了准确的SOC估计。

在每次充放电转换时,对电池容量进行估计,以提高对电池荷电状态的估计。电池系统输出指示灯信号,告知电池处于哪个进程。放电过程在指示灯信号中用-1表示,充电过程用1表示。在本例中,指示器信号的变化用于确定何时启用或禁用用于容量估计的卡尔曼滤波器。我们绘制了实际容量和估计容量以及充放电指示信号。

图;次要情节(2,1,1);情节(RealCapacity“b”“线宽”, 1.5);持有情节(EstimatedCapacity“r——”“线宽”, 1.5);包含(“时间(s)”);ylabel (的能力(啊));传奇(“实际”“KF估计”“位置”“最佳”);次要情节(2,1,2);情节(DischargeChargeIndicator.Time DischargeChargeIndicator.Data,“b”“线宽”, 1.5);包含(“时间(s)”);ylabel (的指示信号);

一般情况下,卡尔曼滤波器能够跟踪实际容量。在估计容量和实际容量之间有半个周期的延迟。这种延迟是由于测量的时间。电池容量退化计算发生在一个完整的充放电循环结束时。库仑计数给出了基于前一个放电或充电周期的容量测量。

总结

这个例子展示了如何使用Simulink无气味卡尔曼滤波块对锂电池进行金宝app非线性状态估计。此外,还说明了开发用于电池容量估计的基于事件的卡尔曼滤波器的步骤。将新估计的容量用于改进无气味卡尔曼滤波器的SOC估计。

参考

[10]胡利亚,塔伦,等。“具有热依赖性的高保真电模型用于高功率锂电池的表征和模拟。”电动汽车大会(evc), 2012 IEEE国际会议。IEEE 2012。

b[2] Wan, Eric A和Rudolph Van Der Merwe。非线性估计的无气味卡尔曼滤波器。信号处理、通信与控制的自适应系统。AS-SPCC。IEEE 2000。

相关的话题