Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

使用去抖逻辑减少瞬变信号

当开关打开和关闭时,在开关完全转移到开或关状态之前,开关触点会有轻微的弹跳。弹跳动作会产生瞬变信号,而这并不是代表真正状态更改的信号。因此,进行开关逻辑建模时,务必使用去抖算法滤除瞬变信号。

在 Stateflow® 图中进行控制器建模时,您肯定不希望开关逻辑过度运作,对所接收到的每个瞬变信号进行打开和关闭开关的响应。要避免过度响应,可以设计一个 Stateflow 控制器,使用时序逻辑对输入信号去抖并确定开关实际上是打开还是关闭。

如何实现信号去抖

可以借助 Stateflow 通过两种方式实现信号去抖:

  1. 通过使用 duration 时序运算符滤除瞬变信号。

  2. 使用中间图形状态过滤掉瞬变信号。将中间图形状态用于高级过滤技术,例如故障检测。

duration 运算符仅在 Simulink® 模型中的 Stateflow 图中受支持。

使用 duration 运算符实现信号去抖

此示例描述了使用 duration 运算符滤除瞬变信号的设计模式。

去抖器图包含以下逻辑。

状态逻辑

此模型的初始状态为 Off。通过使用 duration 运算符,您可以根据开关信号 sw 为负值或非负值的时长来控制哪个状态处于激活状态。

  • sw 处于非负值状态的时长超过 0.01 秒时,开关就会从状态 Off 切换到状态 On

  • sw 处于负值状态的时长超过 0.01 秒时,开关就会从状态 On 切换到状态 Off

运行去抖器

  1. 打开模型。

  2. 打开 Scope 模块。

  3. 打开 Stateflow 图 Debouncer。

  4. 对模型进行仿真。示波器显示去抖器如何将瞬变信号与噪声输入信号隔离。

使用故障检测实现信号去抖

此示例描述了使用中间状态隔离瞬变信号的设计模式。去抖器设计使用 after 运算符实现绝对时间时序逻辑。借助此设计模式,还可以检测故障并给系统一定时间进行故障恢复。

去抖器图包含以下逻辑。

状态逻辑

去抖器图包含一个名为 Debounce 的中间状态。此状态通过检查信号 sw 是保持正值或负值,还是在规定时间段内在过零点之间波动,来隔离瞬变输入。

  • sw 处于正值状态的时长超过 0.1 秒时,开关就会切换到状态 On

  • sw 处于负值状态的时长超过 0.1 秒时,开关就会切换到状态 Off

  • sw 在过零点之间波动的时长超过 0.3 秒时,开关就会切换到状态 Off.Fault,从而将 sw 隔离为瞬变信号并给它一定时间进行故障恢复。

运行去抖器

  1. 打开模型。

  2. 打开 Scope 模块。

  3. 打开 Stateflow 图 Debouncer。

  4. 对模型进行仿真。示波器显示去抖器如何将瞬变信号与噪声输入信号隔离。

使用基于事件的时序逻辑

作为绝对时间时序逻辑的替代,您可以应用基于事件的时序逻辑,使用 after 运算符来确定去抖器图中的真正状态。关键字 tick 在图唤醒时指定并隐式生成一个局部事件。

sf_debouncer 模型中的 Error Generator 模块每 0.001 秒生成一个脉冲信号。因此,要将 Debouncer 图中指定的绝对时间时序逻辑转换为基于事件的逻辑,需要将 after 运算符的参量乘以 1000,如下表所示。

基于绝对时间的逻辑基于事件的逻辑
after(0.1,sec)after(100,tick)
after(0.3,sec)after(300,tick)
after(1,sec)after(1000,tick)

另请参阅

|

相关主题