超级电容支撑保护掉电数据异常案例分享
关键字:UPS 超级电容 掉电保存 看门狗 CPU 优先级
背景:
工业控制领域,工控设备在突然断电是,系统需要有5到10秒的时间来保存运行数据,确保再次上电,工业设备能工正常上电。所以工业控制器断电时需要有超级电容为系统提供10S左右的供电时间。典型电源拓扑结构如下图所示:
现象:
按照正常设计,UPS可以正常支持10S左右,但是偶尔会出现支撑不到10S的情况,可能2S就断电了。
解决步骤:
- 复现现象:
10次差不多有3次掉电异常
- 根据现象推测可能出问题点地方:
怀疑点1:升压芯片可能在超级电容缓慢放点过程中异常关断
异常关断的原因有2点:
- EN脚电平达不到使能电平导致关断
- 升压芯片触发过流保护,导致芯片关断
怀疑点2:控制MOS管由于CPU异常控制GPIO脚导致关断
验证怀疑点1
用示波器抓取波形抓取TP1,TP2,TP3波形,发现TP1,TP2波形正常TP3波形异常,初步验证升压芯片应该是正常工作的,故怀疑控制MOS的GPIO可能存在异常动作的情况。
验证怀疑点2:
用示波器抓取波形抓取同时测试TP1,TP2,TP3,TP4,发现TP4在掉电1-2S后会出现1个异常低电平,所以怀疑是CPU在掉电时发出了低电平信号
- 根据2的验证推测大概率是软件问题,推测软件可能出问题的点:
还有个信息是,不运行我们的软件,或者屏蔽掉电检测后不会出现异常掉电的情况
怀疑点1:调用程序,可能误控制了MOS控制引脚
怀疑点2:系统重启了
验证怀疑点1:
了解CPU-GPIO引脚的控制逻辑,了解到这个引脚在底层没有做逻辑,单纯的是CPU不工作之后,会掉电到0电平,MOS管关闭,故认为CPU-GPIO误控制的概率不大。
验证怀疑点2:
使用上位机观察掉电瞬间的打印信息,发现系统确实重启了,故定位是系统重启导致的CPU-GPIO误控制。
- 根据3的验证确定是系统重启,推测导致系统重启的原因:
怀疑点1:掉电后调用的函数里边代码,导致了系统REBOOT
怀疑点2:掉电之后系统进入了一次复位
验证怀疑点1:
查看代码,发现没有REBOOT的操作,故没办法验证是否是底层代码的问题,先验证怀疑点2再看情况。
验证怀疑点2:
导致系统重启的可能有:看门狗,硬件复位,欠压等
根据这些可能逐一验证,将看门狗直接短接,让看门狗失效,直接拉高,验证发现异常掉电问题消失,故怀疑是看门狗异常导致的异常掉电
- 根据4的验证,推测看门狗异常的原因:
怀疑喂狗异常导致,抓取喂狗引脚波形,发现正常喂狗波形每400MS喂一次,断电瞬间波形超过1S还没有进行喂狗。
- 根据5的验证,推测喂狗异常的原因:
怀疑是掉电之后,我们会保存数据,调用的资源优先级高于喂狗程序,且调用时间超过800MS(看门狗最长喂狗时间),导致看门狗触发复位导致掉电异常
- 结论:掉电保存数据的优先级是最高的,故监测到掉电之后,CPU资源被占用,长时间没有喂狗,导致系统复位重启。导致最后掉电保存数据异常。
解决办法:见后续文章