加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 1. 原理概述
    • 2.软件代码设计
    • 3.硬件测试与验证
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

FPGA入门基础之按键消抖实验

05/14 11:30
4507
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

1. 原理概述

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

图1:按键机械抖动

图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                      endend

按键有效输出:当状态从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文件到电路板,测试结果得以验证。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
XC6SLX9-2CPG196I 1 AMD Xilinx Field Programmable Gate Array, 715 CLBs, 667MHz, 9152-Cell, CMOS, PBGA196, 8 X 8 MM, 0.50 MM PITCH, LEAD FREE, BGA-196
$50.98 查看
EP2C35F672C8N 1 Altera Corporation Field Programmable Gate Array, 2076 CLBs, 402.5MHz, 33216-Cell, CMOS, PBGA672, LEAD FREE, FBGA-672
$143.31 查看
LFE3-95EA-6FN672I 1 Lattice Semiconductor Corporation Field Programmable Gate Array, 375MHz, 92000-Cell, PBGA672, 27 X 27 MM, LEAD FREE, FPBGA-672

ECAD模型

下载ECAD模型
暂无数据 查看

相关推荐

电子产业图谱

专注FPGA技术开发,涉及Intel FPGA、Xilinx FPGA技术开发,开发环境使用,代码风格、时序收敛、器件架构以及软硬件项目实战开发,个人公众号:FPGA技术实战。