STM32 F103 高级定时器

32.1 高级控制定时器
高级控制定时器(TIM1 和TIM8)和通用定时器在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能。

高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面。
高级控制定时器时基单元包含一个16 位自动重装载寄存器ARR,一个16 位的计数器CNT,可向上/下计数,一个16 位可编程预分频器PSC,预分频器时钟源有多种可选,有内部的时钟、外部时钟。还有一个8 位的重复计数器RCR,这样最高可实现40 位的可编程定时。

STM32 F103 高级定时器

主要寄存器掌握:

STM32 F103 高级定时器

 

CEN:使能计数器

DIR:计数方向 (Direction)

CMS[1:0]:选择*对齐模式 (Center-aligned mode selection) 位6:5 。00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。

ARPE:自动重装载预装载允许位 (Auto-reload preload enable) 位7 。0:TIMx_ARR寄存器没有缓冲; 1:TIMx_ARR寄存器被装入缓冲器。

CKD[1:0]: 时钟分频因子 (Clock division)

 

STM32 F103 高级定时器

输出比较模式:

CC1S[1:0]:捕获/比较1 选择 (Capture/Compare 1 selection) 位1:0 这2位定义通道的方向(输入/输出),及输入脚的选择: 00:CC1通道被配置为输出;

OC1PE:输出比较1预装载使能 (Output compare 1 preload enable) 位3. 0:禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数值立即起作用。

OC1M[2:0]:输出比较1模式,110:PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

输入捕获模式:

CC1S[1:0]:捕获/比较1选择 。 01:CC1通道被配置为输入,IC1映射在TI1上;10:CC1通道被配置为输入,IC1映射在TI2上;

IC1PSC[1:0]:输入/捕获1预分频器 (Input capture 1 prescaler) 位3:2 这2位定义了CC1输入(IC1)的预分频系数。 00:无预分频器,捕获输入口上检测到的每一个边沿都触发一次捕获;

IC1F[3:0]:输入捕获1滤波器 (Input capture 1 filter),这几位定义了TI1输入的采样频率及数字滤波器长度。数字滤波器由一个事件计数器组成,它记录到N个事件后会产生一个输出的跳变:0000:无滤波器,以fDTS采样 ,0001:采样频率fSAMPLING=fCK_INT,N=2,1000:采样频率fSAMPLING=fDTS/8,N=6

STM32 F103 高级定时器

 

CC1E:输入/捕获1输出使能

CC1P:输入/捕获1输出极性 (Capture/Compare 1 output polarity) 位1 。CC1通道配置为输出: 0:OC1高电平有效 1:OC1低电平有效。 CC1通道配置为输入: 该位选择是IC1还是IC1的反相信号作为触发或捕获信号。 0:不反相:捕获发生在IC1的上升沿;当用作外部触发器时,IC1不反相。

其它寄存器:

STM32 F103 高级定时器

STM32 F103 高级定时器

SMS[2:0]:从模式选择。 000:关闭从模式 – 如果CEN=1,则预分频器直接由内部时钟驱动。 001:编码器模式1 – 根据TI1FP1的电平,计数器在TI2FP2的边沿向上/下计数。 010:编码器模式2 – 根据TI2FP2的电平,计数器在TI1FP1的边沿向上/下计数。 011:编码器模式3 – 根据另一个信号的输入电平,计数器在TI1FP1和TI2FP2的边沿向上/下计数。

32.2 高级控制定时器功能框图

STM32 F103 高级定时器

1. ①时钟源
高级控制定时器有四个时钟源可选:
内部时钟源CK_INT
 外部时钟模式1:外部输入引脚TIx(x=1,2,3,4)

 外部时钟模式2:外部触发输入ETR
 内部触发输入(ITRx)
内部时钟源(CK_INT)
内部时钟CK_INT 即来自于芯片内部,等于72M,一般情况下,我们都是使用内部时钟。当从模式控制寄存器TIMx_SMCR 的SMS 位等于000 时,则使用内部时钟。

STM32 F103 高级定时器

 

外部时钟模式1

STM32 F103 高级定时器

①:时钟信号输入引脚
当使用外部时钟模式1 的时候,时钟信号来自于定时器的输入通道,总共有4 个,分别为TI1/2/3/4 , 即TIMx_CH1/2/3/4 。具体使用哪一路信号, 由TIM_CCMRx 的位CCxS[1:0]配置,其中CCMR1 控制TI1/2,CCMR2 控制TI3/4。
②:滤波器
如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对信号重新采样,来达到降频或者去除高频干扰的目的,具体的由TIMx_CCMRx的位ICxF[3:0]配置。
③:边沿检测
边沿检测的信号来自于滤波器的输出,在成为触发信号之前,需要进行边沿检测,决定是上升沿有效还是下降沿有效,具体的由TIMx_CCER 的位CCxP 和CCxNP 配置

④:触发选择当使用外部时钟模式1 时,输入源有两个,一个是滤波后的定时器输入1(TI1FP1)和滤波后的定时器输入2(TI2FP2),具体的由TIMxSMCR 的位TS[2:0]配置。

⑤:从模式选择(配置成外部时钟模式)
选定了触发源信号后,最后我们需把信号连接到TRGI 引脚,让触发信号成为外部时钟模式1 的输入, 最终等于CK_PSC, 然后驱动计数器CNT 计数。具体的配置TIMx_SMCR 的位SMS[2:0]为000 即可选择外部时钟模式1。
⑥:使能计数器
经过上面的5 个步骤之后,最后我们只需使能计数器开始计数,外部时钟模式1 的配置就算完成。使能计数器由TIMx_CR1 的位CEN 配置。

 

内部触发输入
内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。主模式的定时器可以对从模式定时器执行复位、启动、停止或提供时钟。

外部触发模式和内部触发输入不做介绍

 

2. ②控制器
高级定时器控制器部分包括触发控制器、从模式控制器以及编码器接口。触发控制器用来针对片内外设输出触发信号,比如为其它定时器提供时钟和触发DAC/ADC 转换。
编码器接口专门针对编码器计数而设计。从模式控制器可以控制计数器复位、启动、递增/递减、计数。有关控制器部分只需熟练阅读寄存器描述即可。

3. ③时基单元

高级控制定时器时基单元功能包括四个寄存器,分别是计数器寄存器(CNT)、预分频器寄存器(PSC)、自动重载寄存器(ARR)和重复计数器寄存器(RCR)。其中重复计数器RCR是高级定时器独有,通用和基本定时器没有。前面三个寄存器都是16 位有效,TIMx_RCR寄存器是8 位有效。
预分频器PSC
预分频器PSC,有一个输入时钟CK_PSC 和一个输出时钟CK_CNT。输入时钟CK_PSC 就是上面时钟源的输出,输出CK_CNT 则用来驱动计数器CNT 计数。通过设置预分频器PSC 的值可以得到不同的CK_CNT , 实际计算为: fCK_CNT 等于fCK_PSC/(PSC[15:0]+1),可以实现1 至65536 分频。
计数器CNT
高级控制定时器的计数器有三种计数模式,分别为递增计数模式、递减计数模式和递增/递减(中心对齐)计数模式。
(1) 递增计数模式,计数器从0 开始计数,每来一个CK_CNT 脉冲计数器就增加1,直到计数器的值与自动重载寄存器ARR 值相等,然后计数器又从0 开始计数并生成计数器上溢事件,计数器总是如此循环计数。如果禁用重复计数器,在计数器生成上溢事件就马上生成更新事件(UEV);如果使能重复计数器,每生成一次上溢事件重复计数器内容就减1,直到重复计数器内容为0 时才会生成更新事件。
(2) 递减计数模式,计数器从自动重载寄存器ARR 值开始计数,每来一个CK_CNT 脉冲计数器就减1,直到计数器值为0,然后计数器又从自动重载寄存器ARR 值开始递减计数并生成计数器下溢事件,计数器总是如此循环计数。如果禁用重复计数器,计数器生成下溢事件就马上生成更新事件;如果使能重复计数器,每生成一次下溢事件重复计数器内容就减1,直到重复计数器内容为0 时才会生成更新事件。
(3) 中心对齐模式下,计数器从0 开始递增计数,直到计数值等于(ARR-1)值生成计数器上溢事件,然后从ARR 值开始递减计数直到1 生成计数器下溢事件。然后又从0 开始计数,如此循环。每次发生计数器上溢和下溢事件都会生成更新事件。
自动重载寄存器ARR
自动重载寄存器ARR 用来存放与计数器CNT 比较的值,如果两个值相等就递减重复计数器。可以通过TIMx_CR1 寄存器的ARPE 位控制自动重载影子寄存器功能,如果ARPE 位置1,自动重载影子寄存器有效,只有在事件更新时才把TIMx_ARR 值赋给影子寄存器,即下一个周期赋给影子寄存器。如果ARPE 位为0,则修改TIMx_ARR 值马上有效,立即赋值给影子寄存器。
重复计数器RCR
在基本/通用定时器发生上/下溢事件时直接就生成更新事件,但对于高级控制定时器却不是这样,高级控制定时器在硬件结构上多出了重复计数器,在定时器发生上溢或下溢事件是递减重复计数器的值,只有当重复计数器为0 时才会生成更新事件。在发生N+1 个上溢或下溢事件(N 为RCR 的值)时产生更新事件。

另外:  控制寄存器CR1的时钟分频因子CKD ,配置死区时间时需要用到
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        

4. ④输入捕获

STM32 F103 高级定时器

输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输入信号的脉宽和测量PWM输入信号的频率和占空比这两种。
输入捕获的大概的原理就是,当捕获到信号的跳变沿的时候,把计数器CNT 的值锁存到捕获寄存器CCR 中,把前后两次捕获到的CCR 寄存器中的值相减,就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,这个我们需要做额外的处理。
①输入通道
需要被测量的信号从定时器的外部引脚TIMx_CH1/2/3/4 进入,通常叫TI1/2/3/4,在后面的捕获讲解中对于要被测量的信号我们都以TIx 为标准叫法。
②输入滤波器和边沿检测器(滤波器是升频,分频器是减频)
当输入的信号存在高频干扰的时候,我们需要对输入信号进行滤波,即进行重新采样,根据采样定律,采样的频率必须大于等于两倍的输入信号。比如输入的信号为1M,又存在高频的信号干扰,那么此时就很有必要进行滤波,我们可以设置采样频率为2M,这样可以在保证采样到有效信号的基础上把高于2M 的高频干扰信号过滤掉。
滤波器的配置由CR1 寄存器的位CKD[1:0]和CCMR1/2 的位ICxF[3:0]控制。从ICxF位的描述可知,采样频率fSAMPLE 可以由fCK_INT 和fDTS分频后的时钟提供,其中是fCK_INT内部时钟,fDTS 是fCK_INT 经过分频后得到的频率,分频因子由CKD[1:0]决定,可以是不分频,2 分频或者是4 分频。

边沿检测器用来设置信号在捕获的时候是什么边沿有效,可以是上升沿,下降沿,或者是双边沿,具体的由CCER 寄存器的位CCxP 和CCxNP 决定。
③捕获通道
捕获通道就是图中的IC1/2/3/4,每个捕获通道都有相对应的捕获寄存器CCR1/2/3/4,当发生捕获的时候,计数器CNT 的值就会被锁存到捕获寄存器中。这里我们要搞清楚输入通道和捕获通道的区别,输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。比如输入通道TI1 的信号经过滤波边沿检测器之后的TI1FP1 和TI1FP2 可以进入到捕获通道IC1 和IC2,其实这就是我们后面要讲的PWM 输入捕获,只有一路输入信号(TI1)却占用了两个捕获通道(IC1 和IC2)。当只需要测量输入信号的脉宽时候,用一个捕获通道即可。输入通道和捕获通道的映射关系具体由寄存器CCMRx 的位CCxS[1:0]配置
④预分频器
ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。具体的由寄存器CCMRx 的位ICxPSC 配置,如果希望捕获信号的每一个边沿,则不分频。
⑤捕获寄存器
经过预分频器的信号ICxPS 是最终被捕获的信号,当发生捕获时(第一次),计数器CNT 的值会被锁存到捕获寄存器CCR 中,还会产生CCxI 中断,相应的中断位CCxIF(在SR 寄存器中)会被置位,通过软件或者读取CCR 中的值可以将CCxIF 清0。如果发生第二次捕获(即重复捕获:CCR 寄存器中已捕获到计数器值且 CCxIF 标志已置 1),则捕获溢出标志位CCxOF(在SR 寄存器中)会被置位,CCxOF 只能通过软件清零

PWM捕获只能用通道1,2;34,没有触发到时基单元;

5. ⑤输出比较

STM32 F103 高级定时器

 

输出比较就是通过定时器的外部引脚对外输出控制信号,将通道X(x=1,2,3,4)设置为匹配时输出有效电平、无效电平、翻转、强制变为无效电平、强制变为有效电平、PWM1 和PWM2 这八种模式,具体使用哪种模式由寄存器CCMRx 的位OCxM[2:0]配置。其中PWM 模式是输出比较中的特例,使用的也最多。
①比较寄存器
当计数器CNT 的值跟比较寄存器CCR 的值相等的时候,输出参考信号OCxREF 的信号的极性就会改变,其中OCxREF=1(高电平)称之为有效电平,OCxREF=0(低电平)称之为无效电平,并且会产生比较中断CCxI,相应的标志位CCxIF(SR 寄存器中)会置位。然后OCxREF 再经过一系列的控制之后就成为真正的输出信号OCx/OCxN。
②死区发生器
在生成的参考波形OCxREF 的基础上,可以插入死区时间,用于生成两路互补的输出信号OCx 和OCxN,死区时间的大小具体由BDTR 寄存器的位DTG[7:0]配置。死区时间的大小必须根据与输出信号相连接的器件及其特性来调整。

③输出控制

STM32 F103 高级定时器

在输出比较的输出控制中,参考信号OCxREF 在经过死区发生器之后会产生两路带死区的互补信号OCx_DT 和OCxN_DT(通道1~3 才有互补信号,通道4 没有,其余跟通道1~3 一样),这两路带死区的互补信号然后就进入输出控制电路,如果没有加入死区控制,那么进入输出控制电路的信号就直接是OCxREF。
进入输出控制电路的信号会被分成两路,一路是原始信号,一路是被反向的信号,具体的由寄存器CCER 的位CCxP 和CCxNP 控制高低电平。经过极性选择的信号是否由OCx 引脚输出到外部引脚,CHx/CHxN 则由寄存器CCER 的位CxE/CxNE 配置使能输出
如果加入了断路(刹车)功能,则断路和死区寄存器BDTR 的MOE、OSSI 和OSSR这三个位会共同影响输出的信号。
④输出引脚
输出比较的输出信号最终是通过定时器的外部IO 来输出的,分别为CH1/2/3/4,其中前面三个通道还有互补的输出通道CH1/2/3N

从这开始


6. ⑥断路功能
断路功能就是电机控制的刹车功能,使能断路功能时,根据相关控制位状态修改输出信号电平。在任何情况下,OCx 和OCxN 输出都不能同时为有效电平,这关系到电机控制常用的H 桥电路结构原因。
断路源可以是时钟故障事件,由内部复位时钟控制器中的时钟安全系统(CSS)生成,也可以是外部断路输入IO,两者是或运算关系。
系统复位启动都默认关闭断路功能,将断路和死区寄存器(TIMx_BDTR)的BKE 为置1,使能断路功能。可通过TIMx_BDTR 寄存器的BKP 位设置设置断路输入引脚的有效电平,设置为1 时输入BRK 为高电平有效,否则低电平有效。
发送断路时,将产生以下效果:

 TIMx_BDTR 寄存器中主输出模式使能(MOE)位被清零,输出处于无效、空闲或
复位状态;
 根据相关控制位状态控制输出通道引脚电平;当使能通道互补输出时,会根据情
况自动控制输出通道电平;
 将TIMx_SR 寄存器中的 BIF 位置 1,并可产生中断和DMA 传输请求。
 如果 TIMx_BDTR 寄存器中的 自动输出使能(AOE)位置 1,则MOE 位会在发生下
一个UEV 事件时自动再次置 1。