




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、在使用單片機(jī)搭建有人機(jī)交互的系統(tǒng)時(shí)需要用到鍵盤,因?yàn)閱纹瑱C(jī)工作時(shí)間都是納秒與毫秒級(jí)別,但是我們?nèi)梭w的反應(yīng)時(shí)間最少要0.2 秒,之間差距很大,現(xiàn)實(shí)過(guò)程中也會(huì)不小心碰到按鍵,正常的按下按鍵應(yīng)該是持續(xù)數(shù)十秒的穩(wěn)定。 一、按鍵電路 常用的非編碼鍵盤, 每個(gè)在使用單片機(jī)搭建有人機(jī)交互的系統(tǒng)時(shí)需要用到鍵盤,因?yàn)閱纹瑱C(jī)工作時(shí)間都是納秒與毫秒級(jí)別,但是我們?nèi)梭w的反應(yīng)時(shí)間最少要 0.2 秒,之間差距很大,現(xiàn)實(shí)過(guò)程中也會(huì)不小心碰到按鍵,正常的按下按鍵應(yīng)該是持續(xù)數(shù)十秒的穩(wěn)定。一、按鍵電路常用的非編碼鍵盤, 每個(gè)鍵都是一個(gè)常開(kāi)開(kāi)關(guān)電路。計(jì)數(shù)器輸入脈沖最好不要直接接普通的按鍵開(kāi)關(guān),因?yàn)橛洈?shù)器的記數(shù)速度非常快, 按鍵、觸
2、點(diǎn)等接觸時(shí)會(huì)有多次接通和斷開(kāi)的現(xiàn)象。我們感覺(jué)不到,可是記數(shù)器卻都記錄了下來(lái)。例如,雖然只按了 1 下 , 記數(shù)器可能記了 3 下。因此,使用按鍵的記數(shù)電路都會(huì)增加單穩(wěn)態(tài)電路避免記數(shù)錯(cuò)誤。二、按鍵消抖通常的按鍵所用開(kāi)關(guān)為機(jī)械彈性開(kāi)關(guān) , 當(dāng)機(jī)械觸點(diǎn)斷開(kāi)、閉合時(shí),電壓信號(hào)小型如下圖。由于機(jī)械觸點(diǎn)的彈性作用 , 一個(gè)按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)馬上穩(wěn)定地接通, 在 斷開(kāi)時(shí)也不會(huì)一下子斷開(kāi)。因而在閉合及斷開(kāi)的瞬間均伴隨有一連串的抖動(dòng) , 如下圖。抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms10m$這是一個(gè) 很重要的時(shí)間參數(shù),在很多場(chǎng)合都要用 到。按鍵穩(wěn)定閉合時(shí)間的長(zhǎng)短則是由操作人員的按鍵動(dòng)作決定的 , 一
3、般為零點(diǎn)幾秒至數(shù)秒。鍵抖動(dòng)會(huì)引起一次按鍵被誤讀多次。為確保CPUM鍵的一次閉合僅作一次處理 , 必須去除鍵抖動(dòng)。在鍵閉合穩(wěn)定時(shí)讀取鍵的狀態(tài) , 并且必須判別到鍵釋放穩(wěn)定后再作處理。按鍵的抖動(dòng) , 可用硬件或軟件兩種方法。三、硬件消抖在鍵數(shù)較少時(shí)可用硬件方法消除鍵抖動(dòng)。下圖所示的RS觸發(fā)器為常用的硬件去抖。消抖電路如下圖中兩個(gè)“與非”門構(gòu)成一個(gè)RS觸發(fā)器。當(dāng)按鍵未按下時(shí),輸出為 1; 當(dāng)鍵按下時(shí), 輸出為 0。此時(shí)即使用按鍵的機(jī)械性能 , 使按鍵因彈性抖動(dòng)而產(chǎn)生瞬時(shí)斷開(kāi) (抖動(dòng)跳開(kāi)B) , 中要按鍵不返回原始狀態(tài)A, 雙穩(wěn)態(tài)電路的狀態(tài)不改變, 輸出保持為 0, 不會(huì)產(chǎn)生抖動(dòng)的波形。 也就是說(shuō) ,
4、 即使 B 點(diǎn)的電壓波形是抖動(dòng)的 , 但經(jīng)雙 穩(wěn)態(tài)電路之后 , 其輸出為正規(guī)的矩形波。這一點(diǎn)通過(guò)分析RS觸發(fā)器的工作過(guò)程很容易得到驗(yàn)證。利用電容的放電延時(shí),采用并聯(lián)電容法,也可以實(shí)現(xiàn)硬件消抖:消抖電路如下四、軟件延時(shí)消抖如果按鍵較多 , 常用軟件方法去抖, 即檢測(cè)出鍵閉合后執(zhí)行一個(gè)延時(shí)程序,產(chǎn)生5ms10ms的延時(shí),讓前沿抖動(dòng)消失后再一次檢測(cè)鍵的狀態(tài)如果仍保持閉合狀態(tài)電平 , 則確認(rèn)為真正有鍵按下。當(dāng)檢測(cè)到按鍵釋放后也要給5m曉10ms的延時(shí),待后沿抖動(dòng)消失后才能轉(zhuǎn)入該鍵的處理程序。五、無(wú)延時(shí)的軟件消抖/*名稱:鍵盤掃描子函數(shù)功能:在按鍵穩(wěn)定期內(nèi)判斷鍵值,并返回鍵值*/uchar keysca
5、n(void)static char key_state = 0;static char key_value = 0;uchar key_press, key_return = 0;key_press=turn_left&turn_right;/ 讀按鍵 I/O 電平switch (key_state)case 0 :/ 按鍵初始態(tài)if (key_press=0) key_state = 1; /鍵被按下,但需要確認(rèn)是否是干擾break;case 1 :/ 按鍵確認(rèn)態(tài)if (key_press=0)/ 如有鍵按下則不是干擾,判斷鍵值if(turn_left=0)/ 判斷是哪一個(gè)按鍵被按
6、下key_value=1;/ 按鍵較多時(shí)可采用 switch 選擇結(jié)構(gòu)else if(turn_right=0)key_value=2;elsekey_value=0;狀態(tài)轉(zhuǎn)換到鍵釋放態(tài)按鍵已抬起,屬于干擾,轉(zhuǎn)換到按鍵初始key_state = 2; /elsekey_state = 0; /態(tài)break;case 2 :if (key_press=1)key_return=key_value;/ 按鍵釋放后再輸出鍵值, 如果按下鍵就輸出則可省略key_valuekey_value=0;key_state = 0; / 如果按鍵釋放,轉(zhuǎn)換到按鍵初始態(tài)break;return key_retur
7、n; / 返回鍵值/*名稱:按鍵處理子函數(shù)功能:*/void key_operation(void)switch (keyscan()/ 根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容hight_votage-=1;if(hight_votage<5)hight_votage=5;break;case 2:hight_votage+=1;if(hight_votage>25)hight_votage=25;break;default :break;系統(tǒng)的信號(hào)輸入中,鍵盤因其結(jié)構(gòu)簡(jiǎn)單而被廣泛使用。因此,對(duì)鍵盤的輸入(邏輯 0 或 1 )進(jìn)行準(zhǔn)確采樣,避免錯(cuò)誤輸入是非常有必要的。理想的鍵盤輸入特性如圖
8、1 所示:按鍵沒(méi)有按下時(shí),輸入為邏輯1 ,一旦按下則輸入立刻變?yōu)檫壿?,松開(kāi)時(shí)輸入則立刻變?yōu)檫壿?。圖 1 理想鍵盤輸入特性然而實(shí)際的鍵盤受制造工藝等影響,其輸入特性不可能如圖 1 完美。當(dāng)按0 和 1 ,也就鍵按下時(shí),在觸點(diǎn)即將接觸到完全接觸這段時(shí)間里,鍵盤的通斷狀態(tài)很可能已經(jīng)改變了多次。即在這段時(shí)間里,鍵盤輸入了多次邏輯是輸入處于失控狀態(tài)。如果這些輸入被系統(tǒng)響應(yīng),則系統(tǒng)暫時(shí)也將處于失控狀態(tài),這是我們要盡量避免的。在觸點(diǎn)即將分離到完全分離這段時(shí)間也是一樣的。實(shí)際鍵盤的輸入特性如圖 2 所示:圖 2 實(shí)際鍵盤輸入特性我們可以看到:鍵盤在輸入邏輯轉(zhuǎn)換時(shí),實(shí)際上是產(chǎn)生了瞬時(shí)的高頻干擾脈沖。按鍵消抖
9、的目的在于消除此干擾,以達(dá)到接近圖 1 所示的理想輸入特性。有兩個(gè)階段可以設(shè)法消除此干擾: 1. 在鍵盤信號(hào)輸入系統(tǒng)之前(系統(tǒng)外); 2. 鍵盤信號(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)中常用的鍵盤多是兩個(gè)接線端的
10、按鍵。對(duì)此類按鍵的常用硬件消抖電路如圖 4 所示:圖 4 常用鍵盤硬件消抖電路第 7 頁(yè)此電路利用電容平波,再經(jīng)過(guò)施密特反相器整形之后就得到了沒(méi)有毛刺的 脈沖波。軟件消抖要占用系統(tǒng)資源,在系統(tǒng)資源充足的情況下使用軟件消抖更加簡(jiǎn)單。軟件消抖的實(shí)質(zhì)在于降低鍵盤輸入端口的采樣頻率,將高頻抖動(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)題,通常在軟件程序不太&
11、quot;繁忙"的情況下也能夠很好的消抖并做相應(yīng)處理。但是如果在延時(shí)期間產(chǎn)生了中斷,則此中斷可能無(wú)法得到響應(yīng)。對(duì)于硬件資源豐富的FPGA統(tǒng),可以使用硬件來(lái)減輕軟件工作量,通常 稱之為“硬件加速"o在按鍵信號(hào)輸入到軟件系統(tǒng)前用邏輯對(duì)其進(jìn)行一下簡(jiǎn)單的處理即可實(shí)現(xiàn)所謂的"硬件消抖",verilog 代碼如下:/對(duì)輸入信號(hào)inpio硬件濾波,每20ms采樣一次當(dāng)前值reg18:0 cnt; /20ms計(jì)數(shù)器always (posedge clk_25m or negedge rst_n)if(!rst_n) cnt <= 19'd0;else if
12、(cnt < 19'd500000) cnt <= cnt+1'b1;else cnt <= 19'd0;reg1: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 <= inpior0,inpior;wire inpio_swin =inpior0 | inpior1;/ 前后 20ms兩次鎖存值都為0時(shí)才為0該
13、程序中設(shè)置了一個(gè) 20ms計(jì)數(shù)器,通過(guò)間隔20ms對(duì)輸入信號(hào)inpio采樣 兩次,兩次相同則認(rè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ì)于不同物理特性的 鍵盤,最佳的間隔時(shí)間采樣時(shí)間也不同,因此還存在一些不穩(wěn)定因素。下 面介紹一種更好的軟消抖程序,同樣采用"硬件加速",不同之處在于使用了有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn),其 VHDL弋碼如下:L
14、IBRARY 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 ISTYPE state IS( s0,s1,s2,s3);SIGNAL p
15、re_s, next_s: state;BEGINP0:PROCESS( reset, clk )BEGINif reset = '0' thenpre_s <= s0;elsif rising_edge( clk ) thenpre_s <= next_s;elsenull;end if;END PROCESS P0;P1:PROCESS( pre_s, next_s, din )BEGINcase pre_s iswhen s0 =>dout <= '1'if din = '1' thennext_s <= s0
16、;elsenext_s <= s1;end if;when si => 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' the
17、nnext_s <= s0;elsenext_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ò)上面一些按鍵消抖方法的介紹分析,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 財(cái)務(wù)會(huì)計(jì)學(xué)財(cái)務(wù)報(bào)表分析知識(shí)考點(diǎn)
- 酒店與旅游服務(wù)合作協(xié)議
- ××超市經(jīng)理崗位辦法
- 表達(dá)對(duì)家鄉(xiāng)的思念之情的抒情作文10篇
- 我的家鄉(xiāng)美景寫(xiě)真實(shí)感人作文4篇
- 農(nóng)村畜牧養(yǎng)殖防疫保障協(xié)議
- 2025年石英纖維及制品項(xiàng)目提案報(bào)告
- 社團(tuán)組織參與及職務(wù)證明(8篇)
- 2025年小學(xué)教師資格考試《綜合素質(zhì)》教育資源整合與教育研究試題試卷
- 分析當(dāng)前酒店業(yè)面臨的環(huán)保挑戰(zhàn)
- 建筑工程管理考試模擬題及答案
- 浙江省“桐浦富興”教研聯(lián)盟2024-2025學(xué)年高一下學(xué)期6月學(xué)考模擬化學(xué)試卷(含答案)
- 北京市2025學(xué)年高二(上)第一次普通高中學(xué)業(yè)水平合格性考試物理試題(原卷版)
- 2025年浙江省學(xué)考?xì)v史總復(fù)習(xí)模擬卷(二)(原卷版)
- 2025年高考河北卷物理高考真題+解析(參考版)
- 中醫(yī)老人保健講座課件
- -2024-2025學(xué)年統(tǒng)編版語(yǔ)文二年級(jí)下冊(cè) 期末復(fù)習(xí)練習(xí)題(含答案)
- 2025至2030中國(guó)室內(nèi)滑雪場(chǎng)行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 2025四川綿陽(yáng)市平武縣興幫農(nóng)業(yè)發(fā)展集團(tuán)有限公司招聘10人筆試參考題庫(kù)附帶答案詳解
- 西南林業(yè)大學(xué)《算法分析與設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 征集和招錄人員政治考核表
評(píng)論
0/150
提交評(píng)論