gpt4 book ai didi

embedded - 如何在无故障的情况下在AVR中实现零占空比PWM?

转载 作者:行者123 更新时间:2023-12-03 22:28:47 24 4
gpt4 key购买 nike

我正在尝试在ATmega2560上以TC0(一个8位定时器)在快速PWM模式下使用硬件PWM。我需要动态调整占空比,其中包括零占空比。但是,这似乎并不容易甚至不可能。引用数据表:

The extreme values for the OCR0A Register represents special cases when generating a PWM waveform output in the fast PWM mode. If the OCR0A is set equal to BOTTOM, the output will be a narrow spike for each MAX+1 timer clock cycle. Setting the OCR0A equal to MAX will result in a constantly high or low output (depending on the polarity of the output set by the COM0A1:0 bits).



因此,将OCR0A设置为0(= BOTTOM)实际上不会导致占空比为零,我的测试证实了这一点。还需要采取其他方法。

首先,我已经教过如上引文所述如何使用OCR0A = MAX特殊情况。结合暂时切换到反相模式,这将导致零占空比。但是,由于未对COM0A1:0位进行双缓冲(并且未与OCR0A同步),因此,如果在输出为高电平时切换模式,则可能会导致输出故障(输出高电平直到下一次溢出) )。 OCR0A更改和完成模式更改的顺序似乎无关紧要,两者都可能出现故障。

我还考虑了另一种解决方案,即通过设置COM0A1:0 = 0来关闭PWM。这将立即将输出设置为PORT寄存器中的值,该值为零。但是仍然存在从零输出返回到非零占空比的问题。根据我在数据表中看到的内容,将COM0A1:0设置为重新使能PWM将立即将输出引脚切换为PWM的输出,在下一次比较匹配或定时器溢出之前,该值可能是不正确的值。因此,有一个小故障。

整体上使PWM反相可能是适用的,但随后的问题就变成了出现带有对称问题的完整占空比。

请注意,如通过数据手册所述,在通过端口强制引脚输出时,无法使能PWM波形生成功能:

The Compare Output mode (COM0x1:0) bits have two functions. The Waveform Generator uses the COM0x1:0 bits for defining the Output Compare (OC0x) state at the next Compare Match. Also, the COM0x1:0 bits control the OC0x pin output source.



没有办法让PWM运行一个周期左右,并在就绪时切换到它-使能PWM立即强制引脚输出。

更新。 相位校正(居中对齐)PWM模式不存在此问题,在我的情况下是可以接受的。我已经尝试过,并确认它适用于零占空比和完整占空比。

最佳答案

您有两种选择:

  • (如果使用快速pwm):
    您可以使用倒序的pwm。您需要做的就是将OC引脚设置为反向模式,并反转pwm比较值。但是-您现在遇到了占空比为100%的故障
  • 使用相位正确的pwm。缺点是最大频率减半。
  • 关于embedded - 如何在无故障的情况下在AVR中实现零占空比PWM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23853066/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com