大家好、我的客户正在配置 PWM1和 PWM2、希望它们具有180°相移。
静态空 vSetEpwm1 (空)
{
EPwm1Regs.TBPRD = PwmPeriod>>1;
EPwm1Regs.CMPA.half.CMPA = PwmPeriod>2;
EPwm1Regs.TBPHS.Half.TBPHS = 0;
EPwm1Regs.TBCTR = 0;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //TBCLK=SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD;
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm1Regs.AQSFRC.bit.RLDSF = 0; // AQCSRC 负载为零
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm1Regs.DBRED =死区;
EPwm1Regs.DBFED =死区;
EPwm1Regs.ETSEL.bit.SOCAEN = 1; //在组上启用 SOC
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_PRD; //在 TBPRD 上选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; //在发生第一个事件时生成脉冲
}
静态空 vSetEpwm2 (空)
{
EPwm2Regs.TBPRD = PwmPeriod>>1;
EPwm2Regs.CMPA.half.CMPA = PwmPeriod>2;
EPwm2Regs.TBPHS.Half.TBPHS = EPwm2Regs.TBPRD - 1;
EPwm2Regs.TBCTR = 0;
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm2Regs.TBCTL.bit.PHSDIR = TB_UP;
EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //TBCLK=SYSCLKOUT
EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD;
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD;
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;
EPwm2Regs.AQSFRC.bit.RLDSF = 0; // AQCSRC 负载为零
EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;
EPwm2Regs.DBRED =死区;
EPwm2Regs.DBFED =死区;
EPwm2Regs.ETSEL.bit.SOCAEN = 1; //在组上启用 SOC
EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTR_PRD; //从计数器=零选择 SOC
EPwm2Regs.ETPS.bit.SOCAPRD = ET_1ST; //在发生第一个事件时生成脉冲
}
在大多数情况下、它们具有180相移。 TBPRD=700。 PWM2的 TBPHS (TBPRD-1)使相移为180°。
但是、有时间 PWM2 (从 PWM)的 TBCTR 将从700计数到1400。 我们捕获的数据如下:
蓝色线- PWM2 TBCTR、紫色线- PWM1 TBCTR。

我们不理解它的行为为何如此。

