STM32通用定时器之输出比较模式与PWM模式

STM32通用定时器之输出比较与PWM

通用定时器其实就两个基本的功能:输入、输出
主要介绍一下输出。英文手册是这么说的:
Input capture
Output compare
PWM generation (Edge- and Center-aligned modes)
One-pulse mode output

其中第一个是输入捕获,暂且不谈。
后面的依次为:输出比较、PWM模式(边沿对齐、中心对齐)、单脉冲输出模式
我个人觉得,后三种从本质来说都是输出模式。

这儿插入一句。单片机本质是“引脚输出电平”,继而可以得出两个功能:“用来‘通信’或‘控制’”

明显,定时器的输出模式是用“输出不同的电平”从而进行“控制”。

当然,手册上,对各个模式的输出电平是这么说的:

输出比较模式:英文手册“This function is used to control an output waveform or indicating when a period of time has elapsed.”

翻译后就是这么个意思“此功能被用于控制一个输出波形或者表明在何时有一段时间已经消逝”。

说实话,后半句我不懂。前半句意思就很明显,此功能可以输出波形,同时可以控制该波形的一些参数

这儿再插入一些东西。波形有哪些参数?在这儿指矩形波(或者说脉冲波吧,其余的波形暂且不谈)。参数就只有频率占空比。下一章介绍这两个参数如何设置。

PWM模式:英文手册“Pulse width modulation mode allows you to generate a signal with a frequency determined by the value of the TIMx_ARR register and a duty cycle determined by the value of the TIMx_CCRx register.”
意思呢,大致是“脉冲宽度调制模式允许你去产生一个信号,这是一个‘由ARR寄存器控制频率,由CCR寄存器控制占空比的’信号”

单脉冲输出模式:不讲解了,也是一种用法。

可以看出来:输出比较模式和PWM模式的本质基本无任何区别,只不过PWM的功能性更强,也就意味着PWM的适应群体更单一,这一点应该很好理解吧。反过来,输出比较模式可以实现PWM模式,只不过配置过程会复杂一点,当然输出比较模式也可以实现PWM实现不了的功能。

将上面一段话具体一点:输出比较模式,可以输出PWM波,而且一个通用定时器的4个通道的PWM波可以频率、占空比互不干扰,完全独立。而PWM模式的4个通道的频率是一致的,只有占空比是独立的。(当然输出比较模式还有其他的更多的波形可以输出,这儿只是相对于PWM模式举例而已)

输出比较模式到底有多少模式呢?
这个问题,参照数据手册其实就可以给出答案。答案在捕获/比较模式寄存器 x(TIMx_CCMRx)里面。
在该寄存器的OCxM位(该位有3位)如下图:
STM32通用定时器之输出比较模式与PWM模式_第1张图片
3个位,8种情况。
依次是:
000:冻结,意思就是我不乐意用你的模式,但是我就是开这个功能,然后冻起来。
001:单片机会一直判断CNT计数器和设定的值的情况,一旦二者相等,就将OCxREF变成高“1”。

插入一句:OCxREF会影响单片机引脚输出电平的高低。那么有人问了,你上面说“OC1REF变成高“1””,那是不是对应引脚输出的电平就是高电平了呢?答案是否定的。
简单介绍一下,OCxREF的高“1”和低“0”会有什么效果呢?
如果,OCxREF是高“1”,会有如下的效果,单片引脚就会输出有效电平,而不是高电平。
问题又来了,有效电平是什么鬼?问的好。
有效电平,有可能是高电平,也有可能是低电平。具体是什么,是由捕获/比较使能寄存器(TIMx_CCER) 的CCxP决定的,具体总么决定的,如下图:
STM32通用定时器之输出比较模式与PWM模式_第2张图片
也就是说,输出高低电平是这么一个过程。我们要先配置CCxP,先定好了有效电平是高还是低。继而间接控制OCxREF,从而达到输出我们想要的电平的目的。
举例时间:现在CCxP是0,那么有效电平是高电平。如果OCxREF是高“1”,那么我们就输出有效电平,高电平;如果OCxREF是低“0”,那么我们就输出无效电平(就是相反的电平),低电平。
介绍完毕,继续下一波。

010:参照001
011:翻转,单片机会一直判断CNT计数器和设定的值的情况,一旦二者相等,OCxREF取反。
100:单片机会一直判断CNT计数器和设定的值的情况,一旦二者相等,老子不管你(指的是OCxREF)之前是什么,现在变成低电平
101:参照100
110:PWM模式1,具体的自己看
111:参照110。

这八种模式,一般情况下只会用到011翻转、110PWM(111PWM和110PWM没太大区别)这两种模式。

所以,讲了一大堆,最后也就大概三点内容:
第一、输出比较模式,我个人觉应该这么理解,通过CNT与你设定的值比较,然后输出你想要的电平。
第二、为什么将PWM模式和输出比较区分开来,按照道理来说,这二者应该是统一的,只不过PWM模式更加的特殊,所以单独拿出来。本质并无太大区别。
第三、输出比较模式功能更加丰富一点,就我上面的举的例子,可以百度搜索“如何使用输出比较模式输出不同频率的PWM”就可以找到相关程序了。我以后有机会也会写一写这方面的东西的。

最后 ,我是新人,希望大家能够多多评论,评论个666就好。有什么问题也欢迎大家批评指正。

你可能感兴趣的:(STM32学习)