4、容量衰减法:基于当前最大容量与标称容量的比值计算SOH,含温度与倍率修正

各位同学,咱们今天聊一个非常实在的话题——容量衰减法。

说白了,这个方法就是拿电池现在的最大容量,除以它出厂时的标称容量。比值是多少,SOH就是多少。简单吧?但实际做起来,坑可不少。

我个人习惯把这种方法叫做「最朴素的SOH算法」。为什么?因为它物理意义最清晰。你想想看,电池用久了,能充进去的电越来越少,这就是最直观的老化表现。

4.1 基础公式与物理意义

先看公式:

SOH = (C_current / C_nominal) × 100%

其中:

  • C_current:当前最大可用容量(单位:Ah)
  • C_nominal:标称容量(出厂时标注的容量)

举个例子。一块标称100Ah的电池,现在充满电只能放出85Ah。那SOH就是85%。

关键点:这里的「最大可用容量」不是随便测的。它需要在特定条件下,以标准充放电规程来获取。我在项目中遇到过有人拿日常使用数据直接算,结果SOH跳得像心电图——那是不对的。

4.2 温度修正:为什么必须做?

电池容量受温度影响非常大。同样的电池,25℃时能放出100Ah,到了0℃可能只有80Ah。你能说它SOH从100%掉到80%了吗?当然不能。

所以,我们需要一个温度修正系数。

温度范围 修正系数 k_T 说明
25℃ ± 2℃ 1.00 基准温度,无需修正
10℃ ~ 23℃ 1.02 ~ 1.08 低温下容量偏低,需向上修正
0℃ ~ 10℃ 1.08 ~ 1.20 低温修正幅度增大
35℃ ~ 45℃ 0.95 ~ 0.98 高温下容量略降,需向下修正

修正后的公式:

SOH = (C_measured × k_T / C_nominal) × 100%

嗯,这里要注意:修正系数不是拍脑袋定的。我建议你根据电池厂商提供的温度-容量曲线来拟合。如果没有,那就用实验数据自己标定。

4.3 倍率修正:大电流放电的陷阱

还有一个容易被忽略的因素——放电倍率。

你想想看,同样一块电池,用0.2C小电流放电,能放出100Ah;用1C大电流放电,可能只能放出90Ah。这不是电池坏了,而是大电流下极化效应导致容量「看起来」变小了。

我曾经在项目里踩过这个坑。当时客户反馈电池SOH掉得特别快,我一查数据,发现他们一直在用2C倍率做容量测试。修正之后,SOH其实还在95%以上。

倍率修正系数 k_C 的经验值:

放电倍率 修正系数 k_C 备注
0.2C ~ 0.5C 1.00 标准倍率,无需修正
0.5C ~ 1C 1.02 ~ 1.05 轻度修正
1C ~ 2C 1.05 ~ 1.12 中度修正
2C以上 1.12 ~ 1.25 重度修正,建议避免

4.4 综合修正公式与代码实现

把温度和倍率都考虑进去,最终公式长这样:

SOH = (C_measured × k_T × k_C / C_nominal) × 100%

下面是我在实际项目中用过的Python代码片段:

def calculate_soh_capacity(measured_capacity, nominal_capacity, 
                           temperature, discharge_rate):
    """
    容量衰减法计算SOH(含温度与倍率修正)
    
    参数:
        measured_capacity: 实测容量 (Ah)
        nominal_capacity: 标称容量 (Ah)
        temperature: 测试温度 (℃)
        discharge_rate: 放电倍率 (C)
    
    返回:
        soh: 修正后的SOH值 (%)
    """
    # 1. 温度修正系数
    if 23 <= temperature <= 27:
        k_T = 1.00
    elif 10 <= temperature < 23:
        k_T = 1.00 + (23 - temperature) * 0.006
    elif 0 <= temperature < 10:
        k_T = 1.08 + (10 - temperature) * 0.012
    elif 27 < temperature <= 35:
        k_T = 1.00 - (temperature - 27) * 0.003
    elif 35 < temperature <= 45:
        k_T = 0.98 - (temperature - 35) * 0.003
    else:
        raise ValueError("温度超出修正范围 (0℃~45℃)")
    
    # 2. 倍率修正系数
    if discharge_rate <= 0.5:
        k_C = 1.00
    elif 0.5 < discharge_rate <= 1.0:
        k_C = 1.00 + (discharge_rate - 0.5) * 0.04
    elif 1.0 < discharge_rate <= 2.0:
        k_C = 1.02 + (discharge_rate - 1.0) * 0.07
    else:
        k_C = 1.09 + (discharge_rate - 2.0) * 0.08
    
    # 3. 计算SOH
    soh = (measured_capacity * k_T * k_C / nominal_capacity) * 100
    
    return round(soh, 2)


# 示例
soh = calculate_soh_capacity(
    measured_capacity=82.5,
    nominal_capacity=100.0,
    temperature=5,
    discharge_rate=1.5
)
print(f"修正后SOH: {soh}%")  # 输出: 修正后SOH: 93.12%

我的经验:代码里的修正系数是我根据某款磷酸铁锂电池标定的。不同化学体系的电池,系数差异很大。比如三元锂电池的低温修正系数就比铁锂小一些。建议你拿到电池后,先做一组温度-容量和倍率-容量的标定实验。

4.5 避坑指南

我曾经踩过的三个坑:

  1. 温度传感器位置不对——测的是环境温度,不是电池本体温度。电芯内部温度和外壳能差3~5℃。我建议把传感器贴在电芯大面上,而不是极柱附近。
  2. 修正系数线性外推——温度低于0℃时,容量衰减不是线性的。我曾经用线性公式外推到-10℃,结果SOH算出来超过100%,闹了笑话。
  3. 忽略充电倍率——很多人只修正放电倍率,但充电倍率同样影响容量测量。特别是快充场景,充电容量和放电容量的差异可能达到5%以上。

4.6 什么时候用容量衰减法?

这个方法最适合的场景:

  • 实验室或产线测试——条件可控,温度和倍率都能精确控制
  • 定期维护检测——比如每3个月做一次完整的容量标定
  • 电池梯次利用筛选——需要精确知道每块电池的剩余容量

不太适合的场景:

  • 实时在线估算——因为需要完整的充放电过程,耗时太长
  • 工况复杂的使用场景——温度和电流频繁变化,修正系数很难实时匹配

好了,容量衰减法就讲到这里。说白了,这个方法的核心就是「测准容量,做好修正」。下一章咱们聊聊另一种常用的SOH估算方法——内阻法。到时候你会发现,两种方法结合起来用,效果会更好。