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模型只能模拟那个跳变,后面的缓变过程它根本抓不住。
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%,但计算量翻倍。
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)。流程是这样的:
- 把电池充到指定SOC,静置1小时
- 给一个10秒的放电脉冲(比如1C倍率)
- 静置40秒
- 给一个10秒的充电脉冲
- 静置到电压稳定
- 重复以上步骤,覆盖整个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。
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
3.4 模型选择建议
说了这么多,到底该选哪个模型?我根据项目经验给个参考:
| 应用场景 | 推荐模型 | 辨识方法 | 理由 |
|---|---|---|---|
| 消费电子(手机、笔记本) | Rint或一阶Thevenin | 离线HPPC | 成本敏感,算力有限 |
| 电动工具 | 一阶Thevenin | 离线+RLS在线校正 | 电流变化剧烈,需要实时更新 |
| 电动汽车 | 一阶或二阶Thevenin | 离线标定+卡尔曼滤波 | 精度要求高,算力充足 |
| 储能系统 | PNGV | 离线+RLS | 长期运行,需要考虑老化 |
| 梯次利用电池 | PNGV | 离线+RLS | 容量衰减快,需要跟踪变化 |
3.5 小结
电池建模这块,我的建议是:从简单开始,逐步加复杂度。别一上来就搞二阶Thevenin加卡尔曼滤波,先把Rint模型跑通,再升级到一阶Thevenin,最后根据实际效果决定要不要加复杂度。
参数辨识更是如此——离线HPPC是基本功,在线RLS是量产标配。把这两样吃透了,市面上90%的BMS项目你都能搞定。
下一章咱们聊聊SOC估算,那才是真正考验BMS工程师功底的地方。到时候我会分享一个我踩过的坑——用安时积分法做SOC,结果被温度漂移坑惨了的故事。