有人想實(shí)現(xiàn)下面的PWM輸出波形,三路頻率相同,占空比同步可調(diào),且三路輸出波形時(shí)差固定為T(mén)/3。【下圖中橙色斜線是計(jì)數(shù)器周期性計(jì)數(shù)變化曲線示意圖】之前有過(guò)類似的話題交流,這里就整個(gè)實(shí)現(xiàn)過(guò)程再做下演示,并盡可能介紹詳細(xì)點(diǎn)。
這里使用STM32F302_Nucleo板來(lái)實(shí)現(xiàn)之。使用STM32常規(guī)定時(shí)器中的高級(jí)定時(shí)器TIM1來(lái)實(shí)現(xiàn)。當(dāng)然,也并非一定要TIM1,其它支持多通道比較輸出且比較事件能觸發(fā)DMA的都可以。
其中,第一路使用TIM1_CH1,使用PWM1輸出模式,第二路使用TIM1_CH2,第三路使用TIM1_CH3,這兩路都使用Match Toggle輸出模式。
在TIM1更新中斷里修改通道1的CCR值,為修改CH2/CH3的CCR值做準(zhǔn)備,最終通過(guò)CH2/CH3各自的比較事件觸發(fā)DMA,依靠DMA寫(xiě)入CC2和CCR3寄存器而完成修改。注意,此時(shí)CH2/CH3通道的CCR寄存器預(yù)裝功能必須關(guān)閉。
一、基于STM32CubeMx的配置如下:
二、準(zhǔn)備相關(guān)用戶代碼
主要準(zhǔn)備上面幾句,代碼是我基于STM32Cube庫(kù)而編寫(xiě)。
上面的第1/2句清除TIM1的更新中斷標(biāo)志,有些情況下沒(méi)有這兩句會(huì)給我們帶來(lái)些麻煩或困惑。主要是防止一使能定時(shí)器更新中斷或相關(guān)DMA請(qǐng)求就進(jìn)入中斷服務(wù)程序或觸發(fā)DMA傳輸,更多細(xì)節(jié)在之前文章中有詳細(xì)介紹過(guò)。這里就不重復(fù)了。
第3句、第4句、第6句功能差不多,開(kāi)啟相應(yīng)通道的比較輸出功能,其中開(kāi)啟了基于CH2/CH3的比較事件的DMA觸發(fā)使能,并完成相關(guān)配置。
特別提醒第5句,這句是跟庫(kù)代碼有關(guān)聯(lián)的。庫(kù)代碼目前在調(diào)用定時(shí)器的DMA配置時(shí),目前來(lái)看應(yīng)該說(shuō)有個(gè)bug,調(diào)用某個(gè)通道的DMA配置函數(shù)后,需要將狀態(tài)改為ready后才能有效調(diào)用后續(xù)其它通道的DMA配置函數(shù)。當(dāng)然,我們?nèi)绻皇褂肅ube庫(kù)代碼就不用這句了。
第7句只有TIM1/TIM8高級(jí)定時(shí)器才需要使用它,開(kāi)啟TIM1/TIM8的主輸出功能。
另外,準(zhǔn)備了跟DMA傳輸有關(guān)的兩個(gè)內(nèi)存數(shù)組。其中紅色下劃線的數(shù)據(jù)在實(shí)際運(yùn)行過(guò)程中會(huì)被動(dòng)態(tài)修改而調(diào)整占空比。
在TIM1更新中斷里同步修改各個(gè)通道CCR的值,參考代碼如下。其中,Count_Update和i為兩個(gè)靜態(tài)字節(jié)變量。這里每發(fā)生256次更新事件后分別對(duì)3個(gè)通道的CCR值做一次修改。【具體使用中你可以自行根據(jù)具體需求來(lái)設(shè)計(jì),這里僅供演示參考。貼出原始代碼主要是為了幫助理解整個(gè)思路。】
三、驗(yàn)證最后結(jié)果。
上面三幅圖是3路PWM輸出信號(hào)在不同時(shí)間點(diǎn)的截圖,頻率固定,相差固定,占空比在改變。當(dāng)然,我們也可以通過(guò)選擇合適的時(shí)間點(diǎn)來(lái)修改ARR值及通道2/通道3的初始相位值,以靈活調(diào)整輸出波形的頻率與相差。總之,STM32定時(shí)器的比較切換模式,再結(jié)合DMA的話,是個(gè)非常靈活好用的PWM輸出的實(shí)現(xiàn)方式,值得研究學(xué)習(xí)下。
當(dāng)然,如果使用3個(gè)定時(shí)器建立主從關(guān)系,各拿出一個(gè)通道來(lái)實(shí)現(xiàn)上述輸出也很方便。
-
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2276瀏覽量
95071 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3256瀏覽量
115463 -
PWM波
+關(guān)注
關(guān)注
0文章
99瀏覽量
16958 -
定時(shí)器中斷
+關(guān)注
關(guān)注
0文章
49瀏覽量
11267 -
stm32cubemx
+關(guān)注
關(guān)注
5文章
284瀏覽量
15055
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
一個(gè)定時(shí)器輸出4路不同頻率波形的應(yīng)用示例
![<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>定時(shí)器</b>輸出4<b class='flag-5'>路</b>不同頻率<b class='flag-5'>波形</b>的應(yīng)用示例](https://file1.elecfans.com/web2/M00/8C/25/wKgaomSmc8-AIiMEAABwtvCMli0124.jpg)
如何用STM32定時(shí)器實(shí)現(xiàn)一個(gè)周期輸出PWM2的波形?
求助:如何用51單片機(jī)一個(gè)定時(shí)器輸出的兩個(gè)相同占空比pwm?
如何用定時(shí)器實(shí)現(xiàn)延時(shí)
simulink可調(diào)節(jié)的定時(shí)器
如何去實(shí)現(xiàn)定時(shí)器輸出一路PWM波形的設(shè)計(jì)呢
如何用一個(gè)定時(shí)器的四個(gè)通道獨(dú)立地輸出四路PWM脈沖?
通斷電時(shí)間獨(dú)立可調(diào)定時(shí)器
![通斷電時(shí)間獨(dú)立<b class='flag-5'>可調(diào)</b><b class='flag-5'>定時(shí)器</b>](https://file1.elecfans.com//web2/M00/A4/46/wKgZomUMM3SAIMFkAAE7XUxLXgM480.jpg)
定時(shí)器實(shí)現(xiàn)3路時(shí)差和占空比可調(diào)的波形
![<b class='flag-5'>定時(shí)器</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>3</b><b class='flag-5'>路</b><b class='flag-5'>時(shí)差</b>和<b class='flag-5'>占空比</b><b class='flag-5'>可調(diào)</b>的<b class='flag-5'>波形</b>](https://file.elecfans.com/web1/M00/AE/54/pIYBAF3U4o-AQlnuAAAYwemILK8887.png)
MSP430F5529通過(guò)定時(shí)器A產(chǎn)生兩個(gè)反相頻率占空比可調(diào)PWM波
![MSP430F5529通過(guò)<b class='flag-5'>定時(shí)器</b>A產(chǎn)生兩<b class='flag-5'>個(gè)</b>反相頻率<b class='flag-5'>占空比</b><b class='flag-5'>可調(diào)</b>PWM波](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32單片機(jī)一個(gè)定時(shí)器輸出不同頻率PWM波
![STM32單片機(jī)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>定時(shí)器</b>輸出不同頻率PWM波](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
怎么實(shí)現(xiàn)dsp芯片輸出占空比固定的pwm波形
使用555定時(shí)器的可調(diào)雙定時(shí)器電路
![使用555<b class='flag-5'>定時(shí)器</b>的<b class='flag-5'>可調(diào)</b>雙<b class='flag-5'>定時(shí)器</b>電路](https://file1.elecfans.com/web2/M00/C1/D8/wKgaomXa6PqABqXTAABhX_zgqZw100.png)
評(píng)論