SWM201系列所有型號PWM操作均相同,不同型號PWM通道數(shù)可能不同。使用前需使能PWM模塊時鐘。PWM模塊用于實現(xiàn)芯片輸出特定的方波,控制外部元器件,如步進(jìn)電機(jī)等。
計數(shù)器可以通過APB總線讀寫寄存器、和外部硬件同時控制,實現(xiàn)計數(shù)過程的控制。同時,CPU和外部硬件也可以共同實現(xiàn)對輸出PWM信號的控制。
PWM模塊提供了2組(PWM0、PMW1)、8路(PWM0A、PWM0B、PWM0AN、PWM0BN、PWM2A、PWM2B、PWM2AN、PWM2BN)獨立通道,支持邊沿模式、中心對稱模式。
中心對稱模式下,輸出是互補輸出。如PWM0A驅(qū)動PWM0A和PWM0AN兩個輸出信號,兩個信號周期相等、電平值相反,且可設(shè)置死區(qū)。
程序中配置如下(SWM201內(nèi)置PN預(yù)驅(qū)):
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; //死區(qū)時間:50/60M
PWM_initStruct.IdleLevelA = 0; //停止?fàn)顟B(tài)下PWMxA輸出電平
PWM_initStruct.IdleLevelAN= 0; //停止?fàn)顟B(tài)下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);
//挖坑功能設(shè)置:PWM1B和PWM1BN在event1為高時分別輸出0和1
PWM_CmpTrigger(PWM0, 750, PWM_DIR_UP, 40, PWM_TRG_1, 1);
//設(shè)置ADC采樣點(ADC采樣設(shè)置請查看“SWM20x系列電機(jī)框架搭建:ADC篇”)
}
TRIGGER控制:
PWM模塊在計數(shù)過程中,可以根據(jù)輸出三種trigger信號:
01
PWM計數(shù)器比較匹配觸發(fā):PWM計數(shù)器在計數(shù)過程中,當(dāng)計到TRIG_CNT中配置的參考值時,就會產(chǎn)生一個周期的trig信號。根據(jù)配置,可以將該trig信息映射到輸出的trig[7:0]信號上,且輸出寬度可以配置,以4個計數(shù)周期為單位進(jìn)行設(shè)置,最小長度為0個(即不輸出PWM_TRIG,只輸出ADC_TRIG),最大長度為252個計數(shù)當(dāng)重復(fù)計數(shù)功能有效時,trig信號會在最后一次重復(fù)計數(shù)時產(chǎn)生。
02
ADC觸發(fā):在PWM_TRIG輸出寬度的正中間,會輸出一個pclk的ADC_TRIG信號,用于觸發(fā)ADC采樣。
03
PWM計數(shù)器溢出觸發(fā):當(dāng)計數(shù)器溢出TRIG使能,且計數(shù)器發(fā)生向上溢出或向下溢出時,會產(chǎn)生一個pclk周期的TRIG信號,與自定義TRIG一致,可以根據(jù)配置將該trig信息映射到輸出的trig[7:0]信號上。TRIGGER控制波形如下圖所示:
觸發(fā)SARADC采樣:
PWM在任意模式下可以觸發(fā)ADC,每一路輸出獨立的ADC觸發(fā)信號,且每個周期可以設(shè)置1個ADC觸發(fā)點,每個PWM只輸出一個觸發(fā)信號,不區(qū)分A.B分別觸發(fā)。將SARADC配置寄存器(CTRL)中TRIG方式設(shè)置為PWM觸發(fā)。每路PWM對應(yīng)1個ADTRG值,當(dāng)PWM計數(shù)到指定值,可觸發(fā)ADC進(jìn)行采樣。具體配置方式如下:
配置PWMx路觸發(fā)ADC控制寄存器,設(shè)置觸發(fā)點是否有效以及PWM觸發(fā)ADC時間點。
配置ADC的觸發(fā)方式為PWM觸發(fā)
使能PWM模塊EN位,當(dāng)計數(shù)值到達(dá)MATCH設(shè)置值時,觸發(fā)ADC配置寄存器(CTRL)中選中的通道(CHx)進(jìn)行采樣,采樣完成后,將產(chǎn)生EOC標(biāo)志位,并產(chǎn)生ADC中斷。
編輯:jq
-
cpu
+關(guān)注
關(guān)注
68文章
10890瀏覽量
212430 -
PWM
+關(guān)注
關(guān)注
114文章
5196瀏覽量
214382 -
ADC采樣
+關(guān)注
關(guān)注
0文章
134瀏覽量
12877
原文標(biāo)題:SWM20x系列電機(jī)框架搭建:PWM(電機(jī))篇
文章出處:【微信號:gh_737991c81b3d,微信公眾號:恒美股份】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論