基于状态机的按键消抖原理

摸鱼记录 Day_13    (=^▽^=)

1.  今日摸鱼任务

以按键消抖为例,学习状态机分析(=^▽^=)

        小梅哥视频:15A 基于状态机的按键消抖原理与状态转移图_哔哩哔哩_bilibili

        学习资料:02_【逻辑教程】基于HDL的FPGA逻辑设计与验证教程V3.4【产品资料】【Zynq开发板】小梅哥ACZ702开发板全套资料下载 - ACZ702开发板 - 芯路恒电子技术论坛 - Powered by Discuz!

2.  按键消抖原理

        按键的硬件结构如图1:

图1.普通按键硬件结构图

         EDA 扩展板所载的均为贴片按键,原理图如图2:

图2.EDA拓展版贴片按键原理图
        由原理图可以看出,按键未按下时 IO 口为高电平,按键按下时则变为低电平,因此系统即可通过检测 IO 的电平来判断按键的状态。

        从图1中可以看到按键存在一个(3)反作用弹簧,因此当按下或者松开时均会产生额外的物理抖动,物理抖动便会产生电平的抖动。

图4.按键从按下到松开原理图

        按键从按下再到松开的过程中,其电平变化如图4,上为理想波形输出,下为实际波形输出。

        产生的抖动次数以及间隔时间均是不可预期的,这就需要通过滤波来消除抖动可能对外部其他设备造成的影响。一般情况下抖动的总时间会持续 20ms 以内。

        这种抖动,可以通过硬件电路或者逻辑设计的方式来消除,也可以通过软件的方式完成。

        其中硬件电路消除抖动适用于按键数目较少的场合。

3.  按键状态分析

IDLE 空闲态,高电平,等待按键按下
FILTER0按键按下消抖,持续20ms低电平认为按键按下,否则回到IDLE
DOWN按键按下,低电平,等待按键释放
FILTER1按键释放消抖,持续20ms高电平认为按键释放IDLE,否则回到DOWN

4.  状态转移标志

nedge_key按键检测到下降沿
cnt_2020ms计数器,设 需要计数到N
pedge_key按键检测到上升沿

5.  状态转移分析

当前状态下一状态转移条件

IDLE

IDLEnedge_key == 0
FILTER0nedge_key == 1
FILTER0IDLEpedge_key == 1
FILTER0pedge_key == 0  &&  cnt_20 < N   计数状态
DOWNpedge_key == 0  &&  cnt_20 >= N
DOWNDOWNpedge_key == 0 
FILTER1pedge_key == 1
FILTER1DOWNnedge_key == 1
FILTER1nedge_key == 0  &&  cnt_20 < N   计数状态
IDLEnedge_key == 0  &&  cnt_20 >= N

//未安装Visio将就一下啦~

//好啦,摸鱼结束哩   (=^▽^=)

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值