按鍵太多嗎?來試試類比按鍵吧!
按鍵太多嗎?來試試類比按鍵吧!
現在市面上常見的使用者輸入介面,最普遍的就當屬按鍵最為廣泛,但是常見的按鍵輸入類型大多是數位式的,數位按鍵一般狀況下是幾個按鍵就對應到幾個輸入腳位,因此使用到的輸入腳位也會較多,所以就有人發明利用按下不同的按鍵來導通不同的電阻,使的單一類比輸入腳位的電壓分壓有所不同來判斷所按的按鍵,因此類比按鍵模組所需要的MCU輸入腳位就會少很多。
下圖是市面上常見的類比按鍵模組

類比按鍵的原理
在Renesas RX系列的MCU中,有特別設計一組MTU硬體,是專門用來控制此類的應用,因此MTU將deadtime的保護直接設計一組硬體暫存器來避免「deadtime」的PWM訊號操作,名稱是TDDRA暫存器。如先前所述,類比按鍵模組的原理主要是偵測類比訊號輸入腳位的電壓分壓差異而來。
比方,可參考下圖電路,圖中的R0電阻的主要功能是 Pull-Up電阻與主要的分壓電阻,比方:10KΩ,而後面的R1、R2、R3、R4、R5則必須是不同電阻值的電阻,舉例:1 KΩ、3 KΩ、5 KΩ、8 KΩ、10 KΩ。當然這裡的電阻值並不一定要這樣的比例差異,主要是分配的電阻要有足夠的電壓分壓差異,這樣才能夠容易區分所按的按鍵。

上面這個類比按鍵模組原理圖的動作說明如下:
- 當按鍵 S1~S5都沒有被按下時,S1~S5迴路都沒有導通,此時的Key 是接到R0的 Pull-Up電阻,此時的Key的電壓將會是 Vcc 的電壓。
- 當按鍵 S1被按下時,此時Key的電壓將會是R0(10KΩ)與R1(1 KΩ)電阻的分壓。
- 當按鍵 S2被按下時,此時Key的電壓將會是R0(10KΩ)與R2(3 KΩ)電阻的分壓。
- 當按鍵 S3被按下時,此時Key的電壓將會是R0(10KΩ)與R3(5 KΩ)電阻的分壓。
- 當按鍵 S4被按下時,此時Key的電壓將會是R0(10KΩ)與R4(8 KΩ)電阻的分壓。
- 當按鍵 S5被按下時,此時Key的電壓將會是R0(10KΩ)與R5(10 KΩ)電阻的分壓。
注意:上述都是針對沒有按下按鍵與單獨按下S1~S5按鍵的狀況。
若是使用者有需要複合按鍵的需求時,比方:同時按下 S1+S2或是S1+S5,或是S1+S2+S3…等狀況,此時就要比較仔細分配R1~R5電阻的電阻值。
複合按鍵分配電阻的重點如下:
由於複合按鍵會導致多個電阻並聯(R1~R5中有導通的電阻)後再與R0電阻串聯,因此需要仔細計算並聯後的電阻是否會等於或是接近R1~R5中的任一個電阻,若有此狀況,則電阻值需要重新分配。
類比按鍵模組的偵測要如何透過MCU韌體實現
(以下針對單一按鍵做說明,複合按鍵同理)
- 使用的MCU一定要有 ADC硬體模組。
- 類比按鍵的輸入腳位一定要被連接到MCU的其中一個類比訊號輸入腳。
- MCU建議分配一組定時器產生定時中斷。(比方,1ms定時中斷,這裡主要是用來做軟體濾波,避開機械彈跳)
- 承2,建議可以的話,可以在該定時中斷程式中,設定軟體觸發類比按鍵的偵測取樣。
- 承2,每1ms中斷中透過程式偵測該類比按鍵的輸入電壓是否變化。
- 由於MCU的真實世界中的電壓訊號充滿雜訊,因此ADC模組所轉換出來的電壓數值會有一定區間的漂移現象,一定不會是固定數值。
- 監測所需要的按鍵的ADC轉換數值的漂移範圍,訂定出該按鍵的有效的數值區間。
- 依序訂定出S1~S5按鍵的有效數值區間。
- 定時中斷程式中偵測ADC轉換數值是否落在S1~S5的任一區間。
- 承9,若是,則每1ms維持偵測該數值區間是否落在同一區間。
- 承9,若否,則判定按鍵無效,下次重新檢測。
- 承10,若是,則持續檢測數值是否持續穩定維持在該區間超過30次。(即有效數值持續30ms,這個時間長短可自行修改,不一定要這個時間,但是太短不建議,太長則反應遲鈍)
- 承10,若否,則判定按鍵無效,下次重新檢測,穩定計數的次數重新計算。
- 承12,若是,則該區間按鍵判斷按下成功。
- 設置該對應按鍵的旗標值,讓外圍的程式依據需求進行判斷。
類比按鍵模組的優點
- 可以大幅度縮減 MCU使用的腳位,使MCU的使用腳位需求降低。
- 在本來就有使用ADC模組的狀況下,可以降低MCU的選用成本。
類比按鍵模組的缺點
- 選用的MCU,必須要有 ADC硬體模組。
- 撰寫類比按鍵判斷程式時,需要先對各個按鍵的電阻分壓的數值漂移區間進行觀察與數值有效區間定義。
- 若類比按鍵模組的按鍵較多時,則不適合用在雜訊較大的環境
- 類比按鍵判斷程式的撰寫會比數位按鍵再複雜一些。(數位按鍵是直接判斷數位輸入腳位的讀取數值,而類比按鍵是判斷ADC數值的有效區間)
- 程式設計師定義的ADC有效區間若太小時,則工作在雜訊大的環境時,會有機會產生誤判的狀況,或是按鍵反應變遲鈍的狀況。
Macnica Galaxy MCU 產品線
- Renesas
- Microchip
- EPSON
- Infineon / Cypress