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.

[参考译文] CCS/TMDSDOCK28379D:DCAEVT1.SYNC 在一个开关周期内不能正常工作。

Guru**** 2511985 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/844459/ccs-tmdsdock28379d-dcaevt1-sync-don-t-work-well-in-one-switching-cycle

器件型号:TMDSDOCK28379D

工具/软件:Code Composer Studio

首先、我将在下图中显示异常波形、红线(CH2)是电流、蓝线(CH3)是 ZCD 信号、黄线是栅极驱动器 EPWM2B (GPIO3)、当 EPWM2B 设置为1时、电流增大、当 EPWM2B 设置为0时、电流将减小。

在这里、我使用 DCAEVT1.SYNC 来生成同步脉冲、作为 发送到我的 ePWM 模块的 EPWMxSYNCI 信号。

正如我们在第一个图中看到的、当电流降至零时、ZCD 信号将从0触发为1、该 ZCD 信号将配置为 TZ1至 X-BAR 的 Input1、  

相关代码如下所示:

EPwm2Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_TZ1;// DCAH = TZ1

EPwm2Regs.TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI;

EPwm2Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1;//DCAEVT1 =DCAEVT1 (未滤波)
EPwm2Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_异 步;//DC_EVT_SYNC;//DC_EVT_异 步;//DC_EVT_SYNC;//采用异步路径

EPwm2Regs.TZCTL.bit.TZA = TZ_NO_CHANGE;//TZ_FORCE_HI;// EPWM1A 将变为高电平
EPwm2Regs.TZCTL.bit.TXB = TZ_NO_CHANGE;//TZ_FORCE_LO;// EPWM1B 将变为低电平

EPwm2Regs.TZCTL.bit.DCAEVT1 = TZ_NO_CHANGE;//TZ_FORCE_HI;// EPWM1A 将变为高电平

EPwm2Regs.DCACTL.bit.EVT1SYNCE = 1;
EPwm2Regs.DCACTL.bit.EVT1SOCE = 0;

 

然后 、DCAEVT1.SYNC 将 ePWM 模块的时基计数器(TBCTR)设置为零(TBPHS = 0)、并且驱动器信号将从0更改为1。 当 TBCTR 增加到达到 CMPA 时、驱动器信号将设置为0。

相关代码如下所示:

PWM GPIO 配置
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;//首先将 GPyMUX 位设置为零以避免多路复用器中的毛刺脉冲
GpioCtrlRegs.GPAGMUX1.bit.GPIO2 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;
GpioCtrlRegs.GPACSEL1.bit.GPIO2 = GPIO_MUX_CPU1;

GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;//首先将 GPyMUX 位设置为零以避免多路复用器中的毛刺脉冲
GpioCtrlRegs.GPAGMUX1.bit.GPIO3=0;
GpioCtrlRegs.GPAMUX1.bit.GPIO3=1;
GpioCtrlRegs.GPACSEL1.bit.GPIO3 = GPIO_MUX_CPU1;

GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;//禁用 GPIO0上的上拉电阻(EPWM2A)
GpioCtrlRegs.GPAPUD.bit.GPIO3=1;//禁用 GPIO1上的上拉电阻(EPWM2B)

 

EALLOW;
InputXbarRegs.INPUT1SELECT = 21;//12;//

InputXbarRegs.INPUT5SELECT = 50;//12;//
InputXbarRegs.INPUT6SELECT = 50;//12;//

EDIS;

EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR;// 强制 EPWMxA 输出为低电平。  
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; 强制 EPWMxA 输出高电平
EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR;// 强制 EPWMxA 输出为低电平。  

EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;  //s5=0、s4=0
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;  // s1=1、s0=1
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;  //s3=0、s2=1
EPwm2Regs.DBFED = 0x05;
EPwm2Regs.DBRED = 0x02;
EPwm2Regs.DBCTL.bit.OUTSWAP = 0x00;

 

 

 

在大多数情况下,它运行良好,但有时在一个开关周期中,当 TBCTR 增加到 CMPA 时,驱动器信号无法设置为0。 这种情况非常混乱,会导致很大的电流尖峰。

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

    您好!

    我怀疑由于某种原因未能为该周期生成同步脉冲。 如果错过了同步-那么它可能会错过清除 PWM 输出的比较事件、因为计时器值已经超过了 CMPA 值。
    因此、我建议尝试以下方法-
    为了进行调试、请使用.r.t 触发示波器图 CMPx 占空比超过预期值、同步脉冲之间的持续时间超过预期值。 如果确实缺少同步、这将导致问题的根源。 如果是、您可以进一步了解为什么不在该条件下生成比较事件等
    2.为了保护功率级、将 PWM 设置为在周期匹配时清除(除了 CMPA)。 因此、即使由于某种原因错过了 CMPx 事件、PWM 输出始终在 PWM 周期结束时清除。

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

    您好!

    您是否有机会根据上述建议进行进一步调试?

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

    返回查看您是否有机会了解 Bharathi 的建议。  我将此主题标记为 TI 认为已解决、但如果您有其他需求、请随时回复。

    最棒的
    Matthew