3、电池内阻建模:欧姆内阻与极化内阻的分离
做BMS这些年,我越来越觉得内阻建模是个“良心活”。
很多人觉得内阻不就是个R嘛,查表就完了。但实际项目里,你如果分不清欧姆内阻和极化内阻,SOC估算误差能跑到8%以上。我踩过这个坑,所以今天咱们好好聊聊。
3.1 欧姆内阻 vs 极化内阻——到底谁是谁?
先给个直观理解:
- 欧姆内阻(R₀):电子在电极材料、电解液、集流体中跑的时候遇到的“物理阻力”。它响应极快,电流一变化,电压立刻跳变。
- 极化内阻(R₁, R₂...):电化学反应过程中,离子扩散、电荷转移带来的“化学阻力”。它响应慢,有个时间常数,几秒到几十秒才稳定下来。
说白了,你给电池突加一个电流脉冲,电压会先“啪”地掉一截——那是欧姆内阻干的。然后电压再慢慢往下滑——那是极化内阻在作祟。
核心要点:欧姆内阻决定瞬间响应,极化内阻决定动态行为。建模时如果混为一谈,你的模型在动态工况下会“飘”。
3.2 混合脉冲功率特性(HPPC)测试——怎么把它们拆开?
HPPC测试是拆解内阻的“手术刀”。我建议每个做电池建模的工程师,都亲手跑一遍这个流程。
测试步骤:
- 将电池充满电,静置1小时以上
- 以1C倍率放电10秒,记录电压响应
- 静置40秒,让极化效应消退
- 以0.75C倍率充电10秒,记录电压响应
- 静置40秒
- 放电至下一个SOC点(通常步长10%),重复步骤2-5
嗯,这里要注意:静置时间不能太短。我曾经为了赶进度把静置时间砍到20秒,结果极化内阻根本没恢复,数据全废了。
数据处理方法:
从HPPC曲线中,我们可以这样分离内阻:
# 欧姆内阻计算(取电压跳变瞬间)
R0_discharge = (V_before_pulse - V_after_pulse_instant) / I_pulse
R0_charge = (V_after_pulse_instant - V_before_pulse) / I_pulse
# 极化内阻计算(取电压缓慢变化段)
# 通常用一阶或二阶RC网络拟合
# 时间常数 tau = R1 * C1,从电压恢复曲线拟合得到
我的经验:欧姆内阻取放电和充电的平均值会更稳定。极化内阻建议用二阶RC模型,一阶模型在低温下误差偏大。
3.3 内阻随SOC与温度的变化规律
你想想看,内阻是不是一个常数?当然不是。它跟SOC和温度的关系,我总结成一句话:
“低温+低SOC = 高内阻,高温+高SOC = 低内阻”
具体来说:
| 温度 | SOC 0-20% | SOC 20-80% | SOC 80-100% |
|---|---|---|---|
| -20°C | 内阻急剧增大(可达常温3-5倍) | 内阻较大(约常温2-3倍) | 内阻中等(约常温1.5-2倍) |
| 0°C | 内阻较大(约常温2倍) | 内阻中等(约常温1.3-1.5倍) | 内阻接近常温 |
| 25°C | 内阻略高(约1.1-1.2倍) | 内阻最低(基准值) | 内阻略高(约1.05-1.1倍) |
| 45°C | 内阻接近基准值 | 内阻略低于基准值 | 内阻略低于基准值 |
为什么会这样?低温下电解液粘度增大,锂离子扩散变慢,极化内阻飙升。低SOC时电极材料中锂离子浓度低,电荷转移阻抗增大。这两个因素叠加,就是“雪上加霜”。
避坑指南:我曾经在-10°C做HPPC测试,发现欧姆内阻和极化内阻的比值从常温的1:2变成了1:5。这意味着低温下极化效应占主导,如果你的模型只用欧姆内阻,低温工况下SOC误差会大到离谱。
3.4 Arrhenius方程在电阻建模中的应用
Arrhenius方程,说白了就是描述“温度对反应速率的影响”。在内阻建模中,我们用它来描述内阻随温度的变化:
R(T) = R₀ · exp(Ea / (R · T))
其中:
- R(T):温度T下的内阻
- R₀:指前因子(与温度无关的常数)
- Ea:活化能(反映内阻对温度的敏感程度)
- R:理想气体常数(8.314 J/(mol·K))
- T:绝对温度(K)
实际应用中,我们通常取参考温度T_ref下的内阻R_ref,然后写成:
R(T) = R_ref · exp[ (Ea/R) · (1/T - 1/T_ref) ]
这样只需要拟合一个参数Ea,就能预测任意温度下的内阻。
# 用Python拟合Arrhenius参数
import numpy as np
from scipy.optimize import curve_fit
def arrhenius_resistance(T, R_ref, Ea_over_R, T_ref=298.15):
"""Arrhenius内阻模型"""
return R_ref * np.exp(Ea_over_R * (1/T - 1/T_ref))
# 假设我们在不同温度下测得了内阻数据
T_data = np.array([253.15, 273.15, 298.15, 318.15]) # 温度(K)
R_data = np.array([0.15, 0.08, 0.05, 0.04]) # 内阻(Ω)
# 拟合参数
popt, pcov = curve_fit(lambda T, R_ref, Ea_over_R:
arrhenius_resistance(T, R_ref, Ea_over_R),
T_data, R_data, p0=[0.05, 2000])
R_ref_fit, Ea_over_R_fit = popt
print(f"参考内阻 R_ref = {R_ref_fit:.4f} Ω")
print(f"活化能参数 Ea/R = {Ea_over_R_fit:.1f} K")
我的建议:欧姆内阻和极化内阻的活化能Ea通常不同。极化内阻的Ea更大,意味着它对温度更敏感。建模时最好分开拟合,精度能提升不少。
3.5 本章知识体系
下面这张图,是我做内阻建模时的“思维导图”。它帮你把今天讲的内容串起来:
这张图把内阻建模的四个核心环节串起来了:先搞清楚内阻分类,再用HPPC测试把它们拆开,然后分析SOC和温度的影响规律,最后用Arrhenius方程把温度依赖关系数学化。你照着这个思路做,模型不会差。
公众号:蓝海资料掘金营,微信deep3321