STM32定時器單脈衝模式及其應用

2021-10-20 01:29:57 字數 1779 閱讀 4984

stm32的定時器可以配置為單脈衝模式,所謂的單脈衝就是通過配置定時器使其在乙個可控延時後,產生乙個脈寬可控的脈衝。使用stm32cubemx工具配置起來非常方便。

硬體環境:stm32f103c8t6

軟體環境:stm32cubemx v5.5.0

hal庫:stm32cubef1 firmware package v1.8.0 

1.stm32cubemx配置

將tim1的ch2配置為pwm輸出模式,使能one pulse mode(單脈衝模式)ch polarity選擇為low。分頻係數、計數週期、輸出比較值根據實際需求進行設定,用於控制延時時間和脈衝寬度。單脈衝模式的定義如下圖所示。

定時器啟動後,tim1開始計數,經過 tdelay時間後,輸出高電平,經過tpulse時間後,輸出低電平。在圖中可以看到,tpulse為延時時間,即暫存器tim_ccrx的值;tpulse為脈衝寬度,即(tim_arr – tim_ccrx + 1)的值。

本例中,設定定時器分頻係數為71,即計數週期為1us。tim_ccrx為50,即脈衝寬度為50us,tim_arr為199,則延時時間為199-50+1=150us。

2.程式編寫

生成**後,hal庫中有乙個hal_tim_onepulse_start函式,但呼叫該函式無效。直接呼叫pwm函式即可產生單個脈衝。

hal_tim_pwm_start(&htim1,tim_channel_2);
呼叫下面函式可以設定延時時間和脈衝寬度:

_hal_tim_set_autoreload(&htim1,plusedelay + plusewidth - 2);//設定脈衝寬度__hal_tim_set_compare(&htim1,tim_channel_2,plusedelay - 1); //設定脈衝延時
3.單脈衝模式的應用做過可控矽控制的朋友可能已經發現了,單脈衝模式的非常適合用於可控矽控制。可控矽控制可參考之前文章《微控制器控制可控矽調壓》。檢測到過零點後,根據需要控制的電壓設定脈衝寬度和延時時間即可,完全由硬體控制,更精確也更方便。

假設,檢測到過零點後,需要延時5ms,輸出乙個100us的脈衝。定義變數:

uint16_t plusedelay = 5000;//脈衝延時uint16_t plusewidth = 100;//脈衝寬度
在過零檢測函式中設定延時時間和脈衝寬度,並開啟定時器單脈衝即可。​​​​​​​

__hal_tim_set_autoreload(&htim1,plusedelay + plusewidth - 2);//設定脈衝寬度__hal_tim_set_compare(&htim1,tim_channel_2,plusedelay - 1); //設定脈衝延時hal_tim_pwm_start(&htim1,tim_channel_2);​​​​​​​
單脈衝模式含有許多其他應用,感興趣的朋友可以自己研究一下。

STM32的單脈衝模式實現精確個數脈衝

我們在做嵌入式產品的開發過程中,有時需要輸出指定數目的脈衝。實現它的方法較多,這裡介紹一種利用 stm32定時器的單脈衝模式來實現的方法。stm32定時器的單脈衝輸出功能,其實是定時器輸出比較功能的乙個特殊應用。即讓定時器在某個事件觸發後的一段時間產生指定脈寬的單脈衝訊號。計數器的啟動通常可由從模式...

stm32f1定時器單脈衝模式的使用

摘錄 stm32f1參考手冊 中文版 單脈衝模式 opm 是前述眾多模式的乙個特例。這種模式允許計數器響應乙個激勵,並在乙個程式可控的延時之後,產生乙個脈寬可程式控制的脈衝。意思就是說,可以將某個電平訊號作為激勵,當定時器收到激勵訊號,還可以延時一定時間輸出pwm訊號。根據配置可以輸出單個pwm或多...

基於HAL庫的STM32定時器單脈衝控制

這裡的單脈衝控制是指在pwm下產生指定個數的脈衝。先在cubemx中按照pwm進行配置。定義乙個變數表示脈衝個數。uint8 t pwmnum 5 開啟pwm中斷。hal tim pwm start it htim1,tim channel 1 定義脈衝完成 函式。uint8 t cnt 0 voi...