|
AB相旋轉(zhuǎn)編碼器有兩根信號腳,為A和B。當(dāng)編碼器旋轉(zhuǎn)時,編碼器內(nèi)部兩個開關(guān)交替通斷,兩個開關(guān)公共端接電源時,A、B腳輸出方波;當(dāng)A超前(或滯后)B時,為正轉(zhuǎn),反之為反轉(zhuǎn)。以下是摘抄至小孩子的解碼算法,簡單高效。
假設(shè)函數(shù)IS_PIN_A_HIGH()和IS_PIN_B_HIGH()是讀取A,B兩個引腳的狀態(tài)
假設(shè)有兩個外中斷INT0和INT1都已經(jīng)配置為雙邊沿觸發(fā)模式,則解碼如下:
- //! 編碼計數(shù)器
- static volatile uint32_t s_wQDCounter = 0;
- ISR(INT0_vect)
- {
- if (IS_PIN_A_HIGH() && IS_PIN_B_HIGH()) {
- s_wQDCounter++;
- } else {
- s_wQDCounter--;
- }
- }
- ISR(INT1_vect)
- {
- if (IS_PIN_A_HIGH() && IS_PIN_B_HIGH()) {
- s_wQDCounter--;
- } else {
- s_wQDCounter++;
- }
- }
讀取全局變量s_wQDCounter的時候別忘記加入中斷保護。如果要追求效率,可以將計數(shù)器類型修改為uint16_t。
--------------------------
以上就是中斷法,可以用引腳電平變化中斷來做。上面的代碼是4倍頻。如果要2倍頻,去掉任何一個中斷處理程序即可。
如果要單倍頻,選擇任意一個外中斷,并選擇只對某個邊沿觸發(fā)即可。
多年測試,穩(wěn)定可靠~
記住一句口訣:
在任意邊沿觸發(fā)模式下,A和B進行電平比較:
對A觸發(fā)的中斷:同加異減
對B觸發(fā)的中斷:同減異加
反之亦然
|
評分
-
查看全部評分
|