在电动汽车的核心三电系统中,电池管理系统(BMS)的精度直接决定了整车性能和用户体验。作为BMS最关键的参数之一,荷电状态(State of Charge, SOC)的准确预估长期困扰着行业从业者。我曾参与过多个新能源车企的BMS开发项目,深刻体会到SOC预估误差超过5%就会导致续航里程显示跳变、充电策略失效等实际问题。
传统安时积分法就像用沙漏计量时间,随着使用时长增加,误差不断累积。而基于模型滤波的方法则如同配备了GPS的智能手表,通过多传感器数据融合实现自校正。其中,扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)是目前工程实践中验证有效的两种方案。本文将基于Simulink仿真环境,详细解析这两种算法在车用锂电池SOC预估中的实现细节,并探讨如何将预估结果应用于充电策略优化。
锂离子电池在工作时表现出明显的非线性特性,这主要源于三个物理现象:
针对上述特性,我们选择二阶RC模型进行建模,其拓扑结构包含:
状态空间方程建立过程:
matlab复制% OCV-SOC关系拟合(以NCM523电池为例)
soc = 0:0.1:1;
ocv = [3.0 3.4 3.6 3.7 3.8 3.85 3.9 3.95 4.0 4.1 4.2];
p = polyfit(soc,ocv,6); % 6次多项式拟合
% 模型参数辨识(以25℃环境为例)
R0 = 0.02; % 欧姆阻抗(Ω)
R1 = 0.01; % 快极化阻抗(Ω)
C1 = 2000; % 快极化电容(F)
R2 = 0.005; % 慢极化阻抗(Ω)
C2 = 10000; % 慢极化电容(F)
注意事项:模型参数辨识时需采用混合脉冲功率特性(HPPC)测试法,在不同SOC点施加脉冲电流,通过最小二乘法拟合参数。温度每变化10℃,参数波动可达15%-20%,因此必须建立参数与温度的二维查找表。
EKF通过一阶泰勒展开处理非线性系统,其实现步骤包括:
状态预测:
matlab复制% 状态方程离散化
A = [1 0 0; 0 exp(-dt/(R1*C1)) 0; 0 0 exp(-dt/(R2*C2))];
B = [-dt/Qn; R1*(1-exp(-dt/(R1*C1))); R2*(1-exp(-dt/(R2*C2)))];
x_pred = A * x_est + B * I;
协方差预测:
matlab复制F = [1 0 0;
0 exp(-dt/(R1*C1)) 0;
0 0 exp(-dt/(R2*C2))]; % 状态转移雅可比矩阵
P_pred = F * P_est * F' + Q;
卡尔曼增益计算:
matlab复制H = [dOCV/dSOC 1 1]; % 观测雅可比矩阵
K = P_pred * H' / (H * P_pred * H' + R);
状态更新:
matlab复制x_est = x_pred + K * (V_meas - (OCV(soc) + V1 + V2));
P_est = (eye(3) - K*H) * P_pred;
实操技巧:过程噪声Q和观测噪声R的取值需要反复调试。建议初始值设为Q=diag([1e-4 1e-5 1e-5]),R=1e-3,然后根据实测误差调整。过大的Q会导致估计结果波动,过小的Q则降低算法适应性。
UKF采用确定性采样逼近概率分布,其核心在于sigma点选取策略。对于n维状态量,通常取2n+1个sigma点:
matlab复制% Sigma点生成
lambda = alpha^2*(n+kappa) - n;
X(:,1) = x;
sqrtP = chol((n+lambda)*P);
for i = 2:n+1
X(:,i) = x + sqrtP(:,i-1);
X(:,i+n) = x - sqrtP(:,i-1);
end
% 权重计算
Wm = [lambda/(n+lambda) 0.5/(n+lambda)*ones(1,2*n)];
Wc = Wm;
Wc(1) = Wc(1) + (1-alpha^2+beta);
参数选择经验:
构建包含四个子系统的仿真模型:
电池S-function示例:
c复制static void mdlOutputs(SimStruct *S, int_T tid) {
real_T *x = ssGetContStates(S);
real_T I = *uPtrs[0];
// 状态方程
dx[0] = -I/Qn; // SOC
dx[1] = -x[1]/(R1*C1) + I/C1; // V1
dx[2] = -x[2]/(R2*C2) + I/C2; // V2
// 输出方程
y[0] = OCV_LUT(x[0]) + x[1] + x[2] + R0*I;
}
EKF模块配置要点:
| 工况 | 算法 | 最大误差 | RMSE | 收敛时间 |
|---|---|---|---|---|
| 恒流放电 | EKF | 1.8% | 0.9% | 30s |
| UKF | 1.2% | 0.6% | 15s | |
| DST | EKF | 4.5% | 2.1% | 60s |
| UKF | 2.8% | 1.3% | 30s | |
| UDDS | EKF | 5.2% | 2.8% | 90s |
| UKF | 3.1% | 1.5% | 45s |
工程建议:在MCU资源受限时可采用EKF,但需增加温度补偿;高性能平台推荐UKF,尤其在动态工况下优势明显。
mermaid复制graph TD
A[SOC<30%] -->|1C恒流| B
B[30%≤SOC<80%] -->|0.5C恒流| C
C[SOC≥80%] -->|恒压4.2V| D[截止电流0.05C]
实际应用中的改进点:
| 策略类型 | 充电时间 | 能量效率 | 温升 |
|---|---|---|---|
| 传统恒流恒压 | 65min | 92.5% | 8.2℃ |
| SOC自适应策略 | 58min | 94.8% | 6.5℃ |
| 脉冲优化策略 | 55min | 95.3% | 5.8℃ |
在实际工程应用中,我们发现几个容易忽视但至关重要的细节:
初始SOC标定:
参数在线更新:
matlab复制% 每50次循环执行一次参数辨识
if mod(cycle,50) == 0
params = fminsearch(@(p) costFunction(p,I,V), p0);
end
多算法融合方案:
对于希望深入研究的同行,建议从以下方向突破: