工具/软件:
我在捕获比较模式下使用计时器 A 来生成死区为 2us 的互补 PWM。
我附上了 示例代码;我编写了相同的示例代码。 当我快速对 MCU 进行下电上电时、我会看到 PWM_L 存在异常延迟、如图所示。

我尝试了多种解决方案、例如同时启用 PWM_H 和 PWM_L。 反转 PWM_H 和 PWM_L 的计数、但问题仍然存在。
任何帮助指出问题所在以及如何解决问题的建议都是非常感谢的。
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.
工具/软件:
我在捕获比较模式下使用计时器 A 来生成死区为 2us 的互补 PWM。
我附上了 示例代码;我编写了相同的示例代码。 当我快速对 MCU 进行下电上电时、我会看到 PWM_L 存在异常延迟、如图所示。

我尝试了多种解决方案、例如同时启用 PWM_H 和 PWM_L。 反转 PWM_H 和 PWM_L 的计数、但问题仍然存在。
任何帮助指出问题所在以及如何解决问题的建议都是非常感谢的。
尊敬的 Chandana:
Bruce 对您的代码提供了一些很好的反馈。
ADC10DTC1 = 0x04设置 4 次转换。 如果只需要一次转换、则应使用 CONSEQ_0。 如果您需要任何进一步的帮助、请进行必要的更改并回复。
此致、
Owen
你好欧文和布鲁斯
感谢您的宝贵反馈。
1.是的,变量 gBusVoltage 需要为 4 的大小,这是一个监督错误,当我在发布到论坛之前调整 了一些代码掩蔽敏感数据,这删除了 gBusVoltage 后的变量,并给人的印象是 ADC 会覆盖后续变量。 所以,这从来都不是问题。
2.就 ADC 采样而言、如果我们错过了几次 ADC 转换、并且 ADC 数据对应用不是很重要、那么我仍然会修复转换触发器。
2.根据 Bruce 给出的第二个建议,我确实认为 ISR 峰值可能会延迟/执行时间更长,这就是 PWM_L 也延迟的原因。 我尝试 同时启用两个 PWM。 达到峰值/谷值。 但这仍然没有解决问题、而是只是使 PWM_L 超前或滞后 PWM_H 的第一个脉冲->仍然导致第一个脉冲重叠。
3.我知道 ISR 应该很小、但我确实希望在这些 ISR 内部运行一些关键功能。 我还注意到、即使 ISR 中有很小的代码、或者即使我增加 PWM 周期、为了确保 ISR 不会溢出、问题仍然发生。
4.需要注意的另一点是,这个问题并不总是发生->大多数情况下的脉冲是正确的。 在 MCU 快速下电上电期间、我一次只能看到 PWM_L 的第一个脉冲延迟并与 PWM_H 重叠
5.我试图弄清楚,如果有一种方法在 TACCR1 和 TACCR2 之间进行同步,以确保它们始终是互补的??
尊敬的 Chandana:
感谢您的澄清。 我有几个建议。 您遇到的随机延迟很可能是由计时器初始化和时钟不稳定造成的。
TA1CTL = TASSEL_2 + MC_0 + TAIE; // SMCLK source, stopped modeTA1CTL |= MC_3; // Start in Up/Down mode如果这些建议中有任何一项阻止了偶尔出现的问题、请告诉我。
此致、
Owen
我认为你在战斗的是 OUTMOD 的“切换“部分,所以它使高峰 ISR 赢还是输了比赛有很大的不同。
我想知道您是否需要 (a) 在开始时组合 PWM_H 和 PWM_L 设置(正如您已经尝试过的)、但 (b) 将 PWM_L 处于空闲状态高电平 (out=1)。
理想情况下、正如 Owen 建议的那样、您希望在计时器停止 (MC=0) 时执行两个 CCTL 设置、因此您可以确保它们是协调的。 这对于转换是否可行?