脈沖寬度調(diào)制(PWM),即“Pulse Width Modulation”的縮寫,簡稱脈寬調(diào)制,是在數(shù)字電路中達(dá)到模擬輸出效果的一種手段,常見應(yīng)用電機(jī)調(diào)速,照明燈調(diào)光等。
在MCU中,主要通過定時(shí)器單元來時(shí)實(shí)現(xiàn)PWM輸出,以CW32L083VxTx為例,LPTIM,GTIM,ATIM都可以輸出PWM信號(hào)。
低功耗寄存器(LPTIM)中,LPTIM 在連續(xù)模式下可以輸出 PWM 波,在單次模式下可以輸出單脈沖波或單次置位波形。連續(xù)模式下輸出PWM波的周期和占空比由自動(dòng)重載寄存器 LPTIM_ARR 和比較寄存器 LPTIM_CMP決定。
通用定時(shí)器(GTIM)中,通過設(shè)置輸出比較功能,可以產(chǎn)生一個(gè)由重載寄存器 GTIMx_ARR 確定頻率、由比較捕獲寄存器 GTIMx_CCRy 確定占空比的PWM信號(hào)。每個(gè)GTIM對(duì)應(yīng)有4個(gè)GTIMx_CCRy寄存器,可輸出4路PWM信號(hào)。向 GTIMx_CCMR 寄存器中的 CCyM 位寫入 0xE 或 0xF,能夠獨(dú)立地控制每個(gè) CHy 輸出PWM信號(hào)的波形。
●設(shè)置 GTIMx_CMMR.CCyM 為 0xE,當(dāng) GTIMx_CNT >= GTIMx_CCRy 時(shí),CHy 通道輸出高電平,否則輸出低電平。如果 GTIMx_CCRy 中的比較值大于重載寄存器 GTIMx_ARR 的值,則 CHy 通道輸出保持為低電平;如果 GTIMx_CCRy 中的比較值為 0,則 CHy 通道輸出保持為高電平。
●設(shè)置 GTIMx_CMMR.CCyM 為 0xF,當(dāng) GTIMx_CNT < GTIMx_CCRy 時(shí),CHy 通道輸出高電平,否則輸出低電平。如果 GTIMx_CCRy 中的比較值大于重載寄存器 GTIMx_ARR 的值,則 CHy 通道輸出保持為高電平;如果 GTIMx_CCRy 中的比較值為 0,則 CHy 通道輸出保持為低電平。
下圖是 GTIMx_CMMR.CCyM 為 0xE、GTIMx_ARR 為 0x08 時(shí)PWM波形實(shí)例圖:

高級(jí)定時(shí)器(ATIM)中有獨(dú)立PWM輸出模式和互補(bǔ)PWM輸出兩種模式。
●獨(dú)立PWM模式可獨(dú)立輸出6路PWM,PWM的周期和占空比由重載寄存器ATIM_ARR和比較捕獲寄存器ATIM_CHxCCRy寄存器確定。PWM 輸出模式需要設(shè)置控制寄存器 ATIM_CR、濾波寄存器 ATIM_FLTR 和死區(qū)寄存器 ATIM_DTR,如下表所示:

另外比較通道 CHx 的 A 路可通過控制寄存器 ATIM_CR 的 PWM2S 位域配置為單點(diǎn)比較或雙點(diǎn)比較 工作方式。在單點(diǎn)比較方式下,使用比較捕獲寄存器 ATIM_CHxCCRA 控制比較輸出;在雙點(diǎn)比較方式下,使用 比較捕獲寄存器 ATIM_CHxCCRA 和 ATIM_CHxCCRB 控制比較輸出。比較通道的 B 路只能使用單點(diǎn)比較,由比較 捕獲寄存器 ATIM_CHxCCRB 控制比較輸出。
●互補(bǔ)PWM模式可輸出3對(duì)互補(bǔ)輸出的PWM波形,通常用于電機(jī)控制。設(shè)置控制寄存器 ATIM_CR 的 COMP 位域?yàn)?1 選擇互補(bǔ) PWM 輸出模式,比較輸出通道 CHxA 與通道 CHxB 產(chǎn)生一 對(duì)互補(bǔ) PWM。在互補(bǔ) PWM 輸出模式下,通道 CHx 的 A 路控制輸出信號(hào), B 路比較捕獲寄存器 CHxCCRB 不再控制 CHxB 輸出,但仍可用作內(nèi)部控制,比如觸發(fā) ADC 或 DMA。
另外互補(bǔ) PWM 輸出模式,也可通過控制寄存器 ATIM_CR 的 PWM2S 位域選擇單點(diǎn)比較或雙點(diǎn)比較工作方式:單點(diǎn)比 較時(shí)使用比較捕獲寄存器 ATIM_CHxCCRA 控制比較輸出;雙點(diǎn)比較時(shí)使用比較捕獲寄存器 ATIM_CHxCCRA 和 ATIM_CHxCCRB 控制比較輸出。
實(shí)例演示
以CW32L083VxTx的通用定時(shí)器GTIM1為例,實(shí)現(xiàn)PWM輸出例程:GTIM1的CH3通道(PB08)輸出周期為500uS,占空比遞增遞減循環(huán)改變的PWM信號(hào)。
1.配置不同的系統(tǒng)時(shí)鐘。
voidRCC_Configuration(void)
{
/*0.HSI使能并校準(zhǔn)*/
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
/*1.設(shè)置HCLK和PCLK的分頻系數(shù)*/
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
/*2.使能PLL,通過HSI倍頻到48MHz*/
RCC_PLL_Enable(RCC_PLLSOURCE_HSI,8000000,6);
//PLL輸出頻率48MHz
RCC_PLL_OUT();
///
2.配置GPIO口
voidGPIO_Configuration(void)
{
/*PB08作為GTIM1的CH3PWM輸出*/
__RCC_GPIOB_CLK_ENABLE();
PB08_AFx_GTIM1CH3();
PB08_DIGTAL_ENABLE();
PB08_DIR_OUTPUT();
PB08_PUSHPULL_ENABLE();
}
3.配置中斷使能
voidNVIC_Configuration(void)
{
__disable_irq();
NVIC_EnableIRQ(GTIM1_IRQn);
__enable_irq();
}
4.配置GTIM為PWM輸出功能
voidPWM_OutputConfig(void)
{
GTIM_InitTypeDefGTIM_InitStruct={0};
__RCC_GTIM1_CLK_ENABLE();
GTIM_InitStruct.Mode=GTIM_MODE_TIME;/*!
5.GTIM標(biāo)志清零函數(shù)
voidGTIM_ClearITPendingBit(GTIM_TypeDef*GTIMx,uint32_tGTIM_IT)
{
GTIMx->ICR=~GTIM_IT;
}
6.GTIM 比較值設(shè)置函數(shù)
voidGTIM_SetCompare3(GTIM_TypeDef*GTIMx,uint32_tValue)
{
GTIMx->CCR3=0x0000FFFF Value;
}
7.GTIM中斷處理函數(shù)
voidGTIM1_IRQHandler(void)
{
/*USERCODEBEGIN*/
//中斷每500us進(jìn)入一次,每50ms改變一次PosWidth
staticuint16_tTimeCnt=0;
GTIM_ClearITPendingBit(CW_GTIM1,GTIM_IT_OV);
if(TimeCnt++>=100)//50ms
{
TimeCnt=0;
if(Dir)
{
PosWidth+=15;//5us
}
else
{
PosWidth-=15;
}
if(PosWidth>=Period*3)
{
Dir=0;
}
if(0==PosWidth)
{
Dir=1;
}
GTIM_SetCompare3(CW_GTIM1,PosWidth);
}
/*USERCODEEND*/
}
8.主函數(shù)
uint32_tPeriod=500;//周期,單位us
uint32_tPosWidth=0;//正脈寬,單位us
uint8_tDir=1;//計(jì)數(shù)方向1增加,0減少
int32_tmain(void)
{
/*系統(tǒng)時(shí)鐘配置*/
RCC_Configuration();
/*GPIO配置*/
GPIO_Configuration();
PWM_OutputConfig();
/*NVIC配置*/
NVIC_Configuration();
while(1)
{
/*中斷服務(wù)程序見GTIM1_IRQHandler()*/
}
9.實(shí)驗(yàn)演示
系統(tǒng)時(shí)鐘由HSI提供,通過PLL倍頻到48MHz。GTIM1經(jīng)16分頻后,以3MHz的頻率計(jì)數(shù),ARR設(shè)置為1499,GTIM1的溢出周期為500us。GTIM1每500us進(jìn)入一次中斷,每50ms改變一次CH3的CCR寄存器的值,即改變PWM的正脈寬,步長為5us,先遞增到ARR,然后遞減到0,如此反復(fù)。通過示波器圖像顯示,PB08處的信號(hào)波的占空比隨時(shí)間進(jìn)行周期性變化。截取2個(gè)波形如下:


來源:武漢芯源半導(dǎo)體
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)聯(lián)系小編進(jìn)行處理
審核編輯 黃宇
-
寄存器
+關(guān)注
關(guān)注
31文章
5503瀏覽量
128336 -
PWM
+關(guān)注
關(guān)注
116文章
5814瀏覽量
223014 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3350瀏覽量
121267
發(fā)布評(píng)論請(qǐng)先 登錄
基于CW32的門禁綜合系統(tǒng)
【應(yīng)用筆記】CW32 自舉程序中使用的 ISP 協(xié)議
如何基于CW32系列MCU實(shí)現(xiàn)VBAT功能
CW32單片機(jī)在智能馬桶的應(yīng)用介紹
cw32和stm32的區(qū)別
cw32和gd32的區(qū)別
CW32單片機(jī)在智能馬桶的應(yīng)用介紹

CW32 PWM輸出功能介紹
評(píng)論