基于独立按键消抖及原理分析

独立按键模型如下:

分析:在按键按下时,图中电路形成通路,在实际电路设计中将按键的一侧接到系统电源的GND上,另一侧接到FPGA芯片的管脚上,这样便可以通过FPGA IO口的状态判断按键是否按下,为了保证FPGA的管脚在按键没有被按下时是一个确定的电平,所以在电路设计时加上一个上拉电阻,这样当独立按键没有被按下时,FPGA管脚默认会检测到高电平1,按键被按下时,FPGA的管脚直接与地接通,FPGA管脚就会检测到低电平0。

通过以上分析,从而可以画出按键从没有按下到按下FPGA (I/O)口上的电平的波形如下:

实际波形是否如上图所示呢?通过使用示波器对按键连接在FPGA管脚的线路进行波形抓取发现实际波形并非上图所示,实际波形如下:

通过观察理想波形与实际波形了解到在按键按下与按键抬起时都有明显的抖动过程,通过示波器抓取抖动时间,发现一般为20ms抖动阶段(按键按下、按键抬起)。由于FPGA工作速度是非常快,例如:系统时钟为50MHz,周期为20ns,即FPGA会以20ns的速度去采样管脚上的电平状态,当检测到抖动阶段的下降沿时,FPGA会认为发生了一次按键按下,让led灯加1很短的时间又弹回到高电平,在经过很短的时间又出现下降沿,FPGA又会误认为又来了一次按键事件,让led灯状态再次加1,在这样的情况下,一次按键便会触发led灯多次变化,并且不可预期,释放时同理,不再分析。因此便需要对这样的不稳定期作滤波处理,即按键消抖。(以按键驱动led灯为例)

本次设计利用状态机,对独立按键进行消抖,因此需要分析在实际电路中,独立按键分为哪几个状态,如下所示:

通过以上分析显而易见共有四个状态,分别为:空闲状态,按下抖动滤除状态(按下抖动状态),按下稳定状态,释放抖动滤除状态(抬起抖动状态)。

分析完状态之后,需明确分析,这几个状态之间是怎么进行跳转的,即状态跳转条件是什么。状态转移图如下:

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/jb9527/p/10002272.html