This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379D:漏脉冲问题

Guru**** 2687095 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1600146/tms320f28379d-missing-pulse-problem

部件号: 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 之前启动并更改了占空比。 如果您对我应该解决的问题有任何疑问、请告诉我。

 

谢谢