深入解析STM32定时器的工作原理和应用

STM32有3种类型的定时器,分别是基本定时器、通用定时器和高级定时器。
基本定时器有TIM6和TIM7,通用定时器有TIM2、TIM3、TIM4和TIM5,高级定时器有TIM1和TIM8。根据芯片的型号不同定时器的个数也会有所区别。本文主要介绍通用定时器。
通用定时器拥有定时中断、主模式触发DAC、内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能。

通用定时器结构

上图为通用定时器的结构框图,可分为3个部分:时钟选择、时基单元、输入捕获/输出比较。

时钟选择


STM32微控制器的通用定时器时钟可以由4个来源:
内部时钟(CK_INT)、外部输入引脚(TIX)、外部触发输入(ETR)、内部触发输入(ITRX)

内部时钟是常用的定时器时钟,通用定时器挂载在APB1总线上,APB1总线最大支持36MHz的时钟频率,但定时器的输入任是72MHz,因为APB1总线在连接定时器时有还有一个倍频器,当APB1预分频系数为1时则频率不变,否则频率乘2。也就是说如果AHB总线上的时钟频率是72MHz的话,那么在到达APB1总线时,APB1预分频器需要对其二分频得到36MHz的频率,此时APB1总线的频率为36MHz,该时钟频率在输入到定时器时通过倍频器,倍频器根据条件判断需要对其2倍频又得到72MHz的时钟频率。所以定时器的内部时钟输入都是72MHz。

外部触发输入(ETR):是指来自外部的信号输入,这个信号经过极性选择、边沿检测和预分频器然后通过滤波后输入定时器内部作为时钟。例如外部输入一个方波,当每到一个上升沿或下降沿时读取一个信号,这个信号给到定时器内部作为定时器的时钟来源。
外部触发输入脚(TIX):框图中的外部触发输入脚输入信号为TI1FP1和TI2FP2,这两个输入信号分别来自TIMX_CH1和TIMX_CH2,即定时器的两个输入捕获通道。与外部触发输入(ETR)相比,这两个信号不仅可以通过数据选择器的选择作为定时器的时钟输入,还可以输入到编码器接口。

内部触发输入(TIRX):主要用于定时器的级联,由框图左侧可以看出,触发控制器的的输出TRGO可以连接至其他定时器,TRGO连接其他定时器时即是连接在了其他定时器的TIRX输入上。TGRO表示定时器的更新或中断事件。

时基单元


定时器的时基单元由3个部分构成,分别是PSC预分频系数、CNT计数器和ARR自动重装载寄存器。
PSC预分频器是对输入的时钟信号进行分频,若预分频器中的值为0则是1分频,若预分频器中的值是1则是2分频。即实际分频系数=预分频器值+1。CNT计数器就是对预分频之后的时钟进行计数,可以是向上计数模式、向下计数模式或中央对齐模式。以向上计数模式为例,开始时CNT计数器中的值是0,每当计数时钟是上升沿时,CNT计数器中的值加1。当达到目标值时CNT计数器清零,而目标值就存放在ARR自动重装载计数器中。

输入捕获/输出比较


每个定时器都有4个引脚,对应4个输入/输出通道。输出比较通道主要用于PWM波形的输出,可以用来驱动电机;输入捕获通道用于测量输入方波的频率等。二者共用捕获/比较寄存器,且二者不能同时使用,即使用了输入捕获通道就不能使用输出比较通道。

计数器模式

3种不同的计数模式:
向上计数模式:开始时CNT计数器中的值为0,每当有一个上升沿信号,CNT计数器中的值就加1,直到CNT计数器中的值等于ARR自动重装载寄存器中的值时,CNT计数器清零。然后进行下一个循环。
向下计数模式 :开始时CNT计数器中的值为ARR自动重装载寄存器中的值,每当有一个上升沿信号,CNT计数器中的值就减1,直到CNT计数器中的值等于0时,CNT计数器中的值又恢复到ARR自动重装载寄存器中的值。然后进行下一个循环。
中央对齐模式:开始时CNT计数器中的值为0,每当有一个上升沿信号,CNT计数器中的值就加1,直到CNT计数器中的值等于ARR自动重装载寄存器中的值时,从下一个上升沿信号开始,CNT计数器中的值就开始减1,直到CNT计数器中的值等于0。然后进行下一个循环。

时间计算公式

计数器模式下对PSC和ARR寄存器进行相应的配置可使计数器作为时钟功能使用,但前提是对PSC预分频器和ARR自动重装载寄存器的值的准确配置。
公式如下:
Tout = ((arr+1)*(psc+1))/Tclk
其中:
Tclk:定时器的输入时钟频率(单位MHZ) 通常为72MHz
Tout:定时器溢出时间(单位为us) 即用户想要的时间

定时器初始化的时候需要设置分频系数psc,就是将系统时钟(72MHz)进行分频,然后设置重装载值arr,这个重装载值就是指在定时器的计数值达到arr时,定时器就会重新装载其他值(向上计数时重装载0,向下计数时重装载arr)。定时器计数的值被重装载一次被就是一个更新(Update)。

这个公式也可以记忆为:Tout=arr+1/(Tclk/(psc+1))

Tclk/(psc+1)表示预分频后的频率,指的是1s内计数的个数,频率的倒数是周期,周期指的是计一个数用的时间,所以1/(Tclk/(psc+1))表示的是计一个数需要用的时间。
arr+1理解为需要计数的个数,计一个数用的时间是1/(Tclk/(psc+1)),那么计arr个数的时间就是arr+1/(Tclk/(psc+1)),这个时间就是我们需要的溢出时间(更新时间)。

例如:若想要1s更新一次,设置psc=10000-1,arr=7200-1,就可以得到Tout=1s
psc=10000-1,那么1/(Tclk/(psc+1))=1/7200,可理解为计一个数用1/7200s,那么计arr+1=7200个数用时就是1s。

当更新事件发生后可以通过使能定时器中断和配置NVIC到达定时器中断的功能。

输出比较


输出比较电路部分结构框图如图所示。输出比较可以通过比较CNT计数器与CCR捕获/比较寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形。
上图所示为通用定时器的输出比较电路,也即是定时器总结构框图中CCR寄存器右侧的部分。

由框图可以看出输入模式控制器的输入信号有两个,分别是CNT>CCR和CNT=CCR,通过对输入模式控制器的配置可实现对这两个信号的相应,可配置为当CNT>CCR或CNT=CCR输出高电平,其余时候为低电平。输出模式控制器的输出信号oc1ref可至主模式控制器作为TRGO信号,但一般都是输入到数据选择器,经数据选择器选择后到达输出使能电路,作为OC1输出。

PWM简介

PWM控制就是对脉冲的宽度进行调制的技术,即通过一系列脉冲宽度进行调制,来等效地获得所需要的波形(含形状和幅值)。
PWM控制的基本原理是面积等效原理,芯片输出的TTL电平只有高电平和低电平,如果要获得一个介于二者之间或者其他数值的电平时就需要用到PWM技术,可以通过改变高电平所占整个电平周期的时间来实现。高电平所占整个电平周期的时间称为占空比,也就是说可以通过改变占空比来获得需要的波形,电平波形的有效值就是需要获得的电平值。
在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域

该图就为改变占空比来实现将方波等效为正弦波。
PWM参数有
频率 = 1 / Ts
占空比 = TON/ TS
分辨率 = 占空比变化步距

输出比较模式


输出比较的几种模式如上表所示,常用的模式为PWM模式1和PWM模式2。
PWM模式1下又分为两种情况,在向上计数模式下,当CNT<CCR时,REF输出高电平,反之输出低电平;向下计数模式下,当CNT>CCR时,REF输出低电平,反之输出高电平。

以图为例,这是向上计数模式下的PWM模式1,纵坐标99表示ARR自动重装载寄存器的值,30表示CCR寄存器的值,当CNT<CCR时REF输出高电平,CNT ≥CCR时输出低电平。向下计数模式下原理相同。

PWM模式2同样分为在向上计数模式下和向下计数模式下的情况,在向上计数模式下CNT<CCR,REF输出低电平,反之输出高电平;在向下计数模式下CNT>CCR输出高电平,反之输出低电平。
PWM模式1和PWM模式2只是极性的选择和输出不同而已,PWM模式2可看作PWM模式1的取反输出。
PWM模式下参数的计算:
PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
PWM占空比: Duty = CCR / (ARR + 1)
PWM分辨率: Reso = 1 / (ARR + 1)

主从触发

通用定时器具有主从触发模式。

主模式就是指定时器发出TRGO信号给其他定时器或外设,这是这个发出TRGO信号的定时器就为主模式。从模式就是指接收其他定时器或外设的信号,然后根据接收到的这些信号进行相应的操作。
如上图所示,主模式的TRGO信号可以是Reset、Enable等,而从模式的触发信号TRGO可以是ITRX、TI1FP1等。
主模式就是自己执行操作然后发出相应信号给其他外设,从模式就是接收信号然后进行相应操作。

输入捕获

输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。

通用定时器的输入捕获电路就是定时器总结构框图中CCR寄存器左侧的部分。


这里需要关注的一个问题是,CH1引脚输入的信号在经滤波和边沿检测之后得到TI1FP1和TI1FP2,TI1FP1是用于输入到CCR1寄存器中的信号,TI1FP2是用于输入到CCR2寄存器中的信号,一个引脚的信号可以输入到两个寄存器中。同样的,CH2引脚输入的信号经滤波和边沿检测之后得到TI2FP1和TI2FP2,TI2FP1是输入到CCR1中的信号,TI2FP2是输入到CCR2中的信号。
可以看出一个引脚输入的信号经处理后可以输入到两个寄存器,而一个寄存器可以不同时输入两个引脚的信号。例如,当选择CH1引脚作为输入捕获时,输入的数据经过处理后可以同时输入到CCR1和CCR2中;而使用CCR1时,可以将CH1引脚的输入作为它的输入信号,也可以将CH2引脚的输入作为它的输入信号。

通用定时器的输入捕获电路如图所示。以CH1为例,CH1引脚输入的信号为TI1,经滤波后得到TI1F信号,再经过边沿检测器得到上升沿和下降沿,这两个信号经数据选择器可送至从模式控制器也可再经数据选择器和分频器后到达CCR1寄存器。但能输入CCR1寄存器的信号不止TI1FP1这一个,来自CH2引脚的TI2FP1信号和TRC信号同样也可以输入CCR1寄存器。具体输入那个信号取决于数据选择器。

频率测量

频率的测量有测频法和测周法。

测频法:在闸门时间T内,对上升沿计次,得到上升沿次数N,则频率𝑓𝑥=𝑁 / 𝑇
测周法:两个上升沿内,以标准频率fc计次,得到N ,则频率𝑓𝑥=𝑓𝑐 / 𝑁

测频法适用于高频信号,测周法适用于低频信号

输入捕获测频率


单通道的输入捕获结构如上图所示。首先需要配置时基单元,在标准频率fc的驱动下CNT计数器不断自增,输入捕获引脚输入方波信号,经滤波器和边沿检测机械选择后得到TI1FP1,TI1FP1信号分两路传输,一路经分频器后到达CCR1寄存器,CNT计数器的值被从到CCR1寄存器,一路触发从模式,从模式执行复位操作,CNT计数器清零。

每一个上升沿信号输入都是CNT计数器的值先送入CCR寄存器然后CNT计数器清零,这样CCR寄存器中的值就为标准频率fc 计次下输入方波信号一个周期内计数值N,在通过测周法计算公式𝑓𝑥=𝑓𝑐 / 𝑁,就可以计算出输入方波的频率。

输入捕获测频率和占空比(PWMI)


利用输入捕获测频率和占空比也称为PWMI模式,结构如上图所示。
单独测频率与PWMI模式相比,前者是一个通道输入一个寄存器捕获,后者为一个通道输入两个寄存器捕获。PWMI模式中测频部分与输入捕获单独测频率相同,都是在TI1FP1触发下CCR1寄存器捕获CNT计数器的值然后CNT计数器清零。CCR1寄存器捕获到的值为标准频率fc 计次下输入方波信号一个周期内计数值N,由此可以计算出输入方波信号一个周期的时间。

测占空比利用到的是CCR2寄存器,是TI1FP2触发,TI1FP2触发边沿与TI1FP1触发边沿相反,即TI1FP1为上升沿触发TI1FP2为下降沿触发。CCR2寄存器捕获到的就是标准频率fc 计次下输入方波信号一个周期内高电平时间内的计数值,由此可以计算出高电平持续的时间。
高电平持续时间除以一个周期的时间就是占空比。

编码器接口模式

在时钟源选择部分中含有一个编码器接口,其信号输入为TI1FP1和TI2FP2,也就是说,定时器的编码器接口共用输入捕获通道的CH1和CH2引脚。
编码器接口可以接收正交编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT计数器自增或自减,从而指示编码器的位置、旋转方向和旋转速度。

正交编码器

正交编码器主要用于电机的测速,当其旋转轴旋转时,其输出端可以输出与旋转速度和方向对应的方波信号,读取方波信号的频率和相位信息即可得知旋转轴的速度和方向。

当旋转编码器工作时,其会产生两个方波信号,这两个信号为正交信号。根据两个信号在不同时刻的相对信息就可以读出它是正转还是反转。
例如,当A相为上升沿时B相为低电平,当A相为下降沿时B相为高电平,当B相为上升沿时A相为高电平,当B相为下降沿时A相为低电平,这4种情况下均为正转。反之则为反转。方波的频率越快则表示转速越快。

编码器接口模式

编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟。两个输入TI1和TI2被用来作为正交编码器的接口。
假定计数器已经启动,计数器由每次在TI1FP1或TI2FP2上的有效跳变驱动。根据两个输入信号的跳变顺序,产生了计数脉冲和方向信号。依据两个输入信号的跳变顺序,计数器向上或向下计数。

TI1FP1和TI2FP2是TI1和TI2在通过输入滤波器和极性控制后的信号;如果没有滤波和变相,则TI1FP1=TI1,TI2FP2=TI2。

在这个模式下,计数器依照增量编码器的速度和方向被自动的修改,因此计数器的内容始终指
示着编码器的位置。计数方向与相连的传感器旋转的方向对应。

上表中有3种计数方式,仅在TI1计数指的是只有在TI1FP1信号的有效边沿进行计数,在TI2FP2边沿不进行计数。如TI1上升沿且TI2为高电平时向下计数,TI1上升沿且TI2为低电平时向上计数。仅在TI12计数时原理相同。在TI1和TI2计数时,对TI1的有效边沿和TI2的有效边沿都进行计数,该种计数方式下计数的次数更多也更为准确。

在该模式下计数器只在0到ARR寄存器的自动装载值之间连续计数(根据方向,或是0到ARR计数,或是ARR到0计数)。所以在开始计数之前必须配置ARR。

物联沃分享整理
物联沃-IOTWORD物联网 » 深入解析STM32定时器的工作原理和应用

发表评论