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

    文章

    1724

    浏览量

    43175
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217942
  • 开源项目
    +关注

    关注

    0

    文章

    38

    浏览量

    7564

原文标题:3. 总结

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    按键消抖的方法

    常用的方法是判断按键按下的时候进行一定的延时,代码如下: ((KEY==)delay_ms20;whilegpio_get)0;delay_ms20;beep)//蜂鸣器提示音}这种方法简单易懂
    发表于 11-27 06:12

    硬件消抖方案元件参数的计算方法

    硬件消抖是通过电路设计消除机械开关(如按键、继电器等)在闭合或断开时产生的抖动信号。以下是常见硬件消抖方案及其元件参数计算方法: 1. RC滤波消抖(低通滤波) 原理:利用电容的充放
    发表于 11-19 06:31

    新品 | Chain DualKey,可编程双按键输入开发板

    ChainDualKey是一款可编程双按键输入开发板,搭载ESP32-S3FN8主控芯片。正面集成2个支持热插拔的青轴机械键盘按键及2个可编程RGBLED,交互反馈优异;内置350mAh锂电池,结合
    的头像 发表于 10-31 16:31 1470次阅读
    新品 | Chain DualKey,可编程双<b class='flag-5'>按键</b>输入开发板

    ZTP800按键升级 | 0.3mm凸起,100万次按键寿命,手感爆棚!

    视频推荐频繁使用的薄膜按键如何提升操作体验和耐用性?ZTP800示教器从设计、结构、声音反馈等多方面对薄膜按键进行了升级,还优化了按键滤波算法,使其在实际应用中表现出色,快来了解一下吧。ZTP800
    的头像 发表于 09-10 11:43 330次阅读
    ZTP800<b class='flag-5'>按键</b>升级 | 0.3mm凸起,100万次<b class='flag-5'>按键</b>寿命,手感爆棚!

    Key_Scan按键扫描函数详解

    按键程序设计思路可以非常简单:想要知道某个按键是否被按下,只需检测连接到改按键的IO引脚是高电平还是低电平,若是低电平,说明按键正处于被按下的状态。
    的头像 发表于 08-04 14:01 1511次阅读

    BitsButton嵌入式按键处理框架

    功能 ​​位运算优化引擎​ 高效处理按键状态转换逻辑 硬件抽象层​ 统一接口适配各类硬件平台 ​​调试接口​​ 可插拔日志输出 四、核心数据结构 // 单按键对象 typedef s
    发表于 08-02 11:24

    请问k230 canmv平台按键怎么使用硬件中断?

    k230 canmv平台按键怎么使用硬件中断?
    发表于 06-13 07:10

    AS32X601驱动系列教程 GPIO_按键检测详解

    led熄灭。 硬件设计 评估板板载三个机械按键,分别接入MCU的PE10、PB4、PB3,当按键按下时,控制引脚通过按键接地,表现为低电平,
    的头像 发表于 05-23 16:44 641次阅读
    AS32X601驱动系列教程 GPIO_<b class='flag-5'>按键</b>检测详解

    第六章 GPIO输入——按键检测

    本篇文章讲述了如何在W55MH32上实现按键输入检测,以及按键输入检测的注意事项、实现方式和代码讲解等。掌握了按键检测方式之后,我们就可以用按键控制我们想要实现的其他功能啦。
    的头像 发表于 05-22 16:41 749次阅读
    第六章 GPIO输入——<b class='flag-5'>按键</b>检测

    触摸按键噪声对策 瑞萨CTSU MCU在应对噪声困扰时软硬件设计注意点

    ,以及软硬件设计中的一些注意点。   1 触摸按键产品线及噪声性能 瑞萨拥有广泛的触摸按键产品线,覆盖了16/32位,3大内核MCU产品,客户在选择时拥有更多的选择性。   新的CTSU2产品拥有如下特性能够增强噪声性能的功能,
    的头像 发表于 03-31 18:31 1583次阅读
    触摸<b class='flag-5'>按键</b>噪声对策  瑞萨CTSU MCU在应对噪声困扰时软<b class='flag-5'>硬件</b>设计注意点

    SDRAM控制器设计之按键的处理

    边沿检测经常用于按键输入检测电路中,按键按下时输入信号 key 变为低电平,按键抬起变为高电平。当输入的信号为理想的高低电平时(不考虑毛刺和抖动),边沿检测就发挥了很重要的作用。
    的头像 发表于 03-19 11:47 1142次阅读
    SDRAM控制器设计之<b class='flag-5'>按键</b>的处理

    KEY按键静电保护方案

    方案简介 KEY按键是电子设备中常见的输入设备之一,其原理简单,常见于许多应用,包括手机、汽车和人机界面 (HMD)。KEY按键通常由按键帽、弹簧、触点等部分组成。当按键被按下时,
    的头像 发表于 02-25 16:24 1214次阅读
    KEY<b class='flag-5'>按键</b>静电保护方案

    远心镜头应用手机按键检测

    远心镜头的手机按键检测方案具有高效、准确、稳定等优点。该方案能够实现对手机按键的全方位检测,包括按键的位置、高度、间隙以及弹力等参数。同时,该方案还具有良好的可扩展性和适应性,能够满足不同品牌和型号手机
    的头像 发表于 01-20 10:18 676次阅读
    远心镜头应用手机<b class='flag-5'>按键</b>检测

    蓝桥杯中GPIO输入之按键实验

    第一节按键的基本知识按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式
    的头像 发表于 01-09 21:02 1339次阅读
    蓝桥杯中GPIO输入之<b class='flag-5'>按键</b>实验

    开发第1个LVGL程序与实现按键操作

    开发第1个LVGL程序与实现按键操作
    的头像 发表于 01-07 13:49 4409次阅读
    开发第1个LVGL程序与实现<b class='flag-5'>按键</b>操作