计数比较模块(CC)与动作模块
  LRN3hoUXtCQU 2023年11月28日 23 0

1.4 计数比较模块CC

1.计数比较模块的作用

计数比较模块(CC)与动作模块_寄存器

图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 输出所需要的开关波形。

计数比较模块(CC)与动作模块_非对称_02

图10 动作模块框图

①动作模块根据下列事件产生动作(置高、拉低、翻转)。

--CTR=PRD:时基模块来的信号,时基计数器的值等于周期寄存器的值。

--CTR=ZERO:时基模块来的信号,时基计数器的值等于 0。

--CTR=CMPA:计数比较模块来的信号,时基计数器的值等于比较寄存器A的值。

--CTR=CMPB:计数比较模块来的信号,时基计数器的值等于比较寄存器B的值。

②管理以上事件发生后PWM的输出极性。

③针对时基计数器递增或者递减时提供独立的动作控制。

【例①】单边非对称波形(ePWMxA 和 ePWMxB 独立调制,高电平有效)如下所示

计数比较模块(CC)与动作模块_寄存器_03

图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; 
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月28日 0

暂无评论

推荐阅读
LRN3hoUXtCQU