旋轉編碼器(Rotary encoder)在網路上搜尋,大致上會顯示兩大類型,一種是光學式的,適合應用在高速的場合,例如馬達轉動產生的角度、位移等;另一種是機械式的,適合低轉速的應用,例如音量大小調整、輸入選擇、飛梭旋鈕等這些方便的輸入裝置,而這裡所要介紹的便是後者。(另外,旋轉編碼器也會依照輸出的型式,分為絶對型與增量型)

下圖是Arduino電子積木裡常見的旋轉編碼器模組(增量型),手柄可以順時針或逆時針方向無限制的旋轉,也可以下壓。

2021J1

 

此模組在購入時,R1並未焊上電阻,可以自行焊上電阻,或是於單晶片中設定內部的上拉電阻,例如 Arduino 設定腳位時,將其設為 INPUT_PULLUP 。

2021J3

 

模組共有5個接腳,分別是 CLK、DT、SW 及電源。當手柄往下壓時,SW這個接腳會連接到GND(即SW電位為LOW);而未壓下手柄時,SW透過R1上拉到正電源(SW電位為HIGH)

2021J2

 

CLK 及 DT 就是今天的重頭戲了。這個模組將一圈分割成30小格,如果將手柄轉一圈,CLK 及DT 各會產生由 HIGH 變 LOW ,或是由 LOW 變 HIGH 這樣的變化30次。下圖是我以示波器量測到的圖形。

2021J6

2021J5

我們可以觀察到,當順時針方向旋轉時,DT 的變化落後 CLK ;反之,逆時針方向旋轉時,DT 的變化超前 CLK 。

 

2021J4

將順、逆時針旋轉的結果畫在一起,就可明顯看出當CLK發生變化,並且變化後為高電位時(橘色部份),只要接著判斷 DT 的電位,即可得知是順時針轉了一格,或是逆時針轉了一格;反之,當 CLK 變化後為低電位時(藍色部份),亦用同樣方式進行判別。若以順時針方向為正(+1);逆時針方向為負(-1),可得下表:

2021J7

 

由於這個旋轉編碼器是機械式的,於是我便想說這個模組的5個接腳之中的"+"(正電源)應該僅僅是連接到R2及R3,上拉電位使用的,旋轉編碼器本身並不須要電源。如果使用單晶片內部的上拉電阻,不就可以少連接一條線?於是我便將"+"這條連接至5V的電線移除,卻發生了下面這樣的情形:

2021J8

很明顯的可以看出圖中藍色圈起來的異常部份。咦!難道機械式的旋轉編碼器內部有電路須要電源供應?不不不,別被自己騙了,其實是因為這個模組上的R2及R3造成的。

 

2021J9

先撇除"SW"不看,上圖是原本供應正電源給模組的"+"接腳時的清況,若將此電源移除並使用晶片的內部上拉電阻,則會如下圖所示:

2021J10

(Rpu為晶片內部的上拉電阻)

此時R2及R3等於是一個兩者串聯的電阻,所以才會在示波器上看到那樣的圖形。所以,若想少接"+"這個接腳的電線,可以將R2、R3(同時或其中之一)從模組的電路板上移除即可。

 

也由於這個旋轉編碼器是機械式的,經由旋轉手柄使內部接點作動時,會產生"彈跳現象"。彈跳現象可以用硬體的方式(電子電路)或是軟體的方式(程式)克服,或著兩者同時使用。下一篇 旋轉編碼器 - 彈跳現象 再來討論這個問題。

 

arrow
arrow
    創作者介紹
    創作者 肯特王 的頭像
    肯特王

    肯特王的簿

    肯特王 發表在 痞客邦 留言(0) 人氣()