1 为什么需要Debounce
故障诊断中使用debounce(去抖动)的原因是为了解决信号抖动问题。信号抖动是指在电路中接收到一个短暂的不稳定信号,可能是由于电源噪声、开关的物理特性或其他干扰因素引起的。当进行故障诊断时,通常需要监测输入信号的状态,并根据信号状态进行相应的判断和操作。如果信号存在抖动,可能会导致误判,从而产生错误的诊断结果。
为了解决这个问题,就引入了debounce算法。具体来说,故障诊断策略判断出现了潜在故障信号,那么就会启动一个计时器/计数器,在计时器/计数器运行期间,如果检测到信号的状态发生变化,计时器/计数器会被重置。只有在计时器/计数器到达设定的稳定时间/次数后,才能确认故障。这样通过debounce算法,可以消除因信号抖动而带来的误判问题,提高故障诊断的准确性和可靠性。
2 Debounce算法
故障诊断步骤是先进行故障检测,即根据前提条件和判断条件实时监控,判断是否有潜在的故障。通常采用4个状态(PREPASSED、PASSED、PREFAILED、FAILED)来表示判断的结果,对于有些故障,不需要经Debounce算法确认故障,这时判断的结果只有PASSED和FAILED,直接得到确认的故障;而对于有些故障,可能只是某些信号波动引起,不是故障,姑且称为潜在的故障,这时引入PREFAILED和PREPASSED来表示,需要采用Debounce算法才能进一步确认是否为故障。当前常用Debounce算法有基于计数器的Debounce算法和基于时间的Debounce算法两种。
2.1 基于计数器的Debounce算法
该算法使用一个Debounce计数器(计数范围取决于具体的定义)用来记录判断的结果,当根据前提条件和判断条件得到一次PREFAILED状态,那么计数器(Fault Detection Counter)会增加一个步长,以此不断累加,当累计计数达到设定的Failed限值时,故障状态就变成Failed,即潜在故障被确认,如下图t1时刻。
有些故障被确认后,是有可能被恢复的,也就是说只要根据前提条件和判断条件得到一次PREPASSED状态,那么计数器(Fault Detection Counter)会减小一个步长,以此不断减小,当达到设定的Passed限值时,故障状态就变成Passed,即故障已消除,如下图t2时刻。
对于上图中的两个值Jump down value,和Jump up value),此处需要再解释一下,所谓Jump down value是指故障被确认处于Failed状态,如果下一次根据检测的前提条件和判断条件得到PREPASSED状态,这时计数器的数值不会从设定的FAILED限值开始减小一个步长,而是跳到Jump down value开始减小一个步长。同理去理解Jump up value,这两个值均由用户自定义。
2.2 基于时间的Debounce算法
该算法使用一个Debounce计时器(范围同样为-128到127)用来记录判断的结果,当根据前提条件和判断条件得到一次PREFAILED状态,那么计时器(Fault Detection Counter)开始计时,累计一段时间t_failed,仍然没有出现PREPASSED或PASSED状态,那么故障状态就变成Failed,如下图t1时刻;在t failed内,如果出现FAILED状态,那么故障状态就直接变成Failed,即故障被确认,如下图t4时刻。
当故障被确认了,接着当根据前提条件和判断条件得到一次PREPASSED状态,那么计数器归零,开始重新计时,同理一直PREPASSED状态,累计一段时间t_passed后,表示故障已消除。如下图t2时刻。
当故障被确认了,接着当根据前提条件和判断条件得到一次PASSED状态,那么计数器不需要累计时间,直接表明故障已消除,如下图t3时刻。
2.3 小结
通过上述两种Debounce算法可以知道其原理是:根据检测到“故障”状态(PREFAILED, FAILED, PREPASSED, PASSED)来增减计数器或定时器,只有次数或时间达到阈值,才能确认或消除故障。当报告的状态是PREFAILED时,计数器或定时器就累加一次;当累加次数或时间到Failed的域值,那么“故障”就被确认。其中的一些参数需要被定义清楚,因为这些参数将会决定故障需要多长时间确认或恢复,像上图中的步长,阈值和时间等参数。比如某个故障的确认时间为200ms,计数器每5ms计数一次,假设设定阈值为40,报告状态切换时,计数器总是从0开始计数,那么这时针对故障确认的固定步长设置为1。
总之,不同Debounce算法的细节处理会有所不同,可根据实际诊断需求来配置Debounce算法参数。另外,针对不同故障类型的确认,如何选用这两种Debounce算法。通常,对于timeout类故障,可采用基于时间的Debounce算法来完成确认;对于事件触发类故障,则可采用基于计数的Debounce算法来完成确认。
请关注下篇文章。同时也可移步查看个人知乎的ECU故障诊断相关文章。
原文始发于微信公众号(谦益行):汽车ECU故障诊断功能解析系列6