STM32 TIM定时器详解及使用指南

由于期末考试、课设、放假等一系列原因,将近一个多月都没有学习单片机了。想借着这个寒假重新巩固一下stm32的基础知识并开启新任务的学习,通过这些博客来记录并监督我的学习进程(由于白天在兼职所以学习速度会比较慢)。ok,废话不多说,进入愉快的学习之旅叭!

一、定时器基础认识

1、什么是定时器

STM32定时器是一种用于测量和控制时间的硬件模块,内置在STM32微控制器中。它具有多个定时/计数通道,可以用于生成脉冲、计时、延时等应用。STM32定时器可以高精度地计算时间,可配置为不同的模式,如定时器模式、输入捕获模式和PWM输出模式等。定时器的工作频率可以通过外部时钟源或内部时钟源进行配置,具有灵活性和可靠性。定时器还可以与其他外设模块(如ADC、DAC、GPIO等)进行协作,提供更多的功能和应用。

注:为什么是最大59.65s的定时?

        一般定时器时钟都是72MHZ,也就是一秒产生72000000次脉冲,在预分频器写0时(即不分频或1分频)设置计数器为计数最大值65536(因为该寄存器为16位,每位用01表示,最大为2*10^16),则每秒可计数72000000 / 65536次,预分频器设为最大值65536(与计数器寄存器类似),则每秒产生72000000 / 65536 / 65536次中断,取倒数后为中断产生的周期,即每两次中断产生的间隔,也就是最大的定时时间。

2、定时器分类 

STM32F103C8T6定时器资源:TIM1,TIM2,TIM3,TIM4;

①基本定时器

预分频器、计数器和自动重装载构成最基本的计数计时电路,成为时基单元。时基单元前面为时钟的输入,基本定时器只能选择内部时钟,一般为72MHZ。

预分频器:写0,不分频或1分频,输出频率=输入频率,写1,2分频,输出频率=输入频率 / 2依次类推(最大为65536);

计时器:对预分频后的计数时钟进行计数,没来1个上升沿,计数值加1,当达到最大值或目标值的时候,计数值归零,重新开始计数;

自动重装寄存器:设置计数的目标,达到计数目标的时候,产生中断信号,计数器归零。

比如要设置1s的时间,就可以设置预分频系数为7200-1,重装载值为10000-1(方式不唯一);

② 通用定时器

        基本定时器仅支持向上计数,通用定时器可以设置,向上计数,向下计数和中央对齐模式

        时钟源可以选择内部时钟也可以选择外部时钟

        增加了输入捕获与输出比较电路

③高级定时器 

        增加了重复次数计数器,可以实现每个几个周期产生一次中断信号

        增加了输出比较模块的功能,可以驱动三项无刷电机等

        增加了刹车输入功能,给电机驱动提供安全保障

3、计数器时序

①预分频器时序

预分频器系数为1时,计数器使能后(CNT_EN拉高),计数器时钟运行,计数器时钟频率等于预分频器时钟频率。计数器在计数器时钟每个上升沿计数。在预分频控制寄存器将预分频系数改为1时,在这个计数周期结束后产生了更新事件,预分频寄存器才会将预分频值传递给预分频缓冲器,从而产作用。

②计数器时序

计数器也有类似于预分频器的缓冲机制,这种缓冲寄存器也叫影子寄存器,并且可以通过设置ARPE位来选择是否开启缓冲功能。如图开启了缓冲的功能。

在自动加载寄存器将重装载值改变时,在本周期内还是使用上次的目标值,在产生中断事件后,由自动加载影子寄存器产生实际的作用。

4、时钟树

二、输出比较

1、输出比较功能图

如图蓝色部分就是输出比较部分。这块电路会比较CCR(捕获 / 比较寄存器)与CNT计数器的值,当CCR>CNT,CCR<CNT,CCR=CNT时,电平会对应置0或1,这样就会产生电平不断跳变的PWM波形了。

2、PWM简介

3、PWM参数计算

三、输入捕获

1、输入捕获功能图

2、频率测量

测频法是测量一定时间内电平跳变的次数,适用于高频信号;

测周法是测量两个上升沿之间的时间来测量频率,适用于低频信号;

通过两种方法相乘开根号算出 fm 为中界频率。在小于这个频率的时候使用测频法,大于这个频率的时候使用测周法。

3、输入捕获基本结构

对于GPIO捕获的信号,在经过滤波器去噪处理后,通过边沿检测模块。当检测到一个上升沿(或者下降沿)的时候清零CNT寄存器,等待检测出下一个上升沿(或下降沿)的时候将CNT的值传给CCR1。这样便求出一个周期内的计数值,则可算出频率。

4、PWMI基本结构

PWMI模式在测量出信号频率的同时可以测量信号的占空比。

该模式多了一路来触发CCR2的捕获。通过设置为检测相反的边沿(比如TI1FP1检测的是上升沿,则TI1FP2检测下降沿,来检测出高电平的持续时间)在检测到下降沿的时候记录一次CNT的值到CCR2中。则CCR2的值就是高电平的持续时间。这样就可以算出该信号的占空比。

四、编码器测速

一个编码器有两个输出,一个是A相一个是B相。在接到STM32定时器的编码器接口后,编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减。比如初始化之后,编码器右转,则每产生一个脉冲,CNT就加1;编码器左转,则每产生一个脉冲,CNT就减1。如果每隔一段时间取一次CNT的值并把CNT清零,这样就能求出编码器旋转的方向与速度。

1、正交编码器

只有一个方波其实就可以测量速度,但无法检测方向。所以就使用了正交信号:当正转时,A相提前B相90°,反转时,A相滞后B相90°。编码器旋转时电平会对应右边框图的状态。当同时满足四个状态时就可以确定是正转还是反转,然后对CNT进行自增或自减操作(CNT的自减0的下一位为65535,我们可以将16位无符号数转化为16位有符号数)。

2、编码器接口框图

3、编码器的计数模式

4、模式3工作实例 

作者:汘荨

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 TIM定时器详解及使用指南

发表评论