SWM201系列所有型號PWM操作均相同,不同型號PWM通道數可能不同。使用前需使能PWM模塊時鐘。PWM模塊用于實現芯片輸出特定的方波,控制外部元器件,如步進電機等。
計數器可以通過APB總線讀寫寄存器、和外部硬件同時控制,實現計數過程的控制。同時,CPU和外部硬件也可以共同實現對輸出PWM信號的控制。
PWM模塊提供了2組(PWM0、PMW1)、8路(PWM0A、PWM0B、PWM0AN、PWM0BN、PWM2A、PWM2B、PWM2AN、PWM2BN)獨立通道,支持邊沿模式、中心對稱模式。
中心對稱模式下,輸出是互補輸出。如PWM0A驅動PWM0A和PWM0AN兩個輸出信號,兩個信號周期相等、電平值相反,且可設置死區。
程序中配置如下(SWM201內置PN預驅):
static void PWM_Init (void)
{
PWM_InitStructure PWM_initStruct;
PORT_Init(PORTA, PIN5, PORTA_PIN5_PWM1AN, 0);
PORT_Init(PORTA, PIN4, PORTA_PIN4_PWM1BN, 0);
PORT_Init(PORTA, PIN3, PORTA_PIN3_PWM0AN, 0);
PORT_Init(PORTA, PIN2, PORTA_PIN2_PWM1A, 0);
PORT_Init(PORTA, PIN1, PORTA_PIN1_PWM1B, 0);
PORT_Init(PORTA, PIN0, PORTA_PIN0_PWM0A, 0);
//PWM引腳初始化
PWM_initStruct.Mode = PWM_CENTER_ALIGNED;
//中心對齊模式
PWM_initStruct.Clkdiv = 1;
//分頻F_PWM = 60M/1 = 60M
PWM_initStruct.Period =10000;
//周期:60M/6000 = 1KHz,中心對稱模式下頻率//降低到500Hz
PWM_initStruct.HdutyA = 2500; //占空比:2000/10000 = 25%
PWM_initStruct.DeadzoneA = 50; //死區時間:50/60M
PWM_initStruct.IdleLevelA = 0; //停止狀態下PWMxA輸出電平
PWM_initStruct.IdleLevelAN= 0; //停止狀態下PWMxAN輸出電平
PWM_initStruct.OutputInvA = 0; //PWMxA輸出未取反
PWM_initStruct.OutputInvAN= 0; //PWMxAN輸出未取反
PWM_initStruct.HdutyB = 1500;
PWM_initStruct.DeadzoneB = 50;
PWM_initStruct.IdleLevelB = 0;
PWM_initStruct.IdleLevelBN= 0;
PWM_initStruct.OutputInvB = 0;
PWM_initStruct.OutputInvBN= 0;
PWM_initStruct.UpOvfIE = 0;
PWM_initStruct.DownOvfIE = 0;
PWM_initStruct.UpCmpAIE = 1; //開啟上升沿比較器PWM0A匹配中斷使能
PWM_initStruct.DownCmpAIE = 0;
PWM_initStruct.UpCmpBIE = 0;
PWM_initStruct.DownCmpBIE = 0;
PWM_Init(PWM0, &PWM_initStruct);
PWM_initStruct.UpCmpAIE = 0; //屏蔽PWM1A中斷
PWM_Init(PWM1, &PWM_initStruct);
PWM_Start(PWM0_MSK | PWM1_MSK);
//啟動PWM,開始PWM輸出
PWM_OutMask(PWM1, PWM_CH_B, PWM_EVT_1, 0, PWM_EVT_1, 1);
//挖坑功能設置:PWM1B和PWM1BN在event1為高時分別輸出0和1
PWM_CmpTrigger(PWM0, 750, PWM_DIR_UP, 40, PWM_TRG_1, 1);
//設置ADC采樣點(ADC采樣設置請查看“SWM20x系列電機框架搭建:ADC篇”)
}
TRIGGER控制:
PWM模塊在計數過程中,可以根據輸出三種trigger信號:
01
PWM計數器比較匹配觸發:PWM計數器在計數過程中,當計到TRIG_CNT中配置的參考值時,就會產生一個周期的trig信號。根據配置,可以將該trig信息映射到輸出的trig[7:0]信號上,且輸出寬度可以配置,以4個計數周期為單位進行設置,最小長度為0個(即不輸出PWM_TRIG,只輸出ADC_TRIG),最大長度為252個計數當重復計數功能有效時,trig信號會在最后一次重復計數時產生。
02
ADC觸發:在PWM_TRIG輸出寬度的正中間,會輸出一個pclk的ADC_TRIG信號,用于觸發ADC采樣。
03
PWM計數器溢出觸發:當計數器溢出TRIG使能,且計數器發生向上溢出或向下溢出時,會產生一個pclk周期的TRIG信號,與自定義TRIG一致,可以根據配置將該trig信息映射到輸出的trig[7:0]信號上。TRIGGER控制波形如下圖所示:
觸發SARADC采樣:
PWM在任意模式下可以觸發ADC,每一路輸出獨立的ADC觸發信號,且每個周期可以設置1個ADC觸發點,每個PWM只輸出一個觸發信號,不區分A.B分別觸發。將SARADC配置寄存器(CTRL)中TRIG方式設置為PWM觸發。每路PWM對應1個ADTRG值,當PWM計數到指定值,可觸發ADC進行采樣。具體配置方式如下:
配置PWMx路觸發ADC控制寄存器,設置觸發點是否有效以及PWM觸發ADC時間點。
配置ADC的觸發方式為PWM觸發
使能PWM模塊EN位,當計數值到達MATCH設置值時,觸發ADC配置寄存器(CTRL)中選中的通道(CHx)進行采樣,采樣完成后,將產生EOC標志位,并產生ADC中斷。
編輯:jq
-
cpu
+關注
關注
68文章
11036瀏覽量
216005 -
PWM
+關注
關注
116文章
5374瀏覽量
218063 -
ADC采樣
+關注
關注
0文章
134瀏覽量
13124
原文標題:SWM20x系列電機框架搭建:PWM(電機)篇
文章出處:【微信號:gh_737991c81b3d,微信公眾號:恒美股份】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
【RA-Eco-RA2L1-48PIN-V1.0開發板試用】——PWM
示波器的三種觸發模式

評論