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.

[参考译文] MSPM0G1507:如何减少 PWM 同步延迟时间?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1513639/mspm0g1507-how-can-pwm-synchronisation-delay-times-be-reduced

部件号:MSPM0G1507
Thread 中讨论的其他器件:SysConfigMSPM0G3507

工具/软件:

大家好!

我正在尝试同步 TIMA0 (C0) 和 TIMG7 (C0)。
PWM 输出立即开始后、它们将同步、但如果我更改 TIMG7 零事件的中断处理程序中的周期和占空比、则会发生相移。
如何缩短延迟时间?

我们假设这是因为下一个原因
周期是在由于生成零事件的延迟而改变周期和占空比时出现的。

【条件】

- TIMA0 和 TIMG7 向下计数。
-工作频率为 32MHz。
- PWM 周期逐渐从 100KHz 降至 20KHz。
- TIMA0 和 TIMG7 使用 TIMG6 进行同步以交叉触发。
-在 TIMG7 的“中断配置“中,选择“零事件“并在中断处理程序中设置下一个周期和占空比。

-从事件生成到开始处理的等待时间为 2~48µs。
中断处理程序中的处理时间约为 5µs。

-SysTick 和 ADC 在 SysConfig 中设置为低电平、TIMG7 设置为高电平、但没有变化。
- ADC 中断完全停止,但没有改变。
- 尝试使用加载事件和通道 0 捕获或比较递减零事件,而不是零事件,但没有变化。
-已在 SysConfig 中选中‘Enable Shadow Load'、但没有更改。
-更改了信道更新模式,但没有更改。

此致、

ITO

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

    尊敬的 LTO:

    您可以在此显示任何波形以供我参考吗?

    您使用的交叉触发方法(软件触发器)是什么?

    B.R.

    Sal

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

    尊敬的 Sal:

    感谢你的帮助。

    我已将数据发送到您的私人消息。

    此致、

    ITO

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

    尊敬的 Ito:

    感谢您对该信息的澄清。

    我找不到 SysConfig 文件、因此我不确定如何配置计时器。 虽然我看到已选择 TIMG7 和 TIMA0、但我假设您正在使用影子 CC 和影子加载来更新 PMW 周期和占空比。  

    -那么,你使用的是什么触发方法与影子 CC 和加载? 您是否正在使用“热风“事件?

    然后、当您要同步 TIMA0 和 TIMG7 时、我看到您使用 TIMG6 进行交叉触发。

    - 为什么需要 TIMG6、直接使用 TIMG7 触发 TIMA0 看起来更简单。  

    - BTW、TIMA0 和 TIMG7 是否一直都有相同的周期?

    -从事件生成到开始处理的等待时间为 2~48µs。
    中断处理程序中的处理时间约为 5µs。

    事件生成的等待时间是多少? 您是指中断进入延迟吗?

    2 μ s 是可以的、而 48 μ s 看起来不合理。

    此外、红线表示什么?

    我不知道您如何判断延迟时间。 您是否使用 GPIO 在 TIMG7 中断中进行切换、然后您会发现中断中的时序更新比预期晚? ->如果我有误解、请纠正我。

    那么您在哪里更新 TIMA0 占空比和周期呢? 也处于 TIMG7 中断中、但由于用于计算占空比的处理任务、会有一个延迟?

    B.R.

    Sal  

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

    尊敬的 Sal:

    感谢你的帮助。

    我用私人消息向您发送了一封 SysConfig 屏幕截图。
    问题将与客户确认。

    此致、

    ITO

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

    尊敬的 Sal:

    感谢您的答复。

    -那么、您在 Shadow CC 和 Load 中使用什么触发方法? 您是否正在使用 zeor 事件?

    是的

    - 为什么需要 TIMG6、直接使用 TIMG7 触发 TIMA0 看起来更简单。  [/报价]

    这是因为 Clostrigger 示例代码使用 PWM 输出以外的计时器进行同步。

    -顺便说一下、TIMA0 和 TIMG7 始终具有相同的周期吗?

    是的

    此外、它代表的红线是什么?

    我们在中断处理程序内开始处理时将 PA31 输出到 Hi、在处理结束时将 PA31 输出到 Lo、并使用示波器对其进行监控。

    我无法确定您如何判断延迟时间。 您是否使用 GPIO 在 TIMG7 中断中进行切换、然后您会发现中断中的时序更新明显晚于预期?

    不执行处理来切换 TIMG7 中断。

    那么您在哪里更新 TIMA0 占空比和周期呢? [/报价]

    在 TIMG7 中断处理程序内进行更新。

    也在 TIMG7 中断中、但由于计算占空比的处理任务而有延迟?

    占空比计算在主进程中执行、并在中断处理程序中进行设置。

    我把文件寄给了你的私人媒体。

    此致、

    ITO

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

    尊敬的 Sal:

    您的进展如何?
    请给我一些建议。

    此致、

    ITO

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

    尊敬的 Sal:

    客户测试取得了进展。

    我会通过私人消息向您发送示例代码。

    我们通过反映我们公司根据示例源代码更改的设置来调查延迟的原因。

    示例:timx_timer_mode_pwm_edge_sleep_shadow_LP_MSPM0G3507_nortos_ticlang
    ・将 PA3 添加为 GPIO。
    ・μ s 通过打开/关闭端口输出测得的时间。

    μ・反映了 SysConfig 上的示例工程和客户工程之间的差异
    并将它们应用到样本、但采样没有延迟。
    •在客户项目中、延迟时间发生了延迟和变化。
    •接下来、我们重点介绍了采样和客户项目之间中断处理的差异、
    并向样本中添加了 SysTick、但结果保持不变。
    •由于 ADC 正在由中断处理、因此我们停止了 ADC、但结果保持不变。
    •除了 SysTick、ADC 和计时器外、不使用中断。

    ・预防措施是、我们通过轮询检查了 PWM 零事件发生标志、发现零事件发生延迟了大约 1.5 μ s。
    ・在示例工程中、当使用中断时、中断处理程序处理过程在不到 1us 内开始、因此我们希望在可能的情况下使用中断。

    【问题】
    请告诉我们、是否有任何设置会导致归零事件发生和中断处理开始之间的时间延迟。 我们将更改这些设置。

    此致、

    ITO

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

    尊敬的 Ito:

    很抱歉晚回复。 我已检查您的消息并 对此场景进行了一些测试。 当动态更新周期和占空比时、我确实会看到 TIMA0 和 TIMG7 之间的相位偏差。

    我检查这仅与周期修改行为相关、占空比不影响相位。

    我认为影子加载寄存器的加载行为可能会导致一些时序偏差、因此会发生相移。 并且软件触发器首先仅同步计时器实例、启动后、不会生成交叉触发信号、除非用户将其添加到应用代码中并定期调用 API。

      【在对周期进行多次修改后,会出现相移】

    我建议使用 TIMG7 直接触发 TIMA0、并将 EVEVNT 触发模式设置为零、以便它每个 PWM 周期同步一次。

    有一点是、它需要将加载设置为中断资源、因为用户设置了影子 CC 和影子加载函数(由零事件触发)、可能会出现寄存器争用、并丢失一些周期更新【如果将零设置为中断源,我发现有此问题】。

    ->没有深入挖掘, 只是一些粗略的想法。

    附加了测试项目作为参考。 我发现 SysConfig 工具生成的代码有问题的错误、因此我通过排除生成的源文件来手动修复示例工程中的错误。

    Cross Trigger_Test_G3507.ZIP

    如果您还有其他问题、请告诉我、谢谢。

    B.R.

    Sal

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

    尊敬的 Sal:

    感谢你的帮助。

    此问题已解决。

    此致、

    ITO