ePWM 使用上升下降模式 进行调制时出现异常驱动;
在PWM封波后发出一个周期长脉冲
控制代码:
if( mInvtCtl.Pwmap < mInvtCtl.MinPwm) { L1H.CMPA.bit.CMPA = 0; L1H.AQCSFRC.all = 0b0101;}
else if(mInvtCtl.Pwmap > mInvtCtl.MaxPwm){ L1H.CMPA.bit.CMPA = EPwm1Regs.TBPRD; L1H.AQCSFRC.all = 0b1010;}
else { L1H.CMPA.bit.CMPA = mInvtCtl.Pwmap; L1H.AQCSFRC.all = 0; }
if( mInvtCtl.Pwman < mInvtCtl.MinPwm) { L1L.CMPA.bit.CMPA = 0; L1L.AQCSFRC.all = 0b0101;}
else if(mInvtCtl.Pwman > mInvtCtl.MaxPwm){ L1L.CMPA.bit.CMPA = EPwm1Regs.TBPRD; L1L.AQCSFRC.all = 0b1010;}
else { L1L.CMPA.bit.CMPA = mInvtCtl.Pwman; L1L.AQCSFRC.all = 0; }
EPWM配置
p->TBPRD = 2000; // Set timer period
p->TBPHS.bit.TBPHS = 0x0000; // Phase is 0
p->TBCTR = 0x0000; // Clear counter
//
// Setup TBCLK
//
p->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
p->TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loadingTB_ENABLE;//
p->TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
p->TBCTL.bit.CLKDIV = TB_DIV1;
p->CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO
p->CMPCTL.bit.SHDWBMODE = CC_SHADOW;
p->CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;
p->CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;
p->TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //
//
// Setup compare
//
p->CMPA.bit.CMPA = 1000;
//
// Set actions
//
p->AQCTLA.all = 0;
p->AQCTLA.bit.CAU = AQ_CLEAR; // Set PWM1A on Zero
p->AQCTLA.bit.PRD = AQ_NO_ACTION;
p->AQCTLA.bit.CAD = AQ_SET;
p->AQCTLA.bit.ZRO = AQ_NO_ACTION;
p->AQCTLB.all = 0;
p->AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM1A on Zero
p->AQCTLB.bit.PRD = AQ_NO_ACTION;
p->AQCTLB.bit.CAD = AQ_SET;
p->AQCTLB.bit.ZRO = AQ_NO_ACTION;
//
// Active Low PWMs - Setup Deadband
//
p->DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
p->DBCTL.bit.POLSEL = DB_ACTV_HIC;
p->DBCTL.bit.IN_MODE = DBA_RED_DBB_FED;
p->DBRED.bit.DBRED = EPWM1_MIN_DB;
p->DBFED.bit.DBFED = EPWM1_MIN_DB;
//EPwm1_DB_Direction = DB_UP;
p->AQCSFRC.all = 0x9;