我造輪子,你造車,創客一塊兒造起來!塔克創新資訊【塔克社區 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】 函數
本文介紹X-CTR100控制器的電機正交編碼器,X-CTR100具備2路32位AB項正交編碼器和3路16位正交編碼器,共5路。 測試
可用於電機轉速和角度測量,用於智能車、機械臂、機器人制做。 ui
什麼是正交?若是兩個信號相位相差90度,則這兩個信號稱爲正交。因爲兩個信號相差90度,所以能夠根據兩個信號哪一個先哪一個後來判斷方向。 編碼
正交編碼器(Quadrature Encoder)是一種用於測量旋轉速度和方向的傳感器,經過積分(累加)運算後,還能夠用來測算距離。最多見的正交編碼器有兩個輸出信號:A相 和 B相,有些編碼器會有 Z相 的校準功能(用於消除累計偏差)。「正交」一詞來源於 AB 兩個信號的特徵,通常狀況下 A相 和 B相 的輸出信號老是有 π/2 的相位差。 spa
上圖中 A 和 B 分別鏈接到兩個傳感器單元上,黑白相間的圓環稱之爲「柵格」。傳感器和柵格的實現方式有不少種:反射式傳感器+不一樣反光率的柵格;對射式傳感器+鏤空光柵;霍爾傳感器+磁極圓環;觸點+導電軌道;等等。 code
初始化編碼器,每隔500ms採樣一次編碼器數值並串口輸出顯示。 blog
硬件資源: 接口
硬件鏈接: 資源
X-SOFT軟件生態,X-API擴展文件以下。 get
ax_encoder.c——X-CTR100 電機正交編碼器源文件
ax_encoder.h——X-CTR100 電機正交編碼器頭文件
接口函數
void AX_ENCODER_TIM2_AB_Init(uint32_t cycle); //編碼器AB初始化(32位) uint32_t AX_ENCODER_TIM2_AB_GetCounter(void); //編碼器AB獲取計數器數值 void AX_ENCODER_TIM2_AB_SetCounter(uint32_t count); //編碼器AB設置計數器數值
void AX_ENCODER_TIM5_CD_Init(uint32_t cycle); //編碼器CD初始化(32位) uint32_t AX_ENCODER_TIM5_CD_GetCounter(void); //編碼器CD獲取計數器數值 void AX_ENCODER_TIM5_CD_SetCounter(uint32_t count); //編碼器CD設置計數器數值
void AX_ENCODER_TIM3_GH_Init(uint16_t cycle); //編碼器GH初始化 uint16_t AX_ENCODER_TIM3_GH_GetCounter(void); //編碼器GH獲取計數器數值 void AX_ENCODER_TIM3_GH_SetCounter(uint16_t count); //編碼器GH設置計數器數值
void AX_ENCODER_TIM4_KL_Init(uint16_t cycle); //編碼器KL初始化 uint16_t AX_ENCODER_TIM4_KL_GetCounter(void); //編碼器KL獲取計數器數值 void AX_ENCODER_TIM4_KL_SetCounter(uint16_t count); //編碼器KL設置計數器數值
void AX_ENCODER_TIM1_OP_Init(uint16_t cycle); //編碼器OP初始化 uint16_t AX_ENCODER_TIM1_OP_GetCounter(void); //編碼器OP獲取計數器數值 void AX_ENCODER_TIM1_OP_SetCounter(uint16_t count); //編碼器OP設置計數器數值 |
函數初始化編碼器,設定編碼器計數週期爲60000,設置當前值爲30000,while循環每隔500ms採樣編碼器一次,主程序代碼以下。
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***電機正交編碼器例程***\r\n\r\n");
//模塊初始化及配置 AX_ENCODER_TIM2_AB_Init(60000); //32位正交編碼器初始化,計數週期60000 AX_ENCODER_TIM5_CD_Init(60000); //32位正交編碼器初始化,計數週期60000 AX_ENCODER_TIM3_GH_Init(60000); //16位正交編碼器初始化,計數週期60000 AX_ENCODER_TIM4_KL_Init(60000); //16位正交編碼器初始化,計數週期60000 AX_ENCODER_TIM1_OP_Init(60000); //16位正交編碼器初始化,計數週期60000
//設置編碼器當前計數值爲30000 AX_ENCODER_TIM2_AB_SetCounter(30000); AX_ENCODER_TIM5_CD_SetCounter(30000); AX_ENCODER_TIM3_GH_SetCounter(30000); AX_ENCODER_TIM4_KL_SetCounter(30000); AX_ENCODER_TIM1_OP_SetCounter(30000);
//X-API測試:5路正交編碼器測試 printf("*5路正交編碼器測試\r\n");
while (1) { printf("*AB:%5d CD:%5d GH:%5d KL:%5d OP:%5d\r\n", AX_ENCODER_TIM2_AB_GetCounter(), AX_ENCODER_TIM5_CD_GetCounter(), AX_ENCODER_TIM3_GH_GetCounter(), AX_ENCODER_TIM4_KL_GetCounter(), AX_ENCODER_TIM1_OP_GetCounter()); AX_Delayms(500); } } |
X-CTR100按照編碼器接口定義鏈接編碼器,編碼器A、B接口線序可更換。手動轉動編碼器可觀察編碼器數值變化,一個方向轉動編碼器數值增長,另外一個方向轉動編碼器數值減少。
https://zhuanlan.zhihu.com/p/20268680