说起按键,这应该是最常见的人机交互方式了,几乎所有的电子产品都会带有,这篇文章带大家看看按键电路怎么设计
1. 按键抖动
在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。
按键的抖动对于人类来说是感觉不到的,但对单片机来说,则是完全可以感应到的,而且还是一个很“漫长”的过程,因为单片机处理的速度在“微秒”级,而按键抖动的时间至少在“毫秒”级。
单片机如果在触点抖动期间检测按键的通断状态,则可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,从而引起误处理。因此,为了确保单片机对一次按键动作只作—次响应,就必须考虑如何消除按键抖动的影响。
按键抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。按键抖动会引起一次按键被误读多次。
为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
在处理按键抖动的程序中,必须同时考虑消除闭合和断开两种情况下的抖动。所以,对于按键消抖的处理,必须按最差的情况来考虑。机械式按键的抖动次数、抖动时间、抖动波形都是随机的。不同类型的按键其最长抖动时间也有差别,抖动时间的长短和按键的机械特性有关,按键输出的信号的跳变时间(上升沿和下降沿)最大是在20ms左右。按键一次闭合最短的时间大概是120ms。按键消抖的关键是提取稳定的低电平(或高电平)状态,滤除按键稳定前后的抖动脉冲。
2. 常见的按键设计方案
2.1 独立按键(低电平触发)
如下图所示为常见的低电平触发的按键设计,当没有按键按下时,由于上拉电阻R8的存在,此时USER_KEY处的电平为高电平,当按键按下时,USER_KEY直接与GND相连接,故此时USER_KEY为低电平。图中的R8为上拉电阻,一般选取1K、4.7K、10K的电阻,具体的电阻大小需要看芯片的灌电流大小。有些MCU内置有上拉电阻,在硬件设计时外部可加可不加,建议硬件上预留该电阻。
图示的C5为消抖电容, 该电容的存在可以减小机械抖动的影响。原理如下,红色为电压波形图,如果按键按下时,电容被按键短路了, 此时电容迅速放电(短路可以看做电阻很小很小的负载,RC放电的时间常数很小很小), 形成了图示中的T1端曲线,随后进入稳定状态,再按键松开的时刻,电源对C5进行充电由于此时需要经过R8,时间常数比T1端更大,所以曲线更加的缓一点,形成了T3曲线段。这就是消抖电容的原理
2.2 矩阵按键
矩阵按键的原理想必一定很熟悉了, 编程的规范就是循环扫描,这里不做过多的说明
2.3 ADC按键设计
ADC按键的设计可以大大的减少IO口的占用, 但是不适合用于大于4个的按键, 因为按键越多,误触就越大,而且对于电阻的选择也比较关键,如下图所示,当SW10按下是,R8和R12构成分压,此时ADC处的电压为3V左右, 当SW11按下时,此时R9与R12构成分压电路, ADC的电压约为2.2V, 依次类推.。在软件层面只需要通过ADC读取相应的电压,就可以判断相应的按键按下了。图中的C5起到了滤除干扰的作用。