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.

[参考译文] TMS320F28388D:是否可以在一个 PWM 周期内重新加载 PWM 输出两次。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/986198/tms320f28388d-is-it-possible-to-reload-pwm-output-twice-during-one-pwm-period

器件型号:TMS320F28388D

您好!

 

我将 F28388D 用于我们的项目。

是否可以在一个 PWM 周期内使用写入 CMPA 的两个新值重新加载 PWM 输出两次。

遗憾的是、我尝试实现这一点、结果显示 PWM 输出在一个 PWM 周期内只重新加载一次。

由于我的计数模式被配置为递增-递减、 一个 PWM 周期意味着:一个 PWM 周期= 2 x TBPRD×TTBCLK

以下是我的实验环境:

-向上/向下计数模式

{EPwm1Regs.TBCTL.bit.CTRMODE = 2U;}

-启用 PWM 中断事件:时基计数器等于零或周期(TBCTR= 0x00或 TBCTR = TBPRD)。

{EPwm1Regs.ETSEL.bit.INTSEL      = 3U;}

-来自影子选择模式的有源计数器比较 A (CMPA)加载: 在 CTR = 0或 CTR = PRD 时

 {EPwm1Regs.CMPCTL.bit.LOADAMODE =2U;}

-将占空比设置为 CMPA,它在递增计数期间的作用是0.5*周期,在 PWM 中断递减计数期间的作用是0.1*周期

{status = EPwm1Regs.TBSTS.bit.CTRDIR;

             如果(1u=status)

             {m_set = 0.1f;}

             如果(0U=STATUS)则为其他值

             {mu = 0.5F;}

             否则{}

请查找随附的 PWM 波形和具有两次重新加载 PWM 的仿真结果以进行比较。

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

    是的、可以在每个 PWM 周期中加载两次 CMPA (从零到 PRD 到零)。

    但您必须在零事件之前写入第一个值、然后在零事件和 PRD 事件之间写入第二个值。  

    NIMA

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

    您好!

    感谢你的答复。

    根据我的理解,它是通过以下 C 代码实现的:“写入零事件之前的第一个值,然后写入零事件和 PRD 事件之间的第二个值”。
    在时基计数器的计时等于零或周期生成的 PWM 中断例程中、以下 C 代码正在运行。
    使用此 C 源,第一个零之前的值应为0.5*周期,第二个介于零和 PRD 之间的值应为0.1*周期。
    但是,从 PWM 波形可以看出,只有0.5*个周期被执行。

    STATUS = EPwm1Regs.TBSTS.bit.CTRDIR;

    如果(1u=status)

    {m_set = 0.1*句点;}

    如果(0U=STATUS)则为其他值

    {mu = 0.5*周期;}

    否则{}


    这是相关的寄存器配置。

    -启用高分辨率死区、占空比和相位控制


    -向上/向下计数模式
    {EPwm1Regs.TBCTL.bit.CTRMODE = 2U;}


    -启用 PWM 中断事件:时基计数器等于零或周期(TBCTR= 0x00或 TBCTR = TBPRD)。
    {EPwm1Regs.ETSEL.bit.INTSEL = 3U;}


    -来自影子选择模式的有源计数器比较 A (CMPA)加载:在 CTR = 0或 CTR = PRD 时
    {EPwm1Regs.CMPCTL.bit.LOADAMODE =2U;}

    我希望就此问题提出任何建议。

    此致、

    文京

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

    您的 CMPA 是否处于影子加载模式?

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

    您能否在代码中仔细检查上述问题?

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

    你好、Nima

    我是 温京的同事。

    我代表她回答。

    EPwm1Regs.TBCTL.bit.PRDLD = 0;

    0:周期寄存器(TBPRD)从其影子寄存器加载
    当时基计数器 TBCTR 等于零和/或同步时
    由 TBCTL2[PRDLDSYNC]位确定的事件。
    对 TBPRD 寄存器的写/读操作将访问影子寄存器

    EPwm1Regs.TBCTL2.bit.PRDLDSYNC=0;

    PRDLDSYNC
    影子到活动周期寄存器在 SYNC 事件上加载
    00:TBPRD 的影子到活动加载仅在 TBCTR = 0时发生
    (与传统相同)。
    01:当 TBCTR = 0时、TBPRD 的影子到活动加载都会发生
    以及同步发生的时间。

    您能告诉我们  PRDLDSYNC 上应该有什么值 吗?

    此致、

    Hidehiko

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

    00和01均适用于 PRDLDSYNC。

    PRDLD=0也是正确的。

    您的预发布版本仅加载到 TBCTR=0上... 因此、您不能有两个更新。 您可以有两个 CMPA/B 更新...

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

    > 00和01均适用于 PRDLDSYNC

    负载条件

    只有 当 TBCTR = 0时、PRDLDSYNC=00

    当  TBCTR = 0 和 SYNC 发生时、PRDLDSYNC=01。

    当   接收到 SYNC 时、PRDLDSYNC=10 b。

    PRDLDSYNC=01  

    我们应该在零事件之前写入第一个值、
    然后是零和 PRD 事件之间的第二个值。

    在这种情况下,占空比在载波周期内更新两次(计数器0 ->顶部-> 0之间)。

    此致、

    Hidehiko

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

    同样、CMPA/B 的占空比值可在一个 PWM 周期中改变两次。 不是周期。 周期只能在 TCBTR=0时改变。 那么、每个 PWM 周期一次。

    NIMA

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

    你好、Nima

    很抱歉耽误你的反馈。

    CMPA 处于影子加载模式。

    我原来的问题是“在一个 PWM 周期中 CMPA/B 的占空比值可以改变两次。

    现在、我已经确认它工作正常。

    我意识到:
    如果通过 EPwm1Regs.HRPCTL.bit.HRPE = 1U 启用高分辨率周期功能;  
    在 TBCTR=0时、占空比值只能被载入一次。
    如果高分辨率周期被 Epwm1Regs.HRPCTL.bit.HRPE 禁用= 0U;  
    该占空比值可以加载两次。

    这是否意味着如果在 PWM 周期中使用两次占空比更新、则必须禁用 HR 周期功能。

    此致、

    文京  

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

    精确地。 如果使用 HRPWM 模式、则每个 PWM 周期只能更新一次占空比。 您在非 HR 模式下的第二个阴影现在由 HR 模式内部使用、因此您无法将其用于应用。

    请单击绿色的已验证答案按钮。

    NIMA

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

    你好、Nima、


    感谢您的回答。
    “使用 HRPWM 模式”是否意味着 HR 周期控制已启用?
    如果是、遵守我的理解是否正确?


    将寄存器配置为:
    Epwm1Regs.HRPCTL.bit.HRPE = 1U;/** HR 周期控制被启用**/
    EPwm1Regs.HRCNFG.bit.HRLOAD = 2U;/** CMPAHR 影子值在 CTR = 0或 CTR = PRD 上加载**/
    但结果是 CMPA 影子值仅在 CTR=ZERO 时加载到活动寄存器中。

    请看一下其他问题吗?

    1.启用 HR 周期控制并使用 TRREM 时、
    当 TBPRHR = 0时、HR 相位控制工作正常、
    当 TBPRHR!= 0时、HR Phase 控件出现抖动、TBPRHR 值似乎越高、抖动越大。
    您能告诉我原因吗?

    2、如果禁用 HR 周期控制、HR 占空比控制(CMPAHR)是否不起作用?

    此致、

    文京

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="475330" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/986198/tms320f28388d-is-it-possible-to-reload-pwm-output-twice-during-one-pwm-period/3651130 #3651130"]但结果是 CMPA 影子值仅在 CTR=ZERO [/QUERP]时加载到活动寄存器中

    正确! CTR=PRD 被保留用于内部运行。

    使用 TBPHSHR 时、需要确保不要在每个 PWM 周期同步。

    它应该在 HRPRD 被禁用时工作。 实际上、如果不需要高分辨率周期、建议禁用它并仅使用小时占空比。