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. 先把电池充到满电状态
  2. 静置1小时,让电池内部稳定
  3. 以1C倍率放电10秒
  4. 静置40秒
  5. 以0.75C倍率充电10秒
  6. 静置到电压稳定
  7. 再放电到下一个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测试系统中,包括实时仿真平台的配置和接口对接。到时候再聊。