stm32专题二十六:高级定时器介绍

高级定时器

STM32F103有 2 个高级定时器 TIM1 和 TIM8,高级定时器的功能主要有定时、输入捕获、输出比较、互补输出等。

高级定时器简介:

计数器16bit,上 / 下 / 两边 计数,TIM1和TIM8,还有一个重复计数器RCR,独有;

有4个GPIO,其中通道1 ~ 3还有互补输出GPIO;

时钟来自PCLK2,为72M,可实现1~65536分频;

高级定时器和通用定时器的引脚分布:

高级定时器结构框图(分成6个部分): 

一、时钟源:

  1. 内部时钟(CK_INT);

  2. 外部时钟模式1:外部输入引脚TIx(x=1,2,3,4);

  3. 外部时钟模式2:外部触发输入ETR;

  4. 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器;

下面,我们来分析一下这个时钟源的框图:

1 内部时钟CK_INT:内部时钟 CK_INT 即来自于芯片内部,等于 72M,一般情况下,我们都是使用内部时钟;

2 外部时钟模式1:

(1)时钟信号输入引脚:

当使用外部时钟模式1时,时钟信号来自于定时器的输入通道,共 4个,分别为 TI1 / 2 / 3 / 4,即 TIMx_CH1 / 2 / 3 / 4。

外部的GPIO TIx,对应:TIMx_CH1 / 2 / 3 / 4

由TIM_CCMRx 的位 CCxS[1:0]配置,其中 CCMR1 控制 TI1 / 2, CCMR2 控制 TI3 / 4

中文参考手册中提到,通道2可以配置为输出,如果是输入模式,可以选择连接CH1 or CH2,同样的,通道1也可以选择配置成连接CH1 or CH2。

(2)滤波器:

如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对信号重新采样,来达到降频或者去除高频干扰的目的,具体的由 TIMx_CCMRx的位 ICxF[3:0]配置。

具体如何滤波?

(3)边沿检测:

边沿检测的信号来自于滤波器的输出,在成为触发信号之前,需要进行边沿检测,决定是上升沿有效还是下降沿有效。

(4)触发选择:

(5)从模式选择:

选定了触发源信号后,最后我们需把信号连接到 TRGI 引脚,让触发信号成为外部时钟模式 1 的输入,最终等于 CK_PSC,然后驱动计数器 CNT 计数。

3 外部时钟模式2

网上关于TI1FP1的描述:

       比如 TI1FP1 与 TI1FP2。说实在的,这个地方参考手册里就没有个明确的表述,让人很费解。但是可以可以推理得出来,二者都是来自同一 TI1 输入通道,经过输入滤波和边沿检测器后所产生的具有相同特征的信号,然后映射到不同的输入捕捉通道,本质上还是同一路信号。

 同理,TI2信号,经过滤波和边沿检测后产生了2路滤波信号,分别是TI2FP1与TI2FP2,它俩也是具有相同特征的信号,只是TI2FP1映射到捕捉通道IC1,TI2FP2映射到捕捉通道IC2。

4 内部触发输入:

内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。

四.输入捕获:

输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用的有测量输入信号的脉宽和测量 PWM 输入信号的频率和占空比这两种。

输入捕获的大概的原理就是:当捕获到信号的跳变沿的时候,把计数器 CNT 的值锁存到捕获寄存器 CCR 中,把前后两次捕获到的 CCR 寄存器中的值相减,就可以算出脉宽或者频率。如果捕获的脉宽的时间长度超过你的捕获定时器的周期,就会发生溢出,这个我们需要做额外的处理。

1 普通脉宽测量:当检测到第一个上升沿时,计数器CNT开始从0计数,又检测到下降沿时产生中断,此时的CNT值被锁存到CCR寄存器中,此时CCR的值就对应高电平的时间。

2 PWM输入测量:一路输入信号(TI1)占用两个捕获通道(IC1 和 IC2)。

输入捕获框图:

(1)输入通道:

需要被测量的信号从定时器的外部引脚 TIMx_CH1/2/3/4 进入,通常叫 TI1 / 2 / 3 / 4。

(2)输入滤波器和边沿检测器:

这一块和外部时钟模式一差不多。那么为什么需要滤波呢?

当输入的信号存在高频干扰的时候,我们需要对输入信号进行滤波,即进行重新采样,根据采样定律,采样的频率必须大于等于两倍的输入信号。比如输入的信号为 1M,又存在高频的信号干扰,那么此时就很有必要进行滤波,我们可以设置采样频率为 2M,这样可以在保证采样到有效信号的基础上把高于 2M 的高频干扰信号过滤掉。

边沿检测器用来设置信号在捕获的时候是什么边沿有效,可以是上升沿,下降沿,或者是双边沿,具体的由 CCER 寄存器的位 CCxP 和 CCxNP 决定。

(3)捕获通道:

捕获通道就是图中的 IC1 / 2 / 3 / 4,每个捕获通道都有相对应的捕获寄存器 CCR1 / 2 / 3 / 4,当发生捕获的时候,计数器 CNT的值就会被锁存到捕获寄存器中

这里我们要搞清楚输入通道和捕获通道的区别,输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。比如输入通道 TI1 的信号经过滤波边沿检测器之后的 TI1FP1 和 TI1FP2 可以进入到捕获通道IC1 和 IC2,其实这就是 PWM 输入捕获,只有一路输入信号(TI1)却占用了两个捕获通道(IC1 和 IC2)。当只需要测量输入信号的脉宽时候,用一个捕获通道即可。

(4)预分频器(用来降频):

捕获通道 ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。具体的由寄存器 CCMRx 的位 ICxPSC配置,如果希望捕获信号的每一个边沿,则不分频。

(5)捕获寄存器:

五 输出比较:

输出比较就是通过定时器的外部引脚对外输出控制信号,有冻结、将通道 X(x=1,2,3,4)设置为匹配时输出有效电平、输出无效电平、翻转、强制为无效电平、强制为有效电平、PWM1 和 PWM2 这八种模式。其中 PWM 模式是输出比较中的特例,使用的也最多。

结构框图:

1 比较寄存器:

当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号 OCxREF 的信号的极性就会改变,其中 OCxREF=1(高电平)称之为有效电平,OCxREF=0(低电平)称之为无效电平,并且会产生比较中断 CCxI,相应的标志位 CCxIF(SR 寄存器中)会置位。然后 OCxREF再经过一系列的控制之后就成为真正的输出信号 OCx/OCxN。

2 死区发生器:

在生成的参考波形 OCxREF 的基础上,可以插入死区时间,用于生成两路互补的输出信号 OCx 和 OCxN,死区时间的大小具体由 BDTR 寄存器的位 DTG[7:0]配置。死区时间的大小必须根据 与输出信号相连接的器件及其特性来调整。下面我们简单举例说明下带死区的PWM 信号的应用,我们以一个板桥驱动电路为例。

为了理解死区发生器,先看一个电机桥式驱动电路:

3 输出控制:

4 输出引脚

输出比较的输出信号最终是通过定时器的外部 IO 来输出的,分别为 CH1 / 2 / 3 / 4,其中前面三个通道还有互补的输出通道 CH1 / 2 / 3N。

输入捕获的应用:

1 测量脉宽或频率

2 PWM输入模式:

输出比较的应用:

PWM输出:

PWM 输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。

 PWM边沿对齐模式:

占空比

周期T内CNT从0一直加到ARR,比如ARR为99, 那么CNT共计数100.

在看高电平的时间,CNT从0一直加到CCR,比如CCR是30,注意在等于30的瞬间,就已经跳变为低电平了,所以CNT从0到29是高电平,总共为30个数的时间

所以占空比为30/100=30%

电机控制:

刹车功能描述(强制关闭输出,功能是防止电机损坏,此时输出为设置的空闲电平):

死区时间寄存器:

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值