天天看點

STM32F429--STM32的PWM占空比産生與測量

一、PWM波形的産生;

使用定時器2 (TIM2)PA5端口輸出。

STM32F429--STM32的PWM占空比産生與測量

通過配置

TIM_TimeBaseStructure.TIM_Period= 1000 - 1;

TIM_TimeBaseStructure.TIM_Prescaler= 9000 - 1;

TIM_OCInitStructure.TIM_Pulse= 300 ;

三個參數,TIM_Prescaler控制計數頻率,此處9000即計數頻率為90M/9000 = 10Khz,即計數一次的時間為0.1ms,TIM_Period控制PWM波周期時間,此處1000即PWM波的周期為1000*0.1ms = 100ms;TIM_Pulse控制有效電平時間,此處300即有效電平時間為300*0.1ms=30ms;調用初始化程式,上點即産生PWM波信号。

STM32F429--STM32的PWM占空比産生與測量

二、PWM波占空比的測量:

捕獲輸入通過定時器5(TIM5)通道二PA1端口;

STM32F429--STM32的PWM占空比産生與測量

初始化函數同課堂使用的函數,此處略寫。

下面詳寫捕獲中斷服務函數。

STM32F429--STM32的PWM占空比産生與測量

定義五個變量

TIM5CH1_CAPTURE_STA 存放輸入捕獲狀态     

TIM5CH1_CAPTURE_VAL存放輸入捕獲值(TIM2/TIM5是32位)

CATCH2 存放第一次觸發中斷到第二次觸發中斷的時間;

CATCH3 存放第二次觸發中斷到第三次觸發中斷的時間;

okflag 捕獲結束标志位;

捕獲原理:通過擷取第一次觸發中斷到第二次觸發中斷的時間,和第二次到第三次觸發的時間,兩次時間求和即為總時間,即周期,然後用     (前文産生PWM波使用的是高電平有效);

STM32F429--STM32的PWM占空比産生與測量
STM32F429--STM32的PWM占空比産生與測量

一個成功的捕獲周期順序如上圖示識1-2-3所示:

過程1:原本初始化之後,該中斷為下降沿觸發,是以當檢測到有下降沿時進入到該中斷服務函數,此時

if(TIM5CH1_CAPTURE_STA & 0x80)

if(TIM5CH1_CAPTURE_STA&0X40)

以上兩個if均不成立,是以程式直接進入最後一個else中,先進行清空操作,然後把STA标志位次高位置1,表示捕獲到了第一次,捕獲了一個下降沿,初始化定時器5(TIM5),然後開啟定時器,将中斷捕獲觸發信号改為上升沿觸發,下一次為上升沿觸發;

過程2:第二次進入該中斷服務函數時

if(TIM5CH1_CAPTURE_STA&0X40)

成立,進入第二個階段,将标志位STA最高位置1,表示捕獲完第二次,将目前時間存入全局變量:CATCH2中,初始化定時器5(TIM5),然後開啟定時器,将中斷捕獲觸發信号改為下降沿觸發,下一次為下降沿觸發。

過程3:第三次進入該中斷服務函數時:

if(TIM5CH1_CAPTURE_STA & 0x80)

成立,進入第三階段,擷取目前定時器時間,放入全局變量CATCH3,即第二次捕獲到第三次捕獲時間間隔,即高電平時間,将全局标志位okflag置1,通知main函數接下來可以列印到序列槽了。

STM32F429--STM32的PWM占空比産生與測量

main 函數中建立變量Comp存放占空比,total存放CATCH2+CATCH3即總時間,周期。用高電平時間CATCH3/total即占空比。

三、運作結果:

STM32F429--STM32的PWM占空比産生與測量

測出占空比為29%,與實際值在誤差允許範圍内近似相等,程式正确。

繼續閱讀