0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)械按鍵硬件原理

Linux閱碼場(chǎng) ? 來(lái)源:Linux閱碼場(chǎng) ? 作者:Linux閱碼場(chǎng) ? 2022-05-30 10:37 ? 次閱讀

1. 背景

1.1 機(jī)械按鍵硬件原理

機(jī)械按鍵是指在硬件電路中,通過(guò)機(jī)械按鍵開(kāi)關(guān)實(shí)現(xiàn)電平信號(hào)的通斷來(lái)達(dá)到按鍵觸發(fā)的硬件組件,見(jiàn)圖1.1:

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

圖1.1

嵌入式電子設(shè)計(jì)中,機(jī)械按鍵的檢測(cè)兩種方法:

● 掃描檢測(cè):定時(shí)掃描IO口狀態(tài)

● 中斷檢測(cè):?jiǎn)⒂肐O中斷

??此后的內(nèi)容都是圍繞定時(shí)掃描IO口狀態(tài)的方式展開(kāi)的。

1.2 機(jī)械按鍵抖動(dòng)

1.2.1 抖動(dòng)原因

由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上就穩(wěn)定的接通,在斷開(kāi)時(shí)也不會(huì)一下子徹底斷開(kāi),而是在閉合和斷開(kāi)的瞬間伴隨了一連串的抖動(dòng)。設(shè)按鍵時(shí)間為T(mén)a,抖動(dòng)時(shí)間Td,則Ta、Td的特性如下(見(jiàn)圖1.2.1):
● Ta≈100ms(最快50ms);
● Td≈10ms;

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

圖1.2.1

1.2.2 按鍵消抖

理想的按鍵波形是沒(méi)有抖動(dòng)的,但實(shí)際的波形是有電平抖動(dòng)的,對(duì)實(shí)際波形進(jìn)行數(shù)字化抽象后會(huì)發(fā)現(xiàn)數(shù)字信號(hào)存在毛刺,見(jiàn)圖1.2.2:

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

圖1.2.2

為了消除電平信號(hào)的毛刺,目前工程上有兩種手段,硬件消抖和軟件消抖:

A. 硬件消抖

● 在硬件電路上和按鍵并聯(lián)濾波電容

B. 軟件消抖

● 延時(shí)確認(rèn):當(dāng)檢測(cè)到按鍵狀態(tài)改變時(shí),先延時(shí)20ms,再次檢測(cè)按鍵;
● 持續(xù)采樣:持續(xù)采集按鍵狀態(tài),用數(shù)字狀態(tài)機(jī)邏輯來(lái)判斷按鍵動(dòng)作。

硬件消抖需要增加元器件,增加項(xiàng)目成本,軟件消抖采用延時(shí)確認(rèn)方式時(shí),軟件程序需要延時(shí)等待,延時(shí)過(guò)程不能進(jìn)行其他處理,對(duì)程序架構(gòu)不太友好,而持續(xù)采樣不會(huì)對(duì)程序流程造成阻塞,后續(xù)對(duì)持續(xù)采樣方式進(jìn)行深入闡述。

2. 數(shù)字邏輯狀態(tài)機(jī)的軟件實(shí)現(xiàn)

2.1 抽象建模

2.1.1 按鍵操作狀態(tài)抽象

一次按鍵動(dòng)作可以抽象為3個(gè)狀態(tài),按下、抬起、長(zhǎng)按:
● Keydown:一次按鍵操作的按下
● Keyup:一次按鍵操作的抬起
● Keypress:一次按鍵操作持續(xù)按住按鍵


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

圖2.1.1

2.1.2 系統(tǒng)抽象

將軟件掃描按鍵狀態(tài)的軟件系統(tǒng)進(jìn)行數(shù)字邏輯電路抽象:
時(shí)鐘抽象:軟件每隔20ms采集一次按鍵的狀態(tài);
● 狀態(tài)抽象:連續(xù)掃描3次得到狀態(tài)序列011時(shí),keydown才置1;
● 邏輯電路抽象:可以抽象為串行數(shù)據(jù)檢測(cè)器,只有輸入011才置1,采用同步時(shí)序邏輯電路的設(shè)計(jì)思路。

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

圖2.1.2

2.2 數(shù)字邏輯算法實(shí)現(xiàn)

2.2.1 數(shù)字邏輯抽象

A. 變量定義

● Scankey:軟件定時(shí)掃描的按鍵IO口狀態(tài)(0/1);
● Keydown:一次按鍵操作的按下;

B. 狀態(tài)邏輯抽象

● 設(shè)按鍵輸入Scankey為X,輸出結(jié)果Keydown為Y;
● 設(shè)沒(méi)有1輸入以前的狀態(tài)為a;
● 設(shè)輸入一個(gè)1后為狀態(tài)為b;
● 設(shè)前后有兩個(gè)1輸入后狀態(tài)為c;
● 設(shè)連續(xù)有三個(gè)1狀態(tài)為d

C. 狀態(tài)轉(zhuǎn)換圖

經(jīng)過(guò)上面的數(shù)字邏輯抽象后,可以得到狀態(tài)轉(zhuǎn)換圖和狀態(tài)轉(zhuǎn)換表:

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

圖2.2.1

2.2.2 求解過(guò)程

A. 化簡(jiǎn)狀態(tài)轉(zhuǎn)換圖

通過(guò)上節(jié)的狀態(tài)轉(zhuǎn)換圖和狀態(tài)轉(zhuǎn)換表(圖2.2.1)可看出,狀態(tài)c和狀態(tài)d擁有相同的狀態(tài)轉(zhuǎn)換路徑,所以可以將狀態(tài)c和狀態(tài)d合并為同一個(gè)狀態(tài)c,化簡(jiǎn)后得到相應(yīng)的狀態(tài)轉(zhuǎn)換圖和狀態(tài)轉(zhuǎn)換表,見(jiàn)圖2.2.2.A:

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

圖2.2.2.A

B. 卡諾圖

根據(jù)狀態(tài)分配原則,狀態(tài)M=3,所以取觸發(fā)器位數(shù)n=2,可以選用兩個(gè)D觸發(fā)器:D0和D1,且輸出為Q0、Q1。如果取Q1Q0的狀態(tài)00、01、10分別代表狀態(tài)a、b、c,依據(jù)狀態(tài)轉(zhuǎn)換圖得到如下卡諾圖。

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*的卡諾圖,可得狀態(tài)方程:

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

● 又因?yàn)镈觸發(fā)器特性方程為Q*=D,所以有:

Q0* = D0Q1* = D1

● 結(jié)合狀態(tài)方程,得驅(qū)動(dòng)方程:

D1 = XQ0 +XQ1D0 = XQ1ˊQ0ˊ

● 由Y的卡諾圖得輸出方程:

Y = XQ0

E. 轉(zhuǎn)為C程序算法

定義每次掃描得到的按鍵電平信號(hào)狀態(tài)的變量為Scankey,得按鍵按下Keydown相應(yīng)C代碼:

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

系統(tǒng)設(shè)計(jì)時(shí)申請(qǐng)一個(gè)時(shí)鐘定時(shí)器資源,20sm觸發(fā)一次,每次觸發(fā)定時(shí)中斷時(shí)掃描得到按鍵電平狀態(tài)Scankey,并進(jìn)行上述算法運(yùn)算,得到Keydown狀態(tài),同理可推出Keyup和Keypress的算法,感興趣者可自行推算。

3. 總結(jié)

上述數(shù)字狀態(tài)機(jī)軟件可以把一次按鍵操作的Keydown、Keyup、Keypress一起檢出,代碼精簡(jiǎn),效率高。當(dāng)然這種方式對(duì)系統(tǒng)實(shí)時(shí)性有要求,狀態(tài)會(huì)隨輸入改變而改變,同時(shí)耗費(fèi)系統(tǒng)定時(shí)器資源,需要定時(shí)查詢。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)械
    +關(guān)注

    關(guān)注

    8

    文章

    1505

    瀏覽量

    40427
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11215

    瀏覽量

    208740
  • 開(kāi)源項(xiàng)目

    關(guān)注

    0

    文章

    36

    瀏覽量

    7164

原文標(biāo)題:3. 總結(jié)

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA實(shí)現(xiàn)按鍵消抖處理

    引言: 按鍵在電子產(chǎn)品中經(jīng)常用到,由于按鍵機(jī)械特性,按鍵在閉合或松開(kāi)的瞬間伴隨著一連串的抖動(dòng),這樣的抖動(dòng)將直接影響設(shè)計(jì)系統(tǒng)的穩(wěn)定性。因此,必須對(duì)抖動(dòng)進(jìn)行處理。本文介紹如何在FPGA中
    的頭像 發(fā)表于 10-24 14:54 ?140次閱讀
    基于FPGA實(shí)現(xiàn)<b class='flag-5'>按鍵</b>消抖處理

    AD快捷按鍵

    電子發(fā)燒友網(wǎng)站提供《AD快捷按鍵.docx》資料免費(fèi)下載
    發(fā)表于 10-24 10:45 ?1次下載

    電容式觸摸按鍵按鍵擴(kuò)展方法

    電子發(fā)燒友網(wǎng)站提供《電容式觸摸按鍵按鍵擴(kuò)展方法.pdf》資料免費(fèi)下載
    發(fā)表于 09-27 11:43 ?0次下載
    電容式觸摸<b class='flag-5'>按鍵</b>的<b class='flag-5'>按鍵</b>擴(kuò)展方法

    兩種常見(jiàn)的硬件消抖實(shí)現(xiàn)方式

    由于機(jī)械按鍵在操作過(guò)程中會(huì)產(chǎn)生抖動(dòng)現(xiàn)象,這種抖動(dòng)信號(hào)如果不加以處理,就可能導(dǎo)致單片機(jī)等電子設(shè)備誤判按鍵狀態(tài),從而引發(fā)錯(cuò)誤操作。本文將詳細(xì)介紹兩種常見(jiàn)的硬件消抖實(shí)現(xiàn)方式:RS觸發(fā)器和電容
    的頭像 發(fā)表于 09-25 16:54 ?712次閱讀
    兩種常見(jiàn)的<b class='flag-5'>硬件</b>消抖實(shí)現(xiàn)方式

    為什么按鍵消抖那么重要

    按鍵穩(wěn)定性和可靠性對(duì)于整個(gè)系統(tǒng)的性能至關(guān)重要。然而,由于機(jī)械觸點(diǎn)的彈性作用,按鍵在閉合和斷開(kāi)時(shí)往往伴隨著抖動(dòng)現(xiàn)象。這種抖動(dòng)雖然對(duì)人類(lèi)來(lái)說(shuō)微不足道,但對(duì)于高速運(yùn)行的單片機(jī)而言,卻可能導(dǎo)致嚴(yán)重的誤判
    的頭像 發(fā)表于 09-25 16:50 ?363次閱讀
    為什么<b class='flag-5'>按鍵</b>消抖那么重要

    如何在FPGA中實(shí)現(xiàn)按鍵消抖

    在FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)中實(shí)現(xiàn)按鍵消抖是一個(gè)重要的設(shè)計(jì)環(huán)節(jié),特別是在處理用戶輸入時(shí),由于物理按鍵機(jī)械特性和電氣特性,按鍵在按下和釋放的瞬間會(huì)產(chǎn)生抖動(dòng)現(xiàn)象,這種抖動(dòng)可能導(dǎo)致系統(tǒng)錯(cuò)
    的頭像 發(fā)表于 08-19 18:15 ?1284次閱讀

    按鍵開(kāi)關(guān)連接器立式貼片 輕觸按鍵3*6*2.5H

    按鍵開(kāi)關(guān)連接器立式貼片 輕觸按鍵3*6*2.5H
    發(fā)表于 06-18 09:42 ?0次下載

    為什么要進(jìn)行按鍵消抖?按鍵抖動(dòng)的原理 按鍵消抖的方法

    按鍵消抖通常的按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān),當(dāng)機(jī)械觸點(diǎn)斷開(kāi)、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵
    的頭像 發(fā)表于 02-17 17:07 ?1.7w次閱讀
    為什么要進(jìn)行<b class='flag-5'>按鍵</b>消抖?<b class='flag-5'>按鍵</b>抖動(dòng)的原理 <b class='flag-5'>按鍵</b>消抖的方法

    觸摸按鍵的工作原理是什么

    觸摸按鍵技術(shù)是現(xiàn)代電子設(shè)備中常見(jiàn)的一種交互方式,它允許用戶通過(guò)觸摸屏幕上的虛擬按鍵來(lái)控制設(shè)備的功能。這種技術(shù)的發(fā)展和應(yīng)用已經(jīng)深入到我們生活的方方面面,從智能手機(jī)、平板電腦到家用電器等,都可以看到觸摸
    的頭像 發(fā)表于 02-04 14:27 ?6518次閱讀

    手表按鍵力測(cè)試機(jī):品質(zhì)掌握在每一次按鍵

    手表按鍵力測(cè)試機(jī):品質(zhì)掌握在每一次按鍵
    的頭像 發(fā)表于 12-27 09:09 ?531次閱讀
    手表<b class='flag-5'>按鍵</b>力測(cè)試機(jī):品質(zhì)掌握在每一次<b class='flag-5'>按鍵</b>間

    五軸按鍵測(cè)試機(jī):精準(zhǔn)評(píng)估按鍵性能的利器

    五軸按鍵測(cè)試機(jī):精準(zhǔn)評(píng)估按鍵性能的利器
    的頭像 發(fā)表于 12-26 09:15 ?508次閱讀
    五軸<b class='flag-5'>按鍵</b>測(cè)試機(jī):精準(zhǔn)評(píng)估<b class='flag-5'>按鍵</b>性能的利器

    單片機(jī)按鍵消抖的原理和方法詳解

    通常的按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān),當(dāng)機(jī)械觸點(diǎn)斷開(kāi)、閉合時(shí),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通,在斷開(kāi)時(shí)也不會(huì)一下
    的頭像 發(fā)表于 12-22 10:06 ?8366次閱讀
    單片機(jī)<b class='flag-5'>按鍵</b>消抖的原理和方法詳解

    單片機(jī)按鍵切換模式怎么設(shè)置

    單片機(jī)作為一種微處理器,在各種嵌入式系統(tǒng)中扮演著核心控制器的角色。其中,按鍵輸入作為單片機(jī)控制中常見(jiàn)的交互方式,實(shí)現(xiàn)模式切換是常見(jiàn)的需求。本文將詳細(xì)介紹如何在單片機(jī)中實(shí)現(xiàn)按鍵切換模式。 一、硬件準(zhǔn)備
    的頭像 發(fā)表于 12-13 11:07 ?3678次閱讀

    STM32按鍵控制LED的亮滅

    使用一個(gè)按鍵控制LED的亮滅,按鍵按下時(shí)LED亮起,按鍵松開(kāi)時(shí)LED熄滅。通過(guò)按鍵控制實(shí)驗(yàn)來(lái)介紹下 IO 口作為輸入的使用。本例中用到了GPIOE的PE3管腳。
    的頭像 發(fā)表于 12-11 14:19 ?3517次閱讀
    STM32<b class='flag-5'>按鍵</b>控制LED的亮滅

    STM32怎么實(shí)現(xiàn)按鍵開(kāi)關(guān)機(jī)

    STM32按鍵開(kāi)關(guān)機(jī)需要以下步驟: 1. 硬件連接。 2. 配置GPIO引腳。 3. 編程實(shí)現(xiàn)按鍵檢測(cè)。 4. 編程實(shí)現(xiàn)開(kāi)關(guān)機(jī)控制功能。 詳細(xì)步驟將在下文中詳細(xì)介紹。 第一步:硬件連接
    的頭像 發(fā)表于 12-07 15:17 ?2767次閱讀