部件号: AM13E23019
主要问题是、MCPWM 中的事件触发器子模块是否提供与 STM32G4 中的重复计数器相同的功能。 例如、使用 STM32G4 中的重复计数器和预加载机制、可以为 CCRx 创建不同周期的影子加载点、例如在每个第 2-3 个计数器事件等处 我想知道 MCPWM 中的事件触发器子模块是否也可以实现同样的功能。 从它可以看出,它似乎是不可能的,因为事件的选择不包括重复计数器的功能: 
提前感谢您的支持!
Cevikalp
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 中的事件触发器子模块是否提供与 STM32G4 中的重复计数器相同的功能。 例如、使用 STM32G4 中的重复计数器和预加载机制、可以为 CCRx 创建不同周期的影子加载点、例如在每个第 2-3 个计数器事件等处 我想知道 MCPWM 中的事件触发器子模块是否也可以实现同样的功能。 从它可以看出,它似乎是不可能的,因为事件的选择不包括重复计数器的功能: 
提前感谢您的支持!
Cevikalp
您好 Cevikalp、
抱歉上周没有回复您。
评估是正确的—MCPWM 事件触发器子模块不提供与 STM32G4 重复计数器等效的功能来控制影子寄存器加载间隔。
事件触发器 (ET) 子模块确实包含通过实现的预分频机制 事件触发预分频寄存器 (ETPS) 、它可以在源事件[1][2]每第二次到第十五次发生后生成一个触发器。 这在表面上类似于 STM32G4 重复计数器的结构。
不过、该预分频功能由决定 严格限定为两个输出 :
大小 对影子寄存器加载没有影响 用于比较寄存器(MCPWM 中的 CCRx 等效项)。
计数器比较寄存器(,,)PWMx_CMPAPWMx_CMPBCMPC的影子寄存器加载CMPD由CMPCTL[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 在软件中的行为:
ETPS为以所需的间隔预分频中断(最多每 15 个事件预分频一次)[2] CTR = Zero或CTR = PRD事件中发生、但由于您只在预分频间隔写入了新值、因此有效更新速率受到控制 此处的关键权衡是 延迟和确定性 —这是否可接受取决于您的 PWM 开关频率以及控制环路更新速率的时序要求有多严格。
如果您可以分享有关应用的更多信息(例如电机控制阶段,交错转换器)、可能值得探索由 DMA 触发的寄存器写入是否可以为基于 ISR 的更新提供更确定性的替代方案。