高级定时器

本节主要介绍以下内容:

定时器简介

高级定时器功能框图讲解

一、定时器简介

定时器功能  定时、输出比较、输入捕获、断路输入

定时器分类  基本定时器、通用定时器、高级定时器

定时器资源  F1032个高级定时器、4个通用定时器、2个基本定时器

计数器特性:

高级定时器功能简介

  • -计数器16bit,上//两边 计数,TIM1TIM8,还有一个重复计数器RCR,独有。
  • -4GPIO,其中通道1~3还有互补输出GPIO
  • -时钟来自PCLK2,为72M,可实现1~65536分频

        高级控制定时器(TIM1 和TIM8)和通用定时器在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能。高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能都是针对工业电机控制方面 。

STM32F103ZET6 的高级/通用定时器的IO 分配具体见表 

二、 高级定时器功能框图讲解

1-时钟源  2-控制器  3-时基  4-输入捕获  5-输出比较  6-断路功能

2.1 时钟源

  1. -内部时钟源CK_INT       
  2. -外部时钟模式1—外部的GPIO Tixx=1 2 3 4
  3. -外部时钟模式2—外部的GPIO ETR
  4. -内部触发输入
2.1.1  内部时钟源
  1. -内部时钟源来自RCC的TIMx_CLK       72M
  2. -TIMx_CLK等于多少呢?如何确定?    72M
  3. 具体的查看:RCC时钟树部分
2.1.2 外部时钟1

①时钟信号输入引脚 

  1. -外部的GPIO TIx,对应:TIMx_CH1/2/3/4
  2. -TIM_CCMRx 的位 CCxS[1:0]配置,其中 CCMR1 控制 TI1/2CCMR2 控制 TI3/4

②滤波器

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

③边沿检测

  1. -边沿检测的信号来自于滤波器的输出,在成为触发信号之前,需要进行边沿检测,决定是上升沿有效还是下降沿有效。
  2. -TIMx_CCER 的位 CCxP CCxNP 配置。

 ④触发选择

  1. -当使用外部时钟模式 1 时,触发源有两个,一个是滤波后的定时器输入 1TI1FP1)和滤波后的定时器输入 2TI2FP2)。
  2. -TIMx_SMCR 的位 TS[2:0]配置。

⑤从模式选择

  1. -选定了触发源信号后,最后我们需把信号连接到 TRGI 引脚,让触发信号成为外部时钟模式 1 的输入,最终等于 CK_PSC,然后驱动计数器 CNT 计数。
  2. -具体的配置TIMx_SMCR 的位 SMS[2:0]000 即可选择外部时钟模式 1

⑥使能计数器

  1. -经过上面的 5 个步骤之后, 最后我们只需使能计数器开始计数,外部时钟模式 1 的配置就算完成。
  2. -使能计数器由 TIMx_CR1 的位 CEN 配置。
 2.1.3 外部时钟2

①时钟信号输入引脚

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

②外部触发极性

  • -来自 ETR 引脚输入的信号可以选择为上升沿或者下降沿有效。
  • -具体的由 TIMx_SMCR的位 ETP 配置。

③外部触发预分频器 

  1. -由于 ETRP 的信号的频率不能超过 TIMx_CLK180M)的 1/4,当触发信号的频率很高的情况下,就必须使用分频器来降频。
  2. -具体的由 TIMx_SMCR 的位 ETPS[1:0]配置。

④滤波器 

  1. -如果 ETRP 的信号的频率过高或者混杂有高频干扰信号的,需要使用滤波器对 ETRP 信号重新采样,来达到降频或者去除高频干扰的目的。
  2. -具体的由 TIMx_SMCR 的位 ETF[3:0]配置,其中的 fDTS 是由内部时钟 CK_INT 分频得到,具体的由 TIMx_CR1 的位CKD[1:0]配置。

⑤从模式选择

  1. -经过滤波器滤波的信号连接到 ETRF 引脚后,触发信号成为外部时钟模式 2 的输入,最终等于 CK_PSC,然后驱动计数器 CNT 计数。
  2. -具体的配置 TIMx_SMCR 的位 ECE 1即可选择外部时钟模式 2

⑥使能计数器 

  1. -经过上面的 5 个步骤之后, 最后我们只需使能计数器开始计数,外部时钟模式 2 的配置就算完成。
  2. -使能计数器由 TIMx_CR1 的位 CEN 配置。
2.1.4 内部触发输入 
  1. -内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。
  2. - TIMx_SMCR 的位 TS[2:0]配置。

内部触发连接 

TIM1TIM2提供时钟 

2.2 控制器

  1. -控制器就是用来控制的,发送命令的
  2. -CR1CR2SMCRCCER,主要学习这几个寄存器即可。

2.3 时基单元 

        高级控制定时器时基单元功能包括四个寄存器,分别是计数器寄存器(CNT)、预分频
器寄存器(PSC)、自动重载寄存器(ARR)和重复计数器寄存器(RCR)。其中重复计数器RCR
是高级定时器独有,通用和基本定时器没有。前面三个寄存器都是16 位有效,TIMx_RCR
寄存器是8 位有效。

①预分频器PSC

        预分频器PSC,有一个输入时钟CK_PSC 和一个输出时钟CK_CNT。输入时钟CK_PSC 就是上面时钟源的输出,输出CK_CNT 则用来驱动计数器CNT 计数。通过设置预分频器PSC 的值可以得到不同的CK_CNT,实际计算为:fCK_CNT等于fCK_PSC/(PSC[15:0]+1),可以实现1 至65536 分频。

②计数器CNT
        高级控制定时器的计数器有三种计数模式,分别为递增计数模式、递减计数模式和递增/递减(中心对齐)计数模式。

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

(2) 递减计数模式下,计数器从自动重载寄存器ARR 值开始计数,每来一个CK_CNT 脉冲计数器就减1,直到计数器值为0,然后计数器又从自动重载寄存器ARR 值开始递减计数并生成计数器下溢事件,计数器总是如此循环计数。如果禁用重复计数器,在计数器生成下溢事件就马上生成更新事件;如果使能重复计数器,每生成一次下溢事件重复计数器内容就减1,直到重复计数器内容为0 时才会生成更新事件。

(3) 中心对齐模式下,计数器从0 开始递增计数,直到计数值等于(ARR-1)值生成计数器上溢事件,然后从ARR 值开始递减计数直到1 生成计数器下溢事件。然后又从0 开始计数,如此循环。每次发生计数器上溢和下溢事件都会生成更新事件。

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

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

2.4 输入捕获

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

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

①输入通道
        需要被测量的信号从定时器的外部引脚TIMx_CH1/2/3/4 进入,通常叫TI1/2/3/4,在后
面的捕获讲解中对于要被测量的信号我们都以TIx 为标准叫法。 

②输入滤波器和边沿检测器

        当输入的信号存在高频干扰的时候,我们需要对输入信号进行滤波,即进行重新采样,根据采样定律,采样的频率必须大于等于两倍的输入信号,比如输入的信号为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 分频。

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

③捕获通道

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

        这里我们要搞清楚输入通道和捕获通道的区别,输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道,一个输入通道的信号可以同时输入给两个捕获通道。比如输入通道TI1 的信号经过滤波边沿检测器之后的TI1FP1 和TI1FP2 可以进入到捕获通道IC1和IC2,其实这就是我们后面要讲的PWM 输入捕获,只有一路输入信号(TI1)却占用了两个捕获通道(IC1 和IC2)。当只需要测量输入信号的脉宽时候,用一个捕获通道即可。输入通道和捕获通道的映射关系具体由寄存器CCMRx 的位CCxS[1:0]配置。

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

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

2.5 输出比较

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

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

②死区发生器

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

在这个半桥驱动电路中,Q1 导通,Q2 截止,此时我想让Q1 截止Q2 导通,肯定是要先让Q1 截止一段时间之后,再等一段时间才让Q2 导通,那么这段等待的时间就称为死区时间,因为Q1 关闭需要时间(由MOS 管的工艺决定)。如果Q1 关闭之后,马上打开Q2,那么此时一段时间内相当于Q1 和Q2 都导通了,这样电路会短路。下图是针对上面的半桥驱动电路而画的带死区插入的PWM信号,图中的死区时间要根据MOS 管的工艺来调节。 

         在输出比较的输出控制中,参考信号OCxREF 在经过死区发生器之后会产生两路带死区的互补信号OCx_DT 和OCxN_DT(通道1~3 才有互补信号,通道4 没有,其余跟通道1~3 一样),这两路带死区的互补信号然后就进入输出控制电路,如果没有加入死区控制,那么进入输出控制电路的信号就直接是OCxREF。
        进入输出控制电路的信号会被分成两路,一路是原始信号,一路是被反向的信号,具体的由寄存器CCER 的位CCxP 和CCxNP 控制。经过极性选择的信号是否由OCx 引脚输出到外部引脚CHx/CHxN 则由寄存器CCER 的位CxE/CxNE 配置。
        如果加入了断路(刹车)功能,则断路和死区寄存器BDTR的MOE、OSSI 和OSSR这
三个位会共同影响输出的信号。
④输出引脚
        输出比较的输出信号最终是通过定时器的外部IO 来输出的,分别为CH1/2/3/4,其中前面三个通道还有互补的输出通道CH1/2/3N。更加详细的IO 说明还请查阅相关的数据手册。

2.6 断路功能       

        断路功能就是电机控制的刹车功能,使能断路功能时,根据相关控制位状态修改输出信号电平。在任何情况下,OCx 和OCxN 输出都不能同时为有效电平,这关系到电机控制常用的H 桥电路结构原因。
        断路源可以是时钟故障事件,由内部复位时钟控制器中的时钟安全系统(CSS)生成,也可以是外部断路输入IO,两者是或运算关系。
        系统复位启动都默认关闭断路功能,将断路和死区寄存器(TIMx_BDTR)的BKE 为置1,使能断路功能。可通过TIMx_BDTR 寄存器的BKP 位设置设置断路输入引脚的有效电平,设置为1 时输入BRK 为高电平有效,否则低电平有效。
        发送断路时,将产生以下效果:

 TIMx_BDTR 寄存器中主输出模式使能(MOE)位被清零,输出处于无效、空闲或
复位状态;
 根据相关控制位状态控制输出通道引脚电平;当使能通道互补输出时,会根据情
况自动控制输出通道电平;
 将TIMx_SR 寄存器中的 BIF 位置 1,并可产生中断和DMA 传输请求。
 如果 TIMx_BDTR 寄存器中的 自动输出使能(AOE)位置 1,则MOE 位会在发生下
一个UEV 事件时自动再次置 1。

2.7 输入捕获应用

        输入捕获一般应用在两个方面,一个方面是脉冲跳变沿时间测量,另一方面是PWM输入测量。

2.7.1 测量脉宽或者频率

①测量频率

        当捕获通道TIx 上出现上升沿时,发生第一次捕获,计数器CNT 的值会被锁存到捕获到寄存器CCR 中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到value1 中。当出现第二次上升沿时,发生第二次捕获,计数器CNT的值会再次被锁存到捕获寄存器CCR中,并再次进入捕获中断,在捕获中断中,把捕获寄存器的值读取到value3 中,并清除捕获记录标志。利用value3 和value1 的差值我们就可以算出信号的周期(频率)。

②.测量脉宽

        当捕获通道TIx 上出现上升沿时,发生第一次捕获,计数器CNT 的值会被锁存到捕获寄存器CCR 中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到value1 中。然后把捕获边沿改变为下降沿捕获,目的是捕获后面的下降沿。当下降沿到来的时候,发生第二次捕获,计数器CNT 的值会再次被锁存到捕获寄存器CCR 中,并再次进入捕获中断,在捕获中断中,把捕获寄存器的值读取到value3 中,并清除捕获记录标志。然后把捕获边沿设置为上升沿捕获。

        在测量脉宽过程中需要来回的切换捕获边沿的极性,如果测量的脉宽时间比较长,定时器就会发生溢出,溢出的时候会产生更新中断,我们可以在中断里面对溢出进行记录处理。

相关推荐

  1. <span style='color:red;'>定时器</span>

    定时器

    2024-01-13 12:06:03      10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 12:06:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 12:06:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 12:06:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 12:06:03       18 阅读

热门阅读

  1. three.js讲解

    2024-01-13 12:06:03       34 阅读
  2. 机器学习简答题

    2024-01-13 12:06:03       37 阅读
  3. 微服务http调用其他服务的方法

    2024-01-13 12:06:03       28 阅读
  4. 六、K8S-DaemonSet(DS)

    2024-01-13 12:06:03       29 阅读
  5. 前端开发中需要注意的CSS命名规则以及书写顺序

    2024-01-13 12:06:03       35 阅读
  6. Flink算子简单测试样例

    2024-01-13 12:06:03       37 阅读