close

在步進電機控制時,經常會遇到需要輸出指定個數的脈衝來實現精確控制。本文將介紹怎樣使用定時器輸出指定個數的PWM脈衝。

硬件環境:STM32F103C8T6
軟件環境:STM32CubeMX v6.1.1
HAL庫:STM32CubeF1 Firmware Package V1.8.3

產生固定個數脈衝的方法也有很多,下面介紹兩種常用的方法。

1、中斷計數方式

這種方式比較簡單,定時器配置為PWM輸出模式,在PWM中斷中計數,當達到設定的個數後,停止PWM輸出。

這裡以定時器1為例進行介紹,配置如下:

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

完成後生成代碼。添加自己的程序。首先定義一個全局變量,用於控制輸出脈衝個數。

uint16_t PwmNum;

需要輸出脈衝時,給該變量賦值,並啟動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資源少,但占用了兩個定時器。用戶需要根據實際需求選擇用哪種方式。


來源:嵌入式技術開發
版權歸原作者所有,如有侵權,請聯繫刪除。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()