在电动汽车和储能系统快速发展的今天,锂电池作为核心储能器件,其状态监测的准确性直接关系到系统性能和安全性。荷电状态(State of Charge,SOC)作为反映电池剩余电量的关键指标,其精确估计一直是电池管理系统(BMS)研发中的重点和难点。
传统SOC估计方法存在明显局限:安时积分法会因电流测量误差累积而产生漂移,需要定期校准;开路电压法则需要电池长时间静置才能获得可靠读数,无法满足实时性要求。这些方法在动态工况下的误差往往超过5%,难以满足现代应用对精度(通常要求<3%)的需求。
卡尔曼滤波类算法通过状态空间建模和递推估计,能够有效处理系统噪声和非线性问题。其中扩展卡尔曼滤波(EKF)因其实现相对简单、计算量适中,成为工程实践中常用的解决方案。但标准一阶EKF在处理锂电池这类强非线性系统时,由于线性化近似带来的误差,其估计精度和鲁棒性仍有提升空间。
锂电池内部包含复杂的电化学过程,涉及锂离子在正负极间的嵌入/脱嵌反应、电解液扩散等多个时间尺度的动态特性。等效电路模型通过电气元件模拟这些物理过程,是工程应用中最实用的建模方法。
经过对比测试,二阶RC模型在复杂度和准确性之间取得了较好平衡:
实验数据表明,相比一阶模型,二阶模型在动态工况下的电压预测误差可降低40%以上。而更高阶模型虽然能略微提升精度,但参数辨识难度呈指数增长,实际工程价值有限。
准确获取模型参数是保证估计精度的前提。我们采用混合脉冲功率特性(HPPC)测试结合最小二乘法进行参数辨识:
OCV-SOC关系标定:
动态参数辨识:
matlab复制% 示例参数辨识代码
pulse_current = [1C 0 -1C 0]; % 充放电脉冲序列
[t, V] = battery_test(pulse_current);
fun = @(x) sum((V - sim_rc_model(x)).^2); % 最小二乘目标函数
x0 = [0.01 1000 0.01 2000]; % 初始猜测[R0 R1 C1 R2 C2]
options = optimset('Display','iter');
x = fminsearch(fun, x0, options);
典型18650电池参数范围:
| 参数 | 取值范围 | 单位 |
|---|---|---|
| R0 | 0.01-0.05 | Ω |
| R1 | 0.005-0.02 | Ω |
| C1 | 500-2000 | F |
| R2 | 0.001-0.01 | Ω |
| C2 | 2000-10000 | F |
关键提示:参数会随SOC和温度变化,建议在不同工作点分别辨识并建立查找表
标准EKF仅使用一阶泰勒展开进行线性化,而二阶EKF通过保留二阶项显著提升了非线性系统的近似精度。具体到SOC估计问题:
状态方程的二阶展开:
math复制f(x) ≈ f(\hat{x}) + FΔx + 0.5∑ΔxᵀH_iΔx
其中H_i是第i个状态变量的Hessian矩阵
观测方程的二阶修正:
端电压预测时考虑极化电压的非线性变化:
math复制U_t = OCV(SOC) - I·R0 - U1 - U2 + 0.5·(∂²OCV/∂SOC²)·P(1,1)
matlab复制function [soc_est, P] = ekf_2nd_order(soc_prev, U1_prev, U2_prev, P_prev, I, V_meas, dt)
% 模型参数
R0 = 0.03; R1 = 0.01; C1 = 1000;
R2 = 0.005; C2 = 5000; Qn = 2.5*3600;
% 状态预测
soc_pred = soc_prev - dt*I/Qn;
U1_pred = exp(-dt/(R1*C1))*U1_prev + R1*(1-exp(-dt/(R1*C1)))*I;
U2_pred = exp(-dt/(R2*C2))*U2_prev + R2*(1-exp(-dt/(R2*C2)))*I;
% 二阶修正项
H_soc = 6*1.8*soc_pred - 8*0.9*soc_pred^3 + 10*0.2*soc_pred^4; % OCV二阶导
soc_corr = 0.5 * H_soc * P_prev(1,1);
% 观测预测
OCV = 3.2 + 1.2*soc_pred - 2.1*soc_pred^2 + 1.8*soc_pred^3 - 0.9*soc_pred^4 + 0.2*soc_pred^5;
V_pred = OCV - I*R0 - U1_pred - U2_pred + soc_corr;
% 雅可比矩阵计算
F = [1 0 0;
0 exp(-dt/(R1*C1)) 0;
0 0 exp(-dt/(R2*C2))];
H = [1.2-4.2*soc_pred+5.4*soc_pred^2-3.6*soc_pred^3+soc_pred^4, -1, -1];
% 协方差更新
Q = diag([1e-6 1e-5 1e-5]);
R = 1e-4;
P_pred = F*P_prev*F' + Q;
K = P_pred*H'/(H*P_pred*H' + R);
% 状态更新
error = V_meas - V_pred;
x_corr = [soc_pred; U1_pred; U2_pred] + K*error;
P_corr = (eye(3)-K*H)*P_pred;
soc_est = x_corr(1);
P = P_corr;
end
数值稳定性处理:
P = 0.5*(P + P')计算效率优化:
参数敏感性分析:
为全面验证算法性能,设计了三种典型测试场景:
恒流放电测试:
动态应力测试(DST):
matlab复制% DST电流剖面生成
t = 0:1:3600; % 1小时测试
I = 2.5*sin(2*pi*t/600) + 0.5*randn(size(t));
I(t>1800) = I(t>1800)*1.5; % 后段增加负载
温度变化测试:
引入多维度评价体系:
| 指标 | 计算公式 | 理想值 |
|---|---|---|
| RMSE | sqrt(mean((SOC_true-SOC_est)^2)) | <2% |
| 最大误差 | max(abs(SOC_true-SOC_est)) | <3% |
| 收敛时间 | 误差进入±2%区间所需时间 | <60s |
| 计算耗时 | 单次迭代平均时间 | <1ms |
在i7-11800H处理器上运行Matlab 2022a的测试结果:
| 算法 | RMSE(%) | 最大误差(%) | 收敛时间(s) | 计算时间(ms) |
|---|---|---|---|---|
| 安时积分 | 4.82 | 8.71 | - | 0.01 |
| 一阶EKF | 1.35 | 3.28 | 42 | 0.12 |
| 二阶EKF | 0.78 | 1.92 | 28 | 0.18 |
典型工况下的SOC估计曲线显示,二阶EKF在电流剧烈波动时(如DST工况的加速阶段)能更好地跟踪真实SOC,避免了标准EKF出现的"过冲"现象。温度变化测试中,通过结合温度补偿模型,二阶EKF仍能保持约1.2%的RMSE,展现出良好的环境适应性。
实际应用中建议采用双重时间尺度更新:
快速更新层(100ms):
慢速更新层(10min):
matlab复制if mod(k,600)==0
% 参数辨识程序
[new_R0, new_R1] = online_identify(I_history, V_history);
% 渐变更新防止突变
R0 = 0.9*R0 + 0.1*new_R0;
end
对于资源受限的BMS硬件:
建立三级容错策略:
初级检测:
中级恢复:
高级保护:
实测中发现,在电池老化后期(SOH<80%),模型误差会逐渐增大。此时建议:
R0' = R0*(1+2*(1-SOH))