退化电池系统的非线性状态估计
这个例子展示了如何在Simulink®中使用unscented卡尔曼滤波器估计非线性系统的状态。万博1manbetx该示例还说明了如何开发基于事件的卡尔曼滤波器来更新系统参数,以实现更准确的状态估计。该示例使用控制系统工具箱™或系统识别工具箱™运行。该示例不需要预测性维护工具箱™。
概述
考虑具有以下等效电路[1]的电池模型
该模型由一个电压源组成,串联电阻和一个钢筋混凝土块而且.电池在充电和放电循环之间交替。在本例中,您使用测量到的电池电流、电压和温度来估计电池模型的荷电状态(SOC)。你假设电池是一个非线性系统,估计SOC使用无味卡尔曼滤波器。电池的容量随着每一次放电-充电循环而降低,给出了不准确的SOC估计。使用基于事件的线性卡尔曼滤波器来估计电池在充放电之间转换时的容量。估计的容量反过来可用于指示电池的健康状况。
Simu万博1manbetxlink模型包含三个主要组件:电池模型、无气味卡尔曼滤波块和基于事件的卡尔曼滤波块。下面几节将给出进一步的解释。
open_system (“BatteryExampleUKF /”)
电池模型
使用Simscape™语言实现了具有热效应的电池模型。
电池模型的状态转换方程为:
在哪里而且为RC块中的热和SOC依赖电阻和电容,电压是否穿过电容器,是输入电流,是电池温度,是电池容量(单位:Ah),和是进程噪声。
输入电流为电池放电时随机产生的脉冲,充电时恒定,如下图所示。
测量方程为:
在哪里为测量电压输出,是串行电阻,电动势是否来自电压源,以及是测量噪声。
在模型中,而且是依赖于SOC和电池温度的2D查找表。使用实验数据[1]识别查找表中的参数。
估计荷电状态(SOC)
为了使用unscented卡尔曼滤波块,需要为状态和测量方程定义MATLAB®或Simulink函数。万博1manbetx本例演示了Simulink函数的使用。万博1manbetx由于无气味卡尔曼滤波器是离散时间滤波器,首先对状态方程进行离散化。在本例中,采用了欧拉离散化。设采样时间为.对于一般的非线性系统时,系统可离散为
非线性电池系统的状态向量为
.
应用欧拉离散化得到如下方程:
离散化状态转换方程被实现为一个名为“batteryStateFcn”的Simulink函数,如下所示。万博1manbetx函数输入x
状态向量是函数输出吗xNext
是下一步的状态向量,用离散化的状态转移方程计算。的信号尺寸和数据类型x
而且xNext
.在本例中,为的信号维数x
而且xNext
为2,数据类型为double。额外的输入是温度、估计容量和电流。请注意,附加的输入是状态转换方程的输入,而不是UKF块所需要的。
测量函数也被实现为名为“batteryMeasurementFcn”的Simulink函数,如下图所万博1manbetx示。
配置block参数如下:
在系统模型选项卡,指定块参数,如下所示:
您可以指定以下参数:
状态转换的功能:
batteryStateFcn
.
前面定义的实现离散状态转换方程的万博1manbetxSimulink函数的名称。
过程噪声:
添加剂
,协方差随时间变化.的添加剂
表示将噪声项直接加到最终信号中。
SOC和的过程噪声都是根据电池系统的动态特性进行估计的。电池标称容量为30ah,放电/充电循环平均电流幅值为15A。因此,一次放电或充电过程大约需要2小时(7200秒)。最大的变化是100% SOC和大约4伏.
SOC和每一步的最大变化是而且,在那里为滤波器的采样时间。在这个例子中,设置为1秒。
过程噪声是:
.
初始状态:.
SOC的初始值假设为100%(充满电的电池),而SOC的初始值为设为0,因为我们没有任何的先验信息.
最初的协方差:
初始协方差表示初始猜测的准确性和可靠性。假设最大初始猜测误差为10%的SOC和1V的.初始协方差矩阵设为.
无味变换参数:基于[2]
—Alpha: 1。确定在x周围的sigma点的分布。将Alpha设置为1以获得更大的分布。Beta: 2。用于合并分布的先验知识。Beta的标称值是2。- Kappa: 0。二次缩放参数。Kappa的名义值为0。
测量功能:
batteryMeasurementFcn
.
前面定义的实现度量函数的Simu万博1manbetxlink函数的名称。
测量噪声:
添加剂
,协方差为1e-3时不变。
测量噪声是根据测量设备的精度估计的。用于测量电池电压的电压表精度约为1%。电池电压在4V左右。同样的,我们有.因此,设置.
样品时间:.
估算电池退化
电池的退化是通过容量减少来模拟的.在本例中,电池容量设置为每放电-充电循环减少1 Ah,以说明退化的影响。由于容量退化速率事先不知道,设状态方程为随机游走:
在哪里放电-充电循环次数和是进程噪声。
电池配置为电量为30%时自动充电,电量为90%时自动放电。利用这些信息通过积分电流来测量电池容量在充电或放电周期(库仑计数)。
的测量方程是:
在哪里是测量噪声。
电池退化状态及测量方程可以化为如下状态空间形式:
在哪里而且等于1。
对于上述线性系统,使用卡尔曼滤波器估计电池容量。估计采用线性卡尔曼滤波来改进SOC估计。在本例中,使用基于事件的线性卡尔曼滤波器进行估计.自在充电或放电周期中测量一次,线性卡尔曼滤波器仅在充电或放电结束时启用。
配置block参数和选项如下:
点击模型参数指定工厂模型和噪声特性:
模型来源:
输入端口
.
要实现基于事件的卡尔曼滤波,状态方程仅在事件发生时启用。换句话说,状态方程也是基于事件的。对于线性系统,设状态方程为
.
一个:.在这个例子中,.结果,总是等于1。
C: 1, from.
初步估算来源:
对话框
.你指定初始状态初始状态x[0]
初始状态x[0]: 30。电池标称容量(30Ah)。
问:
这是过程噪声的协方差.由于容量的降解率在每放电-充电周期1 Ah左右,所以设置过程噪声为1。
R: 0.1。这是测量噪声的协方差.假设容量测量误差小于1%。用电池容量30ah,测量噪声.
样品时间: Ts。
点击选项添加输入端口启用
控制测量更新。启用端口用于在充电/放电事件时更新电池容量估计,而不是不断更新。
注意设置启用
到0并不会禁用使用状态方程的预测。这就是为什么状态方程也配置为基于事件的原因。通过为卡尔曼滤波块设置基于事件的A和Q,在以下情况下禁用使用状态方程的预测启用
设置为0。
结果
为了模拟系统,加载电池参数。该文件包含电池参数,包括,,等。
负载BatteryParameters.mat
模拟系统。
sim卡(“BatteryExampleUKF”)
在每个时间步,无气味卡尔曼滤波器提供了一个基于电压测量的SOC估计.画出真实SOC,估计SOC,以及它们之间的差值。
同步两个时间序列[RealSOC, EstimatedSOC] =同步(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估计。
在每次放电-充电转换时,估计电池容量以改进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无味卡尔曼滤波块来执行锂电池的万博1manbetx非线性状态估计。此外,还说明了开发用于电池容量估计的基于事件的卡尔曼滤波器的步骤。新估计的容量用于改进无气味卡尔曼滤波器的SOC估计。
参考
[1] Huria, Tarun,等。“用于表征和模拟高功率锂电池电池的热依赖性高保真电模型。”电动汽车会议,2012年IEEE国际。IEEE 2012。
[2]万,埃里克·A.和鲁道夫·范德默。非线性估计的无味卡尔曼滤波器。信号处理、通信和控制自适应系统研讨会2000。AS-SPCC。IEEE 2000。