STM32 HAL庫學習系列第5篇 定時器TIM---編碼器接口模式配置


cube基本配置,外設開啟編碼器,串口2

 

可能大家在設置的時候有這個錯誤

錯誤:error:  #20: identifier "TIM_ICPOLARITY_BOTHEDGE" is undefined

意思是,高級、通用定時器不能用BothEdge,只有基本定時器才能用BothEdge

 

針對具體的芯片舉幾個例子:基本都是大同小異

F4系列:

1   /* 編碼器初始化及使能編碼器模式 */
2   ENCODER_TIMx_Init();
3   HAL_TIM_Encoder_Start(&htimx_Encoder, TIM_CHANNEL_ALL);
1 /* 獲取捕獲值並計算轉速 */
2  
3       CaptureNumber = ( int16_t )__HAL_TIM_GET_COUNTER(&htimx_Encoder)+OverflowCount*65535;
4       printf("輸入捕獲值:%d \n",CaptureNumber);
5       // 4 : 使用定時器編碼器接口捕獲AB相的上升沿和下降沿,一個脈沖*4.
6       // 11:編碼器線數(轉速一圈輸出脈沖數)
7       // 34:電機減數比,內部電機轉動圈數與電機輸出軸轉動圈數比,即減速齒輪比
8       printf("電機實際轉動速度:%0.2f(圈/s)\n",(float)CaptureNumber/4/11/34);
9       __HAL_TIM_SET_COUNTER(&htimx_Encoder,0);

 

F1系列  輸出方向與速度

 1 /**
 2   * 函數功能: 系統滴答定時器中斷回調函數
 3   * 輸入參數: 無
 4   * 返 回 值: 無
 5   * 說    明: 每發生一次滴答定時器中斷進入該回調函數一次
 6   */
 7 void HAL_SYSTICK_Callback(void)
 8 {
 9   static uint32_t count=0;
10   if(start_flag) // 等待脈沖輸出后才開始計時
11   {
12     time_count++;         // 每1ms自動增一
13     if(time_count==1000)  // 1s
14     {
15       /* Get the current direction */
16       uwDirection = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htimx_Encoder);     
17       CaptureNumber=__HAL_TIM_GET_COUNTER(&htimx_Encoder);
18      
19       printf("當前編碼器定時器計數方向:%d\n",uwDirection);
20       printf("輸入捕獲值:%d\n",CaptureNumber);
21       printf("1s內編碼器計數值:%d\n",CaptureNumber>=count?CaptureNumber-count:CaptureNumber+65535-count);
22      
23       // 11:編碼器線數(轉速一圈輸出脈沖數)
24       // 34:電機減數比,內部電機轉動圈數與電機輸出軸轉動圈數比,即減速齒輪比
25       printf("電機實際轉動速度:%0.2f(圈/s)\n",(float)(CaptureNumber>=count?CaptureNumber-count:CaptureNumber+65535-count)/11/34/2);
26       count=CaptureNumber;
27       time_count=0;
28     }
29   }
30 }

 

函數應用:

這個函數很好用,在電機控制時使用很多

__HAL_TIM_SET_COUNTER()    可以設置計數初值為需要的值,默認是0

 

增量式編碼器四倍頻:

確定編碼器是多少線的,假設定時器分頻為0;  則定時器計數為390*4 = 1560 

 

中斷配置:編碼器模式是可以不需要中斷的,主要是定時器1和8的配置

 

注意:這個是我實際遇到的問題,遇到的可以參考

編碼器是否是OC(集電極開路)門,接了上拉沒有,沒有需要接上啦,如果不使用Z信號,需要把外部中斷清零的那部分代碼去掉

 

標准庫配置可以參考:https://blog.csdn.net/wang328452854/article/details/50579832

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM