基于EKF算法的电池SOC估算研究

电子说

1.3w人已加入

描述

本文以锂离子电池为研究对象,选取Thevenin模型描述电池的动态行为,基于脉冲充放电数据,对电池模型进行参数辨识。结果表明,Thevenin模型能较好地描述电池的动态行为。最后在Simulink环境下,基于扩展卡尔曼滤波(EKF)算法,实现对电池SOC的估算。

1、电池模型选取

由于Thevenin模型结构简单,参数辨识容易,因此该模型常作为电动汽车动力电池的基础模型。Thevenin模型如下图所示:

simulink仿真

将模型的状态方程与量测方程离散化,得到如下形式的模型:

simulink仿真

2、参数辨识方法

最小二乘法是一种最基本也最常用的估计方法。由于参数在线辨识需要不断更新数据,这时可以采用递推最小二乘法。

递推最小二乘法的基本思想为:利用新的观测数据对旧的估计值进行修正。其算法流程为:

simulink仿真

其中,θ为待辨识参数组成的向量,K是增益系数,z是实际量测值,P是量测协方差阵。初值θ(0)和P(0)可以通过离线方法获得。

c0=[0.0001 0.0001 0.0001]';             % 直接给出被辨识参数的初始值,即一个充分小的实向量
p0=10^(6)*eye(3,3);                     % 直接给出初始状态P0,即一个充分大的实数单位矩阵
c=[c0,zeros(3,L-1)];                    % 被辨识参数矩阵的初始值及大小
e=zeros(3,L);                           % 相对误差的初始值及大小
lambda=0.98;                            % 遗忘因子

递推最小二乘法随着时间的推移会出现“数据饱和”的现象,为克服这个问题。引入遗忘因子λ,改进后的算法递推公式如下:

simulink仿真

for k=3:L; 
    y(k)=ocv(k)-ul(k);
    h=[y(k-1),it(k),it(k-1)]'; 
    d1=y(k)-h'*c0;
    x=h'*p0*h+lambda;
    x1=inv(x);
    Kk=p0*h*x1;               % 求出K的值
    c1=c0+Kk*d1;              % 求被辨识参数c
    e1=c1-c0;                 % 求参数当前值与上一次的值的差值
    e2=e1./c0;                % 求参数的相对变化
    e(:,k)=e2;                % 把当前相对变化的列向量加入误差矩阵的最后一列       
    c0=c1;                    % 新获得的参数作为下一次递推的旧参数
    c(:,k)=c1;                % 把辨识参数c列向量加入辨识参数矩阵的最后一列 
    p1=(p0-Kk*h'*p0)/lambda;  % 求出 p(k)的值
    p0=p1; 
end

根据电池Thevenin模型,可以得到差分方程为:

simulink仿真

可以解出模型中各参数的值:

simulink仿真

a1=c(1,:); a2=c(2,:); a3=c(3,:); 
a = a1;
R0 = a2;
R1 = (a3-a.*R0)./(a-1);
C1 = -1./(R1.*log10(a));

参数辨识结果如下图所示:

simulink仿真

使用脉冲放电工况对模型的精度进行验证,电池验证模型如下图所示:

simulink仿真

其中,SOC Calculate模块:

simulink仿真

其中,RC Paremeter Calculate模块:通过遗忘因子最小二乘法的参数辨识结果获取。

其中,Voltage Calculate模块:

simulink仿真

结果表明:Thevenin模型参数辨识较为容易,对工况的仿真效果较好,可以相对准确地描述电池的动态特性。

3、电池SOC估算

simulink仿真

其中,安时积分法模块:

simulink仿真

其中,电池参数模块:

simulink仿真

其中,电池模型模块:

simulink仿真

其中,EKF估算模块:

Q = Noise(1);   % 过程噪声
R = Noise(2);   % 观测噪声
%% --------------A矩阵,状态转移----------
A1 = 1;
A2 = exp(-0.05/Tao);
A = [A1 0;0 A2];
P_last = [P_old(1) P_old(2);P_old(3) P_old(4)];
P_pre=A*P_last*A'+ [Q 0;0 Q];  
%% --------------C矩阵-------------
C1 = 1.526 - 9.117*2*SOC_pre + 41.17*3*SOC_pre^2 ...
    - 116.2*4*SOC_pre^3 + 184.4*5*SOC_pre^4 ...
    - 148.9*6*SOC_pre^5 + 47.59*5*SOC_pre^6;
C = [C1 -1];
%% --------------更新--------------
X_pre = [SOC_pre;Up_pre];
K = P_pre*C'*(C*P_pre*C'+ R)^(-1);     % 增益
X_upd = X_pre + K*(UL_ob-UL_pre);      % 得到估计值
P_update = P_pre - K*C*P_pre;
%% --------------输出--------------
SOC_upd = X_upd(1);
Up_upd = X_upd(2);
P_upd = [P_update(1,1) P_update(1,2) P_update(2,1) P_update(2,2)];

4、小结

本期提供了一种电池SOC估算的具体的学习方法,对于研究SOC估算的同学有很大的引导作用。不管是做何种电池的SOC估算,都需要通过电池参数辨识→电池模型验证→电池SOC估算这样一个过程。

结果表明,Thevenin模型能较好地描述电池的动态行为。最后在Simulink环境下,基于扩展卡尔曼滤波(EKF)算法,实现对电池SOC的估算。

需要通过其他参数辨识方法/其他电池SOC估算方法的可以基于此模型进行修改/改进。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分