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.

[参考译文] TMS320F280039-Q1:并非所有影子寄存器都可能同时加载到活动寄存器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1517587/tms320f280039-q1-is-it-possible-that-not-all-shadow-register-load-to-active-register-at-the-same-time

器件型号:TMS320F280039-Q1
主题:TIDM-02013中讨论的其他器件

工具/软件:

尊敬的专家:

我向我的客户询问这个问题。

在变频控制中使用 DSP。 它们在 CMPA、CMPB……中启用一次性全局加载模式。

它们使用以下配置来生成全局加载事件

但 在某些情况下、并非所有影子寄存器都会同时加载到活动寄存器中。 例如、 在 T1期间、ADC ISR 将计算并更新 CMPA 和 CMPB 的值、在 T1结束时、将启用一次性加载;由于 EPWM 频率接近 ADC ISR 频率、因此下一个 ADC ISR 将发生  、在 A 点、计算尚未完成、也许 CMPA 的值在 T2中更新、但 CMPB 的值仍保持在 T1。 但在 A 点、这将发生全局加载事件、这是客户预期不会发生的。

1.这种情况可能会发生吗?

2.如何避免这种情况? 我注意到 TIDM-02013、我们似乎不使用全局加载模式、并且在 ISR 中更新了该寄存器的值? 如果我们仍然希望使用一次性全局加载、还有没有其他方法可以避免这种情况? 还是其他任何建议的方法来实现客户在变频控制中的预期功能?

BRS

Shuqing

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

    您好:

    TIDM-02013使用两种 ISR 方法、它们通过这两种方法更新 ISR1中的 PWM 寄存器、并计算 CMPA、TBPRD... 被映射到 ISR2。  

    在您的情况下、您在一个 ISR 中执行所有操作、因此需要使用全局捕捉模式。 在 TBCTR 归零事件上会发生一次性全局加载。 您能告诉我波形1和波形2代表什么、以便我能提供更多详细信息吗?

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

    您好:

    在所示的配置中、在影子寄存器值传输到活动寄存器之前、可能会出现覆盖影子寄存器值的问题、这会导致不正确的调制。

    我建议在 CMPCTL 寄存器中使用位域 SHDWAFULL (Counter-Compare A (CMPA)影子寄存器已满状态标志)来检查是否发生了影子到活动传输。  

    0:CMPA 影子寄存器尚未满

    1: 指示 CMPA 影子寄存器已满、CPU 写入将覆盖当前影子值

    如果您不想覆盖影子寄存器、可以在 ISR 中设置一个条件、根据所需标志的状态写入值。  

    请参阅 TRM: https://www.ti.com/lit/ug/spruiw9c/spruiw9c.pdf、 第2357页。 希望这有所帮助。

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

    尊敬的 Stevan:

    如何使用 ISR 和  SHDWAFULL 解决这个问题?

    BRS

    Shuqing

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

    您可以在 ISR 中编写代码、在其中检查  SHDWAFULL Bitifield 的状态并根据 if-else 条件执行一次性全局加载。

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

    尊敬的 Stevan:

    我不确定我是否有正确的理解。  

    在 ISR 开始时、我  首先检查 SHDWAFULL、如果它设置为这意味着没有完成最后一次一次性全局加载、那么我需要禁用一次性全局加载? 但我已经在最后一个 ISR 中启用了单次触发、因此如何禁用加载。

    BRS

    Shuqing

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

    您好:

    是的、您可以像这样做

    If (SHDWAFULL = 0)

    //执行一次性全局加载、否则不执行

    此外、如果您想避免此问题的权变措施、可以将4类 ePWM 切换到 5类 EPWM 并使用 XCMP 寄存器。 F28003x 没有5类 ePWM 功能、因此您需要使用 F28P65x 频率。