DTC_debounce去抖

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。