Encoder也就是編碼器,可用於將馬達的旋轉資訊轉換為方波的形式輸出,他的構造與原理都非常簡單,內部是一圈上面有黑色條紋,然後會有光束照射在那一圈上面,底下有光感測器,只要馬達旋轉到光剛好照射到黑色條紋上,就會輸高電位,若照射到透明的區域,光感測器就會感測到光束,就會輸出低電位。因此馬達旋轉的時候就會形成高低電位來回變換的方波。我們只要知道一個方波的周期就可以推算馬達的轉速了。
接下來就產生一個問題,不論馬達正轉或反轉,他都會輸出相同的波形。
這個問題的解法很直觀,我們在將黑色條紋分成內外兩圈,而內外兩圈並不是平行的(上面的encoder就是這種形式的),而是有一點交錯(相位差90度),然後變成輸出兩個波。這樣正反轉的時候,這兩個波的先後順序會不相同。實際的輸出波形可以看下圖。
聽到這邊,可能你還是不太清楚實際上要怎麼處理這兩個具有90度相位差的波形,不用擔心,STM32已經幫你計算好了。只要把兩隻腳位接到Encoder的兩個輸出上,並在STM32開啟encoder mode,你在用一個變數去讀值,只要你馬達正轉,這個值就會增加,反之則減少,如此你就可以透過單位時間變數的變化量來推得馬達的角速度。明天我們就來實際使用看看這個方便的功能吧~