在步進電機控制時,經常會遇到需要輸出指定個數的脈衝來實現精確控制。本文將介紹怎樣使用定時器輸出指定個數的PWM脈衝。
HAL庫:STM32CubeF1 Firmware Package V1.8.3產生固定個數脈衝的方法也有很多,下面介紹兩種常用的方法。
1、中斷計數方式
這種方式比較簡單,定時器配置為PWM輸出模式,在PWM中斷中計數,當達到設定的個數後,停止PWM輸出。
這裡以定時器1為例進行介紹,配置如下:

TIM1的通道2配置為PWM輸出,分頻係數、計數周期、脈寬等根據需要輸出的PWM頻率進行配置。需要打開定時器的捕獲比較中斷(TIM1高級定時器的中斷是分開的,普通定時器只有一個中斷)。

完成後生成代碼。添加自己的程序。首先定義一個全局變量,用於控制輸出脈衝個數。
需要輸出脈衝時,給該變量賦值,並啟動PWM中斷輸出。PwmNum = 10;HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_2);編寫中斷回調函數,判斷PWM輸出次數達到設定值時,停止PWM輸出。void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim){ static uint16_t cnt = 0; cnt++; if(cnt == PwmNum) { cnt = 0; HAL_TIM_PWM_Stop_IT(&htim1,TIM_CHANNEL_2); }}編譯運行程序,可以看到,輸出了10個PWM脈衝,說明程序正確。
2、主從定時器門控方式
中斷計數的方式實現起來很簡單,但也存在明顯的缺點。當PWM頻率較高時,頻繁的中斷將影響程序運行的效率。遇到這種情況,就需要採用主從定時器門控的方式來實現。
所謂主從模式,就是將主定時器作為觸發源,觸發從定時器來工作。
STM32CubeMX配置:
主定時器為TIM1,通道2配置為PWM輸出,使能主從模式,觸發事件選擇為更新事件,不需要開啟中斷。

從定時器為TIM2,從模式選擇為門控模式,觸發源選擇ITR0,開啟定時器2中斷。
觸發源的選擇需要查看數據手冊中進行選擇,TIM2為從定時器、TIM1為主定時器時選擇ITR0。
程序編寫:
配置完成後生成代碼,編寫自己的程序。
__HAL_TIM_SET_AUTORELOAD(&htim2,5-1);//設置要輸出的PWM脈衝數5個HAL_TIM_Base_Start_IT(&htim2);//啟動從定時器HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);//啟動主定時器PWM輸出編寫定時器2中斷回調函數:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim == &htim2) {if(__HAL_TIM_GET_FLAG(&htim2,TIM_FLAG_CC2)!=RESET)//判斷是否觸發中斷 {__HAL_TIM_CLEAR_FLAG(&htim2,TIM_FLAG_CC2);//清除中斷標誌HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_2);//關閉主定時器HAL_TIM_Base_Stop_IT(&htim2);//關閉從定時器 } }}完成後編譯程序下載測試,可以看到輸出了5個頻率為10KHz的PWM脈衝,與程序中一致。
3、總結
兩種方式都可以產生指定個數的PWM脈衝,各有優缺點。其中,中斷計數的方式實現簡單,但不適合頻率較高的PWM應用。而主從定時的方式,則占用CPU資源少,但占用了兩個定時器。用戶需要根據實際需求選擇用哪種方式。