MCU定時器的CNT寄存器一般是16位的,使用定時器的編碼器正交接口功能,計數周期有兩種配置方法:
1、計數周期與編碼器脈沖數相等
TIM_TimeBaseStructure.TIM_Period = (uint16_t)(PulseNumber) - 1u;
好處就是轉子電角度獲取不用做處理,由當前CNT計數值可以很方便對應到轉子電角度。
缺點則是圈數計數溢出時,位置計數沒有達到有符號2進制的溢出但被強制處理,也就是說位置計數不能在數據格式里完成連續循環,這樣在溢出點前后數據就不連貫。如果使用位置信息計算轉速,在溢出點前后的兩次位置數據相減就會得到錯誤的速度,這樣為保證測速的連貫性,就需要對位置信息做移位處理,這樣就限制了編碼器脈沖數必須為2的次數,或者速度計算不采用位置數據,記錄兩次的圈數和脈沖,分開相減后再處理,這樣就避免溢出點的問題了。但即使這樣正確處理了速度計算,編碼器最大支持脈沖仍不能大於65535。
2、計數周期等於65535
TIM_TimeBaseStructure.TIM_Period = 65535;
好處很明顯,這樣可以保證位置信息的連貫性,速度計算也不需要特殊處理,直接使用位置信息計算就可以,並且對編碼器脈沖數也沒有限制,可以支持很高精度的編碼器。
缺點則是無法從CNT中直接得到當前的轉子電角度,需要從位置信息中處理得到,不過處理也不復雜,可以說方法2適應性更好。
