深入了解电池管理系统的开路检测

2025-01-16

摘要

开路检测功能对于安全可靠地运行电池管理系统(BMS)起着至关重要的作用。鉴于其重要性,我们建议对BMS感兴趣或会参与BMS设计的人员花时间了解这项功能。本文以ADI公司的电芯监控器为例,详细讨论了BMS电路在与外部电芯连接后,如何利用算法准确识别几乎所有开路情况。文中关于开路检测算法的讨论,目的是让读者更深入地了解这个BMS功能。本文提供的开路检测伪代码旨在为BMS设计人员提供设计参考。

简介

在电池管理系统(BMS)中,各电芯和电芯监控电路之间存在大量的布线连接。这些布线连接是确保电芯监控器可靠监控电芯参数(包括电压、电流、温度等)的关键,同时还可以用作电芯被动平衡放电的电流路径或继电器控制信号的传输路径。BMS需要管理的电芯数量通常非常庞大,因此布线连接的数量也相当可观。这些连接不仅数量繁多,部分线路甚至相当冗长,因为它们往往需要跨越不同的印刷电路板(PCB) ,或是连接PCB与由众多独立电芯组成的电池包。此外还需要配合使用许多连接元件。BMS设计过程中,应尽量避免出现开路的情况。如果某个电芯发生开路,就意味着对其状态的有效监控将大打折扣或完全失效,而失去监控的电芯将给整个BMS带来潜在的安全隐患,甚至可能在未知时刻对系统造成致命威胁。当出现开路情况时,首要任务是快速、准确、高效地确定开路位置并及时通报。有效、准确的开路检测算法将大大提高BMS的可靠性,并有利于BMS和电池包的故障排除。通过算法精准地定位故障,可以有效减少人工排除故障过程中许多不必要的重复检查、拆 卸和组装工作。

BMS的C引脚中的开路检测

开路检测对BMS至关重要,因此ADI公司的大部分电芯监控器都配备了开路检测命令及相应的实现方法。不同型号ADI电芯监控器使用的开路检测方法可能有所不同,例如 ADBMS6830B使用的方法就与LTC6813不同。本文将围绕后者展开讨论。LTC6813采用的开路检测方法也是ADI各型号电芯监控器常用的方法,具有通用 性,其核心是基于ADOW(开路检查)命令。

ADOW命令主要用于检查LTC6813-1的ADC与外部电芯之间是否存在开路。此命令与ADCV(测量电芯电压)命令一样,对C引脚输入执行模数转换,但在测量两个C引脚时,两个内部电流源会为其提供电流或吸收电流。ADOW命令的上拉(PUP)位决定电流源是提供还是吸收100μA电流。可以使用以下简单算法来检查19个C引 脚是否有开路:

  • 设置PUP = 1,运行18电芯命令ADOW至少两次。结束时读取电芯1至18的电芯电压一次,并将其存储在数组CELLPU(n)中。
  • 设置PUP = 0,运行18电芯命令ADOW至少两次。结束时读取电芯1至18的电芯电压一次,并将其存储在数组CELLPD(n)中。
  • 对于电芯2至18,求上述步骤中进行的上拉和下拉测量结果之差:CELLΔ(n) = CELLPU(n) – CELLPD(n)。
  • 对于从1到17的所有n值:如果CELLΔ(n+1) < -400mV,则C(n)开路。如果CELLPU(1) = 0.0000,则C0开路。如果CELLPD(18) = 0.0000,则C18开路。

数据手册清晰易懂地解释了LTC6813中使用的ADOW开路检测命令及其算法实现。图1以图形方式展示了该算法,帮助读者更直观地了解算法的精妙之处。

Figure 1. Algorithm diagram for open wire detection in the LTC6813.
图1. LTC6813中的开路检测算法示意图

除了图1中基于ADOW命令的开路检测图形展示之外,我们还使 用 LTC6813 评估板和18650电池进行了实际的开路检测实验和波形测试。这让我们能够更清楚地了解开路检测期间电路的行为。实验中每个电芯的电压约为4V,示波器的4个探头分别连接到LTC6813的C1/C2/C3/C4引脚。实验中分别测量了CELL2/CELL3/CELL4的电压波形。结合数据手册中提供的ADCV命令执行时序规范(如图2和表1所示),我们能够更深入地分析本次实验的波形检测结果。ADOW命令执行的时序规范可以参考ADCV命令的时序规范,因为ADOW命令与ADCV命令一样,对C引脚输入执行模数转换。不同的是,在测量两个C引脚时,ADOW命令会通过两个内部电流源向其注入或吸收电流。开路检测实验的测试结果如图3和图4所示。图3所示的电路测试没有出现开路,主要作为参考实验。在图4所示的电路测试中,C2引脚位置发生了开路,图中给出了ADOW命令执行过程中,该开路情况下CELL2/CELL3/CELL4的波形测试结果。从测试结果来看,观察到的电路行为变化与图1所示一致。

Figure 2. Timing for ADCV command measuring all 18 cells.
图2. 测量所有18个电芯的ADCV命令时序。

 

表1. 以不同模式测量所有18个电芯的ADCV命令的转换和 同步时间

模式 转换时间(μs) 同步时间 (μs)
t0 t1M t2M t5M t6M t6C tSKEW2
27 kHz 0 58 104 244 291 1,121 233
14 kHz 0 87 163 390 566 1,296 379
7 kHz 0 145 279 681 815 2,343 670
3 kHz 0 261 512 1,263 1,413 3,041 1,252
2 kHz 0 496 977 2,426 2,909 4,437 2,415
1 kHz 0 960 1,908 4,753 5,702 7,230 4,742
422 Hz 0 1,890 3,777 9,408 11,287 12,816 9,397
26 Hz 0 29,818 59,624 149,044 178,851 201,325 149,033

 

Figure 3. The experimental results of open wire detection and waveform testing (Experiment 1).
图3. 开路检测及波形测试的实验结果(实验1)。
Figure 4. The experimental results of open wire detection and waveform testing (Experiment 2).
图4. 开路检测及波形测试的实验结果(实验2)。

BMS中出现多处开路的问题

设想BMS面临一种严重情况,即有多条导线开路,例如电芯监控电路中多个C引脚开路。虽然这种情况不太可能发生,但概率低并不意味着不可能。在这种情况下,数据手册所述的算法对于检测单个C引脚开路更为有效。当多个C引脚同时出现开路 时,机械地应用数据手册中的算法可能无法产生准确的结果。

例如,在图5所示的多条导线开路场景中,应用LTC6813数据手册所述的算法进行开路检测得到的结果是,只能检测到C6、C7、C8、C9引脚的开路,而无法检测到C2、C3、C4、C5引脚是否开路。这不是我们想要的结果。

Figure 5. Detection algorithm diagram for multiple open wires occurring in the BMS (Example 1).
图5. BMS中出现多处开路的检测算法示意图(例1)。

尽管如此,数据手册中提到的开路检测算法仍然非常有效,能够准确识别单个C引脚开路,并且还为检测多处开路提供了有价值的参考。当电芯监控器的C引脚出现开路情况时,无论是单个开路还是多处开路,机械地应用数据手册中概述的算法可 能无法准确检测到所有开路情况及其各自的位置,尤其是当多处开路同时发生时。然而,该算法必定会提醒BMS存在开路故障。如果BMS电路板出现开路错误,电路用户需要手动检查并更精准地修复电路。通常,在进一步的手动仔细检查中,可以发现算法未检测到的开路错误。

检测C引脚上多处开路的算法

有没有更好的算法可以快速、准确、高效地识别出电芯监控器内的所有开路情况,即使多个C引脚上同时出现多处开路也能检测到,而不必仅仅依靠经验丰富的工程师手动检查来发现电路中的所有开路情况?答案是肯定的。

深入研究ADOW开路检测算法和数据手册中获得的数据,我们发现,只需增加一个计算步骤,就能准确识别出电路中C引脚的几乎所有开路情况。无论是单处开路还是多处开路,也不管开路的位置在哪,几乎全部都能识别出来。之所以说“几乎全 部”,是因为在实际测试中,当C0引脚或C18引脚出现开路情况时,想要准确检测出电路中的所有开路故障还是很困难的。与C0引脚和C18引脚相关的开路情况,将在本文的后面部分讨论。现在,我们重点介绍如何检测引脚C1至C17出现开路时的所有开 路情况。

所谓“只需增加一个计算步骤”是指,只需计算CELLΔ[n]和CELLΔ[n+1]的差值,如此就能得到一个高效、准确的开路检测算法。下面介绍该算法的实现和步骤。

第1步:首先,按照数据手册所述的方法,向电芯监控器发送ADOW命令以启动开路检测。然后,在测量两个C引脚的同时,两个内部电流源向其注入或吸收电流。每个电芯的电压数据通过芯片内的ADC获得,并存储在三个数组中,分别是CELLPU、CELLPD和CELLΔ数组。

第2步: 开始从下往上观察从CELL 1到CELL 18的数据。搜索CELLΔ数据中的某些特征值,判断是否发生开路情况。通常,对于一系列相邻连续开路的起始位置,如果该起始位置出现在Cn引脚(n = 1至17)处,则可以在相应的CELLΔ[n]数据中观察到大于正阈值+400 mV的电压值。这个超过阈值的电压值标志着Cn引脚出现开路,表示它可能是后续一系列相邻连续开路情况的起点。检测到此标志后,继续执行第3步。

第3步:从第2步中确定的Cn引脚位置开始,启动一个循环来计 算CELLΔ[n]和CELLΔ[n+1]的差值,同时递增n的值,n的最大值不应超过17。这就是前面提到的新增计算步骤。在开路检测过程中,差值结果呈现出一定的特点:从开路的起始位置到后续相邻连续的开路位置,如果连续开路情况没有中断,则CELLΔ[n]与CELLΔ[n+1]的差值永远是一个很小的负值1、0或是一个正值。与第2步中设置的正阈值一样,此步骤使用-400 mV的负阈值来判断开路情况。在循环计算CELLΔ[n]和CELLΔ[n+1]差值的过程中,如果差值结果大于-400 mV,则表明Cn引脚存在开路情况。

1 阅读本文时,如果结合对图5和图6的观察来理解该算法,读者会注意到在这两幅图中,在相邻和连续的开路位置,CELLΔ[n]和CELLΔ[n+1]的差值始终为0或正值,而不会出现较小的负值。这看起来可能很奇怪。究其原因是,为了便于计算,图5和图6中的多个电路模型已被简化,这会得到更理想的数据。不过,这种简化对于电路行为的近似描述是可以接受的。在实际的电路开路测试中,此差值确实可能是一个很小的负数、0或是一个正数。

第4步:继续第3步中描述的循环计算。当开路情况停止时,CELLΔ[n]和CELLΔ[n+1]的差值不再大于-400 mV,而是会变成一个非常大的负值。当检测到结果小于-400mV时,表示一系列相邻连续开路终止于Cn引脚位置。此时,跳过之前检测到的开路位置,重复第2步至第4步的计算,直至完成所有18个电芯通道和C引脚(不包括C0引脚和C18引脚)的所有开路检测。

图5和图6以多个C引脚同时出现开路的情况为例,对上述算法进行了具体化展示,以帮助读者直观地掌握检测逻辑。

Figure 6. Detection algorithm diagram for multiple open wires occurring in the BMS (Example 2).
图6. BMS中出现多处开路的检测算法示意图(例2)。

同样,我们使用LTC6813评估板(DC2350B)和18650电池,开展了检测C引脚上多处开路的实际实验和波形测试。这让我们能够更清楚地了解LTC6813电路在多处开路检测期间的行为。测试结果如图7和图8所示。在图7所示的电路测试中,C2引脚和C3引脚位置同时出现开路;而在图8所示的电路测试中,C2引脚、C3引脚和C4引脚位置同时出现开路。另外,图7和图8还提供了在ADOW命令执行期间,相应开路情况下CELL2/CELL3/CELL4的波形测试结果。从测试结果来看,观察到的电路行为变化与图5和图6所示 一致。

Figure 7. The experimental results of open wire detection and waveform testing (Experiment 3).
图7. 开路检测及波形测试的实验结果(实验3)。
Figure 8. The experimental results of open wire detection and waveform testing (Experiment 4).
图8. 开路检测及波形测试的实验结果(实验4)。

该算法不仅能高效检测多个C引脚同时出现开路故障的情况,而且同样适用于整个电芯监控器中仅出现单个开路的情况。读者可以独立应用上述算法,仅有一个C引脚开路的情况下(C0引脚和C18引脚除外)进行开路检测。读者会发现,仍然可以得到正确的开路检测结果。上述算法不仅继承了数据手册所述算法的优点,而且克服了数据手册算法应用于多个C引脚同时出现开路情况的局限性,使得多处开路故障的检测更加准确、高效。

C0引脚或C18引脚出现开路的情况

上述算法用于检测LTC6813引脚C1至C17的开路情况。回到前面提到的算法,当C0引脚或C18引脚出现开路情况时,想要准确检测出电路中的所有开路故障还是非常困难的。接下来我们将探讨这两个引脚出现开路时的复杂性:

情况1:如图1所示,使用数据手册中提到的方法可以评估C0引脚或C18引脚的开路,前提是它们不与相邻的C引脚同时出现开路。具体来说,若C0引脚与C1引脚、C18引脚与C17引脚不是同时出现开路,则可作出如下判断:如果CELLPU[1] = 0,则C0开路。如果CELLPD[18] = 0,则C18开路。

情况2:如图9和图10所示,当C0引脚或C18引脚与其相邻的C引脚同时出现开路时,通常在这种情况下,仍可使用以下条件来识别C18引脚的开路情况:若CELLPD[18] = 0,则C18开路。但是,当C18引脚与多个相邻C引脚同时出现开路时,建议将C18引脚的开路检测规则设置为CELLPD[18] < +400 mV。与此同时,仍然可以使用前面提到的算法来识别与C18引脚相邻的开路。

对于C0引脚,可以使用以下条件来识别其开路:若CELLPU[1] = 0,则C0开路。然而,与C0引脚相邻的开路无法用前面提到的算法来识别,因为它们不满足触发条件。对于算法无法识别的开路,仍然可以通过数据手册中提到的开路检测规则来识别:若CELLΔ[n+1] < –400 mV,则C(n)开路。但需要注意的是,为了精准检测情况2下C1引脚的开路情况,需要在前面提到的算法中添加一条额外的开路检测规则:若C0开路且CELLPD[1] < 400 mV,则C1开路。

情况3: 如图11所示,在PCB内将C0短接至V-并将C18短接至V+,这 种方法的优点在于可以免去V-引脚和V+引脚与电池包之间的两个布线连接。但缺点是,如果C0引脚和C18引脚之间的导线连接阻抗不够低,则可能会给CELL1和CELL18的电压检测引入额外的误差。因为当C0和V-、C18和V+共用同一连接时,V-引脚和V+引脚在芯片运行期间会承载电源电流,此电源电流相比于采样电流 通常较大。例如,当电芯监控器的内核处于MEASURE状态,isoSPI处于READY状态(IB = 1 mA)时,根据LTC6813数据手册中表2和表3所列出的公式,电流消耗可能达到约21 mA。如果布线阻抗不够低,C0和C18布线连接处可能会出现明显的电压降,从而影响CELL1和CELL18的电压检测精度。

Figure 9. Detection algorithm diagram when the C18 pin experiences an open wire (based on Scenario 2).
图9. C18引脚开路检测算法示意图(基于情况2)。
Figure 10. Detection algorithm diagram when the C0 pin experiences an open wire (based on Scenario 2).
图10. C0引脚开路检测算法示意图(基于情况2)
Figure 11. Diagram when C0 and V-, C18 and V+ share the same wiring connection.
图11. C0与V-、C18与V+共用同一连接时的示意图。

 

表2. LTC6813内核电源电流

状态 IVP IREG (内核)
睡眠 VREG = 0 V 6.1 µA 0 µA
VREG = 5 V 3 µA 3.1 µA
待机 14 µA 35 µA
REFUP 550 µA 900 µA
测量 950 µA 15 mA

 

表3. LTC6813 isoSPI电源电流公式

IsoSPI状态 ISOMD连接 IREG (isoSPI)
IDLE N/A 0 mA
就绪 VREG 2.2 mA + 3 × IB
V- 1.5 mA + 3 × IB
激活 VREG 写入: 2.5 mA + (3 + 20 × 100 ns / tCLK ) × IB
读取:2.5 mA + (3 + 20 × (100 ns × 1.5) / tCLK ) × IB
V- 1.8 mA + (3 + 20 × 100 ns / tCLK) × IB

 

基于图11所示的连接方法,我们来观察图12。当C0引脚或C18引脚与其相邻的C引脚同时出现开路时,通常在这种情况下,仍可使用以下条件来识别C18引脚的开路情况:若CELLPD[18] = 0,则C18开路。但是,当C18引脚与多个相邻C引脚同时出现开路时,建议将C18引脚的开路检测规则设置为CELLPD[18] < +400 mV。与此同时,与C18引脚相邻的开路无法用数据手册中的算法或前面提到的算法来识别,因为它们不满足触发条件。在这种情况下,可以额外添加一条开路检测规则,作为前面提到的算法的一部分:如果C18开路,并且同时满足CELLPU[n] < +400 mV和CELLPD[n] < +400 mV两个条件,则Cn开路。然而,随着与C18引脚相邻且连续 的开路数量增多,这条检测规则也有可能失效,芯片无法正常执行ADOW命令。

至于图12中的C0引脚开路,它将导致芯片无法正常执行ADOW命令。在这种情况下,C0引脚开路无法通过ADOW命令识别。尽管如此,芯片仍然可以执行ADCV命令来完成电芯电压检测,并且可能发现CELL1的电压转换结果异常低,从而表明C0引脚可能存在开路情况。但是,该方法不被视为本文所述算法的一部分。

Figure 12. Detection algorithm diagram when the C0 pin or C18 pin experiences an open wire (based on Scenario 3).
图12. C0引脚或C18引脚开路检测算法示意图(基于情况3)。

这些情况说明了上述论断的理由。当C0引脚或C18引脚出现开路情况时,想要准确检测出电路中的所有开路故障还是非常困难的。

总之,将本文介绍的所有算法结合起来,我们可以准确识别出电路中C引脚的几乎所有开路情况,无论其位置和数量如何。然而,一旦要检测涉及C0引脚或C18引脚的开路故障,该组合算法可能无法保证100%检测到电路中的所有开路故障。在这种情况下,算法最好发出警示:在C0/C18中检测到开路故障,实际开路数量可能与算法得出的值不一致。

开路检测的伪代码和实验结果

本文介绍的所有算法均已集成并整合到LTC6813开路检测伪代码示例中,如图13所示,仅供参考。此外,这里还给出了开路检测的一些实验结果。图14至图17的结果是在对LTC6813评估板电路的实际开路检测实验获得的。实验所采用的开路检测算法是基于本文所介绍算法的组合;开路功能的驱动代码是基于所提供的伪代码编写。从实验结果可以看出,在设定的条件下,所有开路情况(即使存在多处开路)都可以被准确检测出来,包括数量和位置。也就是说,本文所述的开路检测算法既准确,又可靠。

结论

虽然本文主要讨论LTC6813的开路检测方法及算法,但该IC所采用的开路检测方法具有通用性,也是ADI各型号电芯监控器所采用的共同方法。因此,本文介绍的开路检测算法只需稍加修改,即可轻松移植到使用类似开路检测方法的其他ADI电芯监 控器上。

Figure 13-1. Pseudocode example for open wire detection in the LTC6813 devices.
图13-1. LTC6813器件中开路检测的伪代码示例。
Figure 13-2. Pseudocode example for open wire detection in the LTC6813 devices.
图13-2. LTC6813器件中开路检测的伪代码示例。
Figure 14. The open wire experiment and results (Experiment 1).
图14. 开路实验及结果(实验1)。
Figure 15. The open wire experiment and results (Experiment 2).
图15. 开路实验及结果(实验2)。
Figure 16. The open wire experiment and results (Experiment 3).
图16. 开路实验及结果(实验3)。
Figure 17. The open wire experiment and results (Experiment 4).
图17. 开路实验及结果(实验4)。

关于作者

Frank Zhang
Frank Zhang是ADI公司中国技术支持中心的应用工程师。他的专业领域是电池管理系统(BMS)、精密信号链和嵌入式软件开发。他于2022年获得福州大学电子工程硕士学位,同年加入ADI公司。

关联至此文章

产品

最新视频 21

Subtitle
了解更多