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

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

另外比較通道 CHx 的 A 路可通過控制寄存器 ATIM_CR 的 PWM2S 位域配置為單點比較或雙點比較 工作方式。在單點比較方式下,使用比較捕獲寄存器 ATIM_CHxCCRA 控制比較輸出;在雙點比較方式下,使用 比較捕獲寄存器 ATIM_CHxCCRA 和 ATIM_CHxCCRB 控制比較輸出。比較通道的 B 路只能使用單點比較,由比較 捕獲寄存器 ATIM_CHxCCRB 控制比較輸出。
●互補PWM模式可輸出3對互補輸出的PWM波形,通常用于電機控制。設(shè)置控制寄存器 ATIM_CR 的 COMP 位域為 1 選擇互補 PWM 輸出模式,比較輸出通道 CHxA 與通道 CHxB 產(chǎn)生一 對互補 PWM。在互補 PWM 輸出模式下,通道 CHx 的 A 路控制輸出信號, B 路比較捕獲寄存器 CHxCCRB 不再控制 CHxB 輸出,但仍可用作內(nèi)部控制,比如觸發(fā) ADC 或 DMA。
另外互補 PWM 輸出模式,也可通過控制寄存器 ATIM_CR 的 PWM2S 位域選擇單點比較或雙點比較工作方式:單點比 較時使用比較捕獲寄存器 ATIM_CHxCCRA 控制比較輸出;雙點比較時使用比較捕獲寄存器 ATIM_CHxCCRA 和 ATIM_CHxCCRB 控制比較輸出。
實例演示
以CW32L083VxTx的通用定時器GTIM1為例,實現(xiàn)PWM輸出例程:GTIM1的CH3通道(PB08)輸出周期為500uS,占空比遞增遞減循環(huán)改變的PWM信號。
1.配置不同的系統(tǒng)時鐘。
voidRCC_Configuration(void)
{
/*0.HSI使能并校準*/
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標志清零函數(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進入一次,每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;//計數(shù)方向1增加,0減少
int32_tmain(void)
{
/*系統(tǒng)時鐘配置*/
RCC_Configuration();
/*GPIO配置*/
GPIO_Configuration();
PWM_OutputConfig();
/*NVIC配置*/
NVIC_Configuration();
while(1)
{
/*中斷服務(wù)程序見GTIM1_IRQHandler()*/
}
9.實驗演示
系統(tǒng)時鐘由HSI提供,通過PLL倍頻到48MHz。GTIM1經(jīng)16分頻后,以3MHz的頻率計數(shù),ARR設(shè)置為1499,GTIM1的溢出周期為500us。GTIM1每500us進入一次中斷,每50ms改變一次CH3的CCR寄存器的值,即改變PWM的正脈寬,步長為5us,先遞增到ARR,然后遞減到0,如此反復。通過示波器圖像顯示,PB08處的信號波的占空比隨時間進行周期性變化。截取2個波形如下:


來源:武漢芯源半導體
免責聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理
審核編輯 黃宇
-
寄存器
+關(guān)注
關(guān)注
31文章
5599瀏覽量
129568 -
PWM
+關(guān)注
關(guān)注
116文章
5861瀏覽量
224736 -
定時器
+關(guān)注
關(guān)注
23文章
3365瀏覽量
122344
發(fā)布評論請先 登錄
基于CW32的門禁綜合系統(tǒng)
請問CW32的pwm移相功能是只有PWM通道1有還是全部都可以配置?
CW32的PWM輸出會受電機干擾突然停波,怎么解決?
關(guān)于CW32 互補PWM 程序調(diào)試的疑問求解
如何基于CW32系列MCU實現(xiàn)VBAT功能
cw32和stm32的區(qū)別
cw32和gd32的區(qū)別
CW32單片機在智能馬桶的應(yīng)用介紹
CW32 PWM輸出功能介紹
評論