3、电池建模:等效电路模型与参数辨识方法

电池建模这事儿,说难不难,说简单也不简单。我刚开始做BMS那会儿,总觉得把电池当成一个黑盒子,测测电压电流就完事了。后来踩过坑才明白——模型选不对,后面所有的SOC估算、功率预测全是白搭。

今天咱们就聊聊电池建模里最实用的三种等效电路模型,以及怎么把那些模型参数给“揪”出来。

3.1 为什么要给电池建模?

你想想看,电池内部是个电化学反应系统,你不能直接拿万用表去量它的内阻、极化电容吧?建模的目的,就是用简单的电路元件去“模拟”电池的行为。

我个人习惯把电池模型分成三类:

  • 黑箱模型:不管内部机理,只关心输入输出关系
  • 白箱模型:基于电化学方程,太复杂,实时BMS跑不动
  • 灰箱模型:也就是等效电路模型,兼顾精度和计算量

实际工程中,我们几乎都用灰箱模型。为什么呢?因为BMS的MCU算力有限,你不可能在芯片上解偏微分方程。

3.2 三种经典等效电路模型

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

Rint模型,说白了就是一个理想电压源串联一个内阻。公式很简单:

V_t = V_oc - I * R_0

其中V_t是端电压,V_oc是开路电压,I是电流(放电为正),R_0是欧姆内阻。

这个模型我在早期做铅酸电池BMS时用过。优点是计算量极小,缺点嘛——太粗糙了。它完全忽略了电池的极化效应。你想想,电池在充放电瞬间,电压会有一个“跳变”,然后慢慢趋于稳定。Rint模型只能模拟那个跳变,后面的缓变过程它根本抓不住。

注意:Rint模型只适合做非常粗略的估算。如果你用它来做SOC在线校正,误差会让你怀疑人生。我曾经在一个项目中偷懒用了Rint模型,结果SOC误差跑到15%以上,后来乖乖换成了Thevenin模型。

3.2.2 Thevenin模型——工程中最常用

Thevenin模型在Rint基础上加了一组RC并联网络。一阶Thevenin模型的结构是:

  • 一个理想电压源 V_oc(SOC)
  • 一个欧姆内阻 R_0
  • 一组RC并联(R_1、C_1)用来模拟极化效应

数学表达式是这样的:

V_t = V_oc - I * R_0 - V_1
dV_1/dt = I/C_1 - V_1/(R_1 * C_1)

嗯,这里要注意,V_1就是极化电压,它描述的是电池内部离子扩散和电荷转移的“惯性”。

我个人建议,做乘用车BMS的话,一阶Thevenin模型基本够用。如果你做的是储能系统或者对精度要求极高的场景,可以考虑二阶Thevenin模型——多加一组RC,精度能提升2%-3%,但计算量翻倍。

经验之谈:我在做48V微混系统时,对比过一阶和二阶模型。在动态工况下(比如急加速、急减速),二阶模型确实更准。但如果你只是做常规充放电管理,一阶模型完全够用,别给自己找麻烦。

3.2.3 PNGV模型——考虑老化的进阶模型

PNGV模型是Thevenin模型的“升级版”。它多了一个电容C_b,用来模拟电池容量的衰减和开路电压的缓慢变化。

结构上,PNGV模型在Thevenin的基础上,在V_oc支路上串联了一个大电容C_b。这个电容的电压变化,反映了电池随着充放电循环,容量逐渐“缩水”的过程。

公式稍微复杂一点:

V_t = V_oc - I * R_0 - V_1 - V_b
dV_b/dt = I/C_b

这个模型我是在做梯次利用电池BMS时用到的。退役电池的容量衰减很快,用Thevenin模型会发现V_oc一直在漂,根本定不住。换成PNGV模型后,那个C_b电容正好吸收了这种“漂移”,效果好了很多。

3.3 参数辨识方法——怎么把模型参数“算”出来?

模型搭好了,里面的R_0、R_1、C_1这些参数怎么来?不能靠猜吧?

参数辨识说白了就是:给电池一个已知的激励(电流),测量它的响应(电压),然后用数学方法反推出模型参数。

3.3.1 离线辨识——实验室里的精细活

离线辨识最常用的方法是混合脉冲功率特性测试(HPPC)。流程是这样的:

  1. 把电池充到指定SOC,静置1小时
  2. 给一个10秒的放电脉冲(比如1C倍率)
  3. 静置40秒
  4. 给一个10秒的充电脉冲
  5. 静置到电压稳定
  6. 重复以上步骤,覆盖整个SOC范围

拿到HPPC数据后,怎么提取参数?我一般用最小二乘法拟合。举个例子,对于一阶Thevenin模型,端电压的响应可以写成:

V_t(t) = V_oc - I * R_0 - I * R_1 * (1 - exp(-t / (R_1 * C_1)))

用MATLAB或者Python的curve_fit工具,把实测的V_t和I数据丢进去,就能拟合出R_0、R_1、C_1。

核心要点:欧姆内阻R_0可以从脉冲开始瞬间的电压跳变算出来——ΔV / ΔI。而R_1和C_1则从脉冲后的电压缓变曲线中提取。

3.3.2 在线辨识——BMS运行时的实时更新

离线辨识的缺点是:电池老化后,参数会变。你不能把车开到实验室重新测一遍吧?

所以,在线辨识就派上用场了。常用的方法有:

  • 递推最小二乘法(RLS):每来一个新数据点,就更新一次参数估计。计算量小,适合嵌入式实现。
  • 卡尔曼滤波(KF):把参数当成状态变量来估计。精度高,但需要调协方差矩阵。
  • 粒子滤波(PF):对付非线性很强的系统。但计算量太大,BMS上很少用。

我个人在量产项目中用得最多的是RLS。为什么呢?因为它简单、稳定、够用。卡尔曼滤波虽然精度高,但调参太费劲了——你想想,一个BMS项目几十个工程师,每个人对卡尔曼的理解不一样,调出来的效果千奇百怪。

这里给出一段RLS的伪代码,方便你理解:

// 初始化
theta = [R0, R1, C1] 的初始猜测
P = 100 * I  // 协方差矩阵,初始值设大一点

// 每个采样周期执行:
1. 计算预测电压 V_pred = f(theta, I_meas)
2. 计算误差 e = V_meas - V_pred
3. 计算卡尔曼增益 K = P * H / (H * P * H' + lambda)
4. 更新参数 theta = theta + K * e
5. 更新协方差 P = (I - K * H) * P / lambda

// lambda是遗忘因子,一般取0.98~0.995
避坑指南:我曾经在一个项目中,遗忘因子设成了0.95,结果参数更新太快,噪声全被吸进去了,R_0估计值上下乱跳。后来改成0.99,稳如老狗。记住——遗忘因子越接近1,参数更新越平滑,但对参数变化的响应也越慢。需要根据工况做权衡。

3.4 模型选择建议

说了这么多,到底该选哪个模型?我根据项目经验给个参考:

应用场景 推荐模型 辨识方法 理由
消费电子(手机、笔记本) Rint或一阶Thevenin 离线HPPC 成本敏感,算力有限
电动工具 一阶Thevenin 离线+RLS在线校正 电流变化剧烈,需要实时更新
电动汽车 一阶或二阶Thevenin 离线标定+卡尔曼滤波 精度要求高,算力充足
储能系统 PNGV 离线+RLS 长期运行,需要考虑老化
梯次利用电池 PNGV 离线+RLS 容量衰减快,需要跟踪变化

3.5 小结

电池建模这块,我的建议是:从简单开始,逐步加复杂度。别一上来就搞二阶Thevenin加卡尔曼滤波,先把Rint模型跑通,再升级到一阶Thevenin,最后根据实际效果决定要不要加复杂度。

参数辨识更是如此——离线HPPC是基本功,在线RLS是量产标配。把这两样吃透了,市面上90%的BMS项目你都能搞定。

下一章咱们聊聊SOC估算,那才是真正考验BMS工程师功底的地方。到时候我会分享一个我踩过的坑——用安时积分法做SOC,结果被温度漂移坑惨了的故事。