【原创】大牛经验之谈:关于使用LTC6811断线自检的一些心得

分享到:

 前段时间在写LTC6811驱动的时候,使用到除了基本采样,还有IIC主控制器接口、被动均衡。当然为了确保系统正常工作,必须要有一定的自检功能,楼主使用了“命令组”自检、被动均衡自检和断线自检,其中在使用断线自检遇到一个问题,现在将这个问题和大家分享下,共同学习。

   说起来惭愧,这个问题最初是还是客户先发现的,当时做的是一款用在两厢纯电动(品牌这里就不说了)上面的一体机,总压40串,使用了4LTC6811-2。前期在家里做断线测试都是“静态”的,没考虑到“动态”的情况,而且当时的关注点都在检测的速度上,客户要求断线告警上报时间不能超过6S。因为断线自检比较耗时,所以,自检频率越高,Cell采样“盲区”也就越大,最后定下来断线自检周期为2.5S2次滤波,总时间5S
 
   使用过LTC68XX断线自检功能的都知道断线自检的原理,就是分别进行上/下拉采样,然后把这两次采样值一一对应做差,如果压差ΔV>400mv则认为断线。
 拷贝一段手册上面的原话:“ADOW 命令用于检查 LTC6804 中的 ADC 与外部电池之间的任何导线开路。该命令和 ADCV命令一样在 C 引脚输入端上执行 ADC 转换,仅有的区别是两个内部电流源在其被测量的过程中吸收或供应电流至两个C 引脚。ADOW 命令的上拉 (PUP) 位负责确定电流源是吸收还是供应100μA 电流。可以採用下面的简单算法来检测 13 C 引脚中任何一个上的导线开路 (见图 9)
1) PUP = 1 的情况下运行 12 节电池命令 ADOW 至少两次。在结束时读取电池 1 12的电压一次并将其存储在阵列 CELLPU(n) 中。
2) PUP = 0 的情况下运行 12 节电池命令 ADOW 至少两次。在结束时读取电池 1 12 的电压一次并将其存储在阵列 CELLPD(n) 中。
3) 获取上述步骤中针对电池 2 12 的上拉与下拉测量结果之差:CELLΔ(n) = CELLPU(n) CELLPD(n)
4) 对于从 1 11 的所有 n 值:如果 CELLΔ(n+1) < 4 0 0 m V,则 C ( n ) 开路。如果C E L L P U( 1 ) = 0.0000,则 C(0) 开路。若 CELLPD(12) = 0.0000,则C(12) 开路。

 

 上述算法採用标准模式转换来检测导线开路,开路导线的LTC6804 端可存在多达 10nF 的电容。然而,如果在开路C 引脚上存在更多的外部电容,则导线开路转换在步骤1 2 中的运行时间长度必须增加,从而为 100μA 电流源产生一个足够大的差异 (以便算法检测开路连接) 提供时间。这可通过在步骤 1 2 中运行两个以上的 ADOW 命令 (或者採用滤波模式转换代替标准模式转换) 来实现。”
 

 

    说这么多,断线检测根本原理就是利用两次采样的ΔV,对于静止的CELL这个没问题,但是在实际的实车上,一脚油门下去,CELL电压肯定会波动,这就可能会误判。为了验证这个问题,搭了个平台测试下,动态模拟实际情况,在确保各个采样线接触良好的情况下,测试半天,的确出现几次断线报警记录。
  
     分析如下:临界状态下,第一次采样(PU采样)电压是相对静止的,第二次采样(PD采样)刚好电压下降,而且压差超过手册推荐ΔV(400mv),这就会误判断路,实际中这是不允许的。可能有人会说我可以增大ΔV阈值,但实际的Cell状态和很多因素有关,包括电芯类型、环境温度、SOC状态、老化程度,单一的仅通过改变ΔV会出现两种情况:ΔV大了可能检测不到断线,ΔV小了又容易误判。

 

    为了避免误判问题,我们可以加入电流判断(需应用支持)的条件,具体可以这样做:第一次采样(PU采样)的时候,读取干线电流值并记录为Cur1,此后每次采样(PU/PD采样)都读取一次电流CuriCur1比较,一旦MATH_ABS(Curi, Cur1)大于设定阈值,则放弃本次自检。这里需要注意的是两次采样间隔不能太长,因为Cell电压变化是滞后电流的,也就是说进行检测的前一刻如果电流变化很大,后一时刻电流虽然稳定了,但是电压可能还没稳定,最好就是检测到电流稳定后一段时间在进行开路自检。

 

 

     最后改完代码,再次测试,断路误判问题解决。