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.

[参考译文] TMS320F2.8374万S:使用死带模块和100 % / 0 % 占空比的PWM单元的问题

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/621698/tms320f28374s-issue-with-pwm-unit-using-dead-band-module-and-100-0-duty-cycle

部件号:TMS320F2.8374万S

我们使用C2000 F2.8374万的PWM单元使用死带模块为降压-升压级生成PWM信号。

 

在极端点(启动/停止,100 % / 0 % 双循环,不同的死区设置等)测试PWM操作时 我发现对我来说没有任何合理的行为。

 

PWM单元按某种方式配置,信号A和B在CMPA上具有相同的操作限定符,而信号B在死区模块上反转。 红色可应用于信号A,馈送至单个B


在0 % 占空比操作中,信号A为高,信号B为低,在100 % 占空比中为低。

 

当红色为0时将占空比更改为0 % ,然后将红色增加为例如100ns,将强制输出A降低。 只有在工作循环更改之前红色为0时才会发生这种情况。 这意味着,将占空比更改为0,红色= 100ns,然后将红色更改为0,再将其更改为100ns,工作方式与预期相同(输出A保持高位)。

 

在100 % 占空比操作中,当更换进纸时,输出B也会发生相同情况。

 

 

当然,使用 100或0 % 占空比的死时间是没有意义的,我们可能永远看不到这种情况,因为我们允许 的死时间最小,所以在正常操作中没有人可以将FED / RED设置为0。 无论如何,我的主张是了解 PWM单元在100 % 所有理论上可能的工作条件下的配置和结果行为。

 

对此行为是否有任何解释?

 

您可以在下面找到我们的配置例程:

 

PWM单元的配置:

 

void PWMConfigBooster (易失性结构ePWM_regs *ePWM)

      EPwm1Regs.TBCTL.bit.CTRMODE                  = TB_COUNT_UDOWN;//不对称模式

      EPwm1Regs.TBPRD                                     = PWM_50KHz_PRD_CNTUPDOWN;//周期= 900 TBCLK计数

 

      EPwm1Regs.TBPHS.bit.TBPHS             = 0;                     //将相位寄存器设置为零

 

      EPwm1Regs.TBCTL.bit.PHSEN             = TB_DISABLE;      //禁用相位同步,因为增压器PWM为主

      EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE     = 0;

      EPwm1Regs.TBCTL.bit.SYNCOSEL                 = TB_CTR_ZERO;//            同步输出到所有从属设备

      EPwm1Regs.TBCTL.bit.PHSDIR                   = 1;                      //同步事件后计数,加载相位的新值(TBPHS)。

      EPwm1Regs.TBPHS.bit.TBPHS             = 0;                      //初始-相对于ePWM1的粗相位偏移

 

      EPwm1Regs.TBCTL.bit.PRDLD             = TB_shadow;

      EPwm1Regs.TBCTL.bit.HSPCLKDIV         = TB_DIV1;               //预分频器= 1

      EPwm1Regs.TBCTL.bit.CLKDIV                   = TB_DIV1;        // TBCLK = SYSCLKOUT

 

      EPwm1Regs.CMPCTL.bit.SHDWAMODE        = CC_SHAME;

      EPwm1Regs.CMPCTL.bit.SHDWBMODE        = CC_SHADO;

 

      EPwm1Regs.CMPCTL.bit.LOADAMODE        = CC_CTR_ZERO;    //在CTR上加载=零

      EPwm1Regs.CMPCTL.bit.LOADBMODE        = CC_CTR_ZERO;    //在CTR上加载=零

 

      StopBoosterPWM();

 

      EPwm1Regs.AQCTL.bit.SHDWAQAMODE       =1;        //为操作限定符A寄存器启用阴影加载

      EPwm1Regs.AQCTL.bit.SHDWAQBMODE       =1;        //为操作限定符B寄存器启用阴影加载

 

      //将死区模块配置为在输出A上使用上升边缘延迟并反转输出B

      //有关详细信息,请访问DeadBandModuleConfigHssPwms.png

      EPwm1Regs.DBCTL.bit.in_mode      = 0x2;// EPWMxA是上升边缘延迟的来源,EPWMxB是下降边缘延迟的来源。 (S4 = 0,S5 = 1)

      EPwm1Regs.DBCTL.bit.DEDB_mode = 0x0;   // S8 = 0

      EPwm1Regs.DBCTL.bit.POLSEL      = 0x2;     //反转ePWMxB信号从下降边缘延迟块中发出(S2 = 0,S3 = 1)

      EPwm1Regs.DBCTL.bit.out模式    = 0x3;     //为EPWMxA和EPWMxB信号启用死带模块(S0和S1 = 1)

      EPwm1Regs.DBCTL.bit.OUTSWAP    = 0x0;// S6和S7 = 0

 

      EPwm1Regs.DBFED.bit.DBFED        = PWM_DEADTIME _IN_TKS; // fed =最初50 TBCLK

      EPwm1Regs.DBRED.bit.DBRED        = PWM_DEADTIME _IN_TKS; // RED = 最初50 TBCLK

 

}

 

用于停止PWM的功能

void StopBoosterPWM (void)

#ifdef set_SS_PWM_STOP_GPIO

      Set_HSS_PWM_STOP_GPIO

#endif

      EPwm1Regs.AQCTLA.bit.CAU                     = AQ_CLEAR;

      EPwm1Regs.AQCTLA.bit.CAD                     = AQ_CLEAR;

 

      EPwm1Regs.AQCTLB.bit.CAU                     = AQ_set; //信号在死区模块中反转

      EPwm1Regs.AQCTLB.bit.CAD                     = AQ_set;   //信号在死区模块中反转

 

#ifdef Clear_HSS_PWM_START_GPIO

      Clear_HSS_PWM_START_GPIO

#endif

}

 

用于启动PWM的功能

void StartBoosterPWM (void)

#ifdef set_SS_PWM_STOP_GPIO

      Set_HSS_PWM_STOP_GPIO

#endif

      EPwm1Regs.AQCTLA.bit.CAU                     = AQ_CLEAR;

      EPwm1Regs.AQCTLA.bit.CAD                     = AQ_SET;

 

      EPwm1Regs.AQCTLB.bit.CAU                     = AQ_CLEAR;//信号在死区模块中反转

      EPwm1Regs.AQCTLB.bit.CAD                     = AQ_set;  //信号在死区模块中反转

#ifdef Clear_HSS_PWM_STOP_GPIO

      Clear_HSS_PWM_STOP_GPIO

#endif

}

谢谢!

Jens

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请检查 e2e.ti.com/.../27.3846万上的讨论 是否有帮助

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

    您好,Baskaran,

    我已经完成了建议的帖子,这与我看到的问题不同。 对于我们的应用,当馈入/红色变化对输出信号产生影响时,这并不重要。

    我所看到的是 ,在0 % 占空比操作中将红色从0更改为较高的值 ,强制输出A从持续 高变为持续 低。 100 % 占空比操作中的馈入和输出B也是如此。

    在我看来,在0 % 或100 % 占空比操作中,输出信号不应该有任何边缘或变化。

    如我所述,只有当进入0 % / 100 % 占空比操作时红色/ FED为0时,才会出现此行为。 例如,如果在进入0 % / 100 % 占空比操作时,红色/馈入为100ns,然后设置为0,返回到其它值,则所有操作都与预期的一样(输出信号保持不变)。

    谢谢

    Jens

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

    阅读此内容时,请记住,我不知道死区模块的内部结构,我的建议仅基于实际经验和E2E论坛的讨论。 另外,死带模块的操作因所使用的硅而异,我在2.8069万方面有过很多经验

    停用时间模块并不真正用于在线重新配置。 由于内部比较寄存器没有阴影,因此在更改馈入值或DB配置寄存器的红色时,您可能会观察到奇怪的现象。 这种现象在本质上可能是零星的,甚至是随机的,但其根本原因是与内部计数器相关的向DB模块写入的时间。

    对于需要改变死时间的项目,我的建议是禁用死时间模块,并将AQ模块与比较器A和比较器B一起使用以生成死时间(请参阅SPRUHM8F第1585页图14-29中的示例)

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

    您好,Mitja,

    感谢您的反馈。

    我们从2.8069万迁移到2.8374万S,关于死带模块的在线重新配置,需要注意的一点是,具有第4代PWM单元的较新器件具有 可选的红色和馈入写入阴影寄存器。 因此,我假设允许我在线更改红色/馈入值,否则这些阴影寄存器对我来说毫无意义。

    回答后,我重新检查了我的配置 ,发现我没有将阴影寄存器用于FED和RED。 遗憾的是,在更改配置以使用它们之后,我可以看到与以前相同的行为。

    TI的任何人能否确认允许在线更改红色和FED寄存器?

    谢谢

    Jens

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

    感谢您的更新。 似乎每一代新产品都需要重新浏览所有文档,以捕捉细微的变化。

    我要尝试的是将红色更改为从1到更高的值并返回,而不是从0到0。 这可能是旧ePWM模块在将CMPA设置为0或PRD时遇到的类似问题,因为无法在PWM信号上生成0 % 和100 % 占空比。

    至于TI的支持,我怀疑您是否会得到响应

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

    Jens,您好!

    在线更改死区寄存器应该没有问题。 这是否仍是您希望我们尝试重现的持续问题?

    此致,

    克里斯

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

    您好,Kris,

    如果您可以尝试重现此问题,那将是非常好的,因为我想确保我没有配置任何错误。

    谢谢

    Jens

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

    当然,我正在努力将您的代码添加到示例中,并将向您提供结果。

    此致,
    克里斯