有STM32用戶使用STM32F3系列MCU開發產品,想利用片內定時器實現移相全橋的PWM波形輸出。具體要求如下,并希望輸出下圖所示波形:
1、A與B波形的頻率及占空比相同,波形錯位的時間需可調,如圖上半部分所示。
2、A與/A是同頻率、同占空比的互補波形,兩個波形的高電平之間可插入死區。
3、B與/B的關系同A與/A,如圖中下半部分的圖示。
要實現上面的波形,我們可以通過靈活運用比較輸出的toggle模式結合DMA來實現,
不過,這對很多人來說,難度可能有點大。
具體到這里,因為他選擇了STM32F3系列,而STM32F3/L4/F7/H7等系列的定時器都具備非對稱PWM輸出模式或組合輸出模式,若使用非對稱PWM輸出模式實現上述輸出就比較方便省事。下面一起來看看。
所謂非對稱PWM輸出模式它是相對基于中心對稱計數時的對稱PWM輸出而言的。當計數模式為中心對齊,某個輸出通道利用一個比較寄存器做PWM輸出時,其對應的PWM輸出波形呈中心對稱,如下圖所示:
那這里的非對稱PWM輸出呢?同樣采用中心對齊計數模式,1個通道的輸出要用到2個比較寄存器的值進行比較翻轉。比方定時器通道3的輸出,根據CCR3和CCR4的值分別在向上計數和向下計數過程中做兩次比較而產生輸出,由于CCR3與CCR4的值往往不一致進而輸出非對稱的PWM波形。如下圖所示:
關于定時器比較輸出的非對稱PWM模式,OC1REFC或OC2REFC的輸出特征由CCR1和CCR2的值及所選PWM模式決定,同樣,OC3REFC或OC4REFC的輸出特征由CCR3和CCR4的值和所選PWM模式決定。
STM32參考手冊中在這個地方可能講得比較簡單,我這里再畫圖示意下。OC1/OC2都使用非對稱PWM輸出模式。CCR1=3,CCR2=6,ARR=8。注意,采用非對稱PWM輸出模式一定要使用中心對齊計數模式。
從上圖中我們不難看出,對于OC1REFC和OC2REFC,它們的輸出產生了相差,該相差取決于CCR1與CCR2的值。基于這點,我們就可以實現上面的A、B輸出的相移問題,即通過修改CCR的值即可自由調整相差。【OCxREFC信號最終還是輸出到OCx端的,并支持互補輸出。】
這時我們再開啟這兩路的互補輸出,到此就可以實現客戶的輸出要求了。
下面我們利用STM32CubeMx神器進行初始化配置。【了解下關鍵配置就好】
配置時鐘等,然后生成初始化代碼并打開相關工程。添加需要的用戶代碼。代碼很簡單,是基于cube HAL庫。【開啟CH1/CH2及互補通道的PWM輸出功能,使能主輸出、開啟計數器。】
看下輸出結果【未插入死區】:
我們也可以基于互補通道插入死區,得到帶死區的輸出結果。
看到這里,是不是覺得這個非對稱PWM模式對實現那些相差可調的驅動波形很方便?好,關于STM32定時器的非對稱PWM功能輸出就介紹到這里。當然,它還可以有些其它靈活的用法,有興趣可以進一步了解并為你所用。
-
PWM
+關注
關注
114文章
5198瀏覽量
214879 -
STM32
+關注
關注
2272文章
10923瀏覽量
357573 -
定時器
+關注
關注
23文章
3255瀏覽量
115371
原文標題:STM32定時器非對稱PWM輸出模式應用示例
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論