ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

移动电源新国标|东软电量计开发勘误记录

移动电源新国标|东软电量计开发勘误记录

简介

电量计ES32L0910开发的过程中,发现有些数据突发异常问题,这里做一个数据勘误的记录,以及提供一些建议,更好的规避掉这些问题。

一、电量计温度采集

温度是主控采集电量计的温度数据,原始数据是开尔文,单位0.1K,寄存器如下图:

主控采集到原始数据之后,会做一个转换把开尔文转换成温度值。代码处理过程如下图:

这里做一下代码解读,最上面一行是IIC采集电量计温度寄存器数据,获取到读数据放在u8BatTemp数组里面,因为数组是8为数据,需要把数组中的数据合并成16位的数据,合并之后就可以通过公式把开尔文转换成温度数据了。

转换公式如下图所示:

二、电量计温度突发异常

正常的室温下测试,没出现过温度突发异常的现象,当温度到达120℃时,偶发会突发异常温度数据,比如突然出现一个6280℃的异常,虽然只出现一次,这会导致上报异常温度出现问题,用户可能会直观的感受到,体验很不好。

通过抓取温度数据,突发温度异常数据如下图:

这类的问题主控这边软件可以增加滤波处理,比如:当温度超过500℃就丢掉,或者连续采集3次温度值一样了再取这个值,都可以解决这个问题。但是电量计为什么会在高温下突发异常温度值呢?这也是一个潜在的隐患问题,只是当时恰巧测出来了,可以去规避一下,那其他没有暴漏出来的问题就没办法了。

三、电量计电压采集

电池电压是从电量计采集的,原始数据精度是mA,主控获取之后没有处理,直接对该值判断或者上报。如下图所示:

代码中u8BatCellVol是一个数组,数组的大小是2,这里连续采集两个8位数据,合并成16位后就是电池电压,精度还是很高的,mA级别的。

四、电压突发异常值

新国标要求电芯电压异常也要做记录上报,那我们模拟异常电压测试的时候,发现会偶发电压突发异常的问题,这个电压值是主控采集的电量计的数据,当用模拟电池把电池电压调到过压4.26V的时候,长时间保持会偶发32.51V异常数据,很难复现,经过大量的测试,发现只模拟过压一会恢复正常电压不会出现,只有长时间保持过压的时候才会出现。

这种问题软件同样可以滤波处理,电池充电上限电压是4.3V,这里滤波可以做一些预留,当电池电压大于4.6V时就丢掉。也可以采集一组数据采用中位值平均法滤波,但是这样开始的数据慢一些显示出来。

五、数据容错优化建议

基于上面遇到的问题,我们进一步分析了一下,因为当前应用的环境相对复杂,IIC属于板件通信,数据有可能会出错。

5.1 DC-DC 高频干扰

I²C 时序毛刺、应答丢失、读写偶发错误,DC-DC 满载 / 快充时故障变多。

键干扰点:SW 节点、功率电感、功率走线,和 I²C 线近距离耦合、共地串扰是主因。

5.2 蓝牙射频干扰

蓝牙广播 / 连接 / 收发数据时,I²C 瞬间出错;蓝牙休眠时通信恢复正常。

5.3 软件优化建议

可以采用Smbus的方式,对应答的数据进行校验,这样容错率大大提升,主机端采集数据时同样校验,当检验值一样的时候,再取数据。

这种方式已经得到验证,数据比较稳定可靠。

六、总结

所以,软件设计到最后功夫都在防御性设计上面,谁的软件越稳定,数据不出错,那就是优秀的软件设计。对于功能需求实现来说,都是基本的要求,如果功能都有问题,更别谈容错性设计了。

一个好的软件设计者就好比一个老司机,能预判前路的风险,提前规避,安全到达目的地。

希望你早日成为一个“老司机”。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进