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.

[参考译文] AM13E23019:用于 MCPWM 中 CMPx 的影子加载事件的事件触发子模块

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1632297/am13e23019-event-trigger-submodule-usage-for-shadow-load-event-for-cmpx-in-mcpwm

部件号: AM13E23019

主要问题是、MCPWM 中的事件触发器子模块是否提供与 STM32G4 中的重复计数器相同的功能。 例如、使用 STM32G4 中的重复计数器和预加载机制、可以为 CCRx 创建不同周期的影子加载点、例如在每个第 2-3 个计数器事件等处 我想知道 MCPWM 中的事件触发器子模块是否也可以实现同样的功能。 从它可以看出,它似乎是不可能的,因为事件的选择不包括重复计数器的功能:
image.png

提前感谢您的支持!
Cevikalp

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

    尊敬的 Cevikalp:

    我正在为您调查这个问题、并将在本周结束前提供答复。

    此致、

    Zackary Fleenor

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

    您好 Fleenor、

    有任何关于该主题的更新吗?

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

    您好 Cevikalp、

    抱歉上周没有回复您。

    评估是正确的—MCPWM 事件触发器子模块不提供与 STM32G4 重复计数器等效的功能来控制影子寄存器加载间隔。


    ET 子模块确实具有类似重复的行为

    事件触发器 (ET) 子模块确实包含通过实现的预分频机制 事件触发预分频寄存器 (ETPS) 、它可以在源事件[1][2]每第二次到第十五次发生后生成一个触发器。 这在表面上类似于 STM32G4 重复计数器的结构。

    不过、该预分频功能由决定 严格限定为两个输出

    • 中断请求生成
    • ADC 转换启动 (SOC) 触发条件

    大小 对影子寄存器加载没有影响 用于比较寄存器(MCPWM 中的 CCRx 等效项)。


    影子加载在 MCPWM 中的实际工作原理

    计数器比较寄存器(,,)PWMx_CMPAPWMx_CMPBCMPC的影子寄存器加载CMPDCMPCTL[PWMx_LOADAMODE]/CMPCTL[PWMx_LOADBMODE]寄存器位控制、并且仅限于三个固定硬件事件:

    负载模式 触发条件
    CTR = Zero 时基计数器达到 0x0000
    CTR = PRD 时基计数器达到 TBPRD
    CTR = Zero or PRD 以上任一项

    没有跳过加载周期的硬件机制 — 不能将影子加载配置为在每隔第 2、第 3 或第 4 个计数器事件发生一次、因为 STM32G4 重复计数器启用。


    全局加载模式呢?

    全局影子到活动加载控制寄存器 (GLDCTL) 允许同时在多个寄存器之间同步影子到活动传输、但它仍然将加载事件连接到相同的固定计数器事件(零,周期等)-其中也没有重复计数器机制。

    同样值得注意的是、MCPWM 影子寄存器有 单独的存储器映射地址 寄存器与活动寄存器、为您提供直接写入控制。 但是、对活动寄存器进行写入 已阻止 当寄存器配置为从影子寄存器加载时、您无法通过直接写入绕过硬件加载事件时序。


    解决方法:软件控制的影子更新

    由于硬件在本机不支持变量间隔影子加载、因此实用的权变措施是使用 ET 子模块的预分频中断 (例如,每 3 个计数器零事件触发一次)、然后 手动写入影子寄存器 只会在需要更新时才在 ISR 内运行。 这有效地复制了 STM32G4 在软件中的行为:

    1. 配置ETPS为以所需的间隔预分频中断(最多每 15 个事件预分频一次)[2]
    2. 在 ISR 中、将新的比较值写入影子寄存器地址
    3. 影子到活动传输仍会在下一个CTR = ZeroCTR = PRD事件中发生、但由于您只在预分频间隔写入了新值、因此有效更新速率受到控制

    此处的关键权衡是 延迟和确定性 —这是否可接受取决于您的 PWM 开关频率以及控制环路更新速率的时序要求有多严格。

    如果您可以分享有关应用的更多信息(例如电机控制阶段,交错转换器)、可能值得探索由 DMA 触发的寄存器写入是否可以为基于 ISR 的更新提供更确定性的替代方案。


    引文索引

    1. AM13x MCPWM Academy - TI Resource Explorer
    2. TI SPRUJF2 — 技术参考手册 (MCPWM/ePWM)
    3. TI SPRUJD3A — 技术参考手册(比较/影子寄存器)
    4. TI SPRADL7 - MCPWM 应用手册
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Fleenor、

    感谢您的详细答复。 令人遗憾的是、AM13 中不存在相同的功能、但至少我们可以在未来需要此类功能时想到一种权变措施。 谢谢!