单片机按键消抖技术及其扩展应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机按键消抖技术及其扩展应用
杨伟
【摘要】由于机械触点的弹性作用,按键开关存在一个抖动的特性,如果不作处理这个抖动会给系统带来一些不稳定的因素,甚至是错误的结果,为了不产生这种现象就必须采取相应的消抖措施。
本文就消抖技术作相关介绍,并举一实例作为消抖技术扩展应用的说明。
%Due to the flexibility of the role of mechanical contact,button switch are the characteristics of a jitter,if not treated the jitter will bring some unstable factors system,even wrong results,in order not to cause this phenomenon must take corresponding jitter elimination measures.In this paper,the elimination of shaking technology for the relevant introduction,both as an example of an example of the application of the technology to eliminate chattering.
【期刊名称】《电子测试》
【年(卷),期】2016(000)003
【总页数】2页(P96-97)
【关键词】按键抖动;消抖;单片机;扩展应用
【作者】杨伟
【作者单位】浙江诸暨技师学院 312000
【正文语种】中文
在使用单片机搭建有人机交互的系统时需要用到键盘,通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号切换。
系统对键盘的输入(逻辑0或1)进行准确采样,避免错误输入是非常有必要的。
理想的键盘输入特性如图1所示:按键没有按下时,输入为逻辑1,一旦按下则输入立刻变为逻辑0,松开时输入则立刻变为逻辑1。
然而实际的键盘受制造工艺等影响,其输入特性不可能如图1完美。
由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
单片机工作时间都是纳秒与毫秒级别,当按键按下时,在触点即将接触到完全接触这段时间里,键盘的通断状态很可能已经改变了多次。
即在这段时间里,键盘输入了多次逻辑0和1,也就是输入处于失控状态。
如果这些输入被系统响应,则系统暂时也将处于失控状态,这是我们要尽量避免的。
在触点即将分离到完全分离这段时间也是一样的。
实际键盘的输入特性如图2所示:
键盘在输入逻辑转换时,实际上是产生了瞬时的高频干扰脉冲。
为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。
即在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
目的在于消除干扰,以达到接近图1所示的理想输入特性。
有两个阶段可以设法消除此干扰:1、在键盘信号输入系统之前(系统外);2、键盘信号输入系统以后(系统内)。
在信号输入系统之前将抖动干扰消除,可以节省系统资源,提高系统对其他信号的响应能力,这就是硬件消抖。
1.1 基本RS硬件消抖
用两个“与非”门构成一个RS触发器,利用基本RS锁存器的记忆作用消除开关
触点振动所产生的影响。
开关S每切换一次,输出端只有一次翻转,不存在抖动
波形。
1.2 电容滤波消抖
使用RS锁存器消抖只适用于单刀双掷开关,实际应用当中常用的键盘多是两个接线端的按键。
对此类按键的常用硬件消抖方法为在按键上并联电容,利用电容放电延时平波,再经过施密特反相器调整,就能够得到没有毛刺的脉冲波。
1.3 中断法消抖
每个按键都外接到外部中断口上,当有按键按下时,引起单片机的中断。
此种方法的好处在于不用在主程序不断循环查询,只要有中断再去做相应处理,不足之处在于一个单片机的中断源是相当宝贵的,所以很少有人采用这种方法。
如前所述,若采用硬件消抖电路,那么N个键就必须配有N个防抖电路。
因此,当按键的个数比较多时,硬件防抖将无法胜任。
在这种情况下,可以采用软件的方法进行防抖。
软件消抖的实质在于降低键盘输入端口的采样频率,将高频抖动略去,即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消
失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。
当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入
该键的处理程序。
一般程序代码如下:
if(value == 0) //一旦检测到键值
{ Delay(); //延时20ms,有效滤除按键的抖动
if(value == 0) //再次确定键值是否有效
{ …… //执行相应处理
}
}
在实际应用中软件消抖技术并不单纯运用在按键上,也可运用于其他地方,以使程序运行更加合乎我们的要求,如下面二种情况:
1)在某些情况下,例如系统受到外部震动,也会在按键电路中出现电平抖动,但这种抖动不是控制者所希望的操作,如果没有防抖程序,那么系统会因这种不希望出现的干扰而错误动作。
2)为了避免系统误判,可以编写防抖动程序。
下面就第一种情况(在行程控制系统中)采用这种技术,看看能否提高系统性能,更好的实现功能,弥补常用方法的不足!
以一个简单的工控项目来举例说明,项目要求:上电后,一个普通电机控制一个滑块从左边往右边推,最右边有一个行程开关,滑块碰到行程开关后,电机停止,运动结束。
转化成单片机编程思路:用1个IO口输出,高电平时电机运动,低电平时电机停止。
另1个IO口作输入,检测行程开关的电平状态,如果发现是高电平说明还没碰上行程开关感应器,如果发现是低电平就说明碰上了感应器,此时就可以发出停止电机的命令。
思路一:直接判断行程感应器的电平状态,一旦发现低电平,就认为电机已经碰到了行程开关,马上停止电机。
这种思路的优点是响应及时,但缺点是太灵敏,抗干扰能力非常差,在工控环境里,当电机正在行进的过程中,如果受到电源的波动或者外来的毛刺信号干扰,行程开关的输入信号可能会读取到瞬间的低电平,导致单片机误判断,提前把电机停止了,电机还没碰到行程开关就草率停机。
思路二:在判断行程感应器的电平状态时,加入了软件的抗干扰处理(即软件消抖技术),一旦发现低电平,一个计时器开始计时,在计时的期间,如果发现出现高电平就马上把计时器清零,如果一直是低电平,并且期间没有出现高电平,就认为
是稳定的低电平,此时判定是碰到了行程开关。
这种思路的优点是增加了抗干扰处理,几乎能百分百保证电机碰到了行程开关才停机,不会有第一种思路的误判了。
缺点是因为在软件抗干扰环节增加了一小段延时,而这一小段的延时,会导致电机碰到行程开关后没有马上停止,滑块继续往右运动一小段时间才停止,这样因为有应力存在,系统运行时间长了容易把右边的限位机械结构压坏挤坏。
思路三:本思路是结合了前面两种的优点,在判断行程感应器的电平状态时,当发现是低电平时(哪怕是干扰时出现的瞬间低电平),电机马上暂停(暂停和停止的概念不一样,虽然电机都是没有转),当发现是高电平时,电机继续运行,什么时候才认为碰到行程开关?当低电平像思路二那样连续持续低电平的时间超过某个值时,才认为碰到了行程开关。
在此判断低电平的小延时期间,电机是处于暂停的
状态(没有转),所以不会过冲挤压右边的行程限位机构。
这种思路优点是既能及时响应,又增加了行程开关检测的抗干扰处理,又不会让电机过冲挤压右边的行程开关,第三种思路能够更好的实现功能,并能有效防止干扰!传统单片机系统大多是串行处理,只能并行处理一些中断程序。
对于这样的系统,只能采用单纯软件或硬件消抖,但都不那么完美。
在实际的应用中,为了提高系统的稳定性和可靠性,往往是在硬件消抖技术的基础上再适当应用软件消抖技术,这样能更好的满足系统的需要。
【相关文献】
[1]邢远秀,陈姚节. 键盘消抖电路的研究与分析[J].中国科技信息,2008(1):67-68.
[2] 杨立宏. 基于单片机的一种消抖方法及应用[J].无线互联科技, 2014(07):166
[3] 印健健.基于C语言的抗干扰消抖按键程序设计[J].数字技术与应用2015(08):185
[4] 张松林.单片机按键防抖方法的浅析[J].科技创新导报2010(28):56。