Part Number: TMS320F28035
程序中配置事件滤波无法生效,请帮忙查看一下问题在哪儿?
//EPwm3配置,周期开始时A高电平,B与A互补,
//数字比较器DCComp2触发DCBEVT2事件,此时将A拉低B拉高
EPwm3Regs.TBCTL.bit.FREE_SOFT = 0x3; //
EPwm3Regs.TBCTL.bit.CLKDIV = 0; /** 0:/1(default) */
EPwm3Regs.TBCTL.bit.HSPCLKDIV = 0; /** 0:/1;1:/2(default) */
EPwm3Regs.TBPRD = EPWM3_TIMEBASE; /** 20KHz */
EPwm3Regs.TBCTR = 0; /** 清零TBCNT计数器*/
EPwm3Regs.TBPHS.half.TBPHS = 0; /** 清零相位寄存器*/
EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; /** 上计数模式 */
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; /** 启用相位同步,Slave*/
EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW; /** 开启TBPRD 影子寄存器*/
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; /** 选择EPWM1SYNCO 输出信号源,TBCTR=0*/
EPwm3Regs.CMPA.half.CMPA = 0; /** CMPA值 ,初始占空比0*/
EPwm3Regs.CMPB = 0; /** CMPB值 */
EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; /** 开启CMPA影子寄存器 */
EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; /** 开启CMPB影子寄存器 */
EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; /** TBCTR=0时,CMPA自动从影子寄存器装载值 */
EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; /** TBCTR=0时,CMPB自动从影子寄存器装载值 */
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm3Regs.DBFED = 0;//EPWMx_DBFED_CLK;
EPwm3Regs.DBRED = 0;//EPWMx_DBRED_CLK;
// EPwm3Regs.DBCTL.bit.IN_MODE = DBA_ALL;
// EPwm3Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
// EPwm3Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm3Regs.DBCTL.all = 0x000B;
以上代码工作正常。
现在加入事件滤波功能,期望在周期开始后经过一段时间,DCBEVT2才能生效,这样就不会发生周期刚开始的时候DCBEVT2导致pwmB整个周期都是高电平。
EPwm3Regs.DCBCTL.bit.EVT2SRCSEL = DC_EVT_FLT;
EPwm3Regs.DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC;
EPwm3Regs.DCBCTL.bit.EVT1SYNCE = 1;
EPwm3Regs.DCFCTL.bit.SRCSEL = DC_SRC_DCBEVT2;
EPwm3Regs.DCFCTL.bit.BLANKE = DC_BLANK_ENABLE;
EPwm3Regs.DCFCTL.bit.PULSESEL = DC_PULSESEL_ZERO;
EPwm3Regs.DCFOFFSET = EPWM3_TIMEBASE - 5;
EPwm3Regs.DCFWINDOW = 155;
尝试过调整DCFOFFSET为0或EPWM3_TIMEBASE-5;也调整过DCFWINDOW为5~255,都没有效果,pwmB还是会出现持续高电平。