有人想實現(xiàn)下面的PWM輸出波形,三路頻率相同,占空比同步可調(diào),且三路輸出波形時差固定為T/3。【下圖中橙色斜線是計數(shù)器周期性計數(shù)變化曲線示意圖】之前有過類似的話題交流,這里就整個實現(xiàn)過程再做下演示,并盡可能介紹詳細點。
這里使用STM32F302_Nucleo板來實現(xiàn)之。使用STM32常規(guī)定時器中的高級定時器TIM1來實現(xiàn)。當然,也并非一定要TIM1,其它支持多通道比較輸出且比較事件能觸發(fā)DMA的都可以。
其中,第一路使用TIM1_CH1,使用PWM1輸出模式,第二路使用TIM1_CH2,第三路使用TIM1_CH3,這兩路都使用Match Toggle輸出模式。
在TIM1更新中斷里修改通道1的CCR值,為修改CH2/CH3的CCR值做準備,最終通過CH2/CH3各自的比較事件觸發(fā)DMA,依靠DMA寫入CC2和CCR3寄存器而完成修改。注意,此時CH2/CH3通道的CCR寄存器預裝功能必須關(guān)閉。
一、基于STM32CubeMx的配置如下:
二、準備相關(guān)用戶代碼
主要準備上面幾句,代碼是我基于STM32Cube庫而編寫。
上面的第1/2句清除TIM1的更新中斷標志,有些情況下沒有這兩句會給我們帶來些麻煩或困惑。主要是防止一使能定時器更新中斷或相關(guān)DMA請求就進入中斷服務(wù)程序或觸發(fā)DMA傳輸,更多細節(jié)在之前文章中有詳細介紹過。這里就不重復了。
第3句、第4句、第6句功能差不多,開啟相應通道的比較輸出功能,其中開啟了基于CH2/CH3的比較事件的DMA觸發(fā)使能,并完成相關(guān)配置。
特別提醒第5句,這句是跟庫代碼有關(guān)聯(lián)的。庫代碼目前在調(diào)用定時器的DMA配置時,目前來看應該說有個bug,調(diào)用某個通道的DMA配置函數(shù)后,需要將狀態(tài)改為ready后才能有效調(diào)用后續(xù)其它通道的DMA配置函數(shù)。當然,我們?nèi)绻皇褂肅ube庫代碼就不用這句了。
第7句只有TIM1/TIM8高級定時器才需要使用它,開啟TIM1/TIM8的主輸出功能。
另外,準備了跟DMA傳輸有關(guān)的兩個內(nèi)存數(shù)組。其中紅色下劃線的數(shù)據(jù)在實際運行過程中會被動態(tài)修改而調(diào)整占空比。
在TIM1更新中斷里同步修改各個通道CCR的值,參考代碼如下。其中,Count_Update和i為兩個靜態(tài)字節(jié)變量。這里每發(fā)生256次更新事件后分別對3個通道的CCR值做一次修改。【具體使用中你可以自行根據(jù)具體需求來設(shè)計,這里僅供演示參考。貼出原始代碼主要是為了幫助理解整個思路。】
三、驗證最后結(jié)果。
上面三幅圖是3路PWM輸出信號在不同時間點的截圖,頻率固定,相差固定,占空比在改變。當然,我們也可以通過選擇合適的時間點來修改ARR值及通道2/通道3的初始相位值,以靈活調(diào)整輸出波形的頻率與相差。總之,STM32定時器的比較切換模式,再結(jié)合DMA的話,是個非常靈活好用的PWM輸出的實現(xiàn)方式,值得研究學習下。
當然,如果使用3個定時器建立主從關(guān)系,各拿出一個通道來實現(xiàn)上述輸出也很方便。有興趣的話,也可以試試。
-
PWM
+關(guān)注
關(guān)注
114文章
5198瀏覽量
214902 -
STM32
+關(guān)注
關(guān)注
2272文章
10924瀏覽量
357609 -
定時器
+關(guān)注
關(guān)注
23文章
3255瀏覽量
115391
原文標題:一個定時器實現(xiàn)3路時差和占空比可調(diào)的波形
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
BUCK電路占空比對電流波形的影響
定時器的工作方式介紹
與定時器相關(guān)的寄存器有哪些類型
三菱PLC編程實現(xiàn)讀出時間定時器
三菱plc如何顯示定時器時間
PLC定時器的工作原理和應用
CW32使用DMA單通道、定時器觸發(fā)ADC實現(xiàn)了多路AD采集
![CW32使用DMA單通道、<b class='flag-5'>定時器</b>觸發(fā)ADC<b class='flag-5'>實現(xiàn)</b>了多路AD采集](https://file1.elecfans.com//web2/M00/E8/61/wKgZomZPHkyAQbPeAAAlyNbwQ3428.webp)
使用滴答定時器用I0口輸出了120° 相位可調(diào)占空比的PWM,用這種方式的話有什么壞處呢?
STM8L052定時器1同時輸出3路PWM,想讓其中的兩路PWM輸出頻率跟另外一個不同,可以實現(xiàn)嗎?
如何實現(xiàn)一個軟件定時器?
s7200定時器的五種故障介紹
如何用STM32定時器實現(xiàn)一個周期輸出PWM2的波形?
?PLC定時器介紹
![?PLC<b class='flag-5'>定時器</b>介紹](https://file1.elecfans.com/web2/M00/C5/66/wKgZomX9C4-Afn2MAAA8UxNessY453.png)
使用555定時器的可調(diào)雙定時器電路
![使用555<b class='flag-5'>定時器</b>的<b class='flag-5'>可調(diào)</b>雙<b class='flag-5'>定時器</b>電路](https://file1.elecfans.com/web2/M00/C1/D8/wKgaomXa6PqABqXTAABhX_zgqZw100.png)
評論