部件号: TMS320F28379D
您好、
我急于建立一个移动控制装置。 我的控制变量更改 TBPHS 值。 但是、我遇到了漏脉冲问题。 我始终缺少脉冲的点。
以下是 EPWM2 的代码:
Void InitEPwm2Example ()
{
//设置 TBCLK
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;// Count updown //时基控制寄存器
EPwm2Regs.TBPRD = EPWM_TIMER_TBPRD; //设置计时器周期//何时拉高/低
EPwm2Regs.TBCTL.BIT.PHSEN = TB_ENABLE; //禁用相位加载
EPwm2Regs.TBPHS.bit.TBPHS = 0; //相位为 0
EPwm2Regs.TBCTR = 0x0000; //清除计数器//时基控制寄存器
EPwm2Regs.TBCTL.BIT.HSPCLKDIV = TB_DIV1; //时钟比到 SYSCLKOUT
EPwm2Regs.TBCTL.BIT.CLKDIV = TB_DIV1;
//将同步信号传递到标准模块?
//通常从设备使用 tb_sync_in、但如果它是链中的最后一个、则可以使用 tb_cres_zero。
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_sync_in;
//将影子寄存器加载设置为零
EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm2Regs.DBCTL.BIT.OUT_MODE = DB_FULL_ENABLE; //死区输出模式//DB_FULL_ENABLE-死区发生器完全启用
EPwm2Regs.DBCTL.BIT.IN_MODE = DBA_ALL;// EPWMA 为主器件
EPwm2Regs.DBCTL.BIT.POLSEL = DB_ACTV_HIC;//高电平有效互补
//设置比较值
EPwm2Regs.CMPA.bit.CMPA = EPWM_MAX_CMPA; //设置比较 A 值
EPwm2Regs.DBFED.bit.DBFED = 0;//死区发生器下降沿延迟计数寄存器
EPwm2Regs.DBRED.bit.DBRED = 0;//死区发生器上升沿延迟计数寄存器
//设置操作
// AQCTLA =输出 A 的动作限定器控制寄存器
// TBCTR = CMPA 时执行向下计数操作
EPwm2Regs.AQCTLA.bit.cad = AQ_SET; // 2=设置:强制 EPWMxA 输出为高电平
// TBCTR = CMPA 时的操作递增计数
EPwm2Regs.AQCTLA.bit.CAU = AQCLEAR;// 1 =清除:强制 EPWMxA 输出为低电平
//用于中断
EPwm2Regs.CMPB.bit.CMPB = EPWM_MAX_CMPA;
EPwm2Regs.CMPA.bit.CMPA= EPWM_MAX_CMPA;
EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//事件触发器选择寄存器
EPwm2Regs.ETSEL.bit.intEn = 1;
EPwm2Regs.ETPS.bit.INTPRD = ET_1st;//事件触发器预分频寄存器
epwm2_info.EPwmRegHandle =&EPwm2Regs; //设置指向的指针
// ePWM 模块
}
我的控制变量:
d2 = Vin/(n*Vout);
duty2 = D2 * EPWM_TIMER_TBPRD;
//安全夹具(可选但推荐)
//在上 — 下模式下,TBPHS 不能大于 TBPRD
IF (duty2 > EPWM_TIMER_TBPRD)
duty2 = EPWM_TIMER_TBPRD;
IF (duty2 < 0)
duty2 = 0;
epwm2_info->EPwmRegHandle->TBPHS.bit.TBPHS= duty2;
漏脉冲问题:



我尝试通过在动作限定器中添加 T1 事件来解决该问题。 它改变了电流的形状、这意味着 epwm2 在 epwm1 之前启动并更改了占空比。 如果您对我应该解决的问题有任何疑问、请告诉我。
谢谢