3、电池模型基础:等效电路模型原理、RC模型参数辨识、模型精度验证方法
做HIL测试这么多年,我越来越觉得电池模型是整个测试的基石。模型不准,你后面的所有测试结果都是空中楼阁。今天咱们就聊聊电池模型这块,我把自己踩过的坑和积累的经验都抖出来。
3.1 等效电路模型原理
电池内部其实是个复杂的电化学系统。但做HIL测试,我们不需要把每个离子怎么移动都搞清楚。说白了,我们只需要一个能准确描述电池外特性的数学模型。
等效电路模型(ECM)就是干这个的。它用电阻、电容这些基本元件来模拟电池的行为。我个人最常用的是二阶RC模型,为什么?因为它在精度和计算量之间取得了很好的平衡。
先看最基本的Rint模型:
V(t) = Vocv - I(t) * R0
这个模型只有一个内阻R0。简单是简单,但精度太差。我在早期项目里用过一次,结果仿真出来的电压曲线跟实测差了5%以上,直接被客户怼了回来。
后来我换成了Thevenin模型,也就是一阶RC模型:
V(t) = Vocv - I(t)*R0 - Vrc(t)
dVrc/dt = I(t)/C1 - Vrc(t)/(R1*C1)
这个模型加了一个RC并联环节,用来模拟电池的极化效应。嗯,这里要注意,极化效应是电池充放电时内部电化学反应导致的电压滞后现象。你想想看,电池突然停止放电,电压不会立刻跳回开路电压,而是慢慢回升,这就是极化在起作用。
二阶RC模型就更完善了:
V(t) = Vocv - I(t)*R0 - Vrc1(t) - Vrc2(t)
dVrc1/dt = I(t)/C1 - Vrc1(t)/(R1*C1)
dVrc2/dt = I(t)/C2 - Vrc2(t)/(R2*C2)
两个RC环节分别模拟电化学极化和浓差极化。前者反应快,后者反应慢。我在做某款三元锂电池项目时发现,二阶模型能把电压预测误差控制在1%以内,一阶模型只能做到2%左右。
模型选择建议:
- Rint模型:只适合做极粗略的估算,别用在HIL测试里
- 一阶RC模型:适合磷酸铁锂电池,极化效应相对简单
- 二阶RC模型:适合三元锂、钴酸锂等,精度要求高的场景
- 三阶及以上:计算量太大,实时HIL跑不动,不推荐
3.2 RC模型参数辨识
模型结构定下来了,接下来就是确定R0、R1、C1、R2、C2这些参数的值。这个过程叫参数辨识。
我常用的方法是混合脉冲功率特性测试,也就是HPPC测试。具体怎么做?
- 先把电池充到满电状态
- 静置1小时,让电池内部稳定
- 以1C倍率放电10秒
- 静置40秒
- 以0.75C倍率充电10秒
- 静置到电压稳定
- 再放电到下一个SOC点,重复以上步骤
拿到测试数据后,怎么提取参数?我习惯用最小二乘法。给你看段代码:
function [R0, R1, C1, R2, C2] = identify_params(time, current, voltage, dt)
% 提取开路电压
Vocv = voltage(end); % 静置结束时的电压
% 计算R0:电流突变瞬间的电压跳变
dV_instant = abs(voltage(2) - voltage(1));
dI = abs(current(2) - current(1));
R0 = dV_instant / dI;
% 构建回归矩阵进行最小二乘辨识
% 这里用简化的方法,实际项目中建议用递推最小二乘
V_diff = voltage - Vocv;
I_data = current;
% 使用非线性最小二乘拟合RC参数
options = optimoptions('lsqcurvefit', 'Display', 'off');
x0 = [0.001, 1000, 0.001, 5000]; % 初始猜测
x = lsqcurvefit(@rc_model, x0, time, V_diff, [], [], options);
R1 = x(1); C1 = x(2);
R2 = x(3); C2 = x(4);
end
我的经验:参数辨识时,SOC点至少要取10个以上,从5%到95%每隔10%取一个点。我曾经偷懒只取了5个点,结果模型在中间SOC段误差很大,后来补测才搞定。
辨识出来的参数会随SOC变化。我一般会做成查找表:
| SOC (%) | R0 (mΩ) | R1 (mΩ) | C1 (F) | R2 (mΩ) | C2 (F) |
|---|---|---|---|---|---|
| 90 | 1.2 | 0.8 | 1200 | 0.5 | 5000 |
| 70 | 1.3 | 0.9 | 1100 | 0.6 | 4800 |
| 50 | 1.5 | 1.1 | 1000 | 0.7 | 4500 |
| 30 | 1.8 | 1.4 | 900 | 0.9 | 4200 |
| 10 | 2.5 | 2.0 | 800 | 1.2 | 3800 |
注意:不同温度下参数差异很大。0℃时内阻可能是25℃时的2-3倍。我建议至少做-20℃、0℃、25℃、45℃四个温度点的参数辨识,然后做二维插值。
3.3 模型精度验证方法
参数辨识完了,怎么知道模型准不准?不能光看拟合曲线好不好看,得用独立的数据来验证。
我一般分三步走:
3.3.1 静态精度验证
用HPPC测试中没参与辨识的数据点来验证。计算模型预测电压和实测电压的误差:
RMSE = sqrt(mean((V_pred - V_meas).^2))
MAE = mean(abs(V_pred - V_meas))
MaxErr = max(abs(V_pred - V_meas))
我给自己定的标准是:RMSE < 20mV,MAE < 15mV,MaxErr < 50mV。超过这个范围,我会重新检查辨识过程。
3.3.2 动态工况验证
这个才是真功夫。用标准的动态放电工况,比如UDDS或WLTC的电流曲线来驱动模型,看模型能不能跟上实际电池的响应。
我记得有一次,模型在静态验证时表现很好,RMSE只有10mV。但一上动态工况,误差直接飙到80mV。后来发现是RC时间常数没辨识准,高频响应跟不上。从那以后,我每次都会加一个动态验证环节。
3.3.3 极端工况验证
低温、大电流、低SOC这些极端条件下,模型最容易出问题。我建议专门做几组验证:
- 低温大电流放电:-10℃下3C放电
- 脉冲充电:模拟能量回收时的电流冲击
- 低SOC段:10%以下SOC时的行为
精度验证的黄金法则:
- 验证数据必须独立于辨识数据
- 至少覆盖3个温度点、5个SOC段
- 动态工况验证不可省略
- 误差分析要关注最大误差,不只是平均值
最后说一句,模型精度不是越高越好。你想想看,HIL测试是实时运行的,模型太复杂会导致仿真步长变长,反而影响测试效果。我一般控制在二阶RC模型,精度够用就行。毕竟,我们的目标是验证BMS的功能,不是做电池研究。
下一章我会讲怎么把电池模型部署到HIL测试系统中,包括实时仿真平台的配置和接口对接。到时候再聊。