TIMx简介
- 可编程预分频驱动
- 16位
- 自动装载计数器
- 用于
- 输入:测试脉冲宽度
- 输出:产生输出波形(输出比较和PWM)
- RCC预分频和定时器预分频,精度:nus级
- 定时器完全独立
TIMx主要功能
- 通用定时器包括TIM2 3 4 5
- 16位向上,向下,向上/向下自动装载
- 预分频
- 4个通道:输入捕获,输出比较,PWM生成,单脉冲输出
- 外部信号控制定时器实现同步
- 中断:更新,触发事件(起停,初始化和外内触发)以及输入捕获和输出比较
- 支持编码器和霍尔传感器
- 触发输入可用于电流管理
TIMx功能描述
时基单元
- 定时器组成为16位计数器和自动装载寄存器
- 可向上,向下和上下双向计数
- 三个重要寄存器:计数器,预分频,自动装载
- 更新事件:UEV
- 自动装载寄存器:ARR
- 预装载寄存器:PSC
计数器模式,一共有三种
向上计数模式
- 从0到ARR,产生UEV
- 可以禁止更新,否则ARR的影子寄存器也会被更新
- 更新时,所有的寄存器都更新
向下计数模式
- 基本同上文,从ARR到0
双向计数模式
- 基本同上文,有两次UEV产生
时钟选择
- 内部时钟最常用
- 外部时钟模式有两种,TIx和ETR
流程如下:(相当于是计数)- 设置检测的通道
- 选择滤波器带宽
- 上升沿极性
- 选择定时器时钟模式
- 选择触发输入源
- 启动定时器
ETR模式时,设置滤波,分频,检测沿和开启模式和定时器即可,基本同TIX
- 内部触发IIRx,可以将两个定时器进行联动
捕获和比较通道
- 包括比较寄存器
- 输入为数字滤波,多路复用和预分频器
- 输出为比较器和输出控制
输入捕获模式
- 捕获的概念一定要搞懂:捕获模式下,当检测到某种边沿的信号时,计数器的当前值被锁存到CCR中,SR置位,产生中断或者DMA操作,这样的功能可以用来测试PWM的宽度。
- 编程步骤如下:
- 选择输入端
- 配置滤波器的带宽
- 设置有效边沿
- 设置预分频
- 允许捕获寄存器操作
- 允许中断
PWM输入模式
-
这个是输入捕获模式的一个特例,比如我们要测试PWM的占空比,CCR1用于保存周期,CCR2保存高电平事件,如下图:
- 操作如下:
- 设置CCR1和CCR2的有效输入
- 设置CCR1和CCR2有效极性
- 设置有效的触发信号
输出比较模式
- 比较输出功能用于控制一个输出的波形,或者指示一段时间已经到,将计数器与比较寄存器进行对比,相同时输出到设置的引脚,输出的电平同样可以设置。
- 设置中断位,产生中断或者DMA操作
- 输出比较模式的设置流程如下:
- 选择时钟
- 将数据写入ARR和CCR中
- 如需要,设置中断和DMA
- 设置输出模式(电平极性)
启动
PWM模式
比如要输出周期为8,高电平占3的PWM输出波形,则ARR为8,而CCRX为3,
- ARR决定频率
- CCRx决定占空比
-
同样可以分为向上对齐,向下对齐和中央对齐的方式,下面是中央对齐方式的输出
单脉冲模式
外部引脚接收到一个脉冲,比如按键,我们需要延时TDELAY以后,产生一个脉宽为TPULSE的脉冲。其中延时由CCR1来决定,脉冲由ARR-CCR1来决定.
在外部事件时清除OCXREF
这种方式下可以用于做电流控制,正常比较输出模式下,计数超过CCRX时,输出为低电平,如果CCRX固定,则输出的脉宽是固定的,但如果有外部引脚输入一个高电平(电流超出),则直接拉低输出。
编码器接口模式
这个在步进电机上会有用到,重点关注一下,图如下:
- 可以设置在T1和T2计数或者同时计数
- 选择极性,这里为上升沿计数,同时可以设置滤波器
- 通过两个输入的顺序,确定方向,这个方向值实时检测,相当于两个脉冲的顺序,为定时器增加了一个方向控制的信号,当然,定时器的其他功能都可以正常使用。
- 增量编码器还有一个引脚为机械零点,我们可以设置成为外部中断,在中断服务程序中设置计数器进行复位。
- 编码器输出给单片机建议使用比较器进行隔离,以提高抗干扰能力
- 两个编码器输入事件的间隔信息,我们可以读取以后,从而转换成机械的动态信息(速度,加速度,减速度)
定时器输入异或功能
略
定时器和外部触发的同步
定时器和外部信号组合在一起,有三种模式
- 复位模式
外部脉冲输入时,所有的寄存器重新读取,重新计时,同时触发标志,进行中断和DMA请求。 - 门控模式
只在有外部信号时计数,其他事件计数器暂停。 - 触发模式
有某个事件时,使能计数器 - 外部时钟模式+触发模式
时钟由外部输入,同时用触发信号进行控制。
定时器同步
一个定时器处于主模式,对另外一个处于从模式的定时器进行复位,启动,停止和提供时钟等操作。
- 做为分频器
配置定时器1为主模式,每次中断时输出一个上升沿
上升沿连接到定时器2,配置定时器2为从模式
把定时器2用外部时钟模式1下,这样就连接起来了
最后启动两个定时器
- 使能从定时器
同样设置定时器1为主模式
设置定时器1的OC1REF波形,输出比较
配置定时器2的触发
定时器2为门控模式,也就是说,定时器1溢出以后,才控制定时器2开始计数
最后启动两个定时器
- 一个定时器去启动另一个定时器
有点类似于接力棒,一个定时器截至以后,另外一个接着计数,但是计数器1在重新计数
4.外部信号同步启动两个定时器