1.4 计数比较模块CC
1.计数比较模块的作用
图10 ePWM计数比较模块原理框图
计数比较模块以时基计数器的值作为输入,与比较寄存器CMPA和比较寄存器CMPB不断进行比较,当时基计数器的值等于其中之一时,就会产生相应的事件。
①产生比较事件具体取决于编程时是采用寄存器A还是寄存器B:
--CTR=CMPA:时基计数器的值与比较寄存器A的值相等。
--CTR=CMPB:时基计数器的值与比较寄存器B的值相等。
②动作模块 AC 恰当配置后可以控制PWM的占空比。
③采用影子寄存器来更新比较值可以有效防止在PWM周期内出现故障以及毛刺
2. 计数比较模块的特点
计数比较模块可以产生两个独立的比较时间,对于向上(递增)或者向下(递减)计数模式来说,在一个PWM,周期内,比较时间只发生一次。而对于向上向下计数模式来说,如果比较寄存器的值处于0~TBPRD之间,在一个PWM周期内,比较事件就会发生两次。
CMPA与CMPB都有相对应的影子寄存器,通过CMPCTRL[SHDWAMODE]位使能,默认情况下,CMPA与CPMB影子寄存器是使能的。
若影子寄存器被使能,那么在以下集中情况,影子寄存器的值会传递到有效寄存器中。
① CTR=PRD 时基计数器的值与周期寄存器的值相同
② CTR=ZERO时基计数器值为0
1.5 动作模块AC
1 动作模块的作用
动作模块决定相应事件发生时应该输出什么样的电平。从而使 ePWMxA 和 ePWMxB 输出所需要的开关波形。
图10 动作模块框图
①动作模块根据下列事件产生动作(置高、拉低、翻转)。
--CTR=PRD:时基模块来的信号,时基计数器的值等于周期寄存器的值。
--CTR=ZERO:时基模块来的信号,时基计数器的值等于 0。
--CTR=CMPA:计数比较模块来的信号,时基计数器的值等于比较寄存器A的值。
--CTR=CMPB:计数比较模块来的信号,时基计数器的值等于比较寄存器B的值。
②管理以上事件发生后PWM的输出极性。
③针对时基计数器递增或者递减时提供独立的动作控制。
【例①】单边非对称波形(ePWMxA 和 ePWMxB 独立调制,高电平有效)如下所示
图11 单边非对称波形
void EPWM1_INIT(void)
{
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC =1 ;
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;
EDIS;
InitEPwm1Gpio();
// 时基模块 TB
EPwm1Regs.TBCTR = 0; // 计数器从0开始
EPwm1Regs.TBPRD = 600; // 周期指设置为600
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // TBPRD使用影子寄存器
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 静止相位控制
EPwm1Regs.TBCTL.bit.CTRMODE = TB_UP;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // 设定TBCLK = SYSCLK = 系统时钟 = 150MHZ
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// 禁止同步信号
// 比较模块CC
EPwm1Regs.CMPA.half.CMPA = 150; //CMPA的值设置为150
EPwm1Regs.CMPB = 300; //CMPB的值设置为400
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;// 设置CMPA为影子寄存器模式
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // 在CTR=ZERO时状态
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//动作模块
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // CTR=ZERO时,将epw1A置高
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;// CTR=ZERO时,将epw1B置高
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // CTR=CAU时,将epw1A置低 COMARE A ' 比较寄存器
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // CTR=CBU时,将epw1B置低 COMARE B
}
若要修改显示波形可以通过调整占空比,或者调整动作模块的触发方式
EPwm1Regs.CMPA.half.CMPA = 150; //CMPA的值设置为150
EPwm1Regs.CMPB = 300; //
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // CTR=ZERO时,将epw1A置高
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;// CTR=ZERO时,将epw1B置高
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // CTR=CAU时,将epw1A置低 COMARE A ' 比较寄存器
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
标签:CTR,CMPA,CC,计数,模块,寄存器,EPwm1Regs,bit
From: https://blog.51cto.com/u_16192117/8587362