3、电池模型基础:等效电路模型与参数辨识

做BMS标定这些年,我越来越觉得电池模型是整套系统的灵魂。你想想看,SOC估得准不准、SOP能不能压榨出来、SOH趋势对不对,根子上都取决于模型精度。今天咱们就聊聊等效电路模型,从最简单的Rint模型到工程上常用的PNGV模型,再到怎么把参数辨识出来、怎么验证模型好不好用。

3.1 三种等效电路模型

等效电路模型,说白了就是用电阻、电容这些元件搭个电路,模拟电池的电压响应。我个人习惯把模型分成三个层级:入门级、进阶级、工程级。

3.1.1 Rint模型——最朴素的模型

Rint模型就是电池内部等效为一个理想电压源串联一个内阻。公式很简单:

V(t) = OCV(SOC) - I(t) × R0

其中V是端电压,OCV是开路电压,I是电流(放电为正),R0是欧姆内阻。

优点:参数少,计算快,适合实时系统。

缺点:太粗糙了。它完全忽略了电池的极化效应。我在早期做48V微混项目时试过用Rint模型估算SOC,结果动态工况下误差能到8%以上。嗯,后来果断放弃了。

注意:Rint模型只适合稳态工况或对精度要求不高的场景。千万别用它做动态功率预测,会出大问题。

3.1.2 Thevenin模型——工程标配

Thevenin模型在Rint基础上加了一组RC并联网络,用来模拟极化效应。一阶Thevenin模型长这样:

V(t) = OCV(SOC) - I(t)×R0 - Vp(t)
dVp/dt = I(t)/Cp - Vp(t)/(Rp×Cp)

Vp是极化电压,Rp是极化内阻,Cp是极化电容。

为什么说它是工程标配?因为它在精度和计算量之间找到了很好的平衡点。我做过对比,一阶Thevenin模型在动态工况下能把电压预测误差控制在30mV以内,对于大多数BMS应用来说足够了。

当然,如果你对精度有更高要求,可以上二阶甚至三阶Thevenin模型。但说实话,阶数越高,参数辨识越麻烦,而且边际效益递减。我曾经在某个项目中试过四阶模型,结果发现和一阶相比,精度提升不到5%,但计算量翻了三倍。不划算。

3.1.3 PNGV模型——考虑老化的进阶选择

PNGV模型是Thevenin模型的升级版,它额外加了一个电容来模拟电池容量的衰减。这个模型是美国PNGV(Partnership for a New Generation of Vehicles)项目提出的,专门用来研究电池老化。

PNGV模型的数学表达稍微复杂些:

V(t) = OCV(SOC) - I(t)×R0 - Vp(t) - Vcap(t)
dVcap/dt = I(t)/Ccap

这里的Ccap就是容量衰减电容,它反映了电池随着循环次数增加,可用容量逐渐减少的过程。

什么时候用PNGV模型?我个人建议:如果你做的是SOH长期预测或者电池寿命评估,PNGV模型是更好的选择。但如果是日常的SOC/SOP估算,一阶Thevenin模型就够了。

3.2 模型参数辨识方法

模型搭好了,参数怎么来?总不能靠猜吧。参数辨识,就是把电池的实测数据喂给算法,让算法自己算出R0、Rp、Cp这些值。

3.2.1 离线辨识——HPPC测试法

最经典的方法是HPPC(Hybrid Pulse Power Characterization)测试。具体做法是:

  1. 把电池充到满电,静置1小时
  2. 以1C电流放电10秒,记录电压响应
  3. 静置40秒,记录电压恢复曲线
  4. 以0.75C电流充电10秒,记录电压响应
  5. 静置40秒
  6. 放电到下一个SOC点(通常每10%SOC测一次)
  7. 重复步骤2-6,直到SOC降到0%

拿到数据后,用最小二乘法拟合就能得到参数。我贴一段MATLAB代码,展示怎么从HPPC数据中提取R0:

% 从HPPC数据提取欧姆内阻R0
% 假设数据已加载到变量中
% V_drop: 电流突变瞬间的电压降
% I_pulse: 脉冲电流值

% 找到电流突变点
idx_start = find(abs(diff(I)) > 0.5*max(abs(I)), 1);
idx_end = idx_start + 10; % 取10个采样点

% 计算电压降
V_before = mean(V(idx_start-5:idx_start-1));
V_after = mean(V(idx_end-5:idx_end-1));
delta_V = V_before - V_after;

% 计算R0
R0 = delta_V / I_pulse;

fprintf('欧姆内阻 R0 = %.4f Ω\n', R0);
经验之谈:HPPC测试时,脉冲时间不要太长。10秒足够捕捉欧姆内阻,40秒静置足够让极化电压恢复。我曾经见过有人用30秒脉冲,结果把极化效应和欧姆效应混在一起,参数辨识出来一塌糊涂。

3.2.2 在线辨识——递推最小二乘法

离线辨识只能用在实验室,车上跑的时候参数会变(温度、SOC、老化都会影响)。这时候就需要在线辨识,实时更新模型参数。

递推最小二乘法(RLS)是工业界最常用的在线辨识算法。它的核心思想是:每来一个新数据点,就微调一下参数,让模型输出更接近实测值。

RLS的递推公式:

K(k) = P(k-1)×φ(k) / [λ + φ(k)^T×P(k-1)×φ(k)]
θ(k) = θ(k-1) + K(k)×[y(k) - φ(k)^T×θ(k-1)]
P(k) = [I - K(k)×φ(k)^T]×P(k-1) / λ

其中θ是待辨识的参数向量,φ是数据向量,λ是遗忘因子(通常取0.95-0.99)。

避坑指南:我曾经在RLS实现中踩过一个坑——遗忘因子设得太小(0.9),结果参数剧烈震荡,SOC估计也跟着乱跳。后来改成0.98,稳定多了。记住,遗忘因子越小,算法对最新数据越敏感,但也越容易受噪声干扰。

3.3 模型精度验证

参数辨识完了,怎么知道模型好不好用?不能光看拟合误差,还得看泛化能力。

3.3.1 验证指标

我通常用三个指标来评估模型精度:

指标 公式 工程可接受范围
均方根误差(RMSE) √[Σ(V_pred - V_meas)² / N] < 30 mV
最大绝对误差(MAE) max(|V_pred - V_meas|) < 50 mV
平均绝对百分比误差(MAPE) mean(|V_pred - V_meas| / V_meas) × 100% < 1%

这些指标怎么用?举个例子:你用HPPC数据辨识了参数,然后用另一组UDDS工况数据来验证。如果RMSE在30mV以内,说明模型泛化能力不错。如果RMSE超过50mV,那就要检查是不是参数辨识有问题,或者模型阶数不够。

3.3.2 验证流程

我建议的验证流程是这样的:

  1. 训练集验证:用辨识用的同一组数据回代,看拟合效果。这一步主要检查辨识算法有没有收敛。
  2. 测试集验证:用另一组独立工况数据验证。这一步看模型泛化能力。
  3. 极端工况验证:用低温、大倍率、低SOC等极端数据验证。这一步看模型鲁棒性。

你想想看,如果模型只在训练集上表现好,换个工况就崩了,那有什么用?我见过太多人只做第一步,结果上车后模型精度惨不忍睹。

核心要点:模型验证一定要用独立数据。千万别用同一组数据既做辨识又做验证,那是自欺欺人。

3.4 小结

电池模型这块,我的建议是:

  • 日常SOC/SOP估算,用一阶Thevenin模型就够了
  • 做SOH长期预测,考虑PNGV模型
  • 参数辨识用HPPC离线+RLS在线组合
  • 验证一定要用独立工况数据

模型精度直接决定了BMS的上限。你花再多时间在模型上都不为过。好了,下一章咱们聊聊SOC估算的实战技巧,到时候见。