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模型结合?
有了温度加速因子,我们就可以把不同温度下的老化数据统一折算到参考温度下。具体做法是:
- 实时采集电池温度,计算当前时刻的加速因子AF(t)
- 对AF(t)进行时间积分,得到“等效老化时间”
- 用等效老化时间去查SOH-时间曲线(参考温度下的)
说白了,就是把“实际经历的时间”乘以一个权重,变成“等效于25°C下老化了多久”。
举个例子:电池在45°C下跑了1小时,AF=2.5,那就相当于在25°C下跑了2.5小时。这个等效时间累加起来,就是SOH估算的输入。
核心思路:温度补偿的本质,就是把不同温度下的老化速率统一到一个基准上。Arrhenius模型给了我们一把尺子,但尺子准不准,取决于Ea选得对不对。
4.7 小结
嗯,今天的内容就这些。总结一下:
- Arrhenius模型是温度补偿的基石,核心是活化能Ea
- 加速因子AF(T)把不同温度下的老化速率归一化
- 实际应用中要注意温度采样、波动处理和模型适用范围
- 代码实现不难,但参数标定需要实验数据支撑
下一章我会讲如何通过实验数据来标定这些参数,包括加速老化实验的设计和数据处理方法。到时候咱们再细聊。