昨天的文章中分享了一個小技巧:
設計小技巧:如何用MCU或FPGA的一個數字IO測量2個電位計的阻值變化?
實際上是利用了我們常用的PWM功能的一個逆向思維應用。
今天再分享一個小技巧 - 如何使用一個MCU的模擬輸入端口連接多個旋轉編碼器?
作為一種輸入控制器件,旋轉編碼器被大量使用,尤其在測試測量領域,有的設備上會有多個旋轉編碼器用于調節多個參量。
一般來講,旋轉編碼器需要至少2根微控制器的輸入管腳,如果有內置的按鍵,還需要第三根。如果連接2個旋轉編碼器那就要消耗掉6根輸入管腳,連接3個旋轉編碼器需要9根,以此類推。。。
常用的旋轉編碼器的外形
旋轉編碼器的典型檢測電路
然而,如果你用的MCU有ADC的功能,其實只需要一根模擬輸入管腳就可以搞定多個旋轉編碼器的連接。
硬禾學堂的STM32 DIY示波器板用一個旋轉編碼器和2個按鍵作為輸入
聽起來不可思議?
我們先看一下旋轉編碼器是如何使用的。
確定旋轉方向:
編碼器在旋轉的時候會同時在其”A“和”B“管腳輸出一串脈沖,從這兩串脈沖的相位關系上就可以確定編碼器的旋轉方向 - 將一路脈沖延遲”一步“并將2個脈沖進行異或操作。
比如:
假設管腳 'A'的輸出為:'00110011...' ,管腳'B'的輸出為 '01100110...', 將 'A'的信號延遲一步,得到'01100110...'., 將延遲后的'A'同'B'異或,將得到'00000000...'. ,向另外要給方向旋轉,管腳'A'的輸出變為'11001100...' ('B'不變), 這樣'A' 延遲一步編程'10011001...'.再跟'B'信號異或,就給出結果'11111111...'.
用模擬的方式來實現:
我們可以把'A'和'B'輸出的信號一起看,當成是一個2bit的并行總線,能夠有4種組合的輸出: 0b00, 0b01, 0b10 and 0b11 (格雷碼).多個位數的二進制值可以轉換成一個模擬電壓信號,這本質上就是一個數模轉換器.
有一種非常簡單實現的DAC是R-2R電阻網絡,這種方法只使用兩個電阻值R和2R就可以構成一個網絡,每增加一個位數,只需要增加兩個電阻。一個2根管腳的旋轉編碼器只需要4個電阻,如下圖:
這個電路可以產生4個不同電壓值的信號,這個信號用單片機的ADC進行量化解碼,即可解碼得到管腳”A“和”B“的值。一般旋轉編碼器還有一個按鍵,考慮到按鍵的輸入檢測,電路可以變成下面這樣:
一個實際的實現
兩個旋轉編碼器再加上內置的按鍵,共需要一個6位的DAC.一般MCU內置的ADC為10位,可以非常輕松地解碼由此生成的模擬信號,并且每1位相當于還有4bit的分辨率余量,因此我們可以使用5%精度的電阻 (當然1% 會更好).
R-2R的阻值相對于上拉電阻要足夠大,以避免引起R-2R的比值失衡,同時上拉電阻也不能太小,否則流過開關觸點的電流會太大。
2R電阻可以簡單地將兩個R阻值的電阻串聯起來,還可以節省一種阻值的電阻.
為防止觸點的抖動需要加一個0.01uF的電容,否則會引起兩個編碼器之間的干擾。
觸點抖動噪聲
通過電容濾除掉觸點抖動噪聲
是不是又Get到一個新技能?
繼續關注電子森林,會有更多設計技巧分享給大家。
原文標題:逆向思維: 如何用一根MCU的模擬輸入檢測多個旋轉編碼器?
文章出處:【微信公眾號:電子森林】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1630文章
21759瀏覽量
604376 -
mcu
+關注
關注
146文章
17185瀏覽量
351735 -
旋轉編碼器
+關注
關注
5文章
159瀏覽量
25993
原文標題:逆向思維: 如何用一根MCU的模擬輸入檢測多個旋轉編碼器?
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論