核心内容摘要
葫芦里面不卖药,千万影片等你解锁!一场视听盛宴,一次心灵之旅
锂电池SOC估算EKF估计SOC仿真扩展卡尔曼滤波锂电池的SOCState of Charge估计就像给手机电池标剩余电量但汽车和储能系统里这事儿复杂得多。
传统库仑计数法误差会累积这时候就得请出扩展卡尔曼滤波EKF这种高级玩家。
今天咱们用Matlab代码扒一扒EKF在SOC估算里的门道。
先搞明白电池模型。
二阶RC等效模型最常用但为了简化咱们选一阶RC模型。
状态方程长这样function [Vk, SOC_k] battery_model(SOC_prev, current, R0, R1, C1, delta_t) Q
3*3600; % 电池容量 SOC_k SOC_prev - (delta_t/Q)*current; Vk OCV(SOC_k) - R0*current - R1*current*exp(-delta_t/(R1*C
); end这里OCV-SOC曲线需要提前标定用查表法或者多项式拟合都行。
注意电流方向——充电为负这个坑很多人踩过。
锂电池SOC估算EKF估计SOC仿真扩展卡尔曼滤波EKF的核心在于处理非线性。
雅可比矩阵计算是灵魂所在看这段关键代码function [F, H] jacobian_matrices(SOC_est, current, R0, R1, C1, delta_t) Q
3*3600; F 1; % 状态转移矩阵SOC是唯一状态量 dOCV (OCV(SOC_est
0.
- OCV(SOC_est-
0.
)/
02; % 数值法求导 H dOCV - R0 - R1*(1 - exp(-delta_t/(R1*C
)); end这里用中心差分法计算OCV对SOC的导数比解析求导更灵活。
H矩阵反映的是端电压对SOC变化的敏感度直接决定滤波效果好坏。
完整的EKF迭代长这样% 初始化 P
1; % 误差协方差 Q_k
0001; % 过程噪声 R_k
01; % 测量噪声 for k 2:length(t) % 预测 SOC_priori SOC_posteriori - (delta_t/Q)*current(k); P_priori P Q_k; % 更新 [~, H] jacobian_matrices(SOC_priori, current(k), R0, R1, C1, delta_t); K P_priori*H/(H*P_priori*H R_k); SOC_posteriori SOC_priori K*(V_meas(k) - V_est(k)); P (1 - K*H)*P_priori; end协方差初始化别随便设个1实测发现从
1开始收敛更快。
过程噪声Q_k控制模型信任度电池新旧程度不同要动态调整。
实测数据跑下来误差能压在1%以内比单纯安时积分强三档。
最后说几个实战经验温度补偿必须做标定OCV曲线时至少采样30个点电流传感器精度别低于
5%。
遇到SOC跳变别慌八成是雅可比矩阵计算没考虑OCV曲线的拐点。
代码里那些exp()看着吓人其实是RC环节的离散化处理记住时间常数τR1*C1就行。