单片机按键消抖技术
单片机按键消抖技术及其扩展应用
在使用单片机搭建有人机交互的系统时需要用到键盘通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号切换。系统对键盘的输逻辑0或l行准确采样避免错误输入是非常有必要的。理想的键盘输入特性是:按键没有按下时输入为逻辑l广旦按下则输入立刻变为逻辑O松开时输入则立刻变为逻辑1。
然而实际的键盘受制造工艺等影响其输入特性不可能完美。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动抖动时间的长短由按键的机械特性决定,—般为5ms—lOms。单片机工作时间都是纳秒与毫秒级别当按键按下时在触点即将接触到完全接触这段时间里,键盘的通断状态很可能已经改变了多次。即在这段时间里键盘输入了多次逻辑0和1。也就是输入处于失控状态。如果这些输入被系统响应,则系统暂时也将处于失控状态这是我们要尽量避免的。在触点即将分离到完全分离这段时间也是一样的。
键盘在输入逻辑转换时实际上是产生了瞬时的高频干扰脉冲。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。即在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。目的在于消除干扰以达到理想输入特性。
有两个阶段可以设法消除此干扰:1、在键盘信号输入系统之前(系统外):2、键盘信号输入系统以后(系统内)。
一、硬件消抖
在信号输入系统之前将抖动干扰消除,可以节省系统资源,提高系统对其他信号的响应能力这就是硬件消抖。
(1)基本RS硬件消抖:用两个“与非门”构成一个RS触发器利用基本RS锁存器的记忆作用消除开关触点振动所产生的影响。开关S每切换一次输出端只有一次翻转不存在抖动波形。
(2)电容滤波消抖:使用RS锁存器消抖只适用于单刀双掷开关实际应用当中常用的键盘多是两个接线端的按键。对此类按键的常用硬件消抖方法为在按键上并联电容利用电容放电延时平波,再经过施密特反相器调整就能够得到没有毛刺的脉冲波。
(3)中断法消抖:每个按键都外接到外部中断口上当有按键按下时引起单片机的中断。此种方法的好处在于不用在主程序不断循环查询.只要有中断再去做相应处理不足之处在于—个单片机的中断源是相当宝贵的所以很少有人采用这种方法。
二、软件延时消抖
如前所述若采用硬件消抖电路那么N个键就必须配有N个防抖电路。因此,当按键的个数比较多时硬件防抖将无法胜任。在这种情况下I可以采用软件的方法进行防抖。软件消抖的实质在于降低键盘输入端口的采样频率将高频抖动略去即检测出键闭合后执行一个延时程序,产生5ms一10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms一10ms的延时,待后沿抖动消失后才能转入该键的处理程序。
三、软件消抖的扩展应用
在实际应用中软件消抖技术并不单纯运用在按键上,也可运用于其他地方以使程序运行更加合乎我们的要求,如下面二种情况:
1)在某些情况下例如系统受到外部震动,也会在按键电路中出现电平抖动但这种抖动不是控制者所希望的操作如果没有防抖程序那么系统会因这种不希望出现的干扰而错误动作。
2)为了避免系统误判可以编写防抖动程序。下面就第一种情况在行程控制系统中)采用这种技术盾看能否提高系统性能更好的实现功能I弥补常用方法的不足!.以一个简单的工控项目来举例说明顾目要求上电后,_-个普通电机控制—个滑块从左边往右边推最右边有一个行程开关滑块碰到行程开关后息机停止运动结束。
转化成单片机编程思路用1个IO口输出扃电平时电机运动,f氐电平时电机停止。另1个IO口作输入术全测行程开关的电平状态如果发现是高电平说明还没碰上行程开关感应器加果发现是低电平就说明碰上了感应器此时就可以发出停止电机的命令。
思路一:直接判断行程感应器的电平状态广且发现低电平,就认为电机已经碰到了行程开关马上停止电机。
这种思路的优点是响应及时胆缺点是太灵敏抗干扰能力非常差在工控环境里当电机正在行进的过程中如果受到电源的波动或者外来的毛刺信号干扰行程开关的输入信号可能会读取到瞬间的低电平局致单片机误判断提前把电机停止了息机还没碰到行程开关就草率停机。
思路二:在判断行程感应器的电平状态时加入了软件的抗干扰处理(即软件消抖技术),一旦发现低电平,一个计时器开始计时在计时的期间如果发现出现高电平就马上把计时器清零,如果一直是低电平,并且期间没有出现高电平就认为是稳定的低电平此时判定是碰到了行程开关。
这种思路的优点是增加了抗干扰处理几乎能百分百保证电机碰到了行程开关才停机不会有第一种思路的误判了。缺点是因为在软件抗干扰环节增加了—小段延时而这一小段的延时会导致电机碰到行程开关后没有马上停止滑块继续往右运动一小段时间才停止这样因为有应力存在系统运行时间长了容易把右边的限位机械结构压坏挤坏。
思路三:本思路是结合了前面两种的优点在判断行程感应器的电平状态时当发现是低电平日寸(哪怕是干扰时出现的瞬间低电平),电机马上暂侵暂停和停止的概念不一样虽然电机都是没有转),当发现是高电平时甩机继续运行什么时候才认为碰到行程开关?当低电平像思路二那样连续持续低电平的时间超过某个值时才认为碰到了行程开关。在此判断低电平的小延时期间,电机是处于暂停的状没有转)所以不会过冲挤压右边的行程限位机构。
这种思路优点是既能及时响应又增加了行程开关检测的抗干扰处理,又不会让电机过冲挤压右边的行程开关第三种思路能够更好的实现功能并能有效防止干扰!
总结
传统单片机系统大多是串行处理只能并行处理—些中断程序。对于这样的系统只能采用单纯软件或硬件消抖但都不那么完美。在实际的应用中,为了提高系统的稳定性和可靠性往往是在硬件消抖技术的基础上再适当应用软件消抖技术这样能更好的满足系统的需要。