本发明涉及蓄电池剩余电量(soc)估计领域,特别是一种基于阈值扩展卡尔曼算法的蓄电池剩余电量估计方法。
背景技术:
电池储能系统(bss)被广泛应用于新能源发电的功率平滑系统以及电动汽车能量管理系统。电池的性能与寿命极易受温度、充放电次数、充放电速率影响,电池剩余电量(soc)是电池管理系统(bms)优化电池工作状态,延长电池使用寿命,保证系统安全运行的基础。
理论上,安时法和开路电压法可以实现对电池soc的精确估计。但由于测量噪声,误差积累,初始soc不精确等因素,安时法难以应用于多变工况;由于电池的欧姆内阻和极化现象,开路电压法只能用于稳定静置时电池的soc估计。
为克服上述缺陷,大量基于电池模型的soc估计方法被提出。其中,卡尔曼滤波法可以通过被噪声或其他不确定因素干扰的观测值获得较为精确的soc估计值且初始soc的精度要求低,已被广泛应用。卡尔曼滤波法可大致分为扩展卡尔曼法(ekf)、无迹卡尔曼法(ukf)、粒子滤波卡尔曼法(pkf)等,且常与噪声自适应技术结合,构成自适应扩展卡尔曼(aekf)、自适应无迹卡尔曼(aukf)等算法。
上述不同算法在难易等级、计算等级、精度等级上有各自的优点,但仍有一些不足:1)基于模型的soc估计方法对模型精度和模型预测的电池内部状态的精度要求高,但模型误差不可避免且电池个体之间的差异会导致不同程度的模型失真;2)极端情况下传感器可能产生的故障会使电池内部状态无法被精确估计;3)部分算法无法快速修正初始误差;4)误差积累速度较快时,部分算法无法快速消除积累误差;5)卡尔曼算法无法完全过滤非高斯噪声。
综上,现有的基于模型的soc估计方法的鲁棒性仍需改善。
技术实现要素:
本发明的主要目的在于克服现有技术中的基于模型的soc估计方法在模型局部失真、传感器短暂失灵、初始误差较大、误差积累较快、非高斯噪声干扰等条件下对soc的估计不准确的问题,提出一种基于阈值扩展卡尔曼算法的蓄电池剩余电量估计方法。
本发明采用如下技术方案:
基于阈值扩展卡尔曼算法的蓄电池剩余电量估计方法,其特征在于,包括如下步骤:
1)采用ekf算法,获得各状态变量在当前时刻的估计值,该各状态变量包括电池剩余电量、第一rc环节端电压和第二rc环节端电压;
2)结合短期历史电流数据设置状态方程中该各状态变量的阈值,并判断各状态变量的估计值是否超出各自阈值范围,若是,则将对应的状态变量限制在阈值范围内。
所述ekf算法的状态空间表达式为以下形式:
τ1=rp1·cp1;
τ2=rp2·cp2;
其中k表示当前时刻,k-1表示上一时刻;soc表示电池剩余电量;up1和up2分别表示第一rc环节端电压和第二rc环节端电压;rp1和rp2分别表示电化学极化电阻和浓差极化内阻;cp1和cp2分别表示电化学极化电容和浓差极化电容;τ1和τ2分别表示第一rc环节和第二rc环节的时间常数;ro表示欧姆内阻;i表示充放电电流;uo表示电池端电压;vocv代表电池平衡电动势;qn表示电池额定容量;η表示充放电效率;v和w分别表示状态噪声和观测噪声;t表示采样周期。
定义如下矩阵:
xk=[soc(k)up1(k)up2(k)]]t,为k时刻的系统状态变量;f与h分别为状态空间表达式中的状态方程与观测方程;u为矩阵的激励量,在此为测量电流,所述采用ekf算法,获得各状态变量在当前时刻的估计值,包括如下步骤:
1.1)初始化k=0,设置
1.2)对k=k+1时刻的状态进行先验估计:状态变量:
1.3)对k=k+1时刻的状态进行后验估计:计算新息:
1.4)回到步骤1.2)。
步骤2)包括结合短期历史电流数据设置状态方程中电池剩余电量的阈值,并判断电池剩余电量的估计值是否超出该阈值范围,若是,则将电池剩余电量限制在阈值范围内,具体包括如下:
2.1)从短期历史电流数据i(k-m)到i(k)中,选取绝对值最大的imax来设置电流阈值a=[n1·imax,n2·imax],其中m>=600;若imax>0,则n1<0,n2>0;若imax<0,则n1>0,n2<0;
2.2)计算电池剩余电量soc的变化量δsoc=soc(k)-soc(k-1),并由公式
2.3)判断in是否属于a,若在a内,则不做限制;若大于a的上限,则强制使
步骤2)包括结合短期历史电流数据设置状态方程中第一rc环节端电压或第二环节端电压的阈值,并判断第一rc环节端电压或第二环节端电压的估计值是否超出该阈值范围,若是,则将第一rc环节端电压或第二环节端电压限制在阈值范围内,具体包括如下:
2.1)根据上一时刻soc(k-1)的值,由极化电阻rpi和soc的对应关系获取rpi的值,从短期历史电流数据i(k-m)到i(k)中,选取绝对值最大的imax来设置upi阈值为bi=[n3·imax·rpi,n4·imax·rpi],其中i=1,2;若imax>0,则n3<0,n4>0;若imax<0,则n3>0,n4<0;
2.2)判断状态变量upi的当前值upi(k)是否属于bi,若在bi内,则不做限制;若upi大于bi的右边界,则强制使upi(k)=n4·imax·rpi;若upi小于bi的左边界,则强制使upi(k)=n3·imax·rpi。
由上述对本发明的描述可知,与现有技术相比,本发明具有如下有益效果:
根据卡尔曼滤波理论,传统ekf算法的功能为快速缩小预测值与观测值之间的差异并最终使ek≈0,卡尔曼增益矩阵kk也将随着迭代快速收敛。当系统的状态变量存在初始误差或因模型失真、传感器故障、非高斯噪声等因素引入新误差时,所述误差在系统稳定后可以被修正,但kk·ek的值趋于0限制了误差的修正速度,当偏差较大时,状态变量
附图说明
图1为本发明方法的流程图。
具体实施方式
以下通过具体实施方式对本发明作进一步的描述。
基于阈值扩展卡尔曼算法的蓄电池剩余电量估计方法,包括如下步骤:
1)采用ekf算法,获得各状态变量在当前时刻的估计值,该各状态变量包括电池剩余电量、第一rc环节端电压和第二rc环节端电压。ekf算法的状态空间表达式为以下形式:
τ1=rp1·cp1;
τ2=rp2·cp2;
其中k表示当前时刻,k-1表示上一时刻;soc表示电池剩余电量;up1和up2分别表示第一rc环节端电压和第二rc环节端电压;rp1和rp2分别表示电化学极化电阻和浓差极化内阻;cp1和cp2分别表示电化学极化电容和浓差极化电容;τ1和τ2分别表示第一rc环节和第二rc环节的时间常数;ro表示欧姆内阻;i表示充放电电流;uo表示电池端电压;vocv代表电池平衡电动势;qn表示电池额定容量;η表示充放电效率;v和w分别表示状态噪声和观测噪声;t为采样间隔。
定义如下矩阵:
xk=[soc(k)up1(k)up2(k)]t,为k时刻的系统状态变量;f与h分别为状态空间表达式中的状态方程与观测方程;u为矩阵的激励量,在此为测量电流。采用ekf算法,获得各状态变量在当前时刻的估计值,包括如下步骤:
1.1)初始化k=0,设置
1.2)对k=k+1时刻的状态进行先验估计:状态变量:
1.3)对k=k+1时刻的状态进行后验估计:计算新息:
1.4)回到步骤1.2)。
2)结合短期历史电流数据设置状态方程中该各状态变量的阈值,并判断各状态变量的估计值是否超出各自阈值范围,若是,则将对应的状态变量限制在阈值范围内。
对于电池剩余电量的限制过程如下:
2.1)从短期历史电流数据i(k-m)到i(k)中,选取绝对值最大的imax来设置电流阈值a=[n1·imax,n2·imax],其中m>=600;若imax>0,则n1<0,n2>0;若imax<0,则n1>0,n2<0。
2.2)计算电池剩余电量soc的变化量δsoc=soc(k)-soc(k-1),并由公式
2.3)判断in是否属于a,若在a内,则不做限制;若大于a的上限,则强制使
对于第一rc环节端电压或第二环节端电压限制过程包括如下:
2.1)根据上一时刻soc(k-1)的值,由极化电阻rpi和soc的对应关系获取rpi的值,从短期历史电流数据i(k-m)到i(k)中,选取绝对值最大的imax来设置upi阈值为bi=[n3·imax·rpi,n4·imax·rpi],其中i=1,2;若imax>0,则n3<0,n4>0;若imax<0,则n3>0,n4<0。
2.2)判断状态变量upi的当前值upi(k)是否属于bi,若在bi内,则不做限制;若upi大于bi的右边界,则强制使upi(k)=n4·imax·rpi;若upi小于bi的左边界,则强制使upi(k)=n3·imax·rpi。
本发明在ekf算法的基础上,利用历史数据为模型中的状态变量添加阈值,限制状态变化范围,防止状态变量发散导致的soc估计精度降低,比现有基于模型的soc估计方法拥有更高的鲁棒性。
应用举例
阈值扩展卡尔曼法使用二阶戴维南等效电路模型,其状态空间表达式为(i)-(v)。
vocv(k)=soc_vocv(soc(k))(iii)
τ1=rp1·cp1(iv)
τ2=rp2·cp2(v)
(i)-(v)中,k表示当前时刻,k-1表示前一时刻,ro代表欧姆内阻,描述电池充放电时电压的突变现象;rp1为第一极化电阻,cp1为第一极化电容,rp2为第二极化电阻,cp2为第二极化电容,uo为电池外部端电压,soc表示电池剩余电量,up1、up2分别表示第一、第二rc环节端电压,vocv代表电池平衡电动势,i表示充放电电流,qn表示电池额定容量,η表示充放电效率,soc_vocv代表soc与vocv的对应关系,v和w分别表示状态噪声和观测噪声。
上述参数中,soc、up1、up2为状态变量,即需要判断是否被限制的参数。本发明的阈值扩展卡尔曼算法估计当前时刻的各状态变量数值时,包含以下步骤:
1)由传统ekf算法获得当前状态变量soc(k),up1(k),up2(k)的值。传统ekf算法基本步骤如下
定义如下矩阵:
1.1)初始化:k=0,设置
1.2)对k=k+1时刻的状态进行先验估计:
状态变量:
方差矩阵:
1.3)对k=k+1时刻的状态进行后验估计
计算新息:
卡尔曼增益更新:
状态变量更新:
方差矩阵更新:
1.4)回到步骤1.2)。
其中xk=[soc(k)up1up2]t,为k时刻的系统状态变量;uk=ik,为k时刻的输入,yk=uo(k),为k时刻的电池端电压;f与h分别为状态空间表达式中的状态方程与观测方程;wk为过程噪声,vk为测量噪声,q和r分别为w和v的方差矩阵;p为状态估计的误差矩阵,ek为观测值与观测值的先验估计的误差,kk为卡尔曼增益矩阵,
2)设置状态变量阈值:获取上一时刻的极化内阻rp1(k-1)和rp2(k-1);选取从当前时刻开始的600个历史电流数据,若历史数据不足600则全部选取,并从中选出绝对值最大的imax,本实例采用7.6a恒流放电,因此imax=7.6a,则各阈值如下:
2.1)限制soc时所用的电流阈值a=[n1·imax,n2·imax]。在此取n1=-2,n2=2,则a=[-15.2,15.2]。up1的阈值b1=[n3·7.6·rp1(k-1),n4·7.6·rp1(k-1)],取n3=-0.5,n4=1.5,则b1=[-3.8·rp1(k-1),11.4·rp1(k-1)];同理,up2的阈值b2=[-3.8·rp2(k-1),11.4·rp2(k-1)]。
2.2)判断是否需要限制ekf算法对所述3个状态变量的更新:
计算δsoc=soc(k)-soc(k-1),并由公式
判断状态变量up1的当前值up1(k)是否属于b1,若属于b1,则不变;若up1大于b1的右边界,则强制使up1(k)=11.4·rp1(k-1),若up1小于b1的左边界,则强制使up1(k)=-3.8·rp1(k-1)。
判断状态变量up2的当前值up2(k)是否属于b2,若属于b2,则不限制;若up2大于b2的右边界,则强制使up2(k)=11.4·rp2(k-1);若up2小于b2的左边界,则强制使up2(k)=-3.8·rp2(k-1)。
通过上述过程,可以获得当前时刻最终的状态估计值soc(k),up1(k),up2(k)。
上述仅为本发明的具体实施方式,但本发明的设计构思并不局限于此,凡利用此构思对本发明进行非实质性的改动,均应属于侵犯本发明保护范围的行为。