前言
学习永无止境!本篇是嵌入式开发之片上外设Timer,从硬件原理到实际应用,深入了解基本、通用、高级定时器的工作原理以及相关应用。
注:本文章为学习笔记,部分图片与文字来源于网络/江协科技课程/手册,如侵权请联系!谢谢!
一、定时器概述
1.1 定时器简介
定时器通过精准的时基,硬件的方式实现定时功能。其核心是计数器,时钟源经过预分频器分频后进入16位计数器计数,当达到设定值时溢出,触发中断或更新事件。
定时器不仅具有基本的定时中断的功能,其还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。
1.2 定时器分类
| 类型 | 编号 | 总线 | 功能 |
|---|---|---|---|
| 基本定时器 | TIM6/TIM7 | APB1 | 拥有定时中断,主模式触发DAC的功能 |
| 通用定时器 | TIM2/TIM3/TIM4/TIM5 | APB1 | 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从模式触发等功能 |
| 高级定时器 | TIM1/TIM8 | APB2 | 拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能 |
二、基本定时器
2.1 基本定时器简介
基本定时器TIM6和TIM7各包含一个16位自动装载计数器(自增计数),由各自的可编程预分频器驱动。 它们可以作为通用定时器提供时间基准,特别地可以为数模转换器(DAC)提供时钟。实际上,它们在芯片内部直接连接到DAC并通过触发输出直接驱动DAC。
2.2 硬件结构框图
- 时钟源:内部时钟(CK_INT);
- 触发控制器:TRGO至DAC,或者至时基单元复位、使能、计数;
- 时基单元:预分频器(PSC)、计数器(CNT)、自动重装载寄存器(ARR);
- 计数溢出:U更新事件(触发其它硬件工作),UI更新中断至NVIC(可得到中断响应)。

2.3 时基单元及相关寄存器
2.3.1 预分频寄存器(TIMx_PSC)
- 作用:预分频器通过一个16位预分频寄存器(TIMx_PSC)将时钟源(CK_PSC)进行1~65536分频,因为TIMx_PSC控制寄存器具有缓冲,可以在运行过程中改变它的数值,新的预分频数值将在下一个更新事件时起作用。例如:当寄存器写0,就是不分频,CK_PSC=CK_CNT,当寄存器写1,就是2分频,2CK_PSC=CK_CNT,所以实际预分频系数=与分频器值+1(CK_CNT=CK_PSC/(PSC+1));
- 预分频值举例:预分频寄存器值设为3,即预分频系数为4(3+1);
- 预分频值更新时序①:在1分频(寄存器值0)正常运行;
- 预分频值更新时序②:想要变为4分频,写入预分频器控制寄存器值3,此时并不会立即生效,预分频器还是1分频;
- 预分频值更新时序③:在下个更新事件(计数器溢出)产生时,预分频控制寄存器的值会更新到预分频缓冲器,同时预分频计数器计数周期由1(0)变为4(0~3);
- 预分频值更新时序④:CK_CNT的周期与预分频计数器周期同步变化。

2.3.2 计数器寄存器(TIMx_CNT)
- 作用:寄存器是16位(0~65535),计数器由与分频器输出CK_CNT驱动,设置计数器寄存器(TIMx-CNT)中计数器使能计数,CK_CNT每来一个上升沿,计数器值加1,当达到最大值65535或者设定比较值时计数溢出,计数器自动回0计数,在计数溢出时会产生中断,就完成了定时任务。
- 计数器计数举例:假设预分频系数为2,计数设定溢出值为36;
- 计数器计数时序:①CNT_EN使能,②计数器开始计数周期为2,③当计数到36(设定溢出值)时,计数器溢出回0,同时产生更新事件(UEV),更新中断标志(UIF)。
- 通过软件或使用从模式控制器设置TIMx_EGR寄存器的UG位也可以产生更新事件。

2.3.3 自动重装载寄存器(TIMx_ARR)
- 作用:其值是作为计数器溢出值,直接影响计数溢出频率【CK_CNT_OV=CK_CNT/(ARR+1)=CK_PSC/(PSC+1)/(ARR+1)】。与分频器类似都拥有数据缓冲区,但是否生效是由TIMx_CR1控制寄存器中ARPE决定(0时无缓冲,1时有),无缓冲时寄存器内容可以立即生效,有缓冲(影子寄存器)时需在下个更新事件产生时生效。
- 设置TIMx_CR1中的UDIS位可以禁止产生UEV事件,这可以避免在写入自动重装寄存器时更改影子寄存器。在清除UDIS位为’0’之前,将不再产生更新事件,但计数器和预分频器依然会在应产生更新事件时重新从0开始计数(但预分频系数不变)。另外,如果设置了TIMx_CR1寄存器中的URS(选择更新请求),设置UG位可以产生一次更新事件UEV,但不设置UIF标志(即没有中断或DMA请求)。
- 当ARPE=0时的更新事件(TIMx_ARR没有预装载)

- 当ARPE=1时的更新事件(预装载TIMx_ARR)

三、通用定时器
3.1 通用定时器简介
- 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成;
- 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从模式触发等功能。
- 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。
3.2 硬件结构框图
- ①时钟源选择:内部时钟、外部时钟;
- ②时基单元:预分频器(PSC)、计数器(CNT)、自动重装载寄存器(ARR);
- ③输入捕获与输出比较、捕获比较寄存器。

3.3 功能模块
3.3.1 时钟源选择
①内部时钟:CK_INT。
②外部时钟模式1:外部输入引脚TIx。
- ETR:外部输入ETR;
- ITRx:信号来自于其它定时器,触发控制器TRGO通向的地方之一,可以实现定时器级联,ITRx来源需查表;
- TI1_ED:输入捕获单元CH1引脚,上升沿与下降沿均有效;
- TI1FP1/TI2FP2:输入捕获单元CH1/2引脚

③外部时钟模式2:外部触发输入ETRF,计数器可以在外部触发的每一个上升沿或下降沿计数,可以看出模式1中也有此通道,但为了不住那也通道,ETR触发时一般选择模式2。

3.3.2 时基单元与计数模式
- 时基单元与基本定时器组成一致,区别是基本定时器只有向上计数,而通用定时器有向上、向下、中央对齐3种计数模式。
- 向上计数:

- 向下计数:

- 中央对齐:

3.3.3 定时中断
- 时钟源选择:时钟模式;
- 时基单元配置:预分频器、计数器、自动重装载寄存器;
- 中断输出控制:更新中断标志位,通过中断输出控制至NVIC申请中断;
- NVIC:中断管理分配。

3.3.4 主从触发模式
主从模式可以实现部分功能的硬件自动化。
①主模式:可以将定时器内部的信号,映射到TRGO引脚,用于触发别的外设;

②从模式:接收其它外设或者自身外设的一些信号,用于控制自身定时器运行。

3.3.5 输入捕获
①简介:IC(Input Capture)输入捕获,当输入引脚出现指定电平跳变时,CNT的值会被锁存在捕获比较寄存器(CCR)中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间。每个通用定时器都拥有四个输入捕获通道,可配置为PWMI模式,实现同时测量频率与占空比。可配合主从触发模式,实现硬件自动测量。
②基本结构:
- 通道1输入源:可以是CH1输入,也可以是CH1/2/3异或输入(霍尔编码器测量);
- 输入滤波器与边沿检测:滤波后(防止毛刺)进行边沿检测,与外部中断类似,不同的是外部中断是触发中断响应,而输入捕获是触发CNT所存到CCR。此处每个通道是有两套滤波与边沿检测,例TI1输出TI1FP1(到后续电路)、TI1FP2(到通道2后续电路),交叉的原因有二,其一是灵活切换后续捕获电路输入,其二是一个通道分别捕获上升沿与下降沿,输出给两个通道后续触发电路,实现频率与占空比的同时测量,即PWMI模式。TRC(ITRx)触发,为了无刷电机驱动。
- 预分频器:对已经滤波与极性选择的信号进行分频;
- 捕获/比较寄存器:经过预分频后的信号触发CNT的值转运至CCR中,发生捕获事件(状态寄存器置标志位),也可发生中断,处理其它事。
- 注意:捕获/比较模块由一个预装载寄存器和一个影子寄存器组成。读写过程仅操作预装载寄存器,在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。

③滤波器原理:
- 原理:以采样采样频率对输入信号进行采样,当连续N个值都为高/低电平,才输出高/低电平,,如果信号抖动导致N个值不一致,则输出保持原来不变,采样率越低,采样N越大,滤波效果越好。

④频率测量:
- 测频法:在闸门时间T内,对上升沿计次,得到N,则频率fx=N/T,适合高频测量,定时器中断,记录捕获次数;
- 测周法:两个上升沿内,以标准频率fc计次,得到N,则频率fx=fc/N,适合低频测量,捕获中断,记录定时器次数;
- 中界频率:测频法与测周法误差相等的点
;
- 基本结构:选择通道1,可以硬件从模式CNT自动清0(顺序是先捕获再清0);

最低0.47元/天 解锁文章
1754

被折叠的 条评论
为什么被折叠?



