




版權(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è)按鍵被按下key
6、_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_return; /
7、 返回鍵值/*名稱:按鍵處理子函數(shù)功能:*/void key_operation(void)switch (keyscan()/ 根據(jù)鍵值不同,執(zhí)行不同的內(nèi)容hight_votage-=1;if(hight_votage25)hight_votage=25;break;default :break;系統(tǒng)的信號(hào)輸入中,鍵盤因其結(jié)構(gòu)簡(jiǎn)單而被廣泛使用。因此,對(duì)鍵盤的輸入(邏輯 0 或 1 )進(jìn)行準(zhǔn)確采樣,避免錯(cuò)誤輸入是非常有必要的。理想的鍵盤輸入特性如圖 1 所示:按鍵沒(méi)有按下時(shí),輸入為邏輯1 ,一旦按下則輸入立刻變?yōu)檫壿?,松開(kāi)時(shí)輸入則立刻變?yōu)檫壿?。圖 1 理想鍵盤輸入特性然而實(shí)際的鍵盤受制造工
8、藝等影響,其輸入特性不可能如圖 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í)的高頻干擾脈沖。按鍵消抖的目的在于消除此干擾,以達(dá)到接近圖 1 所示的理想輸入特性。有兩個(gè)階段可以設(shè)法消除此干擾: 1. 在鍵盤信號(hào)輸入系統(tǒng)之前(系統(tǒng)外); 2. 鍵盤信
9、號(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è)接線端的按鍵。對(duì)此類按鍵的常用硬件消抖電路如圖 4 所示:圖 4 常用鍵盤硬件消抖電路第 7 頁(yè)此電路利用電容平波,再經(jīng)過(guò)施密特反相器整形之后就得到了沒(méi)有
10、毛刺的 脈沖波。軟件消抖要占用系統(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)題,通常在軟件程序不太繁忙的情況下也能夠很好的消抖并做相應(yīng)處理。但是如果在延時(shí)期間產(chǎn)生了中斷,則此中斷可能無(wú)法得到響應(yīng)。對(duì)于硬件資源豐富的fpga統(tǒng),可以使用硬件來(lái)減輕軟
11、件工作量,通常 稱之為“硬件加速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 = 19d0;else if(cnt 19d500000) cnt = cnt+1b1;else cnt = 19d0;reg1:0 inpior; /當(dāng)前inpio信號(hào)鎖存,每20ms鎖存一拍always (posedge clk_25m or ne
12、gedge rst_n)if(!rst_n) inpior = 2b11;else if(cnt = 19h7ffff) inpior = inpior0,inpior;wire inpio_swin =inpior0 | inpior1;/ 前后 20ms兩次鎖存值都為0時(shí)才為0該程序中設(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)”的情況了,這 就是硬件加速”的效果。上述ver
13、ilog 代碼采用間隔采樣來(lái)達(dá)到消抖的目的,對(duì)于不同物理特性的 鍵盤,最佳的間隔時(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
14、;din : in std_logic ;dout : out std_logic);end entity;architecture rtl of xiaod istype state is( s0,s1,s2,s3);signal pre_s, next_s: state;beginp0:process( reset, clk )beginif reset = 0 thenpre_s = s0;elsif rising_edge( clk ) thenpre_s dout = 1;if din = 1 thennext_s = s0;elsenext_s dout = 1;if din =
15、1 then next_s = s0;else next_s dout = 1;if din = 1 then next_s = s0;else next_s dout = 0;if din = 1 thennext_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ò)上面一些按鍵消抖方法的介紹分析,我們可以看到,傳統(tǒng)單片機(jī)等系統(tǒng)大多是串行處理,即順序
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度廚師技能競(jìng)賽合作舉辦協(xié)議
- 人力資源招聘事務(wù)文書(shū)草案
- 酒店經(jīng)營(yíng)管理權(quán)合作協(xié)議
- 電商平臺(tái)用戶免責(zé)條款協(xié)議
- 工作紀(jì)律修訂內(nèi)容
- 高效會(huì)議事務(wù)組織與實(shí)施流程文書(shū)
- 公司股東間股權(quán)認(rèn)購(gòu)及合作開(kāi)發(fā)協(xié)議表
- 《正弦定理在三角形中的應(yīng)用:高中數(shù)學(xué)教案》
- 三農(nóng)金融服務(wù)平臺(tái)建設(shè)方案
- 工作目標(biāo)實(shí)現(xiàn)路徑規(guī)劃
- 保潔工作整改方案整改方案
- 12詩(shī)詞四首《漁家傲-秋思》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì) 初中語(yǔ)文九年級(jí)下冊(cè)
- 金礦承包協(xié)議合同2024年
- 解讀國(guó)有企業(yè)管理人員處分條例(2024)課件(全文)
- 2024年江蘇省揚(yáng)州市中考數(shù)學(xué)真題(解析版)
- 創(chuàng)新創(chuàng)業(yè)基礎(chǔ)-理論、案例與訓(xùn)練(大學(xué)生創(chuàng)新創(chuàng)業(yè)教育課程)全套教學(xué)課件
- TD/T 1072-2022 國(guó)土調(diào)查坡度分級(jí)圖制作技術(shù)規(guī)定(正式版)
- 《火力發(fā)電建設(shè)工程機(jī)組調(diào)試技術(shù)規(guī)范》
- 2024年湘潭醫(yī)衛(wèi)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- 2024年合肥市高三第二次教學(xué)質(zhì)量(二模)英語(yǔ)試卷(含答案)
- 新能源充電樁創(chuàng)業(yè)計(jì)劃書(shū)
評(píng)論
0/150
提交評(píng)論