龔利英,彭業勝
(1.惠州經濟職業技術學院 機電工程系,惠州516057; 2.惠州國科電子廠)
在單片機應用領域中,鍵盤輸入是最常見也是最重要的人機交互方法。通常實現鍵盤接口的方式有:獨立直接輸入、矩陣結構、ADC方式、使用專用器件等。現在市面上的單片機普遍帶有模數轉換功能,即ADC。使用ADC方式的按鍵電路,具有硬件電路簡單、按鍵電路與單片機連線少、能節省I/O口、易于修改、節省成本等優點。但在按鍵數比較多時,如果軟硬件配合不好,很容易出現按鍵不可靠的問題,表現為按鍵沒有反應、按鍵功能紊亂等,因此按鍵電路的設計以及軟件和硬件的配合就顯得至關重要。
ADC器件的功能是將輸入的模擬電壓或電流轉換成相應的數字電壓或電流。ADC的輸入與輸出有以下關系:

其中:n是ADC器件的位數(即分辨率);G是增益(一般ADC器件增益為1,美國國家半導體公司NI有其他增益的ADC器件);Vin或 Iin是輸入的模擬電壓或電流;Vref或Iref是ADC的參考電壓或參考電流。
因此,對于一個給定的ADC器件,在參考電壓或電流確定后,輸入的模擬值和輸出的數字量就必然是一一對應的關系。而對于一個給定的ADC器件和模擬值,輸出的數字量只與參考量有關,所以在應用中必須確保參考量的準確無誤!這一點非常重要,筆者曾經在產品設計調試中遇到過由于參考電壓的濾波電路不良,使得軟件讀取到的數字量比實際輸入值偏大,結果軟件判斷錯誤導致了按鍵失靈的故障。
ADC按鍵由按鍵電路、ADC器件和MCU組成。它們之間的信息傳遞如圖1所示。

圖1
按鍵電路根據按下的按鍵給ADC器件提供相應的電壓值,MCU控制ADC器件對此電壓進行模數轉換,并根據得到的數字量執行相應的處理。
按鍵電路的實質是一個電阻分壓器,其基本原理如圖2所示。圖中,送往ADC的電壓Vadc是電阻R1、R2對電壓Vcc的分壓值,ADC器件對Vadc進行轉換得到一個對應的數字量。由于每一個數字量只對應一個模擬電壓,所以只要不同的按鍵按下就可以取得不同的分壓值,就能夠通過軟件對數字量的識別,進而辨別出是哪個按鍵按下。
在理想情況下,一個n位的ADC器件,其可識別電壓為2n個,即可以識別2n個不同的按鍵。但由于實際應用中存在電阻的自身誤差、電壓的波動誤差、ADC器件的轉換誤差、軟件的計算誤差等,所以在設計時必須將這些都考慮進來,不能簡單地使用電壓值與數字量一一對應的方法來確定按鍵的鍵值。

圖2
由圖2有下面公式:

Vadc就是按鍵的中心電壓。從這個公式還可以看出,送往ADC器件的電壓Vadc只與Vcc、R1、R2有關。通常應用中,允許誤差范圍為±5%,則Vadc的設計允許范圍是:

這里的Vadc就是式(1)的Vin,因此ADC器件的輸出數字量也是有范圍的:

要注意的是,要盡量確保軟件中的按鍵數字量判斷范圍和這里的按鍵電壓允許范圍相一致,只有這樣才能保證軟硬件配合一致。
按鍵電路的型式有多種,理論上講每個按鍵都有一個對應的電壓值,但實際應用中要考慮很多因素,例如電路的功耗以及防靜電能力等。下面就以常見的幾種按鍵電路進行分析比較,以設計出最適合的電路。
由基本原理圖很容易設計出第一種電路型式:并聯型,如圖3所示。這種形式的電路有下面幾個特點:
①各個與按鍵連接的電阻成并聯關系,電路很直觀,易于理解。每個按鍵連接的電阻值都不一樣,這樣任何一個按鍵按下去得到的電壓值都不一樣。
②多個按鍵同時按下時可能造成功能紊亂,在按鍵很多時此問題尤其容易發生。此問題發生的原因是多個按鍵按下后的電壓值可能剛好等于另外一個按鍵設計的電壓值。不過這一特點也可以被利用來做組合鍵,只要小心地設計每個按鍵的電壓值,使各個單鍵和組合鍵的電壓值沒有重復就可以達到組合鍵的目的。
③沒有按鍵按下時ADC端口被上拉至高電位,電路基本不消耗功率。
④某一個按鍵的連接電阻變值或損壞,不會影響其他單個按鍵的功能。
⑤如果按鍵板到ADC端口的連線很長,則ADC端口很可能會被感應的ESD電壓(即靜電電壓)損壞。此時需要設置防靜電管以便快速釋放ESD電壓。
⑥在ESD電壓加到ADC端口線上時,由于每個按鍵支路都承受相同的ESD脈沖電壓,則阻值小的支路流過的電流較大,容易損壞。此時,在增加ESD管的基礎上還要增大電阻的阻值。

圖3
⑦這種接法的電壓分配沒有順序。
圖4是另一種電阻的接法——串聯型。這種電路的特點有:
①電阻串聯連接,每個按鍵單獨按下的電壓值都不相同。
②靠近ADC端口的按鍵具有優先權,此鍵按下后其下面所有的按鍵電阻都被屏蔽,所以這種單個線路做不了組合鍵。
③沒有按鍵按下時基本不消耗功率。
④某一個按鍵變值或損壞,其后面遠離ADC端口的所有按鍵功能都受影響。
⑤如果按鍵板到ADC端口的連線很長,則ADC端口很可能會被感應的ESD電壓(即靜電電壓)損壞。此時需要設置防靜電管以吸收ESD電壓。
⑥在ESD電壓加到ADC端口線上時,由于靠近ADC端口的按鍵電阻相對較小,所以比下面的支路更容易被ESD電壓損壞。
⑦這種接法的電壓分配從上到下是逐級增大的。

圖4
改變并聯型電路的接法,得到圖5所示的改進型并聯接法。這種接法在沒有按鍵按下時,ADC端口通過電阻接地,就算按鍵板到 ADC端口連線很長,ESD電壓也能通過電阻R5得到泄放,對ADC端口的保護作用比并聯型電路更可靠些,但是對電阻的保護效果還是一樣的。

圖5
同樣,改變串聯型電路的接法,得到圖6所示的改進型串聯接法,這種接法跟改進并聯型電路一樣,能對ADC端口給與更多的保護;同時,這種接法的電壓分配從上到下是逐級減小的。
結合以上各種電路的特點,可以選擇適合于功能要求的ADC按鍵電路。

圖6
ADC按鍵是一個小型的數據采集系統。它跟其他數據采集系統一樣要完成數據的采集、數據的處理、功能的執行3個步驟,其順序如圖7所示。

圖7
在程序運行時,如果ADC檢測到的模擬量或者ADC輸出的數字量不準確,則執行后面功能將出現誤動作或不動作。所以,這里介紹軟件在采集按鍵數據和處理按鍵數據這兩方面的處理技巧。
機械按鍵抖動時間的長短由按鍵的機械特性訣定,一般為5~10 ms。而按鍵的閉合穩定時間的長短由操作人員的按鍵動作決定,一般為幾十毫秒至數秒。軟件每2 ms采樣1次ADC數據并保存,共采樣10次,所以采集數據約花費20 ms,能夠起到消除抖動的作用。執行數字濾波舍去最大、最小值,再對剩下的8個數據求平均值。然后,逐一比較該平均值是在哪個Output_min和Output_max范圍內就可以確定是哪個按鍵按下,再執行相應的功能函數。經過實際裝機測試,該方法效果很好,按鍵控制靈敏而且可靠、準確無誤。流程如圖8所示。
現在的單片機大部分帶有A/D轉換功能,利用ADC按鍵就可以實現一個I/O口擴展多個按鍵,在實際的電路設計中可以降低成本,是個不錯的選擇。本文比較了4種ADC按鍵電路型式,介紹了ADC按鍵設計的計算方法和軟件程序設計流程,實現了精確、可靠的ADC按鍵接口。

圖8
[1]National Semiconductor Inc.ABCs of ADCs-Analog-to-Digital Converter Basics[EB/OL].[2009-08-21].http://www.national.com/appinfo/adc/files/ABCs_of_ADCs.pdf#page=1.
[2]Motorola Inc.Expanding Digital Input with an A/D Converter[EB/OL].[2009-08-21].http://www.motorola.com.cn/semiconductors/mcudsp/forms/appnote/AN1775.pdf.
[3]張曄,王玉民.單片機應用技術[M].北京:高等教育出版社,2006.