概述

1 TIM(Timer)定时器

2 TIM1和TIM8高级定时器

2.1TIM1和TIM8主要特性

2.3时基单元

2.3.1自动装载寄存器和影子寄存器

2.3.2 预分频器

2.4计数器模式

2.4.1向上计数模式

2.4.2向下计数模式

2.4.3中央对齐模式(向上向下计数)

2.5重复计数器

2.6计数器时钟选择

3 输出比较(PWM)

3.1参数计算

4 输入捕获

4.1主从触发模式

4.2输入捕获基本结构

4.3PWMI基本结构


概述

        定时器本质就是一个计数器,那么他是怎么实现计数,并且还可以产生PWM波形呢?

我们使用的STM32F1系列单片机主频是72MHz,也就是一秒钟产生72000000个脉冲,当我们使用定时器TIM的时候,首先会使用PSC预分频器预分频,将其设置为1就是2分频,3就是4分频。假设我们将其进行720分频就要将PSC设置为719(亦可以写720-1),也就是1s产生100000个脉冲。CNT是计数器,会在一个脉冲到来时计数+1,要计数多少次就需要ARR自动重装载寄存器,我们将ARR的值(Period设置为100-1)设置为99,那么计数器会在计数到100个脉冲时溢出,也就是1ms溢出,若我们在每次脉冲时产生中断就要使能中断NVIC。

        计数原理我们已经搞明白了,那么PWM信号是怎么产生的呢?这里就需要提到CCR捕获/比较器,我们将其设置为50,(此时占空比DUty=CCR/ARR+1=50/99+1=50%)CNT计数器会在计数的时候不停与CCR的值(50)进行比较,当计数到50的时候,会根据我们设置的PWM模式,输出相应的电平,例如置1,置0,或者翻转电平,然后输出PWM波形。

PWM的频率Freq=72MHz/(PSC+1)(ARR+1)=72000KHz/(720)(100)=1KHz。

频率的概念:频率=1/T,这里T的单位是秒,频率的单位是Hz。

1ms=1000us;1s=1000ms;1Khz=1000Hz:1MHz=1000KHz

1 TIM(Timer)定时器

        定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断,这便是定时器的基本功能,可以看出定时器本质就是一个计数器。

STM32定时器拥有16位计数器,预分频器,自动重装寄存器,重复次数寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。

定时器不仅具备最基本的定时中断功能,而且还包含内外时钟源选择,输入捕获,输出比较,编码器接口,主从触发模式等多种功能。

根据复杂程度和应用场景分为了高级定时器,通用定时器,基本定时器三种类型。

注意:STM32F103C8T6定时器资源:TIM1,TIM2,TIM3,TIM4。接下来我会以高级定时器为例子进行讲解,因为高级定时器涵盖了通用和基本定时器,通过对高级定时器进行理解,就相当于学习了所有定时器的内容。

 定时中断基本结构图

2 TIM1和TIM8高级定时器

高级控制定时器(TIM1和TIM8)由一个16位的自动重装载计数器组成,它由一个可编程的预分频器驱动。

高级定时器框图

它适合多种用途,包含测量输入信号脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补 PWM等)。

使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。

注意:高级控制定时器 (TIM1 TIM8) 和通用定时器 (TIMx) 是完全独立的,它们不共享任何资源。它们可以同步操作。

2.1TIM1和TIM8主要特性

2.3时基单元

可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动重装载寄存器。这个计数器可以向上计数,向下计数,或者向上向下双向计数。此计数器时钟由预分频器分频得到。计数器,自动装载寄存器和预分频器寄存器可以由软件读写,即使计数器还在运行读写仍然有效。

时基单元框图

时基单元包含
计数器寄存器(TIMx_CNT)

预分频器寄存器(TIMx_PSC

自动装载寄存器(TIMx_ARR)
重复次数寄存器(TIMx_RCR)

2.3.1自动装载寄存器和影子寄存器

        自动装载寄存器是预先装载的,写或读自动装载寄存器将访问预装载寄存器。预装载寄存器的内容会在每次更新事件时传送到影子寄存器。有预装入就需要用到自动装载寄存器,也就会用到影子寄存器。

两个例子说明影子寄存器的作用 ;

ARR的值为80,CNT计数到35,若ARR无预装值(即没有用到影子寄存器)此时写新值28,因为此时CNT35>新值28,CNT一直数到FFFF才会归零,然后数到28溢出;若有预装值数到80就溢出归零,然后执行新值28。

ARR的值为80,CNT计数到35,若ARR无预装值(即没有用到影子寄存器)此时写新值40,因为此时CNT35<新值40,还没数到新值,立即装入新值,数到40就溢出;若有预装值则数到80才溢出归零,然后执行新值40。

一句话总结就是,在突然写入新值的时候,是立刻生效,还是执行完生效,有预装值影子寄存器会让计数器把上一个值数完。下图是参考手册给出时序图的例子;

2.3.2 预分频器

预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。新的预分频器的参数在下一次更新事件到来时被采用。

当分频器的参数从1变到2时,计数器的时序图

当分频器的参数从1变到4时,计数器的时序图

2.4计数器模式

2.4.1向上计数模式

在向上计数模式中,计数器从0计数到自动装载值(TIMx_ARR寄存器设置的值),然后重新从0开始计数并且产生一个计数器溢出事件。也可以通过软件方式(或使用硬件的从模式控制器)设置UG位产生更新事件。

如果使用了重复计数器功能,向上计数达到设置的重复计数寄存器(TIM_RCR)中设定的次数后时,产生更新事件:否则每次计数器溢出时才产生更新事件。

当发生一个更新事件时,所有的寄存器都被更新,硬件同时设置更新标志位。

2.4.2向下计数模式

在向下计数模式中,计数器从自动装载的值(TIMx_ARR寄存器设置的值)开始向下计数到0的,然后从自动装载的值重新开始计数并且产生一个计数器溢出事件。也可以通过软件方式(或使用硬件的从模式控制器)设置UG位产生更新事件。

如果使用了重复计数器功能,当向下计数重复了重复计数寄存器(TIM_RCR)中设定的次数后时,产生更新事件:否则每次计数器向下溢出时才产生更新事件。

当发生一个更新事件时,所有的寄存器都被更新,硬件同时设置更新标志位。

2.4.3中央对齐模式(向上向下计数)

在中央对齐模式,计数器从0开始计数到自动装载的值(TIMx_ARR寄存器设置的值)-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件:然后再从0开始重新计数。

可以在每次计数上溢和每次计数下溢时产生更新事件;也可以通过软件方式(或使用硬件的从模式控制器)设置UG位产生更新事件。

2.5重复计数器

假设设置好重复计数器的值为N(N是TIMx_RCR重复寄存器的值),当N递减到0时更新事件才会产生。这个特性对产生 PWM信号非常有用。

那么N在什么时候才会递减,需要下面任一条件成立:

向上计数模式下每次计数器溢出时。

向下计数模式下每次计数器溢出时。

中央对齐计数模式下每次计数器向上溢出或者向下溢出时。

注意:当更新事件由软件产生(或使用硬件的从模式控制器)设置UG位,则无论重复计数器的值是多少,立即发生更新事件,并且重复计数器的值恢复成N。

2.6计数器时钟选择

计数器时钟可以由下列时钟源提供:

内部时钟(CK_INT)。RCC内部时钟

外部时钟模式1:外部输入引脚。此模式被选中,计数器可以在选定输入端的每个上升沿或下降沿计数。例如配置向上计数器在T12输入端的上升沿计数,当上升沿出现在T12计数器技术一次,且TIF标志被设置

T12外部时钟触发框图

外部时钟模式2:外部触发输入ETR。计数器能够在外部触发ETR的每一个上升沿或下降沿计数

外部时钟2触发框图

内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频。如可以配置一个定时器Timer1作为另一个定时器Timer2的预分频器。

3 输出比较(PWM)

OC(0utput Compare)输出比较

输出比较可以通过比较CNT和CCR寄存器值的关系,来对输出电平进行置1/0,或翻转的操作,用于输出一定频率和占空比的PWM波形

每个高级定时器和通用定时器都拥有4个输出比较通道

高级定时器的前三个通道额外拥有死区生成和互补输出的功能

输出比较模式

一般我们仅使用PWM模式1中的向上计数模式,这种模式是如何输出频率和占空比都可调节的PWM波形的呢?我们来看下面的图:

时基单元中CNT在自增运行时会与输出比较单元的CCR不断进行比较,输出比较单元总共有4路。

输出比较单元最开始,是CCR捕获/比较寄存器,CCR由我们自己设置。CCR后面就是输出模式控制器,这里我们以PWM模式1作为例子,CNT<CCR时,REF置有效电平,CNT>=CCR时,REF置无效电平,看右上角的图,红色的线是CCR由我们设置为30,CNT向上计数并且不断与30比较,不难理解是如何生成PWM波形的。

3.1参数计算

PWM参数计算

由图可知:CCR(比较值)=30;ARR(重装值)=99

CK_PSC(系统时钟)=72MHz

假设:PSC(预分频)=719

PWM的周期始终对应计数器的溢出周期,所以PWM的频率就等于计数器的更新频率。

PWM频率Freq=72000Khz/(720*100)=1Khz;

PWM占空比Duty=30/100=30%;

PWM分辨率Rwso=1%;

4 输入捕获

IC(Input Capture)输入捕获

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

每个高级定时器和通用定时器都拥有4个输入捕获通道

可配置PWMI模式,同时测量频率和占空比

可配合主从触发模式,实现硬件全自动测量

频率的定义:一秒钟的周期数。

测频法适合测量高频信号,测周法适合测量低频信号,不过都有可能有正负一误差。

中界频率实际上就是将测频法和测周法相乘,然后N被消除,在开根号结果就是Fm。

结构框图

        以通道1即TIMx_CH1往右看,输入信号进入输入滤波器和边沿检测器,输入滤波器可以对信号进行滤波,避免一些高频信号的毛刺信号误触发,边沿检测器可以选择高电平触发,或者低电平触发,当出现对应的电平后,边沿检测器就会触发后续电路。我们可以看到检测器输出部分有TI1FP1和TI1FP2这是因为,这个寄存器里面有两套检测装置,其中FP1给IC1,FP2给FP2。

这样做的主要目的是可以把一个引脚的输入,同时映射到两个捕获单元,第一个捕获通道,使用上升沿触发,用来捕获周期;第二个通道,使用下降沿触发,用来捕获占空比。这样就可以同时测量一个引脚即一个信号的频率和占空比。这也是PWMI模式的经典结构。

        输入捕获上升沿:当我们配置为PA0引脚为输入捕获上升沿触发,每来一次上升沿,CNT转运到CCR一次,由于CNT计数器是由内部的标准时钟驱动的,所以 CNT的数值其实可以用来记录两个上升沿之间的时间间隔,这个时间间隔就是周期,再取倒数,就是测周法的频率了,CCR捕获到的值就是计数值N,CNT的驱动时钟就是Fc,Fc/N就是频率。

        捕获中断:如果需要在CCR捕获瞬间,处理一些事情的话,就可以开启捕获中断。

注意:在每次CCR捕获之后都要把CNT清零,这样下次上升沿再次捕获的时候取出的CNT才是两个上升沿的时间间隔这个在一次捕获后将CNT清零的步骤,我们可以用主从触发模式,自动来完成。

4.1主从触发模式

主从触发模式是如何完成硬件自动化操作的:主从触发模式就是主模式,从模式,触发源选择这三个功能的简称。

        主模式可以将定时器内部的信号(复位,使能,更新,输出比较),映射到TRGO引脚,用于触发别的外设,所以这部分叫做主模式。从模式就是接受其他外设或者自身外设的一些信号,用于控制自身定时器的运行,也就是被别的信号控制 。触发源选择就是选择从模式的信号源,选择指定的一个信号,得到TRGI去触发从模式,从模式可以在这个列表里,选择一项操作来自动执行,可以认为他是从模式的一部分。

        如果想让TI1FP1信号自动触发CNT清零,那么触发源选择就可以选择TI1FP1,从模式执行的操作就可以选择执行Reset的操作,这样TI1FP1就可以自动触发从模式,从模式自动清零CNT实现硬件全自动测量。

4.2输入捕获基本结构

        右上角是时基单元,将其配置好,启动定时器,CNT就会在预分频之后的这个时钟驱动下不断自增,这个CNT就是我们测频测周法需要计数的东西,经过预分频之后,这个位置的时钟频率,就是驱动CNT的标准频率Fc,标准频率=72M/预分频系数。

        输入捕获通道1的GPIO口,输入一个方波信号,经过滤波器和边沿检测,选择TI1FP1为上升沿触发,之后选择直连的通道,分频器选择不分频,当TI1FP1出现上升沿之后,CNT的当前计数值转运到CCR1里,同时触发源选择TI1FP1为触发信号,从模式选择复位操作,这样TI1FP1的上升沿,也会通过上面这一路去触发CNT清零。但是这里有个先后顺序,先转运CNT的值到CCR里,再触发从模式给CNT清零。

4.3PWMI基本结构

        PWMI模式,使用了两个通道同时捕获一个引脚,可以同时测量周期和占空比。由左上图可以看出CCR2捕获的是高电平的计数值, CCR1是一整个周期的计数值,占空比=CCR2/CCR1。

5 编码器接口

Encoder Interface编码器接口

编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置旋转方向和旋转速度

每个高级定时器和通用定时器都拥有1个编码器接口

两个输入引脚借用了输入捕获的通道1和通道2

正交编码器执行逻辑

计数器自增还是自减根据右边的框图来判断。

编码器结构

编码器右边有两个输入端,分别接到编码器的A相和B相,根据网络标号可知接口的两个引脚就是CH1和CH2引脚。


编码器接口基本结构

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐