锂电池参数辨识是电池管理系统(BMS)开发中的关键技术环节。传统离线参数辨识方法存在实时性差、无法跟踪电池老化等问题,而基于遗忘因子的递推最小二乘法(FFRLS)恰好能解决这些痛点。
我在新能源汽车BMS开发中,曾遇到电池模型参数漂移导致SOC估算误差大的问题。当时尝试了多种在线参数辨识方法,最终发现二阶RC等效电路模型配合FFRLS算法,在精度和计算效率上达到了最佳平衡。这个方案后来成为我们团队的标准实践。
典型二阶RC模型包含:
经验提示:RC支路数量选择需权衡精度与计算量。乘用车BMS通常用二阶,储能系统可能用到三阶。
离散化后的状态方程:
code复制U1(k) = exp(-Δt/R1C1)*U1(k-1) + R1*(1-exp(-Δt/R1C1))*I(k-1)
U2(k) = exp(-Δt/R2C2)*U2(k-1) + R2*(1-exp(-Δt/R2C2))*I(k-1)
Ut(k) = Uocv(k) - U1(k) - U2(k) - R0*I(k)
其中Δt为采样周期,I为电流(放电为正),Ut为端电压。
标准RLS的递推公式:
code复制K(k) = P(k-1)φ(k)/(λ + φ'(k)P(k-1)φ(k))
θ(k) = θ(k-1) + K(k)[y(k)-φ'(k)θ(k-1)]
P(k) = [I - K(k)φ'(k)]P(k-1)/λ
其中:
通过实测数据对比发现:
建议采用动态调整策略:
matlab复制if abs(y(k)-φ'(k)θ(k-1)) > threshold
lambda = 0.95; % 增大更新权重
else
lambda = 0.99; % 保持稳定性
end
matlab复制% 初始化
theta = [R0; R1; C1; R2; C2]; % 参数初始猜测
P = eye(5)*1e6; % 大初始协方差矩阵
lambda = 0.98; % 遗忘因子
for k = 2:length(t)
% 构造观测向量
phi = [-I(k-1);
-U1(k-1);
-I(k-1)*(1-exp(-dt/(R1*C1)));
-U2(k-1);
-I(k-1)*(1-exp(-dt/(R2*C2)))];
% FFRLS核心计算
K = P*phi/(lambda + phi'*P*phi);
theta = theta + K*(Ut(k) - phi'*theta);
P = (eye(5) - K*phi')*P/lambda;
% 更新模型参数
R0 = theta(1); R1 = theta(2); C1 = theta(3);
R2 = theta(4); C2 = theta(5);
end
实际中发现两个常见问题及解决方案:
matlab复制% 添加正则化项
if cond(P) > 1e10
P = P + eye(size(P))*1e-6;
end
matlab复制% 强制参数非负
theta(theta<0) = 0;
% RC时间常数合理范围约束
if R1*C1 > 100 || R1*C1 < 0.1
theta(2:3) = last_valid_theta(2:3);
end
使用18650电池实测数据验证:
| 参数 | 真值 | 辨识值 | 误差 |
|---|---|---|---|
| R0 (mΩ) | 25.3 | 26.1 | 3.2% |
| R1 (mΩ) | 8.7 | 8.9 | 2.3% |
| C1 (kF) | 1.5 | 1.47 | 2.0% |
| R2 (mΩ) | 12.4 | 12.1 | 2.4% |
| C2 (kF) | 45.2 | 43.8 | 3.1% |
在相同硬件平台(i5-8250U)上测试:
| 方法 | 单步计算时间(μs) | SOC估算误差(%) |
|---|---|---|
| 离线最小二乘 | 不适用 | 4.8 |
| 标准RLS | 58 | 2.1 |
| FFRLS | 62 | 1.7 |
| EKF | 135 | 1.5 |
实测建议:对多数车用BMS,FFRLS在精度和实时性上是最佳选择。若处理器资源充裕,可考虑EKF。
电流采样质量:
初始参数设定:
温度影响处理:
matlab复制% 简单温度补偿模型
R0 = R0_25C * (1 + 0.008*(T-25));
电池健康状态(SOH)评估:
多电池参数协同辨识:
与机器学习结合:
这个方案我在三个量产车型BMS上成功应用,最大的收获是:一定要在电池不同老化阶段(0-500次循环)反复验证算法鲁棒性。初期我们忽略了这点,导致现场出现参数发散问题,后来通过添加约束条件解决了。