基于VHDL的按键消抖程序设计
2017-09-15程佳佳
程佳佳
摘 要 按键被广泛用于基于CPLD/FPGA的数字电路系统设计中,机械式按键开关在按键操作时经常会出现抖动现象,如果不进行消除将会造成电路系统的误操作。基于此介绍了采用VHDL语言有限状态机的方法实现消抖的电路系统的工作原理、编程思路,并进行了硬件验证,消抖效果良好,性能稳定,可广泛用于CPLD/FPGA的按键电路中。
关键词 按键消抖 电路仿真 VHDL 状态机
中图分类号:TP274 文献标识码:A
0引言
按键开关是电子设备实现人机对话的重要器件之一。而大多数按键都采用机械触点的方式。因此其最大的缺陷就在于在触点闭合和断开瞬间会伴随一连串的随机抖动,这些抖动往往会造成电路的误动作,而使整个系统工作异常。因此在具有按键开关的电路系统中,尤其是在密码锁等精确度要求高的电路中,需要加入按键消抖模块,确保按键每按一次只做一次响应。
1按键消抖方案
按键消抖一般采用硬件和软件消抖两种方法。硬件消抖是利用电路滤波的原理实现,软件消抖是通过按键延时来实现。目前。随着EDA技术的广泛应用,更多采用软件消抖,主要采用延时的原理。本文将介绍两种在可编程逻辑器件FPGA/CPLD设计数字系统,基于VHDL语言设计的按键消抖方法。
1.1计数器型消抖
此方法的基本思想是:通过计数的方法来测量高电平的持续时间,若时间小于N(计数器模值)个时钟周期则认为是抖动产生的毛刺,则从消除毛刺的角度来设计。因此设置当按键开关按下key_in=1,计数器以时钟上升沿开始计数,计数值持续加1;若key_in=0时,计数器清零。只有当计数值为N,keyout=1,而且计数器进入保持状态,其余情况下keyout=0。即抖动产生的毛刺作用不可能使计数器有输出,这样防抖动目的就得以实现。而且在本方法中,clk的时钟周期与N可以根据按键抖动时间由设计者自行设定。
从波形图上我们看到(如图2),此方案不仅消除了按键抖动产生的毛刺即窄脉冲,也可以将干扰、噪音等其他尖峰波滤除,但遇到脉宽大于N个clk时钟周期的干扰、噪音等时会有输出从而产生误操作。
1.2状态机消抖
此方法的主要编程思路:因为按键消抖的关键是提取稳定的低电平(或高电平)状态,滤除按键稳定前后的抖动脉冲。因此可以用一个时钟脉冲信号对按键状态进行取样,当第一次采样到低电平时,启动延时电路,延时结束后,再对按键信号进行连续三次取样,如果三次取样都为低电平,则可以认为按键已经处在稳定状态,这时输出一个低电平的按键确认信号,如果连续三次的取样中,至少有一次是高电平,则认为按键仍处在抖动状态,此时不进行按键确认,按键输出信号为高电平。
由于按键抖动的时间一般为5到10ms,因此时钟信号clk可以使用200Hz的周期信号(周期为5ms),即5ms采样一次按键信号,若采样到低电平,则进行消抖延时;当连续两次采样到的按键信号都为低电平时,认为按键稳定的按下。在按键稳定按下后,采样到按键为高电平时,认为按键释放。
从波形图上我们可以看出,此方法可以实现消抖,而且经验证,性能稳定。
2结束语
本文介绍了两种基于VHDL语言的按键消抖方法,并且将相应程序下载到CPLD芯片中进行硬件测试,确保能够实现消抖。当然,按键消抖方法多种多样,作者在此也重在将相应编程消抖思路提供給VHDL语言及CPLD/FPGA器件应用中遇到类似问题的初学者,能提供给他们更多的工程经验。endprint