高级定时器
STM32F103有 2 个高级定时器 TIM1 和 TIM8,高级定时器的功能主要有定时、输入捕获、输出比较、互补输出等。
高级定时器简介:
计数器16bit,上 / 下 / 两边 计数,TIM1和TIM8,还有一个重复计数器RCR,独有;
有4个GPIO,其中通道1 ~ 3还有互补输出GPIO;
时钟来自PCLK2,为72M,可实现1~65536分频;
高级定时器和通用定时器的引脚分布:
高级定时器结构框图(分成6个部分):
一、时钟源:
-
内部时钟(CK_INT);
-
外部时钟模式1:外部输入引脚TIx(x=1,2,3,4);
-
外部时钟模式2:外部触发输入ETR;
-
内部触发输入(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%
电机控制:
刹车功能描述(强制关闭输出,功能是防止电机损坏,此时输出为设置的空闲电平):
死区时间寄存器:
文章来源:https://www.toymoban.com/news/detail-829374.html
文章来源地址https://www.toymoban.com/news/detail-829374.html
到了这里,关于stm32专题二十六:高级定时器介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!