RM新时代网站-首页

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

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

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

系統(tǒng)的信號(hào)輸入中,鍵盤(pán)因其結(jié)構(gòu)簡(jiǎn)單而被廣泛使用

單片機(jī) ? 來(lái)源:未知 ? 作者:李倩 ? 2018-04-28 11:48 ? 次閱讀

系統(tǒng)的信號(hào)輸入中,鍵盤(pán)因其結(jié)構(gòu)簡(jiǎn)單而被廣泛使用。因此,對(duì)鍵盤(pán)的輸入(邏輯0或1)進(jìn)行準(zhǔn)確采樣,避免錯(cuò)誤輸入是非常有必要的。理想的鍵盤(pán)輸入特性如圖1所示:按鍵沒(méi)有按下時(shí),輸入為邏輯1,一旦按下則輸入立刻變?yōu)檫壿?,松開(kāi)時(shí)輸入則立刻變?yōu)檫壿?。

圖 1理想鍵盤(pán)輸入特性

然而實(shí)際的鍵盤(pán)受制造工藝等影響,其輸入特性不可能如圖1完美。當(dāng)按鍵按下時(shí),在觸點(diǎn)即將接觸到完全接觸這段時(shí)間里,鍵盤(pán)的通斷狀態(tài)很可能已經(jīng)改變了多次。即在這段時(shí)間里,鍵盤(pán)輸入了多次邏輯0和1,也就是輸入處于失控狀態(tài)。如果這些輸入被系統(tǒng)響應(yīng),則系統(tǒng)暫時(shí)也將處于失控狀態(tài),這是我們要盡量避免的。在觸點(diǎn)即將分離到完全分離這段時(shí)間也是一樣的。實(shí)際鍵盤(pán)的輸入特性如圖2所示:

圖 2實(shí)際鍵盤(pán)輸入特性

我們可以看到:鍵盤(pán)在輸入邏輯轉(zhuǎn)換時(shí),實(shí)際上是產(chǎn)生了瞬時(shí)的高頻干擾脈沖。按鍵消抖的目的在于消除此干擾,以達(dá)到接近圖1所示的理想輸入特性。有兩個(gè)階段可以設(shè)法消除此干擾:1.在鍵盤(pán)信號(hào)輸入系統(tǒng)之前(系統(tǒng)外);2.鍵盤(pán)信號(hào)輸入系統(tǒng)以后(系統(tǒng)內(nèi))。

在信號(hào)輸入系統(tǒng)之前將抖動(dòng)干擾消除,可以節(jié)省系統(tǒng)資源,提高系統(tǒng)對(duì)其他信號(hào)的響應(yīng)能力,也就是硬件消抖。一種比較巧妙的硬件消抖電路結(jié)構(gòu)如圖3所示:

圖 3用基本SR鎖存器構(gòu)成的消抖電路

該電路利用基本SR鎖存器的記憶作用消除開(kāi)關(guān)觸點(diǎn)振動(dòng)所產(chǎn)生的影響。開(kāi)關(guān)S每切換一次,輸出端只有一次翻轉(zhuǎn),不存在抖動(dòng)波形(讀者可以根據(jù)SR鎖存器功能自行分析,此處略)。但是使用SR鎖存器消抖只適用于單刀雙擲開(kāi)關(guān),實(shí)際應(yīng)用當(dāng)中常用的鍵盤(pán)多是兩個(gè)接線端的按鍵。對(duì)此類(lèi)按鍵的常用硬件消抖電路如圖4所示:

圖 4常用鍵盤(pán)硬件消抖電路

此電路利用電容平波,再經(jīng)過(guò)施密特反相器整形之后就得到了沒(méi)有毛刺的脈沖波。

軟件消抖要占用系統(tǒng)資源,在系統(tǒng)資源充足的情況下使用軟件消抖更加簡(jiǎn)單。軟件消抖的實(shí)質(zhì)在于降低鍵盤(pán)輸入端口的采樣頻率,將高頻抖動(dòng)略去。實(shí)際應(yīng)用中通常采用延時(shí)跳過(guò)高頻抖動(dòng)區(qū)間,然后再檢測(cè)輸入做出相應(yīng)處理。一般程序代碼如下:

if(value == 0)//一旦檢測(cè)到鍵值
{
Delay();//延時(shí)20ms,有效濾除按鍵的抖動(dòng)
if(value == 0)//再次確定鍵值是否有效
{
……//執(zhí)行相應(yīng)處理
}
}

這段軟消抖程序從機(jī)理上看不會(huì)有什么問(wèn)題,通常在軟件程序不太"繁忙"的情況下也能夠很好的消抖并做相應(yīng)處理。但是如果在延時(shí)期間產(chǎn)生了中斷,則此中斷可能無(wú)法得到響應(yīng)。

對(duì)于硬件資源豐富的FPGA系統(tǒng),可以使用硬件來(lái)減輕軟件工作量,通常稱之為"硬件加速"。在按鍵信號(hào)輸入到軟件系統(tǒng)前用邏輯對(duì)其進(jìn)行一下簡(jiǎn)單的處理即可實(shí)現(xiàn)所謂的"硬件消抖",verilog代碼如下:

//對(duì)輸入信號(hào)inpio硬件濾波,每20ms采樣一次當(dāng)前值
reg[18:0] cnt; //20ms計(jì)數(shù)器
always @(posedge clk_25m or negedge rst_n)
if(!rst_n) cnt <= 19'd0;
else if(cnt < 19'd500000) cnt <= cnt+1'b1;
else cnt <= 19'd0;
reg[1:0] inpior;//當(dāng)前inpio信號(hào)鎖存,每20ms鎖存一拍
always @(posedge clk_25m or negedge rst_n)
if(!rst_n) inpior <= 2'b11;
else if(cnt == 19'h7ffff) inpior <= {inpior[0],inpior};
wire inpio_swin =inpior[0] | inpior[1];//前后20ms兩次鎖存值都為0時(shí)才為0

該程序中設(shè)置了一個(gè)20ms計(jì)數(shù)器,通過(guò)間隔20ms對(duì)輸入信號(hào)inpio采樣兩次,兩次相同則認(rèn)為鍵盤(pán)輸入穩(wěn)定,得到用硬件邏輯處理后的inpio_swin信號(hào)則是消抖處理過(guò)的信號(hào)。軟件程序就不再需要delay()來(lái)濾波了,也不會(huì)出現(xiàn)使用純軟件處理出現(xiàn)的"中斷失去響應(yīng)"的情況了,這就是"硬件加速"的效果。

上述verilog代碼采用間隔采樣來(lái)達(dá)到消抖的目的,對(duì)于不同物理特性的鍵盤(pán),最佳的間隔時(shí)間采樣時(shí)間也不同,因此還存在一些不穩(wěn)定因素。下面介紹一種更好的軟消抖程序,同樣采用"硬件加速",不同之處在于使用了有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn),其VHDL代碼如下:

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY xiaod IS
//端口描述:clk輸入檢測(cè)時(shí)鐘;reset復(fù)位信號(hào);din原始按鍵信號(hào)輸入;dout去抖動(dòng)輸出信號(hào)
PORT
(
clk : IN STD_LOGIC ;
reset : IN STD_LOGIC ;
din : IN STD_LOGIC ;
dout : OUT STD_LOGIC
);
END ENTITY;
ARCHITECTURE RTL OF xiaod IS
TYPE state IS( s0,s1,s2,s3);
SIGNAL pre_s, next_s: state;
BEGIN
P0:PROCESS( reset, clk )
BEGIN
if reset = '0' then
pre_s <= s0;
elsif rising_edge( clk ) then
pre_s <= next_s;
else
null;
end if;
END PROCESS P0;
P1:PROCESS( pre_s, next_s, din )
BEGIN
case pre_s is
when s0 =>
dout <= '1';
if din = '1' then
next_s <= s0;
else
next_s <= s1;
end if;
when s1 =>
dout <= '1';
if din = '1' then
next_s <= s0;
else
next_s <= s2;
end if;
when s2 =>
dout <= '1';
if din = '1' then
next_s <= s0;
else
next_s <= s3;
end if;
when s3 =>
dout <= '0';
if din = '1' then
next_s <= s0;
else
next_s <= s1;
end if;
end case;
END PROCESS P1;
END RTL;

該VHDL代碼描述了一個(gè)狀態(tài)機(jī),其狀態(tài)轉(zhuǎn)換圖如圖所示:

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

該狀態(tài)機(jī)有4個(gè)狀態(tài):S0、S1、S2、S3,其中前3個(gè)狀態(tài)輸出高電平,最后一個(gè)狀態(tài)輸出低電平。初始狀態(tài)為S0,設(shè)按鍵未按下時(shí)為高電平,按下則為低電平。在按鍵按下到完全生效期間有一系列的抖動(dòng),對(duì)于持續(xù)時(shí)間為1-2個(gè)時(shí)鐘周期的低電平抖動(dòng)將被消除,對(duì)于持續(xù)時(shí)間為3個(gè)或以上時(shí)鐘周期的低電平則認(rèn)為按鍵有效,輸出一個(gè)時(shí)鐘周期的低電平脈沖(讀者可以根據(jù)狀態(tài)轉(zhuǎn)換圖畫(huà)出相應(yīng)的時(shí)序圖進(jìn)行分析)。如果持續(xù)輸入為低電平,則每隔兩個(gè)時(shí)鐘周期輸出一個(gè)低電平,此時(shí)認(rèn)為按鍵處于"長(zhǎng)按"輸入狀態(tài),可以編程設(shè)置相應(yīng)功能。在按鍵松開(kāi)階段其抖動(dòng)也可以一樣被消除。

適用于FPGA的按鍵消抖方法還有一些,如計(jì)數(shù)器型、D觸發(fā)器型等,在此就不作介紹了。

通過(guò)上面一些按鍵消抖方法的介紹分析,我們可以看到,傳統(tǒng)單片機(jī)等系統(tǒng)大多是串行處理,即順序執(zhí)行,只能并行處理一些中斷程序。對(duì)于這樣的系統(tǒng),只能采用單純軟件或硬件消抖,但都不那么完美。而對(duì)于FPGA等并行處理的系統(tǒng),其優(yōu)勢(shì)就很明顯,只要片內(nèi)邏輯資源夠用,通過(guò)硬件加速軟件消抖的處理,完全可以做到按鍵消抖并行化,不影響系統(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)投訴
  • 電路
    +關(guān)注

    關(guān)注

    172

    文章

    5901

    瀏覽量

    172129
  • 鍵盤(pán)
    +關(guān)注

    關(guān)注

    4

    文章

    859

    瀏覽量

    39647
  • 鎖存器
    +關(guān)注

    關(guān)注

    8

    文章

    906

    瀏覽量

    41494

原文標(biāo)題:按鍵原理和軟硬件按鍵消抖動(dòng)

文章出處:【微信號(hào):aidanpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    矩陣鍵盤(pán)原理與結(jié)構(gòu)

    矩陣式結(jié)構(gòu)鍵盤(pán)識(shí)別要復(fù)雜一些,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的
    發(fā)表于 10-25 13:42 ?1.4w次閱讀

    電腦鍵盤(pán)結(jié)構(gòu)介紹

    超薄的膝上型電腦上使用。只是與薄膜接觸式鍵盤(pán)相比,這種結(jié)構(gòu)的壽命更短,所以現(xiàn)在除了在某些特殊用途以外,已經(jīng)在逐漸消失。電腦鍵盤(pán)  這種通過(guò)查表獲得按鍵編碼的方式稱之為“非編碼式
    發(fā)表于 12-30 11:56

    電腦鍵盤(pán)內(nèi)部結(jié)構(gòu)及電腦鍵盤(pán)常見(jiàn)分類(lèi)

    等等。當(dāng)一個(gè)鍵按下時(shí),微處理器便根據(jù)其位置,將字符信號(hào)轉(zhuǎn)換成二進(jìn)制碼,傳給主機(jī)和顯示器。如果操作人員的輸入速度很快或CPU正在進(jìn)行其它的工作,就先將鍵入的內(nèi)容送往內(nèi)存的電腦
    發(fā)表于 12-30 14:18

    事件結(jié)構(gòu)如何掃描鍵盤(pán)輸入呢?

    事件結(jié)構(gòu)如何掃描鍵盤(pán)輸入呢?求教
    發(fā)表于 01-13 10:35

    計(jì)算機(jī)測(cè)試系統(tǒng)結(jié)構(gòu)與原理

    ;③ 智能化系統(tǒng)與非智能化系統(tǒng)。一、信號(hào)輸入通道的基本結(jié)構(gòu)測(cè)
    發(fā)表于 01-04 17:04

    嵌入式系統(tǒng)鍵盤(pán)接口設(shè)計(jì)

    中斷處理子模塊完成的。當(dāng)系統(tǒng)有按鍵按下時(shí),驅(qū)動(dòng)程序先關(guān)掉中斷,然后掃描鍵盤(pán),確定哪個(gè)鍵按下,鍵盤(pán)按下和抬起都有中斷發(fā)生,這樣可以為用戶提
    發(fā)表于 05-22 05:01

    單片機(jī)學(xué)習(xí)一鍵盤(pán)接口方式詳解

    簡(jiǎn)單,容易實(shí)現(xiàn),因此廣泛應(yīng)用于單片機(jī)系統(tǒng)。獨(dú)立式鍵盤(pán)是由若干個(gè)機(jī)械觸點(diǎn)開(kāi)關(guān)構(gòu)成的,將其與單
    發(fā)表于 08-25 10:00

    小型鍵盤(pán)結(jié)構(gòu)與接口

    鍵盤(pán)是一個(gè)由開(kāi)關(guān)組成的矩陣,是重要的輸入設(shè)備,在小型微機(jī)系統(tǒng),如單板微計(jì)算機(jī)、帶有微處理器的專(zhuān)用設(shè)備,
    發(fā)表于 12-09 11:45 ?19次下載

    矩陣鍵盤(pán)產(chǎn)生PC機(jī)鍵盤(pán)信號(hào)的應(yīng)用設(shè)計(jì)

    PC104 總線嵌入式系統(tǒng)在工程設(shè)計(jì)上得到了廣泛應(yīng)用,而其主要的人機(jī)交互設(shè)備——PC機(jī)標(biāo)準(zhǔn)鍵盤(pán)則因不適應(yīng)工業(yè)環(huán)境受到了限制。我們希望自己設(shè)計(jì)的薄膜式矩陣
    發(fā)表于 04-16 13:48 ?43次下載

    智能鍵盤(pán)字符輸入及LCD顯示系統(tǒng)設(shè)計(jì)

    提出了一種基于單片機(jī)的智能鍵盤(pán)字符輸入及LCD顯示系統(tǒng)設(shè)計(jì)方案。詳細(xì)闡述了系統(tǒng)硬件設(shè)計(jì)各模塊接口電路和工作原理,介紹了點(diǎn)陣字符型液晶顯示模塊(LCD)和
    發(fā)表于 12-23 15:36 ?64次下載

    單片機(jī)顯控系統(tǒng)的漢字輸入

    單片機(jī)顯控系統(tǒng)的漢字輸入 對(duì)于PC機(jī)來(lái)說(shuō),輸入漢字是非常簡(jiǎn)單的,但在一些單片機(jī)人機(jī)接口系統(tǒng)
    發(fā)表于 12-08 15:25 ?3008次閱讀
    單片機(jī)顯控<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>中</b>的漢字<b class='flag-5'>輸入</b>

    25課:單片機(jī)鍵盤(pán)接口程序設(shè)計(jì)

    ,使用靈活等特點(diǎn),因此廣泛應(yīng)用于單片機(jī)系統(tǒng)。 按鈕開(kāi)關(guān)的抖動(dòng)問(wèn)題 組成鍵盤(pán)的按鈕有觸點(diǎn)式和非觸點(diǎn)式兩種,單片機(jī)應(yīng)用的一般是由機(jī)械觸點(diǎn)組成
    發(fā)表于 11-22 12:03 ?913次閱讀
    25課:單片機(jī)<b class='flag-5'>鍵盤(pán)</b>接口程序設(shè)計(jì)

    51單片機(jī)匯編語(yǔ)言教程之單片機(jī)鍵盤(pán)接口程序設(shè)計(jì)的詳細(xì)資料說(shuō)明

    據(jù)。一般單片機(jī)系統(tǒng)采和非編碼鍵盤(pán),非編碼鍵盤(pán)是由軟件來(lái)識(shí)別鍵盤(pán)上的閉合鍵,它具有結(jié)構(gòu)
    發(fā)表于 06-05 16:30 ?19次下載
    51單片機(jī)匯編語(yǔ)言教程之單片機(jī)<b class='flag-5'>鍵盤(pán)</b>接口程序設(shè)計(jì)的詳細(xì)資料說(shuō)明

    單片機(jī)鍵盤(pán)輸入的程序

    應(yīng)該說(shuō)鍵盤(pán)輸入是單片機(jī)外部指令輸入的重要途徑,因此如何設(shè)計(jì)鍵盤(pán)以及鍵盤(pán)的工作原理、讀鍵盤(pán)的方法、鍵盤(pán)
    的頭像 發(fā)表于 06-21 11:38 ?4994次閱讀

    鍵盤(pán)瑕疵檢測(cè)系統(tǒng)簡(jiǎn)單介紹

    在3c產(chǎn)品檢測(cè)過(guò)程鍵盤(pán)瑕疵檢測(cè)是最常見(jiàn)的一種檢測(cè)產(chǎn)品,通過(guò)鍵盤(pán)瑕疵檢測(cè)系統(tǒng)來(lái)檢測(cè)鍵盤(pán)上的瑕疵可以大大提高生產(chǎn)效率和產(chǎn)品質(zhì)量。那么接下來(lái)我
    發(fā)表于 08-10 16:52 ?869次閱讀
    RM新时代网站-首页