您现在的位置:首页 >> 项目讲座 >> 项目开发经验 >> 内容

基于FPGA的按键消抖

时间:2017-8-5 13:58:16 点击:

  核心提示:基于FPGA的按键消抖...

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms10ms。这是一个很重要的时间参数,在很多场合都要用到。

图按键毛刺

按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法。
   
硬件消抖:在键数较少时可用硬件方法消除键抖动。下图所示的RS触发器为常用的硬件去抖。图中两个与非门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。

软件消抖:如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms10ms的延时,待后沿抖动消失后才能转入该键的处理程序。

在这里,我们利用FPGA来实现软件来实现按键的消抖功能,具体的过程如下所示:

always@(posedge clk )

begin

     if(!rst) begin

            cnt_delay<=0;

            start_delaycnt<=0;

      end

     else if(start_delaycnt) begin

            if(cnt_delay!=20'd800000) begin

                   cnt_delay<=cnt_delay+1;

             end

            else begin

                   cnt_delay<=0;

                   start_delaycnt<=0;

             end

      end

     else begin

            if(!key_input&&cnt_delay==0)

                          start_delaycnt<=1;

      end

end

//消除按牛抖动

always@(posedge clk)

begin

     if(!rst)

            key_entry1<=0;

     else begin

            if(key_entry2)

                   key_entry1<=0;

            else if(cnt_delay==20'd800000) begin

                   if(!key_input)

                          key_entry1<=1;

             end

      end

end

通过这个过程,我们可以将按键的毛刺消除掉,从而实现系统的稳定。

作者:基于FPGA的按键消抖 来源:基于FPGA的按键消抖
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
  • 上一篇:波特率的计算方法概述
  • 下一篇:没有了
  • 相关文章
    • 没有相关文章
    相关评论
    发表我的评论
    • 大名:
    • 内容:
  • MATLAB代做,MATLAB专业代做,MATLAB淘宝代做(www.hslogic.com) © 2018 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment