(1中国人民解放军93147部队 四川 绵阳621000 2四川长虹电源有限责任公司 四川 绵阳621000)
摘要:锂电池组剩余容量可以体现当前锂电池组的放电能力,是一个关键的指标。目前容量存储和获取的方式大致包括两种,一方面为通过外部系统进行存储和读取,另一方面可以通过锂电池组内部的管理系统进行存储和读取。
基于I2C总线通讯的航空锂电池组容量存储系统,包括一个控制模块和至少一个存储模块;所述控制模块内包含DSP/MCU中央处理器电路、寻址控制电路、双向隔离电路、隔离电源电路;所述存储模块内包含存储器电路、寻址电路、双向隔离电路、隔离电源电路。
关键词:锂电池组I2C总线通讯锂电池组SOC策略 存储和读取
1 问题描述
1组80Ah锂离子蓄电池组(以下简称“锂电池组”),现象为:在通电检查中,控制设备显示该锂电池组初始容量为70%,2分钟~3分钟后容量修正至100%,且无故障信息。下电后,将该锂电池组装至另一系统中进行相同通电检查,初始容量也为70%。
2 故障定位
2.1 设计原理
2.1.1 容量存储电路设计
配套控制器和2组锂电池组的中设计有容量存储电路。控制器中的存储电路主要由支持SPI通讯的Flash存储器组成。2组锂电池组中的容量存储电路一致,由支持I2C通讯的EEPROM存储器和隔离转换电路组成。两种存储器中锂电池均存储有组的容量数据,包括锂电池组的FCC(出厂实际满容量)和实时容量。
图1相关电路框图
如图1所示,控制器可以通过I2C通讯将锂电池组FCC和实时容量存储至锂电池组中EEPROM存储器中。同时控制器也将通过SPI通讯把锂电池组FCC和实时容量存储至内部的Flash存储器中。
正常情况下,控制器获取的锂电池组FCC和实时容量以锂电池组内EEPROM存储器存储的数据为准。
2.1.2 软件容量存储策略
2.1.2.1 上电初始容量获取
控制器上电读取锂电池组容量数据流程图见图2。在软件上电进行初始容量获取中,优先选择各组锂电池组EEPROM存储器中的FCC值和实时容量值,当EEPROM存储器的FCC值和实时容量值获取失败或错误时,则使用控制器Flash存储器的FCC值和实时容量值。若控制器Flash存储器中的FCC值和实时容量值也获取失败或错误,则锂电池组FCC将使用默认值88Ah,实时容量也使用默认值56Ah,对应SOC(锂电池组的剩余电量)为70%。
图2控制器上电读取锂电池组容量数据流程图
2.1.2.2 实时容量存储
锂电池组实时容量在产品下电,且下电中断有效时,控制器才会通过I2C通讯和SPI通讯分别在各组锂电池组EEPROM存储器和控制器Flash存储器中进行存储。
同时,控制器在工作过程中,考虑到锂电池组应急供电的场景,此时检测到锂电池组总压≤22.5V或28V工作电源电压≤21.5V时,若锂电池组SOC发生变化,则控制器将对相应的锂电池组实时容量进行存储。
2.1.2.3 FCC存储地址
仅在工厂模式下通过专用设备才能进行FCC的改写。锂电池组的FCC分别存储在锂电池组的EEPROM存储器和控制器Flash存储器中。存储地址各为1个。
2.1.2.4 实时容量存储地址
锂电池组的实时容量分别存储在锂电池组的EEPROM存储器和控制器Flash存储器中。存储地址各为1个。
软件在进行锂电池组EEPROM存储器的实时容量存储时,有帧头、检验、容量取反值,以此来确保数据的准确性。
2.2 故障树分析
根据返厂检查结果及产品设计原理,针对控制设备显示锂电池组初始容量异常,建立故障树见图3。
图3显示锂电池组初始容量异常故障树
2.2.1 存储电路故障
a)针对锂电池组内EEPROM存储器,工厂在常温、高低温下对其进行读数据写数据测试,测试结果正常。可排除底事件X1:锂电池组内EEPROM存储器故障。
b)控制设备未显示“锂电池组外部存储故障”和“控制器外部存储故障”。综上,可排除底事件X2:控制器内Flash存储器故障、底事件X3:I2C通讯线路故障和底事件X4:SPI通讯线路故障。
2.2.2 软件存储器配置错误
工厂查询控制器监控软件最新代码,核查软件SPI通讯初始化模块,SPI通讯接收中断使能模块,I2C通讯初始化模块相关代码,同时使用厂内的产品进行测试,测试结果正常。故可排除底事件X5:SPI通讯初始化错误、底事件X6:SPI通讯接收中断未使能和底事件X7:I2C通讯初始化错误。
2.2.3 软件容量数据获取逻辑有误
a)根据图2,工厂核查软件相关代码,文实相符。同时,工厂使用软件测试工具来检查软件逻辑,软件逻辑合理,无异常。故可排除底事件X8:软件逻辑有误。
b)工厂读取返厂锂电池组内EEPROM存储器中的数据,其FCC(以下简称
“FCC1”)为100.291583Ah(有效值应在75Ah~100Ah之间),实时容量(以下简称“实时容量1”)为56.505957Ah。综上,可以看出,实时容量1为有效值(有效值应小于FCC1)而FCC1已超正常范围,为无效值,根据软件相关策略,控制器将使用内部Flash存储器中存储的FCC和实时容量(以下简称“FCC2”和“实时容量2”)来参与锂电池组SOC运算。因此,可以排除底事件X11:实时容量错误。针对FCC1错误问题,可以开展进一步分析。
c)锂电池组FCC仅在控制器进入工厂模式下才可以进行改写,控制器进入工厂模式的进入条件为:上电期间,检测地面模式硬件信号(控制器X2/h)为低。当控制器进入工厂模式后,只能与工厂专用设备进行通讯,并且需要接收到专用设备发送的改写FCC的指令才能对FCC进行改写。同时,控制器进入工厂模式后,不会与飞机通讯,控制设备会显示“RIU1与锂离子蓄电池控制器通讯故障”,根据用户反馈情况,未出现该故障。故可排除底事件X10:错误进入工厂模式将FCC改写。
d)工厂查询控制器和锂电池组生产过程记录,无对FCC进行检验的过程。根据图2,若出厂之前FCC1写入错误,在产品通电检验时,控制器将使用FCC2参与计算,无法发现问题。同理,若出厂前FCC2写入错误,在产品通电检验时,由于FCC1正常,控制器将使用FCC1参与计算,也无法发现问题。工厂结合现场情况以及工厂测试数据,确定控制设备显示锂电池组初始容量异常的原因为FCC1和FCC2均错误。
e)工厂模拟机上试验场景,在多次上下电测试中发现FCC2被错误改写为0x55AAFFFF。根据图2锂电池组容量获取流程图,在FCC1异常的情况下,控制器将使用FCC2参与计算,此时又因为FCC2被异常改写,所以控制器将使用默认实时容量(56Ah)和FCC(88Ah)计算SOC为70%,与外场现象符合。在工厂整个测试过程中,FCC1未发生改变。因此,可以确定FCC1错误的原因为底事件X9:出厂写入错误的FCC,而FCC2错误的原因为底事件X12:软件误将容量数据覆盖。
2.3 故障定位
通过上述分析,控制设备显示锂电池组初始容量异常的原因是由于锂电池组出厂前,工厂写入了错误的FCC,同时控制器Flash存储器中存储的锂电池组FCC被故障数据覆盖,由于两处的FCC均超过正常范围(正常范围:75Ah~100Ah),从而导致飞机在地面通电检查时,控制设备显示锂电池组初始容量为70%。
3 机理分析
3.1 原理分析
3.1.1 FCC1错误
FCC1存储在锂电池组内EEPROM存储器中,根据目前软件策略,FCC1除了在锂电池组生产过程中通过专用设备写入外,在用户装机使用过程中不存在改写FCC1的可能性。目前,工厂写入FCC1操作是在锂电池组监控模块整机调试前执行的,但在其后的生产过程中并无对FCC1进行检验核查的流程。因此会出现FCC1写入异常,出厂未发现的情况。
3.1.2 FCC2错误
控制器上电读取锂电池组容量数据的策略为先读FCC1和实时容量1,若任一无效,则会结合FCC2和实时容量2进行判断。根据外场现象,同时多次跟相关人员进行沟通交流,利用厂内现有的控制器和安装架及返厂锂电池组进行故障分析和测试。根据测试情况,控制器在多次上下电过程中,FCC2会变成0x55AAFFFF,其中0x55AA为特征值,针对该异常现象,工厂组织软件、硬件人员一起进行故障测试及分析。使用软件插装的方式,逐步对软件代码进行分析测试,最终发现控制器监控软件中故障现场值存储在了FCC2的存储区域,该变量参与至故障记录模块中的地址计算,一旦软件进入故障记录分支,其计算的地址结果恰好就是控制器内存储器记录FCC2的地址,从而覆盖了FCC2,造成FCC2无效。存储分布如下图5所示。
图4存储信息分布
工厂通过测试观察到故障当前指针上电后读取的值为0xFFFF,当故障发生时,其存储区域地址按照公式Store_Add=(0xFFFF+5)×0x1000计算得到,公式结果为Store_Add=0x4000,指向了锂电池组2的FCC2存储区域。导致锂电池组2的FCC2被改写。
工厂对上电过程中出现读取故障当前指针为0xFFFF的现象进行测试,使用示波器测量数据波形如图5、图6,其中波形1为IO测试信号,波形2为SOMI,波形3为SIMO,波形4为SPI时钟信号,频率为3Mhz。根据波形,可以发现DSP对Flash发送的数据(波形3)无变化,但Flash存储器回复的数据会出现全为高的情况(波形2),即0xFFFF。经Flash存储器厂家分析,Flash存储器在写数据时,需要先擦除操作地址所在的分区,使得该地址片区的数据清零即为0xFFFF。因此,在多次上下电过程中,该器件可能处于擦除时间,并未写入数据,故导致读出来的数据为
0xFFFF。
图5 控制器读Flash数据(正常)
图6控制器读Flash数据(异常)
根据以上测试和分析,FCC2错误的原因是控制器在软件运行周期里进行“故障当前指针”存储的过程中,当软件刚擦除完成数据存储空间准备进行数据烧写时,产品进行了下电,软件则进入到下电中断函数,直到产品完全下电,导致“故障当前指针”未存储成功,故下次上电时读取存储器数据异常(读取值为0xFFFF),造成控制器内存储器记录的FCC2被故障信息覆盖。针对该问题,Flash存储器厂家建议产品上电时执行全片擦除,然后在掉电后将数据存入未写数据的地址。但控制器内存储器中的FCC2为出厂写入,后期只会进行读操作,且存储器内会存储一些重要数据(故障数据、FCC2、实时容量2等),所以Flash存储器厂家建议的使用方法对本产品不适用。
由于控制器内Flash存储器在进行写操作时,存在一个擦除的过程,所以在本产品软硬件层面上,并不能避免出现控制器上电获取故障当前指针数据异常的问题。针对类似情况,工厂咨询锂电池组内EEPROM存储器厂家,了解到该器件无擦除过程。同时工厂测试在给该器件写数据时执行下电操作,经多次测试结果表明,锂电池组内EEPROM存储器不会出现上述情况。
3.2 机理分析结果
控制器在上电获取锂电池组容量的过程中,读取到的FCC1超范围,此时控制器认为FCC1无效。根据软件相关策略,控制器再对FCC2进行读取,又因为FCC2被故障数据覆盖变成了无效值,所以控制器将使用默认的容量数据进行锂电池组初始容量计算,即锂电池组初始容量为70%。
4 改进措施及验证情况
4.1 措施
针对控制设备显示锂电池组初始容量异常问题,从以下几个方面进行优化改进:
a)软件增加对写入FCC进行判断,FCC有效才允许写入。在执行写入FCC操作后,软件读取存储的FCC与写入值进行比较,两者一致才视为操作成功。
b)更改FCC2的存储方式,将FCC2的存储方式由单一地址片区存储改为主备方式进行存储。即每次对数据进行操作时,先对主区域的数据进行更新,更新完成后在对主区域的数据进行备份。这样可以保证即使在主区域FCC2异常的情况下,还可以使用备份区域的FCC2。
c)重新划分控制器内存储器的使用分区,划分后的存储分布见图8。
图7存储信息分布(更改后)
d)控制器上电获取故障次数和故障总次数时,对其进行有效性判断,当超过范围时,设置为0。
e)增加使用开路电压法计算锂电池组当前容量的措施,当FCC1和FCC2均错误时,将使用开路电压法获取锂电池组当前容量。
4.2 验证情况
工厂将控制器落实改进措施,下载更改后的软件,进行厂内试验验证。在FCC1错误的情况下,工厂模拟实际装机使用场景,进行约1000次的上下电验证,验证结果通过,FCC2未发生改变,上位机显示锂电池组初始容量正常。
5 结论
通过故障定位及机理分析,控制设备显示锂电池组初始容量异常原因为FCC1和FCC2均错误导致。FCC1错误的原因为工厂出厂写入错误,FCC2错误的原因为软件误将FCC2覆盖。
工厂针对性制定了改进措施,通过增加FCC1、FCC2检验流程,同时更改FCC2存储的方式,可以解决该问题,且不影响产品其它功能性能。
本次故障分析定位准确、机理清晰、进行了故障复现和举一反三、制定的措施验证有效,可以进行技术归零。
-1-
[1]
[2]