PWM信号的产生主要是定时器不停的计数,如果设置了比较寄
存器的值,那么定时器的计数值会不停的和比较寄存器的值进行比
较,不断进行匹配,对应的引脚上会不断的产生高低的电平,这样
就得到了PWM波。
事件管理器A中包含三个比较单元CMPR 1, CMPR2 , CMPR3 ,
使用通用定时器1计数并与其比较,每个比较单元会产生两路PWM
波,三个单元对应六路PWM输出;即PWMI,PWM2,PWM3,PWM4,
PWMS , PWM6;事件管理器B中也包含三个比较单元CMPR4 ,
CMPRS , CMPR6,使用通用定时器3计数并与其L匕较,每个L匕较单
元也是产生两路PWM波,三个单元对应六路PWM输出,即PWM7,
PWM8、PWM9、PWM10、PWM11、PWM12。
设置PWM寄存器主要包括以下几个寄存器:比较动作控制寄存
器ACTRx、死区时间控制寄存器DBTCONx、比较控制寄存器
COMCONx、比较寄存器CMPRx,对事件管理器A要设置周期寄存
器T1PR、计数寄存器T1CNT、控制寄存器T1CON,对事件管理器B则
要设置周期寄存器T3PR、计数寄存器T3 CNT、控制寄存器T3CON。下
面给出了产生PWM波的初始化寄存器设置的源代码。
void InitEv(void)
{
EvbRegs.T3PR -2000;// Timer3 period
EvbRegs. T3 CNT=0x0000;// Timer3 counter
EvbRegs. T3 CON. all=0x0842;
EvbRegs.CMPRS=0;
EvbRegs.CMPR6=0;
EvbRegs.ACTRB. all=0x0656;
EvbRegs.DB TCONB. all=0x0000;// deadband
EvbRegs. COMCOM .all=OxA600;
}
|