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.

[参考译文] MSPM0C1104:PWM 影子加载功能

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1480742/mspm0c1104-pwm-shadow-load-function

器件型号:MSPM0C1104

工具与软件:

如图表中所示、TIMA0具有影子函数、但 TIMG14和 TIMG8没有。 区别是什么?
我已经看到了 SDK 的例子: timx_timer_mode_pwm_edge_sleep_shadow,和占空比值被更新时, DL_TimerA_getPendingInterrupt(PWM_0_INST) 满足的情况 DL_TIMERA_IIDX_CC0_DN
如果我要使用 TIMG14或 TIMG8更新占空比值、是否也可以使用 DL_TimerG_getPendingInterrupt(PWM_0_INST) 和情况 DL_TIMERG_IIDX_CC0_DN? 如果我不能做到、有没有其他方法可以做到这一点?

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

    SDK 中的示例 timx_timer_mode_pwm_edge_sleep_shadow 的工作原理与此类似。 如果我想使用 TIMG14或 TIMG8持续更新占空比值、我该怎么办?

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

    您可以使用相同的代码。 如果没有影子寄存器、则存在一种竞争、这可能会导致在占空比更新的周期中出现多个比较匹配。 除非 CDACT=3 (切换)、否则这将(我认为)可能是不可见的。  

    当刚刚发生比较匹配时(如上所述)切换占空比(CCx 值)不是一个很好的开始策略。  

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

    尊敬的 Rei:

    SDK 中的示例 timx_timer_mode_pwm_edge_sleep_shadow 的工作方式与此类似。 [报价]

    方法仍然有效。 而当您想更新占空比时、其范围是不可靠的。

    例如、LOAD 值为1000、这是向下 递增计数模式:

    有时、您将 CC 值设置为500、表示50%的占空比。 您尝试将其更新为10、占空比为1%。

    但是、当您触发中断并执行更新 CC 值的代码时、计数器可能已经增加到15。 此时、您绝不会在此 PWM 周期中触发 CC 事件、因此 PWD 占空比将为100%或0%。

    刚刚发生比较匹配时切换占空比(CCX 值)(如上所述)并不是一个一开始就不好的策略。  [报价]

    这会起作用。  也是类似的情况、如果您将 CC 设置为990、即99%的占空比、则您将在计数器为990时触发中断。

    如果要将 CC 设置为10、即1%的占空比、并发现 当您触发中断并执行代码更新 CC 值时、计数器可能已经增加到15、即使将 PWM 占空比设置为0%或100%、也有丢失比较匹配的风险。

    ->图像 震颤、在向上计数模式下将999更改为1。

    因此、您应该为中断触发保留安全范围、

    ->与中断调用和更新 CC 值之前使用的 CPU 周期相关的错误。

    并需要 将计时器中断设置为最高中断优先级。

    B.R.

    SAL

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

    你好布鲁斯,萨尔,感谢你的详细解释。

    1. 现在我可以理解、影子寄存器的功能是为了避免出现这种情况:"如果您希望将 CC 设置为10、即1%的占空比、但计数器可能已经增加到15。"

    2. 因此、我将设置一个10%~90%的安全占空比范围、并且针对规格要求、我还将需要更新中断频率。 但是、我认为10Hz~150Hz 也是一个安全范围。

      所以我可以使用相同的代码,对于 TIMG14或 TIMG8, 如果情况是 DL_TIMERG_IIDX_CC0_DN,我将更新占空比和频率。 是这样吗?

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

    在手册中、我得到了一些有用的信息。 因此、对于不支持哪些影子寄存器的 TIMG、我会将向下计数模式设置为 TIMG.LOAD、并设置"写入 TIMx.CC 寄存器的值立即生效。" 至  TIMG.CC

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

    尊敬的 Reim:

    所以我可以使用相同的代码、对于 TIMG14或 TIMG8、 如果是、 DL_TIMERG_IIDX_CC0_DN我将同时更新占空比和频率。 这是正确的吗?

    是的、您可以。 只需要保留一个安全范围并使其成为最高中断优先级。

    [报价用户 id="644290" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1480742/mspm0c1104-pwm-shadow-load-function/5687355 #5687355"]因此、对于不支持影子寄存器的 TIMG、l 将向下计数模式设置为 TIMG.LOAD、并设置"写入 TIMx.CC 寄存器的值立即生效。" 至  TIMG.CC[/报价]

    正确。

    B.R.

    SAL