3、电池内阻建模:欧姆内阻与极化内阻的分离

做BMS这些年,我越来越觉得内阻建模是个“良心活”。

很多人觉得内阻不就是个R嘛,查表就完了。但实际项目里,你如果分不清欧姆内阻和极化内阻,SOC估算误差能跑到8%以上。我踩过这个坑,所以今天咱们好好聊聊。

3.1 欧姆内阻 vs 极化内阻——到底谁是谁?

先给个直观理解:

  • 欧姆内阻(R₀):电子在电极材料、电解液、集流体中跑的时候遇到的“物理阻力”。它响应极快,电流一变化,电压立刻跳变。
  • 极化内阻(R₁, R₂...):电化学反应过程中,离子扩散、电荷转移带来的“化学阻力”。它响应慢,有个时间常数,几秒到几十秒才稳定下来。

说白了,你给电池突加一个电流脉冲,电压会先“啪”地掉一截——那是欧姆内阻干的。然后电压再慢慢往下滑——那是极化内阻在作祟。

核心要点:欧姆内阻决定瞬间响应,极化内阻决定动态行为。建模时如果混为一谈,你的模型在动态工况下会“飘”。

3.2 混合脉冲功率特性(HPPC)测试——怎么把它们拆开?

HPPC测试是拆解内阻的“手术刀”。我建议每个做电池建模的工程师,都亲手跑一遍这个流程。

测试步骤:

  1. 将电池充满电,静置1小时以上
  2. 以1C倍率放电10秒,记录电压响应
  3. 静置40秒,让极化效应消退
  4. 以0.75C倍率充电10秒,记录电压响应
  5. 静置40秒
  6. 放电至下一个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 本章知识体系

下面这张图,是我做内阻建模时的“思维导图”。它帮你把今天讲的内容串起来:

电池内阻建模 内阻分类 欧姆内阻 R₀ 极化内阻 R₁,R₂ HPPC测试 放电脉冲 充电脉冲 影响因素 SOC 温度 T Arrhenius方程:R(T) = R₀ · exp(Ea / (R·T)) 应用:SOC估算补偿 | 热管理策略 | 寿命预测 💡 核心思路 先通过HPPC测试分离欧姆内阻和极化内阻 再用Arrhenius方程建立温度依赖关系,最后查表或拟合SOC影响

这张图把内阻建模的四个核心环节串起来了:先搞清楚内阻分类,再用HPPC测试把它们拆开,然后分析SOC和温度的影响规律,最后用Arrhenius方程把温度依赖关系数学化。你照着这个思路做,模型不会差。


公众号:蓝海资料掘金营,微信deep3321