单片机学习!
目录
一、输出比较简介
二、PWM简介
三、输出比较通道
3.1通用定时器的输出比较部分电路
3.2高级定时器的输出比较部分电路
四、输出模式控制器
五、PWM基本结构
六、PWM参数计算
总结
前言
文章讲述STM32定时器的输出比较功能,它主要用来输出PWM波形,而PWM波形是驱动电机的必要条件。PWM本质是利用面积等效原理来改变波形的有效值。
一、输出比较简介
- OC(Output Compare)输出比较。
- 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。
- 每个高级定时器和通用定时器都拥有4个输出比较通道。
- 高级定时器的前3个通道额外拥有死区生成和互补输出的功能。
库函数中英文缩写:OC(Output Compare)输出比较、IC(Input Capture)输入捕获、CC(Capture/Compare)输入捕获和输出比较的单元。
输出比较模块最主要的功能就是输出一定频率和占空比的PWM波形。CNT和CCR在下图标记的位置:
橙色框里就是输出比较电路,红色框里是CNT(时基单元里的计数器),CCR(捕获/比较寄存器)。
捕获/比较寄存器是输入捕获和输出比较共用的。当使用输入捕获时,它就是捕获寄存器;当使用输出比较时,它就是比较寄存器。输出比较时,电路会比较CNT和CCR的值,CNT计数自增,CCR是给定的一个值,当CNT大于CCR、小于CCR或者等于CCR时,这里输出就会对应的置1、置0、置1、置0……这样就可以输出一个电平不断跳变的PWM波形。
二、PWM简介
- PWM(Pulse Width Modulation)脉冲宽度调制。
- 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域。
- PWM参数: 频率 = 1 / TS 占空比 = TON / TS 分辨率 = 占空比变化步距
PWM波形是一个数字输出信号,是由高低电平组成的一个连续变化的电平信号。
使用PWM波形是用来等效的实现一个模拟信号的输出。如控制LED亮度大小,就是让LED不断点亮、熄灭、点亮、熄灭,当点亮和熄灭的频率足够大时,LED就不会闪烁了,而是呈现出一个中等亮度。控制点亮和熄灭的时间比例就可以使LED呈现不同的亮度级别。电机调速也是同样的原理,用很快的频率给电机通电、断电、通电、断电,那么电机的速度就能维持在一个中等速度。
PWM的应用场景必须要是一个惯性系统。
由上图可以看出,高低电平跳变的数字信号是可以等效为中间紫色虚线所表示的模拟量的,
- 当Ud电平时间长一点,-Ud电平时间短一点的时候,等效的模拟量就偏向于上面;
- 当Ud电平时间短一点,-Ud电平时间长一点的时候,等效的模拟量就偏向于下面;
PWM中几个关键参数:
TS代表一个高低电平变换周期的时间,周期的倒数就是频率,频率 = 1 / TS,PWM的频率越快,那它等效的模拟信号就约平稳,不过同时性能开销就越大,一般来说PWM的频率在几千到几十千赫兹就足够快了。
占空比 = TON / TS,TON是高电平的时间,TS是一个周期的时间。占空比就是高电平时间相对于整个周期时间的比例,一般用百分比来表示。
- 占空比为50%,那就是高低电平时间相等的方波;
- 占空比为20%,那就是高电平占20%,低电平占80%;
- 占空比100%,那就是一直是高电平;
- 占空比0%,那就是一直是低电平。
占空比决定了PWM等效出来的模拟电压的大小。占空比越大,等效的模拟电压就越趋近于高电平;占空比越小,等效的模拟电压就越趋近于低电平;这个等效关系一般来说是线性的,如高电平5V,低电平0V,50%占空比就等效于中间电压,为2.5V;20%占空比就等效于1/5处的电压,就是1V。
分辨率 = 占空比变化步距,比如有的占空比只能是1%、2%、3%等等这样以1%的步距跳变,那它的分辨率就是1%;如果可以1.1%、1.2%、1.3%等等这样以0.1%的步距跳变,那它的分辨率就是0.1%。这个分辨率就是占空比变化的精细程度,分辨率的大小需看实际项目需求。高频率和高分辨率的设计对硬件电路要求也较高。
使用PWM波形,就可以在数字系统等效输出模拟量。可以实现LED控制亮度、电机控速等功能。
三、输出比较通道
3.1通用定时器的输出比较部分电路
上图通用定时器框图中红色框起来的部分对应的就是下图。由黄色框中CNT和CCR比较的结果传入红色框的输出比较电路,最后通过蓝色框中TIM_CH1输出到GPIO引脚上。下方三个是同样的通道,分别输出到CH2、CH3、CH4。
这部分电路是通用定时器的输出比较部分电路,高级定时器的第四个通道的结构和这部分电路也是基本一样的。
1.由CNT计数器和CCR1第一路的捕获/比较寄存器比较得出CNT>CCR1或CNT=CCR1时,就会给输出模式控制器传一个信号,输出模式控制器就会改变它输出OC1ref的高低电平。ref是reference的缩写,意思是参考信号。(ETRF输入是定时器的一个小功能)
2.ref信号可以前往主模式控制器,可以将ref映射到主模式的TRGO输出。也可以前往极性选择,这个是ref的主要去向,给寄存器CC1P写0,信号就走上方支路,信号电平不翻转,就是信号经过不改变;给寄存器CC1P写1,信号就走下方支路,信号通过一个非门取反。信号经过高低电平反转。极性选择就是选择是否要把高低电平反转。
3.极性选择过后就是输出使能电路,选择要不要输出。最后就是OC1引脚,OC1引脚就是CH1通道的引脚。在引脚定义表可查具体对应哪个GPIO口。
3.2高级定时器的输出比较部分电路
高级定时器的输出比较部分电路比通用定时器的输出比较部分电路多了红色方框框起来的部分。OC1和OC1N就是两个互补的输出端口,一个输出高电平,另一个就输出低电平。死区发生器则用于互补输出切换时延时一小段时间。
四、输出模式控制器
输出模式控制器的输入是CNT和CCR的大小关系,输出的是REF的高低电平,可以选择多种模式控制REF输出。这个模式可以通过CC1M寄存器进行配置。具体操作可参考下表:
1.冻结模式,CNT=CCR时,REF保持为原状态。实际上CNT和CCR就相当于没有用,所以也可以理解为CNT和CCR无效,REF保持为原状态。这个模式比较简单,它根本就不管CNT和CCR谁大谁小,直接REF保持不变,维持上一个状态就行了。冻结模式可用于正在输出PWM波时,突然需要暂停一会儿输出时。冻结模式被切换后,输出就暂停了。并且高低电平也维持为暂停时刻的状态保持不变。
2.有效电平和无效电平一般是高级定时器里面的,与关断、刹车这些功能配合表述的,描述比较严谨,所以叫有效电平和无效电平。为了方便理解,可以直接认为置有效电平就是置高电平、置无效电平就是置低电平。这三个模式都是当CNT与CCR值相等时,执行操作。
- 匹配时置有效电平模式:CNT=CCR时,REF置有效电平,也就是高电平。
- 匹配时置无效电平模式:CNT=CCR时,REF置无效电平,也就是低电平。
- 匹配时电平翻转模式:CNT=CCR时,电平翻转。
以上这三个模式就可以用做波形输出了。
匹配时电平翻转模式和匹配时置无效电平模式都只是一次性置高电平或置低电平后就结束。这两个模式不适合输出连续变化的波形。如果是定时输出一次性的信号,则可以选择这两个模式。
匹配时电平翻转模式可以方便地输出一个频率可调,占空比始终为50%的PWM波形。当设置CCR为0时,CNT每次更新清0时,就会产生一次CNT=CCR的事件,这就会导致输出电平翻转一次。每更新两次,输出为一个周期。并且高电平和低电平的时间是始终相等的,也就是占空比始终为50%。当改变定时器更新频率时,输出波形的频率也会随之改变。输出波形的频率=更新频率/2,因为更新两次输出才为一个周期。这就是匹配时电平翻转模式的用途。
3.强制为无效电平和强制为有效电平模式是CNT与CCR无效,REF强制为无效电平或者强制为有效电平。这两个模式和冻结模式有些相似,如果需要暂停波形输出,并且在暂停期间保持低电平或者高电平。就可以设置这两个强制输出电平模式。
4.PWM模式1和PWM模式2是非常重要的两个模式。它们可以用于输出频率和占空比都可调的PWM波形,是项目中主要使用的模式。
- PWM模式1中计数器为向上计数的情况下,CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平;向下计数的情况下,CNT>CCR时,REF置无效电平,CNT≤CCR时,REF置有效电平。
- PWM模式2中计数器为向上计数的情况下,CNT<CCR时,REF置无效电平,CNT≥CCR时,REF置有效电平;向下计数的情况下,CNT>CCR时,REF置有效电平,CNT≤CCR时,REF置无效电平。
PWM模式1和PWM模式2的区别就是输出高低电平反过来了,所以PWM模式2实际上就是PWM模式1输出的取反。改变PWM模式1和PWM模式2,就只是改变了REF电平的极性而已。从上图输出比较通道中可以看到,REF输出之后还有一个极性的配置(图中2部分),所以使用PWM模式1的正极性和PWM模式2的反极性最终的输出是一样的。所以下文介绍其中一种模式:使用PWM模式1的向上计数的模式输出频率和占空比都可调的PWM波形。
五、PWM基本结构
1.时基单元,配置好时基单元,CNT计数器就可以开始不断地自增运行。
2.运行控制。
3.输出比较单元,总共有4路。输出比较单元的最开始是CCR捕获/比较寄存器,CCR可自己设定,CNT不断自增运行,同时CNT和CCR在不断进行比较。CCR之后输出模式控制器以PWM模式1中CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平为执行逻辑。
图中右上角的第一个折线图中,蓝色线是CNT的值,黄色线是ARR的值。蓝线CNT从0开始自增,一直增到ARR也就是99之后清0,继续自增。在这个过程中,设置的红色线是CCR,图中CCR设置为30,执行图中PWM模式1的向上计数的逻辑。就得到右上角第二个方波图中绿色线表示的输出波形。
右上角两个图对照来看,最开始CNT<CCR时,置高电平;当CNT≥CCR时,变为低电平;当CNT溢出清0后,CNT又小于CCR,置高电平;之后CNT≥CCR时,置低电平。这样一直持续下去,REF的电平就会不断变化,并且它的占空比是受CCR值的调控的。如果CCR的值设置高一些,输出的占空比就变大;CCR的值设置的低一些,输出的占空比就变小。这就是PWM模式的工作流程。这里的REF就是一个频率可调,占空比也可调的PWM波形。
REF最终在经过极性选择,输出使能,最终通向GPIO口。最终完成PWM波形的输出。
六、PWM参数计算
- PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
- PWM占空比: Duty = CCR / (ARR + 1)
- PWM分辨率: Reso = 1 / (ARR + 1)
PWM频率:PWM的一个周期始终对应着计数器CNT的一个溢出更新周期,所以PWM的频率就等于计数器CNT的更新频率,PWM频率的计算公式就是计数器的更新频率公式。
PWM占空比:一个周期中CNT是从0一直加到ARR,图中ARR是99,那CNT总共就是计了100个数。PWM波高电平时,CNT是从0一直加到CCR,图中CCR是30,在等于30的瞬间,PWM波形就已经跳变为低电平了。CNT从0到29是高电平,总共是计30个数的时间。所以占空比就是30/100=30%,对应公式 Duty = CCR / (ARR + 1)。
PWM分辨率:分辨率也就是占空比变化的步距。从图中可以看出,CCR的值因该设置在0到ARR+1这个范围里,CCR=ARR+1时,占空比就正好是100%;若 CCR>(ARR+1) 时,占空比始终是100%,这样设置没有意义。所以CCR的变化范围取决于ARR的值,ARR越大,CCR的范围就越大,对应的分辨率就越大,总结公式为 Reso = 1 / (ARR + 1),公式里定义的分辨率是占空比最小的变化步距,所以这个值越小越好;也可以定义CCR的范围为分辨率,这个值越大越好。这两种定义都是对应占空比变化的越细腻越好。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了STM32输出比较和PWM的一些内容。