当按下和释放微动按键时会由短时间的抖动现象才会到达想要的状态。如下图所示:
从上图可知按键抖动时间大概为150us。
在一些对按键抖动敏感的情况下需要进行消抖設计目前常见的消抖设计如下:
关于去抖硬件最简单的方式并联一颗100nF陶瓷电容,进行滤波处理。
- RC滤波+施密特触发器
要想更严谨设计消抖電路会增加施密特触发器,更大程度的保证后端不受按键抖动影响电路如下:
分别来看按键闭合断开时电路状态:
电容C1通过R1 D1回路充电,Vb電压=Vcc-0.7为高电平,后通过反向施密特触发器使Vout输出为低。
电容C1通过R2进行放电最后Vb电压变为0,通过反向施密特触发器使Vout输出为高。
当按下按键出現快速抖动现象时通过电容会使Vb点电压快速变成Vcc或GND。在抖动过程时对电容会有轻微的充电或放电但后端的施密特触发器有迟滞效果不會导致Vout发现抖动现象。
此电路中D1的使用使为了限制R1 R2一起给C1供电增加充电时间影响效果。如果减小R1的值会使电流增加功耗较高。
一些厂镓会提供专用芯片避免自搭电路的不稳定性, 如美信-Max6816:
软件消除抖动也是很常见的方式,一般形式是延时查询按键状态或者中断形式来消除抖动
下面是Arduino的软件消抖代码: