输出比较和脉冲宽度调制功能有什么区别?

时间:2014-09-02 19:45:38

标签: microcontroller stm32

我正在使用STM32系列刷微控制器。 (特别是使用STM32F072BDISCOVERY板)。

我在理解定时器及其各种模式的使用方面遇到了一些麻烦。具体来说,“输出比较”(OC)模式有很多选项,“PWM”模式有其他选项。 RM0091参考手册的编写就好像它们是两种不同的备用操作模式。我也在使用新的HAL驱动程序,并且有不同的API可以使用OC与PWM。

然而,在我看来,PWM基本上是输出比较功能的子集/用例,其中定时器通道配置为直接驱动硬件输出。

我缺少OC和PWM模式之间的区别吗? PWM波形的产生方式输出比较功能?

3 个答案:

答案 0 :(得分:2)

这个问题已经过去了,但我一直在想这个问题,并开始深入探讨这个话题。

在STM32 micro中,并非所有定时器都实现所有功能。我的帖子基于STM32F030定时器1,我认为它是功能最强大的4通道实现(或者至少是几年前)。

计时器基本上充当计数器,具有计数器时钟来自的位置,复位时间,周期和计数器方向的各种选项。这是它实现的所有额外功能的基础,HAL驱动程序将其称为时基。计数器功能本身与定时器通道无关。

STM32定时器中实现了1-6个通道。这些通道可以独立配置,也可以在某些情况下成对配置(适用于正交编码器模式等功能)。 通道可以配置为输入捕获或输出比较。输入捕获"监听"某些事件并将时基的计数器保存在CCRx寄存器中。输出比较将计数器寄存器与CCRx寄存器中给出的设定值进行比较。

所有简单的IC / OC模式和额外的功能,如PWM输入,输出,霍尔效应传感器接口,都建立在这两种模式之上,它们各自的选项位作用于各种输入/输出多路复用器,关于到OC模式基本上告诉硬件基于比较器输出采取什么动作(CNT = CCRx,CNT> CCRx)。 在这种情况下,PWM模式使输出模式控制器在计数器寄存器复位(更具体地说,更新事件)时返回到CNT< = CCRx状态,而在其他OC模式中输出模式控制器忽略该信号并且可以用手或外部信号复位。输出信号是OCxREF信号,然后在到达输出引脚之前通过更多硬件。如果它完全输出,因为你不允许将定时器连接到输出引脚。

STM32定时器很复杂。它们有许多逻辑块和大量的配置寄存器/位,所以我可能错过了一些东西或完全误读了一些东西。请随时纠正我。

答案 1 :(得分:0)

输出比较只能产生50%的占空比(如果处于切换模式)PWM可以产生不同的占空比,因为它与定时器中断和输出比较相结合

答案 2 :(得分:0)

PWM是输出比较功能的函数。

AVR 微控制器中,可以从每个定时器/计数器操作模式的描述中推断出区别:< / p>

  

操作模式,即定时器/计数器的行为   输出比较引脚由波形的组合定义   生成模式(WGMn3:0)和比较输出模式(COMnx1:0)位。

     

比较输出模式位不影响计数序列,而   波形生成模式位。 COMnx1:0位控制   生成的PWM输出是否应反转(反转   或非反向PWM)。对于非PWM模式,COMnx1:0位控制   是否应在比较时设置,清除或切换输出   匹配

早期的输出比较单位

  

比较器不断地将TCNTn与输出进行比较   比较注册(OCRnx)。如果TCNT等于OCRnx比较器发出信号   一场比赛。匹配将在下一个设置输出比较标志(OCFnx)   定时器时钟周期。 ...   波形发生器使用匹配信号生成   根据波形生成模式设置的操作模式输出   (WGMn3:0)位和比较输出模式(COMnx1:0)位。

以下是同一部分中提到的另一个差异:

  

使用12种脉冲宽度调制(PWM)模式中的任何一种时,OCRnx寄存器都是双缓冲的。对于正常和比较时清除定时器(CTC)操作模式,禁用双缓冲。双缓冲同步OCRnx比较寄存器的更新[这]防止出现奇数长度的非对称PWM脉冲,从而使输出无毛刺。