3、硬件消抖电路:RS触发器消抖与RC低通滤波消抖
各位同学,咱们接着聊硬件消抖。上一节讲了软件消抖,说白了就是用延时去“等”按键稳定。但有些场景下,比如高速系统或者对实时性要求高的场合,软件延时可能不太合适。这时候,硬件消抖就派上用场了。
我个人习惯把硬件消抖分成两类:一类是用逻辑门搭的,另一类是用电阻电容搭的。今天咱们就把这两类都讲透。
3.1 基本RS触发器原理
先说说RS触发器。这东西在数字电路里很基础,但用来消抖却特别巧妙。
RS触发器有两个输入端:R(复位)和S(置位),两个输出端:Q和Q'。它的核心逻辑是:当R和S同时为1时,输出保持原状态不变。这个“保持”特性,正是消抖的关键。
你想想看,按键按下时会产生抖动,一会儿接触一会儿断开。如果直接用逻辑门检测,就会看到一连串的跳变。但RS触发器呢?它只会在R或S有效时改变状态,中间那些抖动信号,只要没达到触发条件,它就不理睬。
RS触发器的真值表(与非门实现):
| R | S | Q | Q' | 说明 |
|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 禁止态(不稳定) |
| 0 | 1 | 1 | 0 | 置位 |
| 1 | 0 | 0 | 1 | 复位 |
| 1 | 1 | 保持 | 保持 | 记忆态 |
嗯,这里要注意:R和S同时为0是禁止态,设计时要避免。我在项目中见过有人不小心把两个输入同时拉低,结果输出状态不确定,整个系统都乱了。这个坑,大家一定要避开。
3.2 用与非门搭建消抖电路
好了,原理讲完了,咱们直接上电路。用两个与非门就能搭一个RS触发器消抖电路。
电路结构很简单:
- 两个与非门的输出分别接到对方的输入端(交叉耦合)
- 按键接在R和S端,通常通过上拉电阻接高电平
- 按键按下时,对应的输入端被拉低
具体怎么接?我画个图你就明白了。
这个电路的工作原理是这样的:
- 初始状态:两个按键都没按下,R和S都是高电平,输出Q保持上次状态
- 按下S键:S端被拉低,Q输出高电平,Q'输出低电平
- 抖动期间:即使S端因为抖动短暂弹起,只要R端没被拉低,Q就保持高电平
- 按下R键:R端被拉低,Q输出低电平,Q'输出高电平
经验之谈: 我曾经在一个工业控制项目里用过这个电路。当时按键距离主控板有2米多,信号线上干扰很大。软件消抖怎么调都不行,后来换成RS触发器消抖,问题一下就解决了。硬件消抖对长线传输的抗干扰能力,确实比软件强不少。
3.3 RC低通滤波消抖
说完逻辑门消抖,咱们再看看另一种思路——RC低通滤波。这个方法更“模拟”一些,但效果同样出色。
核心原理很简单:电容的充放电需要时间。按键按下时,电压不会瞬间跳变,而是缓慢上升或下降。只要把时间常数选得比抖动周期大,就能把抖动“滤掉”。
具体电路是这样的:
- 按键串联一个电阻R,接到VCC
- 按键另一端接一个电容C到地
- 电容两端的电压就是滤波后的信号
- 后面再接一个施密特触发器整形,得到干净的方波
为什么会这样?你想想看,按键按下时,电容通过电阻充电。如果按键抖动,电容上的电压只会小幅波动,不会立刻冲到高电平。等抖动结束,电容才慢慢充到高电平。这个过程,说白了就是把快速抖动变成了缓慢变化。
3.4 电阻电容参数选择
参数选择是个技术活。选大了响应慢,选小了滤不干净。我一般按这个思路来:
第一步:确定时间常数τ
τ = R × C。这个值要大于抖动时间。机械按键的抖动时间一般在5ms到20ms之间。我习惯取中间值10ms,然后留点余量,取τ = 15ms到20ms。
第二步:选择电阻和电容
电阻不能太大,否则驱动能力不够。也不能太小,否则功耗大。我一般选10kΩ到100kΩ。电容选0.1μF到10μF的陶瓷电容或电解电容。
举个例子:
- 取R = 10kΩ,C = 2.2μF,则τ = 22ms
- 取R = 47kΩ,C = 0.47μF,则τ ≈ 22ms
- 取R = 100kΩ,C = 0.22μF,则τ = 22ms
这三种组合都能用,选哪种看你的板子空间和成本。我个人习惯用10kΩ+2.2μF,因为电阻电容都好买,而且充放电曲线比较平滑。
注意: 电容的耐压值要留余量。如果系统电压是5V,至少选10V耐压的电容。我曾经图便宜用了6.3V的,结果电源波动时电容击穿了,整个电路板冒烟。嗯,这个教训挺深刻的。
第三步:加施密特触发器
RC滤波后的信号是缓慢变化的,直接送给数字电路可能会在阈值附近来回跳变。所以后面一定要加施密特触发器整形。常用的芯片有74HC14(六反相施密特触发器)或74HC132(四输入与非施密特触发器)。
施密特触发器的滞回特性,说白了就是让上升阈值和下降阈值不一样。这样信号在阈值附近抖动时,输出不会来回翻转。这个特性对消抖来说简直是绝配。
两种消抖方式对比:
| 对比项 | RS触发器消抖 | RC低通滤波消抖 |
|---|---|---|
| 原理 | 利用触发器的记忆特性 | 利用电容的充放电延时 |
| 元件 | 两个与非门 + 两个上拉电阻 | 一个电阻 + 一个电容 + 施密特触发器 |
| 优点 | 响应快,无延时 | 电路简单,成本低 |
| 缺点 | 需要双按键(或单按键加反相器) | 有延时,响应稍慢 |
| 适用场景 | 高速系统、对实时性要求高的场合 | 低速系统、成本敏感的场合 |
好了,硬件消抖就讲这么多。两种方法各有千秋,选哪种看你的具体需求。我个人建议:如果系统对响应速度要求高,用RS触发器;如果成本敏感且速度要求不高,用RC滤波。当然,你也可以两种都用,双重保险嘛。
记住一点:消抖的本质是“忽略短暂的变化,只响应稳定的状态”。不管用软件还是硬件,这个核心思想是不变的。