电池微短路检测的原理与算法设计
锂离子电池在使用过程中,由于制造缺陷、机械损伤或老化,可能在内部形成微小的短路路径。这些微短路初期表现为较大的短路电阻(数百欧姆)和较小的漏电流(几十mA),难以被传统方法识别,但会逐渐恶化,最终导致热失控等安全事故。
本文介绍一种基于双路容量对比的微短路在线检测方法,能够在电池正常使用过程中实现早期预警。本文是微短路检测系列的算法原理篇,另有两篇姊妹文章分别覆盖算法移植和卡尔曼滤波实现。
现有方法的局限
| 方法 | 局限性 |
|---|---|
| 直接测量法 | 需离线专用设备,无法在线监测 |
| 温度监测法 | 只能在短路发展到严重阶段才检测到,无法早期预警 |
| 电压监测法 | 对微小短路不敏感,受自放电和温度干扰 |
| 电流积分法 | 长时间积累误差大,无法反映真实损耗 |
核心问题是:这些方法要么只能离线检测,要么灵敏度不够,无法在电池正常工作时捕捉到微小的异常能量损失。
检测原理:双路容量对比法
核心思想
电池的容量变化可以通过两种独立的方法来测量:
- 库仑计数法:对外部电流积分,得到流入/流出电池的电荷量
- 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 | flowchart TD |
阶段一:状态采样
检测周期开始时记录初始状态 $(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 | flowchart LR |
阶段四:故障判定
将最终滤波后的漏电流 $I_{final}$ 与告警阈值比较:
- $I_{final} > I_{alarm}$:触发微短路告警
- $I_{final} \leq I_{alarm}$:记录结果,等待下一检测周期
多级数据处理流水线
第一级:中值滤波(短路电阻平滑)
维护一个有序数据窗口(典型大小为11),存储历史测量的短路电阻值:
- 新测量值到来时,判断是否在合理范围内
- 若合理,插入有序窗口并动态调整窗口大小
- 若不合理,丢弃该值,保持窗口不变
- 从有序窗口中提取中间位置的值作为平滑估计 $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 | flowchart TD |
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 | flowchart LR |
软件模块划分
| 模块 | 功能 | 输入 | 输出 |
|---|---|---|---|
| 数据采集 | 读取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$
计算过程:
检测条件判断:电流变化0mA < 50mA ✓,温度变化0℃ < 10℃ ✓,终态电流3mA < 10mA ✓
OCV计算(查表得 $R_{ir} = 80mΩ$):
- $OCV_0 = 4005 - 3 \times 80/1000 = 4004.76mV$
- $OCV_1 = 3993 - 3 \times 80/1000 = 3992.76mV$
OCV查表得电压基准SOC:
- $SOC_{OCV0} = 0.8505$(对应4004.76mV)
- $SOC_{OCV1} = 0.8480$(对应3992.76mV)
容量差计算:
- $\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$
漏电流和短路电阻:
- $I_{leak} = 11.5 \times 1000 / 3600 = 3.19mA$(注:此处仅为原始计算值示意)
- $R_{short} = 3998.76 / 3.19 \approx 1254Ω$
经过多级数据处理和滤波后:$I_{final} = 23.5mA$(融合历史数据后的稳态估计)
判定:$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 — 覆盖分层架构、平台适配接口、移植步骤
- 滤波篇:卡尔曼滤波在电池内部短路漏电流检测中的应用 — 覆盖一维卡尔曼滤波器实现、自适应参数调整、性能对比