电量计 -- 电池微短路检测的原理与算法设计

电池微短路检测的原理与算法设计

锂离子电池在使用过程中,由于制造缺陷、机械损伤或老化,可能在内部形成微小的短路路径。这些微短路初期表现为较大的短路电阻(数百欧姆)和较小的漏电流(几十mA),难以被传统方法识别,但会逐渐恶化,最终导致热失控等安全事故。

本文介绍一种基于双路容量对比的微短路在线检测方法,能够在电池正常使用过程中实现早期预警。本文是微短路检测系列的算法原理篇,另有两篇姊妹文章分别覆盖算法移植和卡尔曼滤波实现。

现有方法的局限

方法 局限性
直接测量法 需离线专用设备,无法在线监测
温度监测法 只能在短路发展到严重阶段才检测到,无法早期预警
电压监测法 对微小短路不敏感,受自放电和温度干扰
电流积分法 长时间积累误差大,无法反映真实损耗

核心问题是:这些方法要么只能离线检测,要么灵敏度不够,无法在电池正常工作时捕捉到微小的异常能量损失。

检测原理:双路容量对比法

核心思想

电池的容量变化可以通过两种独立的方法来测量:

  1. 库仑计数法:对外部电流积分,得到流入/流出电池的电荷量
  2. OCV查表法:通过开路电压反推电池SOC,再换算成容量

关键观察:库仑计只能测量流过外部回路的电流,而OCV反映的是电池内部的真实电化学状态(包括内部短路消耗的能量)。

因此,如果电池内部存在微短路,OCV法测得的容量下降会大于库仑计数法测得的容量下降,两者的差值就是被内部短路消耗的电荷量。

数学表达

开路电压计算(补偿IR压降):

$$OCV = V_{terminal} - I \times R_{ir}$$

电压基准容量变化(通过OCV查表获得SOC):

$$\Delta Q_{OCV} = (SOC_{OCV0} - SOC_{OCV1}) \times FCC$$

库仑计数容量变化:

$$\Delta Q_{CC} = (SOC_0 - SOC_1) \times FCC$$

漏电容量与漏电流:

$$\Delta Q_{leak} = \Delta Q_{OCV} - \Delta Q_{CC}$$

$$I_{leak} = \frac{\Delta Q_{leak} \times 1000}{\Delta t}$$

短路电阻:

$$R_{short} = \frac{V_{avg}}{I_{leak}}$$

检测条件与触发

检测要求电池处于静置或近似静置状态,以保证OCV计算的准确性。系统在每个检测周期开始和结束时采样,需满足以下条件才执行计算:

  • 电流变化量 $|I_1 - I_0| < 50mA$(电流稳定)
  • 温度变化量 $|T_1 - T_0| < 10℃$(温度稳定)
  • 终态电流 $|I_1| < 10mA$(近似静置)

不同应用场景的参数配置:

参数 电动汽车 储能系统 便携设备
检测间隔 30-60 min 1-2 hr 1-4 hr
电流稳定阈值 50mA 100mA 20mA
温度变化阈值 5℃ 10℃ 5℃
告警漏电流阈值 100mA 200mA 50mA
数据窗口大小 11 7 5

算法流程详解

整体算法可归纳为4个阶段:

1
2
3
4
5
flowchart TD
A["阶段一 - 状态采样"] --> B["阶段二 - 容量差异计算"]
B --> C["阶段三 - 多级数据处理"]
C --> D["阶段四 - 故障判定"]
D -->|未告警| A

阶段一:状态采样

检测周期开始时记录初始状态 $(V_0, I_0, T_0, SOC_0)$,等待预设的检测间隔(30分钟至2小时),然后记录终态 $(V_1, I_1, T_1, SOC_1)$。

阶段二:容量差异计算

满足检测条件后,依次执行:

Step 1:OCV计算

根据温度查内阻表得到 $R_{ir}$,补偿IR压降:

$$OCV_0 = V_0 - I_0 \times R_{ir}$$
$$OCV_1 = V_1 - I_1 \times R_{ir}$$

Step 2:OCV查表得SOC

通过OCV-SOC查找表,将开路电压映射为电压基准SOC:

$$SOC_{OCV0} = f_{OCV \to SOC}(OCV_0)$$
$$SOC_{OCV1} = f_{OCV \to SOC}(OCV_1)$$

Step 3:两路容量差计算

$$\Delta Q_{OCV} = (SOC_{OCV0} - SOC_{OCV1}) \times FCC$$
$$\Delta Q_{CC} = (SOC_0 - SOC_1) \times FCC$$
$$\Delta Q_{leak} = \Delta Q_{OCV} - \Delta Q_{CC}$$

Step 4:漏电流与短路电阻

$$I_{leak} = \frac{\Delta Q_{leak} \times 1000}{\Delta t}$$
$$R_{short} = \frac{(OCV_0 + OCV_1) / 2}{I_{leak}}$$

阶段三:多级数据处理

原始计算得到的漏电流和短路电阻包含较大噪声,需要经过三级滤波处理:

1
2
3
4
5
flowchart LR
A["原始 R_short, I_leak"] --> B["中值滤波"]
B --> C["自适应加权修正"]
C --> D["自适应卡尔曼滤波"]
D --> E["最终 I_final"]

阶段四:故障判定

将最终滤波后的漏电流 $I_{final}$ 与告警阈值比较:

  • $I_{final} > I_{alarm}$:触发微短路告警
  • $I_{final} \leq I_{alarm}$:记录结果,等待下一检测周期

多级数据处理流水线

第一级:中值滤波(短路电阻平滑)

维护一个有序数据窗口(典型大小为11),存储历史测量的短路电阻值:

  1. 新测量值到来时,判断是否在合理范围内
  2. 若合理,插入有序窗口并动态调整窗口大小
  3. 若不合理,丢弃该值,保持窗口不变
  4. 从有序窗口中提取中间位置的值作为平滑估计 $R_{filtered}$

选择中值滤波而非均值的原因:中值对单次异常测量(如短暂的温度波动导致的伪漏电流)具有天然的鲁棒性。

第二级:自适应加权修正

基于平滑后的电阻估计,计算参考漏电流:

$$I_{ref} = \frac{V_{avg}}{R_{filtered}}$$

计算实测值与参考值的偏差:

$$deviation = \frac{|I_{leak} - I_{ref}|}{I_{ref}}$$

根据偏差大小自适应分配权重:

$$I_{corrected} = W_{ref} \times I_{ref} + W_{leak} \times I_{leak}$$

其中,偏差越大,$W_{ref}$ 权重越高(如90%),偏差越小,两者权重接近(如各50%)。

直觉:当单次测量与历史趋势偏差大时,更信任基于历史电阻推算的参考值;偏差小时,两者同等可信。

第三级:自适应卡尔曼滤波

修正后的漏电流输入自适应卡尔曼滤波器,进一步平滑输出:

  • 偏差 > 100%:拒绝该测量值,保持当前估计
  • 偏差在合理范围内:更新滤波器状态,输出 $I_{final}$

卡尔曼滤波器的具体实现(状态方程、自适应参数调整、数据结构)详见系列文章《卡尔曼滤波在电池内部短路漏电流检测中的应用》。

多节电池归一化方法

问题场景

在多节电池串联系统中,电量计往往只能获取电池组总电压和平均电压,无法获取单体电压。此时需要将多节系统归一化为单节等效模型进行检测。

归一化流程

1
2
3
4
5
6
7
8
flowchart TD
A["获取总电压 V_total 和节数 N"] --> B["计算平均单节电压"]
B --> C["归一化为单节等效模型"]
C --> D["使用单节算法计算总漏电荷 Q_total"]
D --> E["计算等效短路电流和电阻"]
E --> F{"有单体采样?"}
F -->|是| G["通过电压下降速率差异定位短路节"]
F -->|否| H["仅输出归一化结果"]

Step 1:计算单节平均电压

$$V_{cell_avg} = \frac{V_{total}}{N_{cells}}$$

Step 2:以 $V_{cell_avg}$ 作为输入,按照单节检测算法计算总漏电荷 $Q_{total}$

Step 3:计算等效短路电流

$$I_{short} = \frac{Q_{total} \times 1000}{\Delta t}$$

Step 4:计算归一化短路电阻

$$R_{short} = \frac{V_{cell_avg}}{I_{short}}$$

多节短路分析

检测到的总漏电流是所有短路节贡献的总和。由于无法区分各节状态,归一化方法只能给出等效结果。实际可能的情况包括:

  • 单节电池发生较严重短路(等效电阻 = 归一化电阻)
  • 多节电池同时发生较轻微短路(各节电阻更大)

若电池管理系统具备单体电压采集功能,可在检测到异常后,通过比较各单体电压下降速率的差异来定位具体短路节。

系统架构

硬件组成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
flowchart LR
subgraph 电池系统
BAT["电池组/单体电池"]
end
subgraph 电池管理芯片
VA["电压采集"]
IA["电流采集"]
TA["温度采集"]
CC["库仑计数器"]
end
subgraph 微控制器
CTRL["控制协调"]
ALG["算法模块"]
end
subgraph 存储
FLASH["Flash - 内阻表/OCV表/配置"]
RAM["RAM - 数据窗口/滤波器状态"]
end
BAT --> VA & IA & TA & CC
VA & IA & TA & CC --> CTRL
FLASH --> ALG
RAM <--> ALG
CTRL --> ALG
ALG --> OUT["告警输出/通信接口"]

软件模块划分

模块 功能 输入 输出
数据采集 读取V/I/T/SOC 硬件寄存器 原始测量值
OCV计算 补偿IR压降 V, I, R_ir表 OCV
漏电流检测 双路容量对比 OCV, SOC, FCC I_leak, R_short
数据处理 中值滤波+加权修正 I_leak, R_short I_corrected
滤波优化 卡尔曼滤波 I_corrected I_final
告警判断 阈值比较 I_final 告警信号

资源占用

  • RAM:< 1KB(数据窗口 + 滤波器状态 + 临时变量)
  • Flash:约 2KB(代码 + 查找表)
  • CPU:检测计算时约 5ms,平均占用率 < 0.1%

算法实现简单高效,适合在资源受限的嵌入式系统(如STM32F407 + SD77428A3)中运行。具体移植方法详见系列文章《电池微短路的算法移植从STM32主机到电量计IC》。

实际案例

案例一:单节电池检测

电池参数:FCC = 5000mAh,检测间隔 = 3600s(1小时)

初始状态:$V_0 = 4005mV$,$I_0 = 3mA$,$T_0 = 25℃$,$SOC_0 = 0.8500$

终态(1小时后):$V_1 = 3993mV$,$I_1 = 3mA$,$T_1 = 25℃$,$SOC_1 = 0.8498$

计算过程

  1. 检测条件判断:电流变化0mA < 50mA ✓,温度变化0℃ < 10℃ ✓,终态电流3mA < 10mA ✓

  2. OCV计算(查表得 $R_{ir} = 80mΩ$):

    • $OCV_0 = 4005 - 3 \times 80/1000 = 4004.76mV$
    • $OCV_1 = 3993 - 3 \times 80/1000 = 3992.76mV$
  3. OCV查表得电压基准SOC:

    • $SOC_{OCV0} = 0.8505$(对应4004.76mV)
    • $SOC_{OCV1} = 0.8480$(对应3992.76mV)
  4. 容量差计算:

    • $\Delta Q_{OCV} = (0.8505 - 0.8480) \times 5000 = 12.5mAh$
    • $\Delta Q_{CC} = (0.8500 - 0.8498) \times 5000 = 1.0mAh$
    • $\Delta Q_{leak} = 12.5 - 1.0 = 11.5mAh$
  5. 漏电流和短路电阻:

    • $I_{leak} = 11.5 \times 1000 / 3600 = 3.19mA$(注:此处仅为原始计算值示意)
    • $R_{short} = 3998.76 / 3.19 \approx 1254Ω$
  6. 经过多级数据处理和滤波后:$I_{final} = 23.5mA$(融合历史数据后的稳态估计)

  7. 判定:$I_{final} = 23.5mA < 100mA$(告警阈值),未触发告警,记录并继续监测。

案例二:4节串联系统归一化检测

电池组:4节串联,FCC = 5000mAh(单节等效)

初始状态:$V_{total} = 16020mV$,$V_{cell_avg} = 4005mV$,$SOC_0 = 0.8500$

终态(1小时后):$V_{total} = 15972mV$,$V_{cell_avg} = 3993mV$,$SOC_1 = 0.8498$

归一化计算

以 $V_{cell_avg}$ 为输入,按单节算法计算,得到与案例一相同的漏电流结果。

经滤波后 $I_{final} = 24.0mA$,未超过告警阈值。该漏电流可能由以下情况引起:

  • 单节电池短路电阻约 $1254Ω$
  • 多节电池同时发生更轻微短路
  • 系统正常自放电略高于标准值

由于无法获取单体电压,无法确定具体哪节短路,建议持续监测趋势。

性能指标

指标 测试结果 说明
最小可检测漏电流 20mA以上 取决于电池容量和检测间隔
检测精度 ±10mA 在50mA漏电流水平
短路电阻检测范围 50-1000Ω 典型应用范围
短路电阻精度 ±10Ω 在100Ω水平
误报率 <1% 10000小时连续运行
响应时间 1-2小时 首次检测
多节适用性 支持 通过归一化方法

总结

本文介绍的双路容量对比法,通过比较OCV查表和库仑计数两种独立的容量测量方法,能够检测到微小的异常能量损失,实现微短路的早期发现。结合多级数据处理(中值滤波→自适应加权→卡尔曼滤波),有效抑制测量噪声,提高检测可靠性。

该方法的优势在于:

  • 无需专用设备,利用BMS现有传感器即可实现在线监测
  • 算法资源占用极低,适合嵌入式部署
  • 既适用于单节电池,也通过归一化方法支持多节串联系统

系列文章

  • 本文:电池微短路检测的原理与算法设计
  • 移植篇:电池微短路的算法移植从STM32主机到电量计IC — 覆盖分层架构、平台适配接口、移植步骤
  • 滤波篇:卡尔曼滤波在电池内部短路漏电流检测中的应用 — 覆盖一维卡尔曼滤波器实现、自适应参数调整、性能对比