← 问题知识点

推荐答案 测试一下

4.8 去抖滤波

编程题 中等 笔试真题

参考答案

去抖滤波是数字电路中消除机械开关或按键抖动(通常持续10-20ms)的常用方法。核心思路是利用计数器对输入信号进行连续采样,只有在稳定一段时间(计数达到预设阈值)后才认为信号有效,从而滤除毛刺。 典型实现步骤: 1. 对输入信号进行两级或三级同步化,消除亚稳态(通常用两个触发器同步到系统时钟域)。 2. 同步后的信号与上一拍信号比较,检测电平变化。但为了去抖,不能检测到变化立即输出,需开始计数。 3. 定义计数器cnt,当同步后的信号与上一拍不同时,清零cnt并开始计数;若相同,则cnt累加。当cnt达到预设值(如对应20ms的时钟周期数)时,认为信号稳定,将同步信号更新为输出信号,并清零cnt准备下一次检测。 4. 注意:计数器计满后,输出需保持,直到检测到新的变化再开始新一轮计数。 易错点: - 未对输入信号做同步化直接使用,导致亚稳态传递; - 计数器阈值设置过长或过短,过长则响应慢,过短则无法完全滤除抖动; - 未能正确处理计数满后的复位与输出保持,可能导致边沿丢失或重复输出; - 忽略毛刺宽度可能大于一个时钟周期,需要连续多个周期稳定才认为有效。 若采用状态机思路:可定义IDLE(等待电平变)、COUNT(稳定计数)、WAIT(等待释放)等状态,防止重复触发。 实现时的参数化设计:通过parameter定义CLK_FREQ和DEBOUNCE_TIME(例如20ms),自动计算计数阈值,增强可移植性。

涉及知识点

  • 同步化处理消除亚稳态
  • 计数器延时采样原理
  • 机械抖动时间参数
  • 边沿检测与状态机设计
  • 参数化可配置滤波设计
  • 去抖与响应延迟的平衡
← 上一题
登录后反馈错题
下一题 →