This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
下午好、我将尝试使用 CMP 和 AQCTLA.bit.ZRO 的值实现0%或100%占空比。 但是、我会遇到奇怪的行为。
void InitEPwm1 (void) { //设置 TBCLK //根据 PWM 频率设置时基周期寄存器。 //将时基计数器相位设置为0。 //清除时基计数器。 EPwm1Regs.TBPRD = PWM_TBPRD;// 12500针对8kHz EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; EPwm1Regs.TBCTR = 0x0000; //清除比较值 EPwm1Regs.CMPA.ALL = 0; EPwm1Regs.CMPB.ALL = 0; EPwm1Regs.CMPC = 0; EPwm1Regs.CMPD = 0; //设置计数器模式 //将计数器模式设置为向上/向下计数模式。 //不要从时基阶段加载时基计数器(TBCTR) //寄存器(TBPHS)。 //时基计数器等于零时同步输出(TBCTR = 0x00) //将高速时基时钟预分频设为1。 //将时基时钟预分频设为1。 // TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV) EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; //设置死区 //低电平有效互补 PWM // DB 已完全启用 //低电平有效互补模式 // EPWM1A 是下降沿和上升沿延迟的源。 //死区时间为2.5us (500/TBCLK) EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE; EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC; EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; EPwm1Regs.DBFED = 500; EPwm1Regs.DBRED = 500; //设置隐藏 //对 CMPA、AQCTLA 寄存器使用重影。 //当时基计数器等于零时,从影子加载到活动状态。 EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.AQCTL.bit.SHDWAQAMODE = AQ_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.AQCTL.bit.LDAQAMODE = AQ_CTR_ZERO; //清除操作 EPwm1Regs.AQCTLA.bit.CAU = AQ_TOGGLE; EPwm1Regs.AQCTLA.bit.CAD = AQ_TOGGLE; EPwm1Regs.AQCTLA.bit.ZRO = AQ_NO_ACTION; EPwm1Regs.AQCTLA.bit.PRD = AQ_NO_ACTION; //开始 EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; EPwm1Regs.CMPA.bit.CMPA = PWM_TBPRD; }
为什么我看到在 PRD 处切换?
如果我设置 EPwm1Regs.CMPA.bit.CMPA = 0、我看到在零处切换、
如果我设置 EPwm1Regs.CMPA.bit.CMPA = PWM_TBPRD +一些值、我仍然会看到在周期时切换
这与 SPRUHM8I 第1896页中的内容有一定的不一致
我相信您错过了事件生效的优先级。