1. 程式人生 > >STM32F3 系列的HRTIM 產生PWM理解與應用 (以STM32F334為例,cube,HAL庫,附帶完整程式)

STM32F3 系列的HRTIM 產生PWM理解與應用 (以STM32F334為例,cube,HAL庫,附帶完整程式)

這幾天研究了下STM32F334的HRTIM,看了STM32F334的微控制器參考手冊,基於Cube的HAL庫做出以下總結。

F334微控制器自帶的HRTIM經過始終配置後可以高達144M Hz,經過內部處理後,頻率可以高達4.608G Hz(144M*32).而相對與高階定時器TIM1和其他普通的定時器,其配置起來更加複雜,所涉及的東西也更多。

我選的是F334C8T6,準備做一個數控電源,就先簡單的通過HRTIM產生一個PWM吧。以後會更新如何配合ADC使用。外部晶振8M,2線下載形式,開啟HRTIM的Timer A.

 這個是F334的始終配置,選擇外部告訴時鐘 HSE,系統時鐘72M,一定要勾選HRTIM時鐘,為144M.

好了下面開始重點講解HRTIM配置過程中,各個引數的意義了。

上面是你開啟HRTIM 最基本的配置,General自動匹配你選的Time A..E. 而Base Setting  裡面和普通的定時器配置沒什麼區別,主要是選擇好週期(會自動告訴你PWM頻率)。 Repetition和普通的定時器一樣,用於產生多少個波,這個在電機控制方面很有用。

Mode:  是連續模式和單一模式,就是產生連續的波還是單一的脈衝。

Half mode.... :  半波模式下,是輸出PWM佔空比佔據一半的情況,可以選擇使能或者不使能。

Start/Reset/ on sync用於同步定時器,是否是外部事件發生的時候開啟或者關閉定時器。輸出PWM的時候只能選no  effect

Preload Enable: 這個沒多說的,就是定時器自動重灌。

接下來的降格Update引數,用於DMA,不用DMA的時候不用配置就行

Burst Mode: 就是控制定時器輸出波形的時間,當開啟Burst 模式的時候,波形不能輸出,和Delay protection 差不多,不過有區  別,可以百度或者看參考手冊

Push pull : 不是之前選的I/O輸出的推輓輸出,是一種波形選擇方式,百度吧,解釋起來浪費時間。

Fault lock :  HRTIM 有Fault 事件檢測,檢測到可以關閉定時器輸出等等,所以這個是設定Fault 是否可以寫入。

Dead timing : 簡單的說就是死區時間,如果選擇使能,就一定輸出PWM了,而且每個通道的匹配通道不需要配置。

接下來的幾個引數牽涉到幾個定時器之間的聯絡,比如 time A update 發生了,會對time B 產生什麼結果等等。

(我上述的配置是為了產生互補的PWM波,所以開啟了死區)

這個用於設定PWM的CMP1,到CMP1 的時候發生什麼。可以配置多個CAP

這些是捕獲,外部事件,DMA等等,根據需要配置,不需要配置的時候Disable就可以剛才剛才在基礎設定中選擇了死區,所以下面會給死區的配置。和普通的配置差不多,但是這個更高階,可以配置死區Sign,是高電平多出的死區,還是第電平多出的死區。還可以配置上升沿的死區和下降沿的死區不同,還可以鎖定防止一些外部事件來改變死區時間。最後,就是配置兩個通道啦,由於PWM輸出配置了死區,導致了TA2不需要配置,會自動互補。而配置TA1 和之前的差不多,配置在什麼時候Set (高電平),什麼Reset(低電平)。我上面是在開始是高電平,當CAP1發生時,程式設計低電平。其他設定發生了Burst 時候,空閒狀態是什麼(可高可低),Fault事件來了對PWM的影響等等。

基本配置就完成了,此時還不能輸出PWM波,這個是Cube的一個重要缺點,他為了保護,不給你任何啟動訊號,所以你需要在主函式的配置之後加上啟動函式:

	HAL_HRTIM_WaveformOutputStart(&hhrtim1,HRTIM_OUTPUT_TA1 | HRTIM_OUTPUT_TA2);
	HAL_HRTIM_WaveformCounterStart_IT(&hhrtim1,HRTIM_TIMERINDEX_TIMER_A);

然後就可以輸出互補的PWM波啦,I/O口PA8,PA9。

讓我找找如何分享檔案。