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.

[参考译文] TMS320F28377S:ePWM2生成1ns 更宽的脉冲和 SFO 库问题

Guru**** 2484615 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/624984/tms320f28377s-epwm2-producing-1ns-wider-pulse-and-sfo-lib-question

器件型号:TMS320F28377S

你(们)好

我们正在尝试进行四相降压。 所有四个 ePWM 都 链接了 CMPA 和 CMPB 寄存器。 ePWM7、ePWM8、ePWM6和 ePWM2应始终产生相同的脉冲宽度、但 ePWM2脉冲比其他脉冲宽大约1ns。  我已经对所有例程进行了双重检查、它们几乎相同 、除了不同的初始 TBCTR。 打开或关闭 HRPWM 不会改变任何东西。 我想知道什么原因会导致这种情况? InitPWM7()和 InitPWM2()如下。 两个 LaunchPad 板在 ePWM2上产生相同的 PW 差异。

2.SFO_V8_Fpu_lib_build_c28.lib 中的 SFO 例程似乎确定了 MEP_ScaleFactor、但不应该针对不同的 ePWM 执行该操作? 我只能看到为 ePWM1配置的 HRMSTEP。 所有其他的东西看起来都没有改变、 HRMSTEP = 0。 那么 、ePWM[]数组的用途是什么? 无论如何、第一个元件指向 ePWM1或 ePWM8、仍然只有 ePWM1.HRMSTEP 被改变。

谢谢

Edward

静态 InitPWM7 ()

EALLOW;

GpioCtrlRegs.GPAPUD.bit.GPIO12 = 1;//禁用 GPIO12上的上拉电阻(EPWM7A)

GpioCtrlRegs.GPAPUD.bit.GPIO13 = 1;//禁用 GPIO13上的上拉电阻(EPWM7B)

GpioCtrlRegs.GPAGMUX1.bit.GPIO12 = 0;//将 GPIO2配置为 EPWM7A

GpioCtrlRegs.GPAMUX1.bit.GPIO12=1//将 GPIO2配置为 EPWM7A

GpioCtrlRegs.GPAGMUX1.bit.GPIO13 = 0;//将 GPIO3配置为 EPWM7B

GpioCtrlRegs.GPAMUX1.bit.GPIO13=1//将 GPIO3配置为 EPWM7B

EPwm7Regs.TBCTL.bit.CTRMODE = TB_FREEZE;//向上计数

EPwm7Regs.TBCTL.bit.FREE_SOFT = 2;//自由运行

EPwm7Regs.TBCTR = 0x0000+INIPHOFFSET;//初始 CTR

EPwm7Regs.TBPRD =(ePWM_CLOCK / PWM_FREQ)-1;//设置计时器周期

EPwm7Regs.TBPHS.ALL = 0x0000;//相位为0

//

//设置 TBCLK

//

EPwm7Regs.TBCTL.bit.PHSDIR = TB_UP;

EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载

EPwm7Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;

EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率

EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1;//慢、只观察

//范围

EPwm7Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器

EPwm7Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

EPwm7Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

EPwm7Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//

//设置比较

//

EPwm7Regs.CMPA.bit.CMPA = 0;

//

//设置操作

//

EPwm7Regs.AQCTLA.bit.CAU = AQ_CLEAR;

EPwm7Regs.AQCTLA.bit.ZRO = AQ_SET;

//EPwm2Regs.AQCTLB.bit.CAU = AQ_SET;//可选

//EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR;//可选

//

//低电平有效互补 PWM -设置死区

//

EPwm7Regs.DBCTL.bit.HALFCYCLE = 1;

EPwm7Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;

EPwm7Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;

EPwm7Regs.DBCTL.bit.IN_MODE = DBA_ALL;

//EPwm2Regs.DBRED.bit.DBRED = 4;

//EPwm2Regs.DBREDHR.bit.DBREDHR = 100;

//EPwm2Regs.DBFED.bit.DBFED = 4;

//EPwm2Regs.DBFEDHR.bit.DBFEDHR = 100;

//到 ADC 的 SOCA 脉冲

EPwm7Regs.ETPS.bit.SOCAPRD = 1;

EPwm7Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO;//选择零事件时的 INT

EPwm7Regs.ETSEL.bit.SOCAEN = 1;

//

//中断,我们将在其中修改死区

//

// EPwm7Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT

// EPwm7Regs.ETSEL.bit.INTEN = 1;//启用 INT

// EPwm7Regs.ETPS.bit.INTPRD = et_3rd;//在第三个事件发生时生成 INT

EPwm7Regs.HRCNFG.ALL = 0x0;

#if!NOHRPWM

EPwm7Regs.HRCNFG.bit.EDGMODE = HR_FEP;

EPwm7Regs.HRCNFG.bit.CTLMODE = HR_CMP;

EPwm7Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;

EPwm7Regs.HRCNFG.bit.EDGMODEB = HR_REP;

EPwm7Regs.HRCNFG.bit.CTLMODEB = HR_CMP;

EPwm7Regs.HRCNFG.bit.HRLOADB = HR_CTR_ZERO;

EPwm7Regs.HRCNFG2.bit.EDGMODEDB=3;//两者都有

#endif

EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数

//EPwm7Regs.HRCNFG.bit.AUTOCONV = 1;

//EPwm7Regs.HRMSTEP.ALL = 0xFFFF;

EPwm7Regs.TZSEL.bit.CBC6 = 1;//在 CPU 停止时

EPwm7Regs.TZCTL.bit.TZA = TZ_FORCE_LO;

EPwm7Regs.TZCTL.bit.TSB = TZ_NO_CHANGE;

EDIS;

静态 InitPWM2 ()

EALLOW;

GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;//禁用 GPIO12上的上拉电阻(EPWM7A)

GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;//禁用 GPIO13上的上拉电阻(EPWM7B)

GpioCtrlRegs.GPAGMUX1.bit.GPIO2 = 0;//将 GPIO2配置为 EPWM7A

GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;//将 GPIO2配置为 EPWM7A

GpioCtrlRegs.GPAGMUX1.bit.GPIO3 = 0;//将 GPIO3配置为 EPWM7B

GpioCtrlRegs.GPAMUX1.bit.GPIO3=1//将 GPIO3配置为 EPWM7B

if (phbcfg = PHBCFG_4ph)

EPwm2Regs.TBCTL.bit.FREE_SOFT = 2;//自由运行

其他

EPwm2Regs.TBCTL.bit.free_soft = 1;//在整个周期完成时停止,~调试器停止是安全的

EPwm2Regs.TBPRD =(ePWM_CLOCK / PWM_FREQ)-1;//设置计时器周期

EPwm2Regs.TBPHS.ALL = 0x0000;//相位为0

if (phbcfg = PHBCFG_4ph)

EPwm2Regs.TBCTR = ePWM_CLOCK / PWM_FREQ / 2 -1+INIPHOFFSET;

其他

EPwm2Regs.TBCTR = 0;//同步 TEC

//

//设置 TBCLK

//

EPwm2Regs.TBCTL.bit.PHSDIR = TB_UP;

EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数

EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载

EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;

EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率

EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;//慢、只观察

//范围

EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器

EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;

EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

//

//设置比较

//

EPwm2Regs.CMPA.bit.CMPA = 0;

//

//设置操作

//

EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;

EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;

//EPwm2Regs.AQCTLB.bit.CAU = AQ_SET;//可选

//EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR;//可选

//

//低电平有效互补 PWM -设置死区

//

EPwm2Regs.DBCTL.bit.HALFCYCLE = 1;

EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FUL_ENABLE;

EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;

EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;

//EPwm2Regs.DBRED.bit.DBRED = 4;

//EPwm2Regs.DBREDHR.bit.DBREDHR = 100;

//EPwm2Regs.DBFED.bit.DBFED = 4;

//EPwm2Regs.DBFEDHR.bit.DBFEDHR = 100;

//

//中断,我们将在其中修改死区

//

// EPwm7Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT

// EPwm7Regs.ETSEL.bit.INTEN = 1;//启用 INT

// EPwm7Regs.ETPS.bit.INTPRD = et_3rd;//在第三个事件发生时生成 INT

EPwm2Regs.HRCNFG.ALL = 0x0;

#if!NOHRPWM

EPwm2Regs.HRCNFG.bit.EDGMODE = HR_FEP;

EPwm2Regs.HRCNFG.bit.CTLMODE = HR_CMP;

EPwm2Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;

EPwm2Regs.HRCNFG.bit.EDGMODEB = HR_REP;

EPwm2Regs.HRCNFG.bit.CTLMODEB = HR_CMP;

EPwm2Regs.HRCNFG.bit.HRLOADB = HR_CTR_ZERO;

EPwm2Regs.HRCNFG2.bit.EDGMODEDB=3;//两者都有

#endif

//EPwm2Regs.HRCNFG.bit.AUTOCONV = 1;

//EPwm2Regs.HRMSTEP.ALL = 0xFFFF;

if (phbcfg = PHBCFG_4ph)

#if!BUG1ns

EPwm2Regs.EPWMXLINK 位 CMPBLINK = 7-1;

EPwm2Regs.EPWMXLINK.BIT.CMPALINK = 7-1;

#endif

EPwm2Regs.TZSEL.bit.CBC6 = 1;//在 CPU 停止时

EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO;

EPwm2Regs.TZCTL.bit.TSB = TZ_NO_CHANGE;

EDIS;

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

    只是为了确保我们了解这个问题、您是否能够附加您看到的波形以及您期望的波形?

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

    感谢您的回答。

    该同事在上升下降时间没有注意到、只报告了测量的脉冲宽度。 GPIO2上的下降沿更长、这不是问题。 很抱歉、有噪音、第一个问题已解决。 SFO ()的问题仍然存在:SFO 库为什么仅为 ePWM1校准 HRMSTEP 而不校准剩余的 ePWM。

    此致、
    Edward