公司动态

DTC_debounce去抖

📅 2026/7/31 18:42:13
DTC_debounce去抖
DEM 模块提供了两种主要的 Debounce 算法基于计数器的 Debounce 算法和基于时间的 Debounce 算法。一、基于计数器的 Debounce 算法原理通过计数器来确认事件的状态。每次事件触发时根据检查结果通过或失败计数器会增加或减少一定的步长N。当计数器达到失败阈值时事件被标记为失败当计数器达到成功阈值时事件被标记为通过。特点可以设置“jump-down”和“jump-up”功能分别在计数器达到失败或成功阈值后将计数器重置为初始值。适用于需要通过多次连续检查结果来确认事件状态的场景故障计数器范围Fault Detection Counter计数器的取值范围为-128到127。失败阈值Failed Threshold当计数器达到此值时事件状态变为Failed。成功阈值Passed Threshold当计数器达到此值时事件状态变为Passed。增加步长Increment Step Size每次事件报告为PreFailed时计数器增加的步长。减少步长Decrement Step Size每次事件报告为PrePassed时计数器减少的步长。Jump Down功能当计数器达到失败阈值后是否将计数器重置为一个特定值Jump Down Value。Jump Up功能当计数器达到成功阈值后是否将计数器重置为一个特定值Jump Up Value。上图可参考学习当一个事件上报一次PREFAILED状态那么计数器会按步长增加1当达到设定的Failed限值时故障状态就变成Failed当一个事件上报一次PREPASSED状态那么计数器按步长减少1当达到设定的Passed限值时故障状态就变成Passed二、基于时间的 Debounce 算法原理通过计时器来确认事件的状态。每次事件触发时启动一个计时器根据检查结果通过或失败计时器达到相应的时间阈值后事件被标记为失败或通过。特点时间阈值的设置决定了事件状态的确认时间。适用于需要在固定时间间隔内确认事件状态的场景DemDebounceTimeFailedThreshold从PREFAILED状态跳转到FAILED状态所需的时间阈值DemDebounceTimePassedThreshold从PREPASSED状态跳转到PASSED状态所需的时间阈值三、两种算法的区别特性基于计数器的 Debounce基于时间的 Debounce核心机制通过计数器的增减来确认事件状态通过计时器的延时来确认事件状态适用场景需要多次连续检查结果来确认事件状态需要在固定时间间隔内确认事件状态灵活性可以设置“jump-down”和“jump-up”功能时间阈值固定较为简单配置参数成功/失败阈值、步长、是否启用跳变功能成功/失败时间阈值四、去抖机制的实现流程1、故障检测应用程序检测到潜在故障如传感器信号异常调用Dem_PreSetEventStatus进行预处理2、去抖条件检查Dem_PreSetEventStatus 检查故障是否满足去抖条件如故障计数器是否达到阈值。如果满足条件允许状态更新否则阻止状态更新。3、状态更新:调用 Dem_SetEventStatus 更新故障状态。如果故障被确认存储 DTC 并触发相关操作。如果故障消失且满足清除条件清除 DTC。注意由于诊断故障由SWC和Dem模块共同完成因此去抖动策略可以在SWC中实现也可以在Dem模块中实现。①如果在SWC中实现Dem_SetEventStatus()函数传递给Dem的状态为passed或failed;②如果在Dem中实现先Dem_PreSetEventStatus()函数传递给Dem的状态为prepassed或prefailed后实现去抖之后调用Dem_SetEventStatus()函数传递给Dem的状态为passed或failed③当然有些控制器中也有不需要做去抖过程直接调用Dem_SetEventStatus()函数传递给Dem的状态为passed或failed。