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.

[参考译文] TMS320F280039C:F280039C:尽管 CMPCTL 设置为冻结(CLA 写入+ HRPWM、多个 ePWM 模块)、但 CMPA/CMPB 仍在更新

Guru**** 2782625 points

Other Parts Discussed in Thread: TMS320F280039C, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1619165/tms320f280039c-f280039c-cmpa-cmpb-still-updating-although-cmpctl-is-set-to-freeze-cla-writes-hrpwm-multiple-epwm-modules

器件型号: TMS320F280039C
主题: C2000WARE 中讨论的其他器件

问题描述

我正在使用  TMS320F280039C 微控制器 多个 ePWM 模块 配置用于 HRPWM Operation.My 目标是首先更新影子寄存器中的比较值、然后加载所有值 同步 对于活动寄存器、至少在每个 ePWM 内、并且理想情况下跨多个 ePWM 模块。为此、我尝试临时冻结影子‑μ s 到‑μ s 活动传输:

编程步骤

  1. 冻结影子加载 EPwm1Regs.CMPCTL.all = 0x0F;
  2. CLA 更新 CMPA/CMPB + HRPWM 值  EPwm1Regs.CMPA.all = ((long)cmpa) << 16 | cmpab_hr;
  3. Re‑启用正常影子加载 EPwm1Regs.CMPCTL.all = 0x0A;

预期行为

一旦EPwm1Regs.CMPCTL.all = 0x0F; 写入、占空比应保持不变、因为应该会有新的比较值 不会 从影子寄存器传输到活动寄存器。

观察到的行为

即使“Load Mode“设置为  冻结 、比较值 CMPA 和 CMPB 仍然变化 占空比也是如此。

问题

  1. 是否必须配置任何其他位或寄存器  完全冻结  影子‑到‑主动传输?
    特别是结合使用 HRPWM 和 CLA 执行更新?
  2. 确保所有比较值真正同步加载的建议配置是什么?
    –在单个 ePWM 模块内、和
    –跨多个 ePWM 模块?
    –确保即使 PWM 模块之间存在相移、影子到活动加载也会在 PRD 或零处发生
  3. 是否需要额外的 HRPWM‑特定设置才能同时冻结和加载 CMPAHR/CMPBHR?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Thorben、

    如果您只想仅更新 CMPAHR/CMPBHR 而不更新 TBPRDHR、可以使用 F28003x 器件中 4 类 ePWM 模块的全局加载支持功能来更清晰地完成此更新。  有关 TRM 的计数器比较子模块、请参阅第 20.4.7 节“全局加载“和第 20.5.3 节“操作亮点“。

    您可以更新所有影子加载寄存器、然后使用 EPWM_setGlobalLoadOneShotLatch (myEPWM1_BASE) 或 HRPWM_setGlobalLoadOneShotLatch (myEPWM1_BASE) 启用锁存器; 以指示所有影子已更新并在发生下一个更新事件(零/周期/两者)时将影子转换为活动状态。

    您可以参考 C2000WARE 的示例 14、如下所示以查看用例和所需配置:

    如有任何问题、请告诉我。

    如果您可以、我是否可以知道这是什么应用/拓扑? 基于此、我可以为您提供优化的建议。

    此致、

    Sumit

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

    非常感谢您的 快速响应。 我还‑几个有关此主题的后续问题:

    1. “冻结“机制究竟是如何运作的?
      当加载模式设置为冻结时、会在内部发生什么情况CMPA.allCMPB.all?我继续写入和寄存器?
      这些写入是会进入影子寄存器、还是会直接影响活动寄存器或 HRPWM 逻辑?

    2. 关于第 20.4.7.2 节中的注释:
      文档建议不要将 1 μ s 轻载‑与高‑分辨率模式结合使用
      此‑是否也适用于您建议的解决方案、或者该限制是否仅适用于特定的亚 μ m 案例?

    3. 确保影子‑到‑活动传输仅在 CTR = PRD 或 CTR = 0 时发生:
      在我的应用程序中,从影子寄存器到活动寄存器的传输必须完全CTR = PRD或进行CTR = Zero
      在使用您所述的机制(尤其是与 HRPWM 结合使用时)时、如何保证这一要求?

    总之、我的应用程序需要以下内容:

    • 必须启用‑μ m 分辨率的高 PWM 并使其完全正常工作
    • 影子‑到‑μ s 活动传输必须发生 系统 CTR = PRDAT 或 CTR = Zero
    • 我需要能够CMPA.allCMPB.all按顺序写入一组一致的和值(包括 HRPWM 位)、
      但必须同时将它们加载到活动寄存器中 、  
      系统 CTR = PRDAT 或 CTR = Zero

    您能否提供一些指导、说明如何使用建议的配置正确实现这一点?
    很棒的酒店

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

    Thorben、

    1. 在影子加载中、 当 LOADAMODE/LOADBMODE 设置为冻结时、它将停止从影子寄存器到活动寄存器的所有传输、直到您选择其他模式。 由于它是影子加载模式、CMPA 寄存器设置为影子寄存器、因此您仍然可以看到此寄存器正在写入表达式窗口、但不会将该值传输到后端活动寄存器、该寄存器在表达式窗口中不可见。  

    激活冻结模式后、实际的 PWM 波形 应该保留其之前的占空比值。 您是否观察到范围中的这种占空比变化? 因为  

    2.此建议仅适用于同时使用 CMPAHR/CMPBHR 更新 TBPRDHR 的情况。 对于谐振转换器应用、这是一种特定情况、在此类应用中、周期和占空比都需要每次 ISR 更新。 在此之前、它可能会导致 1~2 TBCLK 抖动。 但是、如果您仅使用 CMPAHR/CMPBHR 执行值班更新、则可以使用此功能。

    3.由于您使用的是 HR 模式,因此您需要在“加载 CTR =零或 CTR = PRD“中选择加载模式。 在我解释的机制中、锁存器直到您使用上面指定的 API 调用一次性锁存器后才会启用。 即使启用锁存、它也只会从影子寄存器传输到加载模式指定的活动寄存 器(即“加载到 CTR =零或<xmt-block1> CTR</xmt-block> = PRD“)。 CTR。 这只是为了确保在该影子到活动传输发生之前完成对影子寄存器的写入。 这一点非常有用、尤其是在需要更新多个 ePWM 的情况下、因为如果使用冻结机制、它的静态顺序过程与所有传输都在主 ePWM 锁存器启用后的同一实例中发生的单次触发之间的关系。 您可以参考我指定的示例。

    请告诉我这是否合理。  

    此致、

    Sumit

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

    Hallo Sumit,

    切换到 1。 您描述的是我对 TRM 的期望、但我观察到范围正好相反。 即使我将影子负载配置为冻结、我也测量了 GPIO 引脚上的占空比并且占空比也会发生变化。 似乎更糟糕的是、在 冻结模式下、值直接写入有效寄存器、而不是写入影子寄存器。 因此、从我在示波器上看到的情况来看、即使在 CTR  =零或 CTR = PRD 之间、新值的加载也似乎发生了。

    感谢 2 中的说明。 和 3. 虽然我会尝试这些方法、但我仍然不知道、为什么这种冻结机制不起作用。

    此致

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

    Thorben、

    1 时、我尝试同时使用 CPU 并在表达式窗口中手动写入这些 FREEZE 位、我看到示波器的占空比没有变化。 当我恢复此设置时、我能够看到新的关税已更新。 您是否在 寄存器 窗口中看到了相同的内容? 此外、使用 CLA 编写时、您是否会看到以下寄存器更新了?

    2/3 感谢您试用此功能、如果有任何问题、请告诉我。

    此致、

    Sumit

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

    在第一步中、LOADxMODE 寄存器设置为 0b11(通过设置 CMPTRL = 0x000F)、从而产生以下一组寄存器:


    在这种情况下、如果我立即更新 CMP 寄存器 (CMPA/CMPB)、占空比 会发生变化、并且寄存器会按如下方式变化:

    如果 I、在下一步中清除影子寄存器、则 CMPCTL 会按如下方式更改、但这 对占空比没有明显影响。  

      (这同样适用于 0x0005 而非 0x000A)

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

    我看到、当您更新 CMPA/B 寄存器时、 SHDWBFULL/SHDWBFULL 标志/位将状态变为高电平。 对我来说、它显示为低电平、表示 CMPA/B 寄存器未满、可以写入。 似乎发生了异常的 CMPA/B 写入操作。

    我建议您使用 CPU 或直接手动写入寄存器而不是使用 CLA 来尝试这一相同的操作、以确定 CLA 写入是否异常。

    此致、

    Sumit

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

    我们尝试了所有方法:通过设置寄存器

    -表达式视图中的寄存器

    -在寄存器视图中注册

    -通过 CPU

    -通过 CLA

    所有这些都导致了相同的行为(如上所述)。

      使用此冻结功能是否有其他外围设备设置的任何副作用或任何限制?  

    此致、  

    Thorben

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

    奇怪! 由于其他外设、我认为不会产生副作用。 我看不出冻结会这么做。

    用户可以交叉检查是否正确地将 ePWM 配置为影子加载模式或立即加载模式。 寄存器说明中的注意:冻结在立即模式下无效、并且仅 在影子加载模式下有效。

    您还可以使用 C2000ware 中的任何 ePWM/HRPWM 示例对这些发现进行交叉验证。 例如、ePWM 示例 13 会测试此功能并将其传回您的代码以查看导致此功能出现的原因。

    同时、您可以尝试一次性全局加载机制、以查看它是否起作用。

    此致、

    Sumit