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

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

3天内不再提示

机械按键硬件原理

Linux阅码场 来源:Linux阅码场 作者:Linux阅码场 2022-05-30 10:37 次阅读

1. 背景

1.1 机械按键硬件原理

机械按键是指在硬件电路中,通过机械按键开关实现电平信号的通断来达到按键触发的硬件组件,见图1.1:

04794188-dfae-11ec-ba43-dac502259ad0.png

图1.1

嵌入式电子设计中,机械按键的检测两种方法:

● 扫描检测:定时扫描IO口状态

● 中断检测:启用IO中断

  此后的内容都是围绕定时扫描IO口状态的方式展开的。

1.2 机械按键抖动

1.2.1 抖动原因

由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动。设按键时间为Ta,抖动时间Td,则Ta、Td的特性如下(见图1.2.1):
● Ta≈100ms(最快50ms);
● Td≈10ms;

04d21506-dfae-11ec-ba43-dac502259ad0.png

图1.2.1

1.2.2 按键消抖

理想的按键波形是没有抖动的,但实际的波形是有电平抖动的,对实际波形进行数字化抽象后会发现数字信号存在毛刺,见图1.2.2:

0534d240-dfae-11ec-ba43-dac502259ad0.png

图1.2.2

为了消除电平信号的毛刺,目前工程上有两种手段,硬件消抖和软件消抖:

A. 硬件消抖

● 在硬件电路上和按键并联滤波电容

B. 软件消抖

● 延时确认:当检测到按键状态改变时,先延时20ms,再次检测按键;
● 持续采样:持续采集按键状态,用数字状态机逻辑来判断按键动作。

硬件消抖需要增加元器件,增加项目成本,软件消抖采用延时确认方式时,软件程序需要延时等待,延时过程不能进行其他处理,对程序架构不太友好,而持续采样不会对程序流程造成阻塞,后续对持续采样方式进行深入阐述。

2. 数字逻辑状态机的软件实现

2.1 抽象建模

2.1.1 按键操作状态抽象

一次按键动作可以抽象为3个状态,按下、抬起、长按:
● Keydown:一次按键操作的按下
● Keyup:一次按键操作的抬起
● Keypress:一次按键操作持续按住按键


058e5e78-dfae-11ec-ba43-dac502259ad0.png

图2.1.1

2.1.2 系统抽象

将软件扫描按键状态的软件系统进行数字逻辑电路抽象:
时钟抽象:软件每隔20ms采集一次按键的状态;
● 状态抽象:连续扫描3次得到状态序列011时,keydown才置1;
● 逻辑电路抽象:可以抽象为串行数据检测器,只有输入011才置1,采用同步时序逻辑电路的设计思路。

05aedb80-dfae-11ec-ba43-dac502259ad0.png

图2.1.2

2.2 数字逻辑算法实现

2.2.1 数字逻辑抽象

A. 变量定义

● Scankey:软件定时扫描的按键IO口状态(0/1);
● Keydown:一次按键操作的按下;

B. 状态逻辑抽象

● 设按键输入Scankey为X,输出结果Keydown为Y;
● 设没有1输入以前的状态为a;
● 设输入一个1后为状态为b;
● 设前后有两个1输入后状态为c;
● 设连续有三个1状态为d

C. 状态转换图

经过上面的数字逻辑抽象后,可以得到状态转换图和状态转换表:

05e08d38-dfae-11ec-ba43-dac502259ad0.png

图2.2.1

2.2.2 求解过程

A. 化简状态转换图

通过上节的状态转换图和状态转换表(图2.2.1)可看出,状态c和状态d拥有相同的状态转换路径,所以可以将状态c和状态d合并为同一个状态c,化简后得到相应的状态转换图和状态转换表,见图2.2.2.A:

0611da0a-dfae-11ec-ba43-dac502259ad0.png

图2.2.2.A

B. 卡诺图

根据状态分配原则,状态M=3,所以取触发器位数n=2,可以选用两个D触发器:D0和D1,且输出为Q0、Q1。如果取Q1Q0的状态00、01、10分别代表状态a、b、c,依据状态转换图得到如下卡诺图。

065ad7fa-dfae-11ec-ba43-dac502259ad0.png

图2.2.2.B

C. 分解卡诺图

将卡诺图分解,得到图2.2.2.C:

0684b854-dfae-11ec-ba43-dac502259ad0.png

图2.2.2.C

D. 解方程

● 由Q1*、Q0*的卡诺图,可得状态方程:

Q1*=XQ0 +XQ1Q0*=XQ1ˊQ0ˊ

● 又因为D触发器特性方程为Q*=D,所以有:

Q0* = D0Q1* = D1

● 结合状态方程,得驱动方程:

D1 = XQ0 +XQ1D0 = XQ1ˊQ0ˊ

● 由Y的卡诺图得输出方程:

Y = XQ0

E. 转为C程序算法

定义每次扫描得到的按键电平信号状态的变量为Scankey,得按键按下Keydown相应C代码:

D1=Scankey & (Q0 | Q1); D0=Scankey & (~Q0) & (~Q1); Keydown=Scankey & Q0;Q1=D1;Q0=D0;

系统设计时申请一个时钟定时器资源,20sm触发一次,每次触发定时中断时扫描得到按键电平状态Scankey,并进行上述算法运算,得到Keydown状态,同理可推出Keyup和Keypress的算法,感兴趣者可自行推算。

3. 总结

上述数字状态机软件可以把一次按键操作的Keydown、Keyup、Keypress一起检出,代码精简,效率高。当然这种方式对系统实时性有要求,状态会随输入改变而改变,同时耗费系统定时器资源,需要定时查询。

审核编辑 :李倩

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

    关注

    8

    文章

    1580

    浏览量

    40564
  • Linux
    +关注

    关注

    87

    文章

    11304

    浏览量

    209528
  • 开源项目
    +关注

    关注

    0

    文章

    37

    浏览量

    7190

原文标题:3. 总结

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    1.3 TFT+4按键资料分享

    1.3 TFT+4按键-资料
    发表于 11-24 15:45 0次下载

    基于FPGA实现按键消抖处理

    引言: 按键在电子产品中经常用到,由于按键机械特性,按键在闭合或松开的瞬间伴随着一连串的抖动,这样的抖动将直接影响设计系统的稳定性。因此,必须对抖动进行处理。本文介绍如何在FPGA中
    的头像 发表于 10-24 14:54 245次阅读
    基于FPGA实现<b class='flag-5'>按键</b>消抖处理

    AD快捷按键

    电子发烧友网站提供《AD快捷按键.docx》资料免费下载
    发表于 10-24 10:45 1次下载

    电容式触摸按键按键扩展方法

    电子发烧友网站提供《电容式触摸按键按键扩展方法.pdf》资料免费下载
    发表于 09-27 11:43 0次下载
    电容式触摸<b class='flag-5'>按键</b>的<b class='flag-5'>按键</b>扩展方法

    机械振动机械能守恒吗

    机械振动中的机械能是否守恒,取决于振动系统的具体条件和外部作用力。以下是对这一问题的分析: 一、机械振动与机械能守恒的基本概念 机械振动 :
    的头像 发表于 09-26 14:47 375次阅读

    两种常见的硬件消抖实现方式

    由于机械按键在操作过程中会产生抖动现象,这种抖动信号如果不加以处理,就可能导致单片机等电子设备误判按键状态,从而引发错误操作。本文将详细介绍两种常见的硬件消抖实现方式:RS触发器和电容
    的头像 发表于 09-25 16:54 1257次阅读
    两种常见的<b class='flag-5'>硬件</b>消抖实现方式

    为什么按键消抖那么重要

    按键稳定性和可靠性对于整个系统的性能至关重要。然而,由于机械触点的弹性作用,按键在闭合和断开时往往伴随着抖动现象。这种抖动虽然对人类来说微不足道,但对于高速运行的单片机而言,却可能导致严重的误判
    的头像 发表于 09-25 16:50 544次阅读
    为什么<b class='flag-5'>按键</b>消抖那么重要

    如何在FPGA中实现按键消抖

    在FPGA(现场可编程门阵列)中实现按键消抖是一个重要的设计环节,特别是在处理用户输入时,由于物理按键机械特性和电气特性,按键在按下和释放的瞬间会产生抖动现象,这种抖动可能导致系统错
    的头像 发表于 08-19 18:15 1914次阅读

    按键开关连接器立式贴片 轻触按键3*6*2.5H

    按键开关连接器立式贴片 轻触按键3*6*2.5H
    发表于 06-18 09:42 0次下载

    【AWTK使用经验】如何响应物理按键

    ZTP800示教器设备上有许多按键,假设想在自己的AWTK程序中检测并使用这些按键响应事件,则需要使用AWTK绑定物理按键的功能。本篇文章将借助一个检测按键的dem
    的头像 发表于 06-06 08:25 803次阅读
    【AWTK使用经验】如何响应物理<b class='flag-5'>按键</b>

    触摸按键PCB 设计要点V01

    为解决传统的机械按键输入方式易磨损、易藏污垢、寿命短等问题,将电容式触摸技术应 用到触摸按键之中,开展了对电容式触摸感应技术的分板,电容式触摸技术电路简单,因些适用 于各种家用电器。 根据
    发表于 03-20 16:39 5次下载

    为什么要进行按键消抖?按键抖动的原理 按键消抖的方法

    按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键
    的头像 发表于 02-17 17:07 1.8w次阅读
    为什么要进行<b class='flag-5'>按键</b>消抖?<b class='flag-5'>按键</b>抖动的原理 <b class='flag-5'>按键</b>消抖的方法

    按键式和蓝牙时控开关的设置方法

    按键式和蓝牙时控开关的设置方法  在现代家居设计中,安装一款高质量的开关系统对于实现智能化控制是至关重要的一步。在这篇文章中,我们将详细讨论按键式和蓝牙时控开关的设置方法,以帮助读者了解如何正确安装
    的头像 发表于 02-05 11:32 1177次阅读

    触摸按键的工作原理是什么

    触摸按键技术是现代电子设备中常见的一种交互方式,它允许用户通过触摸屏幕上的虚拟按键来控制设备的功能。这种技术的发展和应用已经深入到我们生活的方方面面,从智能手机、平板电脑到家用电器等,都可以看到触摸
    的头像 发表于 02-04 14:27 7028次阅读

    可靠耐用的触摸按键测试展示

    触摸按键
    ICman
    发布于 :2024年01月12日 15:41:08