0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA实现按键消抖处理

FPGA技术实战 ? 来源:FPGA技术实战 ? 2024-10-24 14:54 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言:按键在电子产品中经常用到,由于按键的机械特性,按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性。因此,必须对抖动进行处理。本文介绍如何在FPGA中实现按键消抖处理。

1. 原理概述

在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。按键抖动如下图所示。

wKgZoWcZ70mAC2W4AACAmfe5EFc997.png

图1:按键机械抖动

wKgaomcZ70mACMGpAAB6oBD80YQ996.png

图2:按键输入在FPGA IO接口产生的抖动

抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。按键抖动会引起一次按键被误读多次,如图2所示。

按键消抖处理即:每次在按键闭合或松开期间,跳过这段抖动时间,再检测按键的状态。故通过简单的延时就可实现按键的消抖动。

2.软件代码设计

按键滤波模块key_filter.v设计采用状态机实现按键按下和弹起检测。

10ms延迟定时器

always @(posedge clk_i)begin //10ms 延迟定时器
    if(cnt10ms < CNT_10MS) 
        cnt10ms <= cnt10ms + 1'b1;
    else 
        cnt10ms <= 25'd0;
end

按键检测状态机:

always @(posedge clk_i)begin
    key_s_r <= key_s;
end


always?@(posedge?clk_i)begin
    if(en_10ms)begin //10ms 延迟定时器
        case(key_s)
        KEY_S0:begin
           if(!key_i) //判断按键是否按下,如果按下,则转入状态KEY_S1
               key_s <= KEY_S1; 
        end  
        KEY_S1:begin
           if(!key_i) //10ms后,再次判断按键是否按下,
               key_s <= KEY_S2; //如果按下,则转入状态KEY_S2
            else 
               key_s <= KEY_S0; //如果未按下,则转回KEY_S0
        end 
        KEY_S2:begin
           if(key_i) //10ms后,判断按键是否弹起,如果弹起,则转入状态KEY_S3
               key_s <= KEY_S3; 
        end  
        KEY_S3:begin
           if(key_i) //10ms后,再次判断按键是否弹起,
              key_s <= KEY_S0; //如果弹起,则转入状态KEY_S0
            else   
              key_s <= KEY_S2; //如果未弹起,则转回KEY_S2
        end
        endcase                  
    end
end
按键有效输出:当状态从KEY_S1 转到 KEY_S2 代表依次按钮按下 key_cap 输出一次高电平。
assign key_cap = (key_s==KEY_S2)&&(key_s_r==KEY_S1);

3.硬件测试与验证

硬件平台:XC7Z035FFG676-2

Vivado软件:2017.4

工程编译完成后,下载bit文件到电路板,测试结果如下所示。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22070

    浏览量

    619743
  • 接口
    +关注

    关注

    33

    文章

    9032

    浏览量

    153983
  • 状态机
    +关注

    关注

    2

    文章

    493

    浏览量

    28316
  • 按键消抖
    +关注

    关注

    2

    文章

    28

    浏览量

    10685

原文标题:FPGA入门基础之按键消抖实验

文章出处:【微信号:FPGA技术实战,微信公众号:FPGA技术实战】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    按键电路的实现方式

    按键通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也
    的头像 发表于 08-29 11:25 ?5193次阅读

    fpga教程之——按键

    电平,这次对按键进行操作则是对FPGA进行输入了。  2. 按键  2.1 按键输入原理  
    发表于 02-27 11:49

    按键

    请问大家的按键是用什么方法解决的,如普通的按键如何
    发表于 09-26 22:17

    FPGA按键的方法

    FPGA按键的方法
    发表于 05-01 16:12

    技术分享:明德扬按键的原理和基于fpga设计

    高频抖动略去。需要注意的是,软件需要占据一定的系统资源。尽管硬件和软件
    发表于 08-02 10:38

    【Runber FPGA开发板】配套视频教程——按键实验

    本视频是Runber FPGA开发板的配套视频课程,主要介绍按键的方法和FPGA如何实现
    发表于 04-13 10:35

    MCU按键问题

    按键问题机械按键是必须的,1、延时
    发表于 11-04 06:37

    STM32单片机按键FPGA按键的相关资料分享

    写在前面:STM32单片机按键FPGA按键
    发表于 01-18 06:39

    按键都有哪些处理方式?

    按键都有哪些处理方式除了硬件电路用软件怎么实现
    发表于 11-01 07:06

    基于FPGA按键电路设计

    采用了VHDL语言编程的设计方法,通过FPGA实现按键的硬件电路。论述了基于计数器、RS触发器和状态机3种方法来
    发表于 12-05 14:13 ?224次下载

    VHDL—按键

    按键检测需要,一般有硬件和软件两种方式。硬件就是加去抖动电路,这样从根本上解决按键抖动问题。除了用专用电路以外,用可编程FPGA或者CP
    发表于 11-11 17:17 ?2次下载

    vhdl按键程序(七种方式实现按键

    按键通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也
    发表于 01-29 16:04 ?5.7w次阅读
    vhdl<b class='flag-5'>按键</b><b class='flag-5'>消</b><b class='flag-5'>抖</b>程序(七种方式<b class='flag-5'>实现</b><b class='flag-5'>按键</b><b class='flag-5'>消</b><b class='flag-5'>抖</b>)

    按键的软件和硬件方法

    采用锅仔片式按键测量波形。按键按下与抬起的部分都出现抖动,大致时间10ms左右。为了防止按键误按或者重复识别,必须要按键
    的头像 发表于 03-01 10:53 ?1.6w次阅读
    <b class='flag-5'>按键</b><b class='flag-5'>消</b><b class='flag-5'>抖</b>的软件和硬件方法

    FPGA实现按键的方法

    通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键
    的头像 发表于 09-05 10:43 ?1626次阅读
    <b class='flag-5'>FPGA</b>内<b class='flag-5'>实现</b><b class='flag-5'>按键</b><b class='flag-5'>消</b><b class='flag-5'>抖</b>的方法

    如何在FPGA实现按键

    FPGA(现场可编程门阵列)中实现按键是一个重要的设计环节,特别是在处理用户输入时,由于物
    的头像 发表于 08-19 18:15 ?3666次阅读