LV080-高级定时器输出比较模式
一、输出比较模式输出PWM
我们来学习使用高级定时器输出比较模式下翻转功能,通过定时器 4 个通道分别输出 4 个 50%占空比、不同相位的 PWM。
输出比较模式下翻转功能作用是:当计数器的值等于捕获/比较寄存器影子寄存器的值时,OC1REF 发生翻转,进而控制通道输出(OCx)翻转。通过翻转功能实现输出 PWM 的具体原理如下: PWM 频率由自动重载寄存器(TIMx_ARR)的值决定,在这个过程中,只要自动重载寄存器的值不变,那么 PWM 占空比就固定为 50%。我们可以通过捕获/比较寄存器(TIMx_CCRx)的值改变 PWM 的相位。生成 PWM 的原理如图 :

本实验就是根据图中的原理来设计的,具体实验是:我们设置固定的 ARR 值为 999,那么 PWM 占空比固定为 50%,通过改变 4 个通道的捕获/比较寄存器(TIMx_CCRx)的值使得每个通道输出的 PWM 的相位都不一样,注意捕获/比较寄存器的值设置范围是: 0 ~ ARR。比如:TIMx_CCR1=250-1, TIMx_CCR2=500-1, TIMx_CCR3=750-1, TIMx_CCR4=1000-1,那么可以得到通道 1~通道 4 输出的 PWM 的相位分别是: 25%、 50%、 75%、 100%。翻转功能输出的 PWM 周期,这里用 T 表示,其计算公式如下:
T= 2*(arr+1)*((psc+1)/ Tclk)其中:
T :翻转功能输出的 PWM 周期(单位为 s)。
Tclk:定时器的时钟源频率(单位为 MHz)。
arr :自动重装寄存器(TIMx_ARR)的值。
psc :预分频器寄存器(TIMx_PSC)的值。
二、相关寄存器
高级定时器输出比较模式除了用到定时器的时基单元:计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR) 之外。主要还用到下面介绍的这些寄存器。
1. 控制寄存器 1(TIMx_CR1)
TIM1/TIM8 的控制寄存器 1 描述如图:

上图中我们只列出了本实验需要用的一些位,其中: 位 7(APRE)用于控制自动重载寄存器是否具有缓冲作用,在基本定时器的时候已经讲过,请回顾。 在实验中,我们把该位置 1。
位 4(DIR)用于配置计数器的计数方向, 本实验默认置 0 即可。
位 0 (CEN)用于使能计数器的工作,必须要设置该位为 1,才可以开始计数。其它位保持复位值即可。
2. 捕获/比较模式寄存器 1/2(TIMx_CCMR1/2)
TIM1/TIM8 的捕获/比较模式寄存器( TIMx_CCMR1/2),该寄存器一般有 2 个:TIMx_CCMR1 和 TIMx _CCMR2。TIMx_CCMR1 控制 CH1 和 CH2,而 TIMx_CCMR2 控制 CH3和 CH4。 TIMx_CCMR1 寄存器描述如图:

该寄存器的有些位在不同模式下,功能不一样,我们现在用到输出比较模式。关于该寄存器的详细说明,可以参考《STM32F10xxx 参考手册_V10(中文版) .pdf》 第 240 页, 13.4.7 节。
本实验我们用到了定时器 8 输出比较的 4 个通道,所以我们需要配置 TIM1_CCMR1 和TIM1_CCMR2。以 TIM1_CCMR1 寄存器为例,模式设置位OC1M[2:0]就是对应着通道 1 的模式设置,此部分由 3 位组成,总共可以配置成 8 种模式,我们使用的是翻转功能,所以这 3 位必须设置为011。通道 2 也是如此,将位 OC2M[2:0] 设置为 011。通道 3 和通道 4 就要设置TIM1_CCMR2 寄存器的位 OC3M[2:0]和位 OC4M[2:0]。除此之外,我们还要设置输出比较的预装载使能位,如通道 1 对应输出比较的预装载使能位 OC1PE 置 1, 其他通道也要把相应位置 1。
3. 捕获/比较使能寄存器(TIMx_ CCER)
TIM1/TIM8 的捕获/比较使能寄存器,该寄存器控制着各个输入输出通道的开关和极性。TIMx_CCER 寄存器描述如图 :

该寄存器比较简单,要让 TIM8 的 4 个通道都输出,我们需要把对应的捕获/比较 1 输出使能位置 1。通道 1 到通道 4 的使能位分别是: CC1E、 CC2E、 CC3E、 CC4E,我们把这 4 个位置1,使能通道输出。
4. 捕获/比较寄存器 1/2/3/4(TIMx_ CCR1/2/3/4)
捕获/比较寄存器(TIMx_ CCR1/2/3/4),该寄存器总共有 4 个,对应 4 个通道 CH1~CH4。本实验 4 个通道都要使用到,以通道 1 对应的 TIMx_ CCR1 寄存器为例,其描述如下图所示:

我们通过改变 TIMx_ CCR1/2/3/4 寄存器的值来改变 4 个通道输出的 PWM 的相位。
5. TIM1/TIM8 断路和死区寄存器(TIMx_ BDTR)
本实验用的是高级定时器,我们还需要配置:断路和死区寄存器(TIMx_BDTR),该寄存器各位描述如图 :

该寄存器,我们只需要关注位 15(MOE),要想高级定时器的通道正常输出,则必须设置MOE 位为 1,否则不会有输出。