注意:在STM32中,編碼器使用的是定時器接口,通過數據手冊可知,定時器1,2,3,4,5和8有編碼器的功能,而其他沒有。同時只有CH1和CH2是進行編碼器模式的
1.編碼器有個轉速上限,超過這個上限是不能正常工作的,這個是硬件的限制,原則上線數越多轉速就越低,這點在選型時要注意,編碼器的輸出一般是開漏的,所以單片機的io一定要上拉輸入狀態.
2.定時器初始化好以后,任何時候CNT寄存器的值就是編碼器的位置信息,正轉他會加反轉他會減這部分是不需要軟件干預的,初始化時給的TIM_Period 值應該是碼盤整圈的刻度值,在減溢出會自動修正為這個數.加超過此數值就回0.
3.如果要擴展成多圈計數需要溢出中斷像樓主說的,程序上圈計數加減方向位就行了.
4.每個定時器的輸入腳可以通過軟件設定濾波
5.應用中如果沒有絕對位置信號或者初始化完成后還沒有收到絕對位置信號前的計數只能是相對計數.收到絕對位置信號后重新修改一次CNT的值就行了.碼盤一般都有零位置信號,結合到定時器捕獲輸入就行.上電以后要往返運動一下找到這個位置.
6.即便有濾波計數值偶爾也會有出錯誤的情況,一圈多計一個或少計一個數都是很正常的特別是轉速比較高的時候尤其明顯,有個絕對位置信號做修正是很有必要的.絕對位置信號不需要一定在零位置點,收到這個信號就將CNT修正為一個固定的數值即可.
7.開啟定時器的輸入中斷可以達到每個步計數都作處理的效果,但是高速運轉的時候你可能處理不過來.
作者:老-_-白 https://www.bilibili.com/read/cv6285602/ 出處:bilibili