1、分享如何使用stm32的定時器互補pwm通道,驅動ipm模組產生三相相差120°的正弦波,可產生旋轉磁場驅動三相電機----
2、stm32中tim1-ch1和tim1-ch1n的區別----
3、【stm32】stm32之timer1產生pwm(互補通道)----
stm32的高階定時器tim1可以產生互補的pwm,並且可以通過相關暫存器的設定使能或關閉pwm的輸出。在編寫bldc的驅動程式時,本人利用tim1的channel1,2,3三個通道生成了三路互補的pwm波形,定時器驅動程式如下:
void tim1_init(u16 arr, u16 psc)12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
3132
3334
3536
3738
3940
4142
4344
4546
4748
4950
5152
5354
該函式配置了pwm的gpio,定時器以及死區控制等。產生的波形如圖1所示
當我想要控制某些通道的輸出(比如使能通道1的輸出ch1,但是關閉其互補輸出ch1n),利用下面兩個函式發現tim1依舊輸出兩路互補的pwm。這個函式最終操作的暫存器是捕獲/比較使能暫存器timx->ccer。
tim_ccxcmd(tim1, tim_channel_1, tim_ccx_enable);
tim_ccxncmd(tim1, tim_channel_1, tim_ccxn_disable);
經過除錯發現在定時器初始化函式中乙個函式的呼叫:tim_ccpreloadcontrol(tim1,enable);
注釋掉這句之後,或者將enable改為disable,才能實現關閉通道1的互補輸出,如圖2所示:
此時通道1ch1輸出pwm波形,其互補通道ch1n輸出低電平。
分析發現,tim_ccpreloadcontrol()函式最終操作的是控制暫存器 2(timx_cr2)的第0位ccpc。查閱stm32的資料手冊,描述如下:
ccpc:捕獲/比較預裝載控制位 (capture/compare preloaded control)
0: ccxe, ccxne和ocxm位不是預裝載的;
1: ccxe, ccxne和ocxm位是預裝載的;設定該位後,它們只在設定了com位後被更新。
注:該位只對具有互補輸出的通道起作用。
也就是說如果使能了預裝載,只有在com事件發生後值才能寫入影子暫存器(影子暫存器才是真正起作用的暫存器),產生作用。同時該位只對互補輸出起作用,因此對於普通定時器來說,無論該位是否被設定,都有可以通過tim_ccxcmd()函式使能或者關閉pwm的輸出。
想要讓定時器的pwm輸出低電平(高電平),也可以將相對的 暫存器timx->ccr1置零(大於arr),但是此時互補通道只能為高電平(低電平)。而通過關閉pwm的輸出,可以讓兩個互補的通道輸出更多的電壓組合。
STM32輸出PWM波教程
pwm輸出配置步驟 舉例 使能定時器3和相關io口時鐘。使能定時器3時鐘 rcc apb1periphclockcmd 使能gpiob時鐘 rcc apb2periphclockcmd 初始化io口為復用功能輸出。函式 gpio init gpio initstructure.gpio mode g...
STM32的PWM輸出實驗
通過設定該暫存器 ccrx 來調整pwm輸出的占空比,如下圖所示 以通道1為例說明pwm的工作過程 首先通過設定ccr1 捕獲比較 值 暫存器 設定設定比較值。然後通過設定ccmr1 oc1m 2 0 位以及ccer cc1p位 輸入 捕獲1輸出極性 來設定高低電平的輸出模式,具體如圖所示 最後設定...
STM32 快速上手PWM輸出
在前面文章 stm32 一文搞懂通用定時器捕獲 比較通道 已經詳細介紹了輸入stm32的捕獲 比較通道,這邊文章來寫比較通道的pwm的應用。初始化io口為復用功能輸出 重對映相關引腳為pwm輸出 初始化定時器 主要是配置arr和psc 初始化通道x輸出比較引數 使能通道x預裝載暫存器 使能定時器 修...