STM32之高级定时器

高级定时器

基本框图

在这里插入图片描述

时钟源

高级控制定时器有4个时钟源可选:

1.内部时钟源CK_INT。
2.外部时钟模式1:外部输入引脚TIx(x=1,2,3,4)3.外部时钟模式2:外部触发输入ETR
4.内部触发输入(ITRx)

内部时钟源(CN_INT)

内部时钟CN_INT即来自芯片内部,等于72MHz,一般情况下,我们都是使用内部时钟。

外部时钟模式1

在这里插入图片描述

1:时钟信号输入引脚

​ 当使用外部时钟模式1的时候,时钟信号来自于定时器的输入通道,总共有2个,分别为TI1FP1和TI2FP2.

2:滤波器

​ 如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对信号重新采样,来达到降频或去除高频干扰的目的

3:边沿检测

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

4:触发选择

​ 当使用外部触发模式1时,触发源有2个,一个是滤波后的定时器输入1(TI1FP1)滤波后的定时器输入2(TI2FP2)

5:从模式选择

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

6:使能计数器

​ 经过上面5个步骤后,最后我们只需要使能计数器开始计数,外部时钟模式1的配置就算完成。

外部时钟模式2

在这里插入图片描述

1:时钟信号输入引脚

​ 当使用外部时钟模式2的时候,时钟信号来自于定时器的特定输入通道TIMx_ETR,只有1个

2:外部触发极性

​ 来自ETR引脚输入的信号可以选择为上升沿有效或者下降沿有效。

3:外部触发预分频器

​ 由于ETRP(经过触发极性选择后的ETR信号)的信号频率不能超过TIMx_CLK(72MHz)的1/4,当触发信号的频率很高的情况下,就必须使用分频器来降频。

4:滤波器

​ 如果ETRP的信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对ETRP信号重新采样,来达到降频或者去除高频干扰的目的。

5:从模式选择

​ 经过滤波器滤波的信号连接到ETRF(ETR信号经过极性选择和滤波后的信号)引脚后,触发信号成为外部时钟模式2的输入,最终等于CK_PSC,然后驱动计数器CNT计数。

6:使能计数器

​ 经过上面5个步骤之后,最后我们只需要使能计数器开始计数,外部时钟模式2的配置就算完成。

内部触发输入

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

主模式的定时器可以对从模式定时器执行复位、启动、停止或提供时钟


控制器

高级控制定时器控制包括触发控制器、从模式控制器以及编码器接口

**触发控制器**:用来针对片内外设输出触发信号,如果为其他定时器提供时钟和触发DAC/ADC转换。
**从模式控制器**:可以控制计数器复位、启动、递增/递减、计数。
**编码器接口**:针对编码器计数而设计。

时基部分

在这里插入图片描述

​ 高级控制定时器时基单元功能包括4个寄存器,分别是:计数器寄存器(CNT)、预分频寄存器(PSC)、自动重载寄存器(ARR)、重复计数器(RCR)

​ 其中,重复计数器是高级定时器独有的,通用定时器和基本定时器都没用。

​ 计数器寄存器、预分频寄存器、自动重载寄存器都是16位有效。重复寄存器是8位有效

预分频PSC

​ 预分频PSC,有一个输入时钟CK_PSC和一个输出时钟CK_CNT。输入时钟CK_PSC就是时钟源的输出,输出CK_CNT则是用来驱动计数器CNT计数

fck_cnt = fck_psc/(PSC[15:0]+1)  	//因为计数是从0开始,所以要加1,可以实现1至65536分频

计数器CNT

​ 高级定时器的计数器有3种计数模式,分别是:递增计数模式递减计数模式递增/递减(中心对齐)计数模式

**递增计数模式**:
	计数器从0开始计数,每来一个CK_CNT脉冲计数器就增加1,直到计数器的值与自动重载寄存器ARR值相等,然后计数器又从0开始计数并生成计数器上溢事件,计数器总是如此循环计数。
	如果禁用重复计数器,在计数器生成上溢事件就马上生成更新时间(UEV);
	如果使能重复计数器,每生成一次上溢事件重复计数器内容就减1,知道重复计数器内容为0时才会生成更新事件。
**递减计数模式**:
	计数器从自动重载寄存器ARR值开始计数,每来一个CK_CNT脉冲计数器就减1,直到计数器值为0,然后计数器又从自动重载寄存器ARR值开始递减并生成计数器下溢事件,计数器总是如此循环计数。
	如果禁用重复计数器,在计数器生成下溢事件就马上生成更新时间(UEV);
	如果使能重复计数器,每生成一次下溢事件重复计数器内容就减1,知道重复计数器内容为0时才会生成更新事件。
**中心对齐模式**:
	计数器从0开始递增计数,直到计数置等于(ARR-1)值生成计数器上溢事件,然后从ARR值开始递减计数直到1生成计数器下溢事件。然后又从0开始计数,如此循环。每次发生计数器上溢或下溢事件都会生成更新事件。

自动重载寄存器ARR

自动重载寄存器ARR用来存放与计数器CNT比较的值,如果二个值相等就递减重复计数器,可以配置重载影子寄存器功能,如果重载影子寄存器位(ARPE)置1,自动重载影子寄存器有效,只有在事件更新时才把自动重载寄存器的值赋给影子寄存器。如果ARPE位为0,则修改了自动重载寄存器值马上有效。

重复计数器RCR

在基本/通用定时器发生上溢/下溢事件时直接就生成更新时间,但对于高级定时器却不是这样,高级控制定时器在硬件结构上多出了重复计数器,在定时器发生上溢或下溢事件是递减重复计数器的值,**只有重复计数器为0时才会生成更新事件。在发生N+1个上溢或下溢事件(N为RCR的值)时产生更新事件。


输入捕获

在这里插入图片描述

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

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

1:输入通道

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

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

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

滤波器的配置由CR1寄存器的为CKD[1:0]和CCMR1/2的为ICxF[3:0]控制。从ICxF位的描述可知,采样频率fsample可以由fck_int和fdts分频后的时钟提供,其中fck_int是内部时钟,fdts是fck_int经过分频后得到的频率,分频因子可以由CKD[1:0]决定,可以是不分频、2分频或者4分频。

边沿检测器用来设置信号在捕获的时候是什么边沿有效,可以是上升沿,下降沿或者双边沿。

3:捕获通道

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

这里我们要搞清楚输入通道和捕获通道的区别:输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。

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

4:预分频器

ICx的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。

5:捕获寄存器

经过预分频器的信号ICxPS是最终被捕获到的信号,当发生捕获时(第一次),计数器CNT的值会被锁存到捕获寄存器CCR中,还会产生CCxI中断,相应的中断位CCxIF(在SR寄存器中)会被置位,通过软件或者读取CCR中的值可以将CCxIF清0.如果发生第二次捕获(即重复捕获:CCR寄存器中已捕获到的计数器值且CCxIF标志已置1),则捕获溢出标志位CCxOF(在SR寄存器中)会被置位,CCxOF只能通过软件清零。


输出比较

在这里插入图片描述

​ 输出比较就是通过定时器的外部引脚对外输出控制信号,有冻结将通道x(x=1,2,3,4)设置为匹配时输出有效电平将通道x设置为匹配时输出无效电平翻转强制为无效电平强制为有效电平PWM1PWM28种模式

1:比较寄存器

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

2:死区发生器

在生成的参考波形OCxREF的基础上,可以插入死区时间,用于生成两路互补的输出信号OCx和OCxN,死区时间的大小具体由BDTR寄存器的位DTG[7:0]配置。死区时间的大小必须根据与输出信号相连接的器件即特性来调整。

下面以一个带死区的PWM信号的应用来举例说明:

在这里插入图片描述

在这个半桥驱动电路中,Q1导通,Q2截止,此时我想让Q1截止Q2导通,肯定是要先让Q1截止一段时间之后,再等一段时间才让Q2导通,那么这段等待的时间就成为死区时间,因为Q1关闭需要时间(由MOS管的工艺决定),如果Q1关闭之后,马上打开Q2,那么此时一段时间内相当于Q1和Q2都导通了,这样电路会短路。

在这里插入图片描述

上图带死区插入的互补输出图,其中死区时间要根据MOS管的工艺来调节。

3:输出控制

在这里插入图片描述

​ 在输出比较的输出控制中,参考信号OCxREF在经过死区发生器之后会产生两路带死去的互补信号OCx_DT和OCxN_DT(通道13才有互补信号,通道4没有,其余跟通道13一样),这两路带死区的互补信号然后就进入输出控制电路,如果没有加入死区控制,那么进入输出控制电路的信号就直接是OCxREF

​ 进入输出控制电路的信号会被分为两路,一路是原始信号,一路是被反向的信号。

​ 如果加入了断路(刹车)功能,则断路和死区寄存器BDTR的MOE、OSSI和OSSR这三个位会共同影响输出的信号。

4:输出引脚

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


断路功能

​ 短路功能就是电机控制的刹车功能,使能断路功能时,根据相关控制位状态修改输出信号电平。在任何情况下,OCx和OCxN都不能同时为有效电平,这关系到电机控制常用的H桥电路结构原因。

​ 断路源可以是时钟故障事故,由内部复位时钟控制器中的始终安全系统(CSS)生成,也可以是外部断路输入IO,二者是或运算关系。

​ 系统复位启动都默认关闭断路功能,将断路和死区寄存器(TIMx_BDTR)的BKE位置1,使能断路功能,可以通过TIMx_BDTR寄存器的BKP位设置断路输入引脚的有效电平,设置成1时输入BRK为高电平有效,否则低电平有效。

​ 发送断路时,将产生以下效果:

1:TIMx_BDTR寄存器中主输出模式使能(MOE)位被清零,输出处于无效、空闲或复位状态。

2:根据相关控制位状态控制输出通道引脚电平:当使能通道互补通道时,会根据情况自动控制输出通道电平。

3:将TIMx_SR寄存器中的BIF位置1,并可产生中断和DMA传输请求。

4:如果TIMx_BDTR寄存器的自动输出使能(AOE)位置1,则MOE位会在发生下一个UEV事件时自动再次置1。


学有所成,以图国强!

断路时,将产生以下效果:

1:TIMx_BDTR寄存器中主输出模式使能(MOE)位被清零,输出处于无效、空闲或复位状态。

2:根据相关控制位状态控制输出通道引脚电平:当使能通道互补通道时,会根据情况自动控制输出通道电平。

3:将TIMx_SR寄存器中的BIF位置1,并可产生中断和DMA传输请求。

4:如果TIMx_BDTR寄存器的自动输出使能(AOE)位置1,则MOE位会在发生下一个UEV事件时自动再次置1。


学有所成,以图国强!

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值