您好、专家!
我要求为我的客户提供服务。
现象:客户/他们使用 F28033执行 PSU、并且在 PWM INIT 操作时、在所有 PWM 模块中错过了 TBCTR = 0x0000。 当他们在半负载 条件下测试代码时、PWM1和 PWM2 模块5个 TBCLK 不同步。
您可以参考以下 PWM 初始化代码、它们不初始化 TBCTR、但遵循了 下面的时基时钟同步、并且 S/W 强制 软件同步。 因此、在理论上、所有 PWM 模块应同时开始工作、而时基(TB)子模块也是同步的。
1)、我们在没有负载 条件的情况下在 EVM 或客户的板上测试代码、PWM1和 PWM2 PWM1和 PWM2是同步的 、但我们在半负载条件下测试代码、PWM1和 PWM2 PWM1和 PWM2 模块5个 TBCLK 不同步、不同步。
如果我们添加以 在 All PWM 模块中初始化 TBCTR = 0x0000、则 在任何情况下都将同步所有 PWM 模块(加载条件)。 同时、一切看起来都 很好。 所以、 如果在 PWM 初始化时 TBCTR 不清、有什么风险吗? 哪些情况会导致此 PWM 计数//TBCTR 在所有 PWM 模块中不同步? 谢谢。


void InitEPwm1(void)
{
// EPWM1 config
EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD;
EPwm1Regs.TBPHS.half.TBPHS = 0;
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // Pass through
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // up/down Count
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
//TBPRD is loaded from its shadow register on Counter = 0 event (CTR_zero)
//TBCLK=SYSCLKOUT/(HSPCLKDIV * CLKDIV)=SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; //Timebase clock pre-scale
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //High speed time pre-scale
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD; // Select INT on Zero event
EPwm1Regs.ETSEL.bit.INTEN = 0; // enable INT
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event
EPwm1Regs.ETCLR.all = 0x000F ; //clear all ETFLAG
EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO_PRD;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO_PRD;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; //for Piccolo HRPWM AQ_SET
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
//Setup Deadband
EPwm1Regs.DBCTL.bit.OUT_MODE = DBB_ENABLE; //S1=1,S0=0
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HI; //S3=0,S2=0
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_RED_DBB_FED; //S5=1,S4=0
EPwm1Regs.DBRED = DC_DB_TIME_300NS; //DC_DB_TIME_100NS;
EPwm1Regs.HRCNFG.all = 0x0;//lzy
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO_PRD;
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_BEP;//rising and falling edge
EPwm1Regs.HRCNFG.bit.AUTOCONV = AUTOCONV_AUTO; // Enable autoconversion
EPwm1Regs.HRPCTL.bit.HRPE=0x01; // Turn on high-resolution period control.
EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE = 1;
}