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.

[参考译文] TMS320F28386D:SoC 计数器递增两次

Guru**** 2457760 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1247248/tms320f28386d-soc-counter-incremented-twice

器件型号:TMS320F28386D

我有两个 ePWM 模块、EPWM1是主器件、在 CTR=ZERO 时对 EPWM4生成一个 SyncOut 脉冲、其相位为零、因此它们彼此同相。 EPWM4的初始 SOCA 和 SOCB 计数为3、SOC PRD 为4、因此当达到4时、它复位为0。 两个 TBCTR 最初都设置为0。

现在、在初始化模块并从启用 TBCLKSYNC 开始之后、SOCB 计数(在 CTR=ZERO 时触发)直接从3变为1、并在第一个周期后跳过0。 同步事件同时发生、因此我假设 SOC 计数器在 TBCTR 达到0时递增一次、在 SYNCIN 事件发生时递增两次。 因为当我在 EPWM4中禁用 SYNCIN 时、不会发生这种情况。

另请参阅随附的测量现象的图。 您能想象一下、怎样解决这个问题?

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

    周老师、您好!

    这仅在第一个 PWM 周期发生还是重复发生? 如果它仅在第一个周期发生、则将 TBCTR 初始化为1而不是0是否可解决此问题?

    谢谢!

    卢克

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

    Luke、您好!

    感谢您的答复。 它仅在第一个 PWM 周期发生。 如果我将生成同步脉冲的 ePWM 模块的初始 TBCTR 设置为1、则不会发生、这是可以理解的、因为它在另一个模块之前达到零。 但这并不是真正需要的初始化。 对我来说、不清楚为什么会发生、因为所有计数器都是同步启动的、并且只在第一个周期之后发生。

    此致、

    周老师

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

    周老师、您好!

    我知道这不是所需的初始化、我更希望只是通过测试将计数器初始化为1而不是0来获取有关系统中发生了什么的更多信息。

    奇怪的是、跳过只发生在 SOCBCNT 上、而不发生在 SOCACNT 上。  SOCA 事件计数器和 SOCB 事件计数器的配置是否有差异? 这可能有助于我们确定跳过的根本原因。

    谢谢!

    卢克

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

    如果 SOCA 和 SOCB 配置相同、我很乐意查看您的完整 ePWM 配置代码来确定可能存在的问题。

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

    Luke、您好!

    抱歉、我没有提到 SOCA 事件在 CTR=PRD 上、SOCB 事件在 CTR=ZERO 上。 对于 SOCA 事件、一切都正常运行。

    此致、

    周老师

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

    你好、Steven、理解。 因此、由于同步事件不会引起 CTR=TBPRD 事件、因此 SOCA 上不会发生该问题也是合理的。

    这不会揭示此问题的根本原因、但另一种解决方法是将 SOCBCNT 初始化为2而不是3。

    您能否共享 EPWM 初始化代码或.syscfg 文件以帮助确定导致此问题的根本原因? 这可能也是由于您写入特定寄存器的顺序、我也会对这些寄存器的不同组合进行实验。

    谢谢!

    卢克

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

    Luke、您好!

    是的、这也是一种权变措施、但也不可取。

    附加的您可以找到一个虚拟项目、借助它、我还可以重构此错误。 您还可以在文件夹中找到日志记录的图片。

    如果您能对此进行测试并就此问题向我提供反馈、我将不胜感激。

    谢谢。

    周老师

    e2e.ti.com/.../SOC_5F00_Increment_5F00_Dummy_5F00_Project.zip

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

    周老师、您好!

    我认为该问题是 EPWM1 TBCTR=0时和 SYNC 事件达到 EPWM4 SYNCIN 之间的延迟导致的。 在第一个周期、EPWM1和 EPWM4将完全同步、下次两个模块的 TBCTR=0将同时发生。

    当同步事件到达 EPWM4时、TBCTR 对于两个模块将已经通过0、且值至少为1 (我们先前通过将 EPWM4 TBCTR 初始化为1的测试已经证明了这一点)。 当同步事件对 EPWM4生效时、其计数器会从1下降到0、并略微与 EPWM1不同步。 SOCB 计数器也将意外第二次递增。 这仅在第一个周期发生、因为 EPWM4现在落后于 EPWM1、因此当下一个同步事件对 EPWM4 SYNCIN 生效时、EPWM1 TBCTR 将为1、EPWM4 TBCTR 将为0、因此 EPWM4 SOCB 计数器仅按预期递增一次。

    为了解决此问题、您可以将 EPWM4 TBPHS 设置为1、以便它与 EPWM1完美同步、并且同步事件绝不会将 EPWM4的 TBCTR 从1复位为0。

    但在此之前、是否可以放大 EPWM1和 EPWM4波形、看看它们是否略微不同步? 这将证明 EPWM1 TBCTR 早于 EPWM4 TBCTR、TBPHS 值为1对于完美地同步这两个模块是必要的。

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

    Luke、您好!

    感谢您的努力和回答。 我在上面绘制了两个 TBCTR 之间的差异、我们可以看到在第一个周期中、EPWM4 TBCTR 比第一次同步事件之后提前更多。 因此、您的这一结论对我很有道理。 之所以存在平均差值、是因为在 EPWM4计数器之前读取 EPWM1、因此 EPWM4计数器会稍微进一步。

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

    嘿、Steven、

    很高兴您看到一些支持这一点的结果。 如果您对将 TBPHS 配置为1作为 该问题的解决方案感到满意、请告诉我。

    谢谢!

    卢克