4、基于Arrhenius的温度加速因子模型:如何建立温度与老化速率之间的定量关系

各位同行,咱们今天聊一个绕不开的话题——温度对电池老化的影响。

做BMS这么多年,我见过太多因为温度补偿没做好,导致SOH估算翻车的案例。说白了,温度是电池老化的“催化剂”,而且这个催化作用不是线性的。你想想看,夏天和冬天,电池的衰减速度能一样吗?

那怎么定量描述这种关系呢?这就得请出我们的老朋友——Arrhenius模型。

4.1 从化学动力学说起

Arrhenius模型最早是化学领域的,用来描述化学反应速率与温度的关系。公式长这样:

k = A * exp(-Ea / (R * T))

其中:

  • k:反应速率常数(这里就是老化速率)
  • A:指前因子(频率因子)
  • Ea:活化能(单位:J/mol)
  • R:理想气体常数(8.314 J/(mol·K))
  • T:绝对温度(单位:K)

嗯,这里要注意,T必须是开尔文温度。我见过有人直接用摄氏度往里套,结果算出来的加速因子完全不对。

为什么会这样?因为指数项对温度极其敏感。你想想看,温度每升高10°C,反应速率可能翻倍甚至更多。这就是所谓的“10°C规则”,在电池老化领域同样适用。

4.2 温度加速因子模型

在实际BMS中,我们更常用的是“温度加速因子”这个概念。它表示相对于某个参考温度,当前温度下老化速率放大了多少倍。

公式可以写成:

AF(T) = exp[ (Ea/R) * (1/T_ref - 1/T) ]

这里:

  • AF(T):温度T下的加速因子
  • T_ref:参考温度(通常取25°C,即298.15K)
  • T:当前电池温度

我个人习惯把参考温度设在25°C。为什么?因为实验室大部分标定数据都是在这个温度下测的,方便对比。

关键点:加速因子AF(T) > 1表示老化加速,AF(T) < 1表示老化减缓。比如在45°C下,AF可能达到2~3,意味着老化速度是25°C时的2~3倍。

4.3 活化能Ea怎么取?

这是个大问题。活化能Ea直接决定了模型对温度的敏感程度。不同化学体系的电池,Ea差别很大。

电池类型 典型Ea范围 (kJ/mol) 说明
LFP(磷酸铁锂) 30~50 对温度相对不敏感
NCM(三元锂) 40~70 中等敏感度
LCO(钴酸锂) 50~80 对温度较敏感

我在项目中遇到过一个问题:同一批电芯,不同老化阶段Ea居然会变。新电池Ea偏低,老化后期Ea会升高。这说明什么?说明老化机理在变化。如果你用一个固定的Ea从头算到尾,误差会越来越大。

我的建议:如果条件允许,最好做不同温度下的老化实验,分段拟合Ea。实在没条件,取中间值50 kJ/mol作为保守估计,也能用。

4.4 实际应用中的坑

理论讲完了,咱们聊聊实战中容易踩的坑。

  • 温度采样滞后:电芯内部温度和表面温度可能差好几度。我曾经遇到过,表面测出来35°C,内部其实已经45°C了。用表面温度算加速因子,结果偏小,SOH估算偏乐观。
  • 温度波动处理:实际工况温度是波动的,不能直接用瞬时温度。我一般会用一个滑动窗口(比如1小时)的平均温度来计算加速因子。
  • 低温区域:Arrhenius模型在低温下可能不准确。低于0°C时,老化速率其实很低,但模型可能会给出一个很小的正数。这时候需要加一个下限保护。

注意:千万不要把Arrhenius模型外推到超出实验范围太多的温度区域。比如你只有25~45°C的实验数据,却拿去算60°C的加速因子,结果可能完全失真。

4.5 代码实现示例

下面是我常用的一个温度加速因子计算函数,C语言风格,可以直接移植到嵌入式BMS中:

#define R_GAS  8.314       // 气体常数 J/(mol·K)
#define EA_DEF 50000.0     // 默认活化能 50 kJ/mol
#define T_REF  298.15      // 参考温度 25°C

// 计算温度加速因子
// temp: 电池温度,单位°C
// ea: 活化能,单位J/mol,传入0则使用默认值
double calc_temp_af(double temp, double ea) {
    double t_kelvin;
    double ea_actual;
    
    // 温度下限保护
    if (temp < -20.0) temp = -20.0;
    if (temp > 80.0)  temp = 80.0;
    
    // 转为开尔文
    t_kelvin = temp + 273.15;
    
    // 活化能处理
    ea_actual = (ea > 0) ? ea : EA_DEF;
    
    // 计算加速因子
    return exp( (ea_actual / R_GAS) * (1.0/T_REF - 1.0/t_kelvin) );
}

这段代码我用了好几年,基本没出过问题。唯一要注意的是,exp()函数在嵌入式平台上可能比较慢,如果计算频率高,建议做个查表优化。

4.6 如何与SOH模型结合?

有了温度加速因子,我们就可以把不同温度下的老化数据统一折算到参考温度下。具体做法是:

  1. 实时采集电池温度,计算当前时刻的加速因子AF(t)
  2. 对AF(t)进行时间积分,得到“等效老化时间”
  3. 用等效老化时间去查SOH-时间曲线(参考温度下的)

说白了,就是把“实际经历的时间”乘以一个权重,变成“等效于25°C下老化了多久”。

举个例子:电池在45°C下跑了1小时,AF=2.5,那就相当于在25°C下跑了2.5小时。这个等效时间累加起来,就是SOH估算的输入。

核心思路:温度补偿的本质,就是把不同温度下的老化速率统一到一个基准上。Arrhenius模型给了我们一把尺子,但尺子准不准,取决于Ea选得对不对。

4.7 小结

嗯,今天的内容就这些。总结一下:

  • Arrhenius模型是温度补偿的基石,核心是活化能Ea
  • 加速因子AF(T)把不同温度下的老化速率归一化
  • 实际应用中要注意温度采样、波动处理和模型适用范围
  • 代码实现不难,但参数标定需要实验数据支撑

下一章我会讲如何通过实验数据来标定这些参数,包括加速老化实验的设计和数据处理方法。到时候咱们再细聊。