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