我正在使用STM32系列刷微控制器。 (特别是使用STM32F072BDISCOVERY板)。
我在理解定时器及其各种模式的使用方面遇到了一些麻烦。具体来说,“输出比较”(OC)模式有很多选项,“PWM”模式有其他选项。 RM0091参考手册的编写就好像它们是两种不同的备用操作模式。我也在使用新的HAL驱动程序,并且有不同的API可以使用OC与PWM。
然而,在我看来,PWM基本上是输出比较功能的子集/用例,其中定时器通道配置为直接驱动硬件输出。
我缺少OC和PWM模式之间的区别吗? PWM波形的产生方式不输出比较功能?
答案 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脉冲,从而使输出无毛刺。