SWM201系列所有型號PWM操作均相同,不同型號PWM通道數(shù)可能不同。使用前需使能PWM模塊時鐘。PWM模塊用于實(shí)現(xiàn)芯片輸出特定的方波,控制外部元器件,如步進(jìn)電機(jī)等。
計數(shù)器可以通過APB總線讀寫寄存器、和外部硬件同時控制,實(shí)現(xiàn)計數(shù)過程的控制。同時,CPU和外部硬件也可以共同實(shí)現(xiàn)對輸出PWM信號的控制。
PWM模塊提供了2組(PWM0、PMW1)、8路(PWM0A、PWM0B、PWM0AN、PWM0BN、PWM2A、PWM2B、PWM2AN、PWM2BN)獨(dú)立通道,支持邊沿模式、中心對稱模式。
中心對稱模式下,輸出是互補(bǔ)輸出。如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采樣點(diǎn)(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,每一路輸出獨(dú)立的ADC觸發(fā)信號,且每個周期可以設(shè)置1個ADC觸發(fā)點(diǎn),每個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ā)點(diǎn)是否有效以及PWM觸發(fā)ADC時間點(diǎn)。
配置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文章
10911瀏覽量
213144 -
PWM
+關(guān)注
關(guān)注
114文章
5201瀏覽量
214965 -
ADC采樣
+關(guān)注
關(guān)注
0文章
134瀏覽量
12911
原文標(biāo)題:SWM20x系列電機(jī)框架搭建:PWM(電機(jī))篇
文章出處:【微信號:gh_737991c81b3d,微信公眾號:恒美股份】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
控制系統(tǒng)的三種信號_控制系統(tǒng)的三個指標(biāo)
示波器的三種觸發(fā)模式
![示波器的<b class='flag-5'>三種</b>觸發(fā)模式](https://file1.elecfans.com//web3/M00/05/0F/wKgZPGd8mc6ALpdlAAD652PjOPY684.png)
微控制器中的PWM模塊介紹
什么是PID調(diào)節(jié)器的三種模式
放大電路的失真分為哪三種
基本放大電路有哪三種
在電路中電阻的連接形式有哪三種
常用的pwm跟蹤控制方式是哪三種
pwm逆變電路的控制方法有哪三種
放大電路的三種組態(tài)可以放大什么
三菱fx系列plc擴(kuò)展模塊配置在軟件中的作用
信號調(diào)制的三種基本方法
FPGA開發(fā)過程中配置全局時鐘需要注意哪些問題
IGBT模塊封裝過程中的技術(shù)詳解
![IGBT<b class='flag-5'>模塊</b>封裝<b class='flag-5'>過程中</b>的技術(shù)詳解](https://file1.elecfans.com/web2/M00/C6/A5/wKgZomYLeDCAMr6vAABP07GM0wY720.png)
評論