EKF:基于MATLAB/Simulink的锂电池SoC计算仿真模型——扩展卡尔曼滤波器(EK...
EKF:基于MATLAB/Similink的扩展卡尔曼滤波器EKF的锂电池SoC计算仿真模型。
最近在搞锂电池SoC估算的项目,发现扩展卡尔曼滤波(EKF)真是个好东西。传统安时积分法误差会越攒越大,开路电压法又不能实时测量,EKF刚好能把这两玩意儿揉在一起用。今天咱们就扒一扒怎么用MATLAB/Simulink搭这个模型,手把手教你们调参避坑。
先说说电池模型怎么选。二阶RC等效电路模型现在最常用,毕竟能兼顾精度和计算量。用Simulink搭出来大概长这样:
% 电池模型参数定义
R0 = 0.01; % 欧姆内阻
Rp1 = 0.005; % 极化电阻1
Cp1 = 2000; % 极化电容1
Rp2 = 0.008; % 极化电阻2
Cp2 = 1500; % 极化电容2
这里注意RC环节的时间常数要和电池实际特性匹配,别随便拍脑袋填数值。建议先用HPPC测试拿真实数据拟合参数,直接上仿真容易翻车。
状态方程是EKF的核心,这里SoC作为隐藏状态必须和非线性观测量联动:
function [x_k, F_k] = stateFcn(x_prev, I, deltaT, Cn)
x_k = x_prev - (deltaT/Cn)*I; % SoC状态递推
F_k = 1; % 状态转移矩阵雅可比
end
这个函数里deltaT是采样时间,Cn为额定容量。雅可比矩阵求导的时候得特别注意单位统一,上次我忘了把分钟转秒,结果SoC曲线直接飞了。

EKF:基于MATLAB/Similink的扩展卡尔曼滤波器EKF的锂电池SoC计算仿真模型。
观测方程得处理端电压的非线性关系,这里用三元锂的OCV-SoC曲线举例:
function [V_est, H_k] = measFcn(x_k, I, R0, Rp1, Cp1, Rp2, Cp2)
ocv = 3.7 + 0.6*x_k - 0.2*exp(-15*x_k); % 典型OCV拟合公式
V_est = ocv - I*(R0 + Rp1/(1+Rp1*Cp1) + Rp2/(1+Rp2*Cp2));
H_k = 0.6 + 3*exp(-15*x_k); % 对SoC求导得到观测矩阵
end
注意指数项是为了模拟SoC在两端时OCV的陡变特性,实测数据记得做三次样条插值更准。过程噪声Q和观测噪声R的设置很玄学,建议从1e-6开始试,调大了容易震荡,小了收敛慢。
最后上Simulink模型结构(别直接拖官方EKF模块,自己搭更灵活):
- 电池物理模型子系统
- 电流电压传感器加噪声
- EKF算法封装成MATLAB Function
- 实时SoC显示模块
跑出来的效果如果像心电图似的乱跳,八成是雅可比矩阵算错了。有一次我把Rp1和Rp2搞反了,结果SoC估计值比真实值超前了20%,调了两天最后发现是观测方程里电阻位置写反了。
实测数据对比时,记得用0.2C以下电流验证,大电流工况下模型误差会明显暴露。建议把安时积分结果和EKF输出画在同一张图上,误差超过5%就该检查模型参数了。

代码打包的时候别忘做温度补偿的接口,实际应用中电池温度变化对参数影响比仿真大得多。下次有机会再聊聊怎么把自适应EKF和神经网络结合,那才是真·工业级解决方案。
更多推荐
所有评论(0)