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:HRPWM:注意到奇怪的行为

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/589760/tms320f28379d-hrpwm-noticed-odd-behaviour

器件型号:TMS320F28379D

您好!

我 在 F28379D 上尝试使用 HRPWM 时注意到了一些奇怪的东西。 下面显示了我正在使用的设置代码。 然后、我启动到一个无限循环、该循环会缓慢增大 CMPA:CMPAHR 寄存器。

奇数行为为:

如果 HRCNFG.AUTOCONV 位被置位并且 HRCNFG.HRLOAD = HR_CTR_PRD (01)、那么对 CMPAHR 的更改将无效。

如果 HRCNFG.AUTOCONV 位被置位并且 HRCNFG.HRLOAD = HR_CTR_ZERO (00)、那么一切都正常:我可以用0x0000到0xFF00的值来插入 CMPAHR、这会增加脉冲在一个 TBCLK 周期内的导通时间。

此外、如果 HRCNFG.AUTOCONV 位没有被置位、那么不管 HRCNFG.HRLOAD 是什么、一切都是正常的。 显然、在这种情况下没有缩放、因此我用0x0000到(HRMSTEP<8)的值来插入 CMPAHR、以实现与在一个 TBCLK 周期内增加的脉冲相同的效果。 HRMSTEP 在初始化期间通过调用 SFO 函数进行设置、在我的处理器上为59。

请注意,在我的设置中,我使用的是全局加载功能,因此,如果我理解正确,HRCNFG.HRLOAD 不应产生任何影响。 我已经将 CMPA:CMPAHR 的影子加载设置为在 TBCNT = TBPRD (GLDCTL = 0x83且 GLDCFG = 0x707)上发生。 但是、如果我将其更改为 TBCNT = 0 (GLDCTL = 0x81)、我观察到的行为与上面所述的完全一样。

此外:
正如参考手册中所述、HRCNFG 寄存器似乎不受 EALLOW 保护:我可以从 CCS 中的观察窗口中将其插入。

请注意、这对我来说实际上不是问题:我只需将 HRCNFG.HRLOAD 设置为0、看起来一切正常:只是对这里发生的情况以及手册中没有提到这种行为的原因感兴趣。

谢谢、

John Wilkes。

(二

下面是我的设置代码、所有其他寄存器保留为默认值:

EALLOW;

/*启用全局加载:每个计数器上的加载=周期事件*/
EPwm1Regs.GLDCTL.ALL = 0x83;

/*为 AQCSFRC、AQCTLB、AQCTLA、CMPB、CMPA 和 TBPRD 使用全局重新加载*
EPwm1Regs.GLDCFG.ALL = 0x707;
EDIS;

/* TBCTL:除/1时钟分频外的所有默认值(/2在 ePWM 之前完成*/
/*模块)并设置计数模式                                       */
EPwm1Regs.TBCTL.ALL = 0xC030;

/*仅输出 A - B 作为 HR 设置的一部分被设置为 A 的倒数*/
/*输出在零时变为高电平、 在 CMPA 时变为低电平;*/
EPwm1Regs.AQCTLA.ALL = 0x12;

/*周期500kHz = 199 */
EPwm1Regs.TBPRD = 199;

/*仅使用 CMPA -在应用程序中设置,但设置50%默认值*/
EPwm1Regs.CMPA.bit.CMPA = 99;
EPwm1Regs.CMPA.bit.CMPAHR =(1 << 8);  //初始化 HRPWM 扩展


/*高分辨率设置*/
EALLOW;
EPwm1Regs.HRCNFG.ALL = 0x0;
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_FEP;     // CMPA 下降沿上的 MEP 控制
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;     //比较寄存器控制 MEP
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_PRD; //这就是问题!!!
EPwm1Regs.HRCNFG.bit.SELOUTB = HR_INVERD_B;//从反相 A 输出生成 B 输出
EPwm1Regs.HRCNFG.bit.AUTOCONV = 1;         //启用自动转换逻辑
EDIS;

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

    我将查看您的帖子。 感谢您对该问题的出色调试。 今天的某个时候、我会尝试在器件上运行该器件、但可能是在本周晚些时候、我才有机会好好看看它。

    请注意、CCS 监视窗口会覆盖 EALLOW 保护。 您从该寄存器写入的任何内容都将在 EALLOW 被禁用的情况下成功。

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

    啊! 这解释了该位。 感谢您的回复、我想知道您是否能够再现我注意到的行为。

    谢谢、

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

    John、

    您是否有机会发布用于测试此文件的整个 C 文件?

    编辑:不用担心发布 C 文件。 我已复制并调查原因。


    此致、
    Kris

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

    John、

    我对全局加载配置的行进行了注释、但仍然看到同样的问题。 我正在确认这一点、但我认为这是因为 TBCTR = PRD 上的 HRLOAD 仅在时基计数器使用上数-下数模式时有效。 我将在确认后立即更新此帖子。

    此致、
    Kris

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

    您好、Kris、

    您设法重现此问题的好消息。 有关 TBCTR = PRD 的有趣理论、但是如果您关闭自动转换、它似乎可以正常工作。 我期待您的调查结果。

    谢谢、

    John。