目录
14.1 高级定时器的概念和应用场景
高级控制定时器 (TIM1 和 TIM8) 和通用定时器在基本定时器的基础上引入了外部引脚,可以实现输入捕获和输出比较功能。高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数器、带刹车 (断路) 功能,这些功能都是针对工业电机控制方面。这几个功能在本书不做详细的介绍,主要介绍常用的输入捕获和输出比较功能。高级控制定时器时基单元包含一个 16 位自动重装载寄存器 ARR,一个 16 位的计数器 CNT,可向上/下计数,一个 16 位可编程预分频器 PSC,预分频器时钟源有多种可选,有内部的时钟、外部时钟。还有一个 8 位的重复计数器 RCR,这样最高可实现 40 位的可编程定时。相比于普通定时器,高级定时器具有更多的功能和配置选项,能够满足各种复杂的时间控制需求。
下面列举一些高级定时器的应用场景:
汽车电子系统:高级定时器可以用于控制汽车发动机、变速器、刹车、倒车雷达等各种部件的运行和状态检测,实现高效稳定的汽车控制功能。
工业自动化控制:高级定时器可以用于控制各种工业生产设备的运行和停止时间,实现精准的工业自动化控制功能。
医疗设备控制:高级定时器可以用于控制各种医疗设备的操作和状态检测,如呼吸机、心电图仪、血压计等,实现高效精准的医疗控制功能。
航空电子仪表:高级定时器可以用于计算、监测和控制飞行时间、姿态、航向等信息,实现精确的航空导航功能。
通信系统:高级定时器可以用于控制各种通信设备的运行和状态检测,如调制解调器、无线电收发机等,实现高效稳定的通信功能。
电力系统:高级定时器可以用于控制各种电力设备的运行和状态检测,如电表、开关控制器、逆变器等,实现高效稳定的电力控制功能。
总之,高级定时器是一种功能强大、应用广泛的定时器设备,在嵌入式系统中有着重要的作用。随着技术的不断发展,高级定时器的功能和性能将会越来越强大,为各种电子系统提供更加高效、精准的时间控制功能。
14.2 高级定时器的组成
14.2.1 时钟源
高级控制定时器有四个时钟源可选:
>>内部时钟源 CK_INT。
>>外部时钟模式 1:外部输入引脚 TIx(x=1,2,3,4)。
>>外部时钟模式 2:外部触发输入 ETR。
>>内部触发输入 (ITRx)。
(1)内部时钟源CK_INT
内部时钟CK_INT即来自芯片内部,一般等于72M,一般情况下都是使用内部时钟。当从模式控制寄存器IMx_SMCR的SMS位等于000时,则使用内部时钟。
(2)外部时钟模式1
>>TI2:时钟信号输入引脚
当使用外部时钟模式1的时候,时钟信号来自于定时器的输入通道,总共有4个TI1/2/3/4,即TIMx_CH1/2/3/4,具体使用哪一路信号由TIMx_CCMRx寄存器的CCxS[1:0]位配置,其中CCMR1控制TI1/2,CCMR2控制TI3/4。
>>Filter:滤波器
如果来自外部的时钟信号频率过高或者混杂有高频干扰信号的话就需要使用滤波器对信号重新采样,来达到降频或者去除高频干扰的目的,具体由TIMx_CCMRx的位ICxF[3:0]配置。
>>Edge Detector:边沿检测
边沿检测的信号来自滤波器的输出,在成为触发信号之前,需要进行边沿检测,决定是上升沿有效还是下降沿有效,具体的由TIMx_CCER的CCxP和CCxNP配置。
>>触发选择
当使用外部时钟模式 1 时,触发源有两个,一个是滤波后的定时器输入 1(TI1FP1)和滤波后的定时器输入 2(TI2FP2),具体的由 TIMxSMCR 的位 TS[2:0] 配置。
>>从模式选择
选定了触发源信号后,最后我们需把信号连接到 TRGI 引脚,让触发信号成为外部时钟模式 1 的输入,最终等于 CK_PSC,然后驱动计数器 CNT 计数。具体的配置 TIMx_SMCR 的位 SMS[2:0]为 111 即可选择外部时钟模式 1。
>>使能计数器
经过上面的 5 个步骤之后,最后我们只需使能计数器开始计数,外部时钟模式 1 的配置就算完成。使能计数器由 TIMx_CR1 的位 CEN 配置。
(3)外部时钟模式2
>>ERT pin:时钟信号输入引脚
当使用外部时钟模式 2 的时候,时钟信号来自于定时器的特定输入通道 TIMx_ETR,只有 1 个(ERT pin专门用于外部时钟模式2的时钟输入)。
>>外部触发极性
来自 ETR 引脚输入的信号可以选择为上升沿或者下降沿有效,具体的由 TIMx_SMCR 的位 ETP配置。
>>外部触发预分频器
由于 ETRP 的信号的频率不能超过 TIMx_CLK(72M)的 1/4,当触发信号的频率很高的情况下,就必须使用分频器来降频,具体的由 TIMx_SMCR 的位 ETPS[1:0] 配置。
>>滤波器
如果 ETRP 的信号的频率过高或者混杂有高频干扰信号的话,我们就需要使用滤波器对 ETRP 信号重新采样,来达到降频或者去除高频干扰的目的。具体的由 TIMx_SMCR 的位 ETF[3:0] 配置,其中的 fDTS 是由内部时钟 CK_INT 分频得到,具体的由 TIMx_CR1 的位 CKD[1:0] 配置。
>>从模式选择
经过滤波器滤波的信号连接到 ETRF 引脚后,触发信号成为外部时钟模式 2 的输入,最终等于CK_PSC,然后驱动计数器 CNT 计数。具体的配置 TIMx_SMCR 的位 ECE 为 1 即可选择外部时钟模式 2。
>>使能计数器
经过上面的 5 个步骤之后,最后我们只需使能计数器开始计数,外部时钟模式 2 的配置就算完成。使能计数器由 TIMx_CR1 的位 CEN 配置。
(4)内部触发输入
内部触发输入是使用一个定时器作为另一个定时器的预分频器。硬件上高级控制定时器和通用定时器在内部连接在一起,可以实现定时器同步或级联。主模式的定时器可以对从模式定时器执行复位、启动、停止或提供时钟。
14.2.2 控制器
14.2.3 时基单元
高级控制定时器时基单元功能包括四个寄存器,分别是计数器寄存器 (CNT)、预分频器寄存器(PSC)、自动重载寄存器 (ARR) 和重复计数器寄存器 (RCR)。其中重复计数器 RCR 是高级定时器独有,通用和基本定时器没有。前面三个寄存器都是 16 位有效, TIMx_RCR 寄存器是 8 位有效。
(1)预分频器PSC
预分频器 PSC,有一个输入时钟 CK_PSC 和一个输出时钟 CK_CNT。输入时钟 CK_PSC 就是上面时钟源的输出,输出 CK_CNT 则用来驱动计数器 CNT 计数。通过设置预分频器 PSC 的值可以得到不同的 CK_CNT。
实际计算为: fCK_CNT 等于 f:sub:CK_PSC/(PSC[15:0]+1),可以实现 1 至65536 分频。
(2)计数器
高级控制定时器的计数器有三种计数模式,分别为递增计数模式、递减计数模式和递增/递减 (中心对齐) 计数模式。
递增计数模式下,计数器从 0 开始计数,每来一个 CK_CNT 脉冲计数器就增加 1,直到计数器的值与自动重载寄存器 ARR 值相等,然后计数器又从 0 开始计数并生成计数器上溢事件,计数器总是如此循环计数。如果禁用重复计数器,在计数器生成上溢事件就马上生成更新事件 (UEV);如果使能重复计数器,每生成一次上溢事件重复计数器内容就减 1,直到重复计数器内容为 0 时才会生成更新事件。
递减计数模式下,计数器从自动重载寄存器 ARR 值开始计数,每来一个 CK_CNT 脉冲计数器就减 1,直到计数器值为 0,然后计数器又从自动重载寄存器 ARR 值开始递减计数并生成计数器下溢事件,计数器总是如此循环计数。如果禁用重复计数器,在计数器生成下溢事件就马上生成更新事件;如果使能重复计数器,每生成一次下溢事件重复计数器内容就减 1,直到重复计数器内容为 0 时才会生成更新事件。
中心对齐模式下,计数器从 0 开始递增计数,直到计数值等于 (ARR-1) 值生成计数器上溢事件,然后从 ARR 值开始递减计数直到 1 生成计数器下溢事件。然后又从 0 开始计数,如此循环。每次发生计数器上溢和下溢事件都会生成更新事件。
(3)自动重装载寄存器ARR
自动重载寄存器 ARR 用来存放与计数器 CNT 比较的值,如果两个值相等就递减重复计数器。可以通过 TIMx_CR1 寄存器的 ARPE 位控制自动重载影子寄存器功能,如果 ARPE 位置 1,自动重载影子寄存器有效,只有在事件更新时才把 TIMx_ARR 值赋给影子寄存器。如果 ARPE 位为 0,则修改 TIMx_ARR 值马上有效。
(4)重复计数器RCR
在基本/通用定时器发生上/下溢事件时直接就生成更新事件,但对于高级控制定时器却不是这样,高级控制定时器在硬件结构上多出了重复计数器,在定时器发生上溢或下溢事件是递减重复计数器的值,只有当重复计数器为 0 时才会生成更新事件。在发生 N+1 个上溢或下溢事件 (N 为RCR 的值) 时产生更新事件。
14.2.4 输入捕获
(1)作用和原理
(2)输入通道
对应图中的①部分,它总共有4个输入通道分别是TIMx_CH1/2/3/4。
注:输入通道和捕获通道的区别
输入通道是用来输入信号的,捕获通道是用来捕获输入信号的通道。一个输入通道的信号可以同时输入给两个捕获通道。
当需要测量输入信号的脉宽时,用一个捕获通道即可,输入通道与捕获通道的映射关系由CCMRx寄存器的位CCxS[1:0]配置。
(3)输入滤波和边沿检测
当输入的信号存在高频干扰的时候,我们需要对输入信号进行滤波,即进行重新采样,根据采样定律,采样的频率必须大于等于两倍的输入信号。比如输入的信号为 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 决定。
(4)捕获通道
当捕获发生时,计数器CNT的值就会被锁存到捕获寄存器。
(5)预分频器
ICx 的输出信号会经过一个预分频器,用于决定发生多少个事件时进行一次捕获。具体的由寄存器 CCMRx 的位 ICxPSC 配置,如果希望捕获信号的每一个边沿,则不分频。
(6)捕获寄存器
经过预分频器的信号 ICxPS 是最终被捕获的信号,当发生捕获时(第一次),计数器 CNT 的值会被锁存到捕获寄存器 CCR 中,还会产生 CCxI 中断,相应的中断位 CCxIF(在 SR 寄存器中)会被置位,通过软件或者读取 CCR 中的值可以将 CCxIF 清 0。如果发生第二次捕获(即重复捕获:CCR 寄存器中已捕获到计数器值且 CCxIF 标志已置 1),则捕获溢出标志位 CCxOF(在 SR 寄存器中)会被置位, CCxOF 只能通过软件清零。
14.2.5 输出比较
(1)作用及模式
输出比较就是通过定时器的外部引脚对外输出控制信号,有冻结、将通道 X(x=1,2,3,4)设置为匹配时输出有效电平、将通道 X 设置为匹配时输出无效电平、翻转、强制变为无效电平、强制变为有效电平、 PWM1 和 PWM2 这八种模式,具体使用哪种模式由寄存器 CCMRx 的位 OCxM[2:0]配置。其中 PWM 模式是输出比较中的特例,使用的也最多。
(2)输出比较寄存器
当计数器 CNT 的值跟比较寄存器 CCR 的值相等的时候,输出参考信号 OCxREF 的信号的极性就会改变,其中 OCxREF=1(高电平)称之为有效电平, OCxREF=0(低电平)称之为无效电平,并且会产生比较中断 CCxI,相应的标志位 CCxIF(SR 寄存器中)会置位。然后 OCxREF 再经过一系列的控制之后就成为真正的输出信号 OCx/OCxN。
(3)死区发生器
在生成的参考波形 OCxREF 的基础上,可以插入死区时间,用于生成两路互补的输出信号 OCx和 OCxN,死区时间的大小具体由 BDTR 寄存器的位 DTG[7:0] 配置。死区时间的大小必须根据与输出信号相连接的器件及其特性来调整。下面我们简单举例说明下带死区的 PWM 信号的应用,我们以一个板桥驱动电路为例。
在这个半桥驱动电路中, Q1 导通, Q2 截止,此时我想让 Q1 截止 Q2 导通,肯定是要先让 Q1 截止一段时间之后,再等一段时间才让 Q2 导通,那么这段等待的时间就称为死区时间,因为 Q1关闭需要时间(由 MOS 管的工艺决定)。如果 Q1 关闭之后,马上打开 Q2,那么此时一段时间内相当于 Q1 和 Q2 都导通了,这样电路会短路。图带死区插入的互补输出是针对上面的半桥驱动电路而画的带死区插入的 PWM 信号,图中的死区时间要根据 MOS 管的工艺来调节(死区时间一般为nS级别的)。
(4)输出控制
在输出比较的输出控制中,参考信号 OCxREF 在经过死区发生器之后会产生两路带死区的互补信号 OCx_DT 和 OCxN_DT(通道 1~3 才有互补信号,通道 4 没有,其余跟通道 1~3 一样),这两路带死区的互补信号然后就进入输出控制电路,如果没有加入死区控制,那么进入输出控制电路的信号就直接是 OCxREF。
进入输出控制电路的信号会被分成两路,一路是原始信号,一路是被反向的信号,具体的由寄存器 CCER 的位 CCxP 和 CCxNP 控制。经过极性选择的信号是否由 OCx 引脚输出到外部引脚CHx/CHxN 则由寄存器 CCER 的位 CxE/CxNE 配置。
如果加入了断路(刹车)功能,则断路和死区寄存器 BDTR 的 MOE、 OSSI 和 OSSR 这三个位会共同影响输出的信号。
(5)输出引脚
输出比较的输出信号最终是通过定时器的外部 IO 来输出的,分别为 CH1/2/3/4,其中前面三个通道还有互补的输出通道 CH1/2/3N。
注:断路的功能
断路功能就是电机控制的刹车功能,使能断路功能时,根据相关控制位状态修改输出信号电平。在任何情况下, 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。
14.3 输入捕获的应用
输入捕获一般应用在两个方面,一个方面是脉冲跳变沿时间测量,另一方面是 PWM 输入测量。
14.3.1 测量脉宽或者频率
14.3.1.1 测量频率
当捕获通道 TIx 上出现上升沿时,发生第一次捕获,计数器 CNT 的值会被锁存到捕获寄存器 CCR中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到 value1 中。当出现第二次上升沿时,发生第二次捕获,计数器 CNT的值会再次被锁存到捕获寄存器 CCR 中,并再次进入捕获中断,在捕获中断中,把捕获寄存器的值读取到 value3 中,并清除捕获记录标志。利用 value3 和 value1 的差值我们就可以算出信号的周期(频率)。
14.3.1.2 测量脉宽
当捕获通道 TIx 上出现上升沿时,发生第一次捕获,计数器 CNT 的值会被锁存到捕获寄存器 CCR中,而且还会进入捕获中断,在中断服务程序中记录一次捕获(可以用一个标志变量来记录),并把捕获寄存器中的值读取到 value1 中。然后把捕获边沿改变为下降沿捕获,目的是捕获后面的下降沿。当下降沿到来的时候,发生第二次捕获,计数器 CNT 的值会再次被锁存到捕获寄存器CCR 中,并再次进入捕获中断,在捕获中断中,把捕获寄存器的值读取到 value2 中,并清除捕获记录标志。然后把捕获边沿设置为上升沿捕获。在测量脉宽过程中需要来回的切换捕获边沿的极性,如果测量的脉宽时间比较长,定时器就会发生溢出,溢出的时候会产生更新中断,我们可以在中断里面对溢出进行记录处理。
14.3.2 PWM输入模式
测量脉宽和频率还有一个更简便的方法就是使用 PWM 输入模式,该模式是输入捕获的特例,只能使用通道 1 和通道 2,通道 3 和通道 4 使用不了。与上面那种只使用一个捕获寄存器测量脉宽和频率的方法相比, PWM 输入模式需要占用两个捕获寄存器。
当使用 PWM 输入模式的时候,因为一个输入通道 (TIx) 会占用两个捕获通道 (ICx),所以一个定时器在使用 PWM 输入的时候最多只能使用两个输入通道 (TIx)。我们以输入通道 TI1 工作在 PWM 输入模式为例来讲解下具体的工作原理,其他通道以此类推即可。
PWM 信号由输入通道 TI1 进入,因为是 PWM 输入模式的缘故,信号会被分为两路,一路是TI1FP1,另外一路是 TI2FP2。其中一路是周期,另一路是占空比,具体哪一路信号对应周期还是占空比,得从程序上设置哪一路信号作为触发输入,作为触发输入的哪一路信号对应的就是周期,另一路就是对应占空比。作为触发输入的那一路信号还需要设置极性,是上升沿还是下降沿捕获,一旦设置好触发输入的极性,另外一路硬件就会自动配置为相反的极性捕获,无需软件配置。一句话概括就是:选定输入通道,确定触发信号,然后设置触发信号的极性即可,因为是PWM 输入的缘故,另一路信号则由硬件配置,无需软件配置。
当使用 PWM 输入模式的时候必须将从模式控制器配置为复位模式(配置寄存器 SMCR 的位SMS[2:0] 来实现),即当我们启动触发信号开始进行捕获的时候,同时把计数器 CNT 复位清零。下面我们以一个更加具体的时序图来分析下 PWM 输入模式。
PWM 信号由输入通道 TI1 进入,配置 TI1FP1 为触发信号,上升沿捕获。当上升沿的时候 IC1 和IC2 同时捕获,计数器 CNT 清零,到了下降沿的时候, IC2 捕获,此时计数器 CNT 的值被锁存到捕获寄存器 CCR2 中,到了下一个上升沿的时候, IC1 捕获,计数器CNT 的值被锁存到捕获寄存器 CCR1 中。其中 CCR2+1 测量的是脉宽, CCR1+1 测量的是周期。这里要注意的是 CCR2 和CCR1 的值在计算占空比和频率的时候都必须加 1,因为计数器是从 0 开始计数的。
从软件上来说,用 PWM 输入模式测量脉宽和周期更容易,付出的代价是需要占用两个捕获寄存器。
14.4 输出比较的应用
输出比较模式总共有 8 种,具体的由寄存器 CCMRx 的位 OCxM[2:0] 配置。我们这里只讲解最常用的 PWM 模式,其他几种模式具体的看数据手册即可。
14.4.1 PWM输出模式
PWM 输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCR 的值决定。PWM 模式分为两种, PWM1 和 PWM2,总得来说是差不多,就看你怎么用而已,具体的区别见表格 PWM1 与 PWM2 模式的区别。
下面我们以 PWM1 模式来讲解,以计数器 CNT 计数的方向不同还分为边沿对齐模式和中心对齐模式。 PWM 信号主要都是用来控制电机,一般的电机控制用的都是边沿对齐模式, FOC 电机一般用中心对齐模式。
14.4.1.1 PWM边沿对其模式
在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新从 0开始计数并生成计数器上溢事件。
在边沿对齐模式下,计数器 CNT 只工作在一种模式,递增或者递减模式。这里我们以 CNT 工作在递增模式为例,在中, ARR=8, CCR=4, CNT 从 0 开始计数,当 CNT<CCR 的值时, OCxREF为有效的高电平,于此同时,比较中断寄存器 CCxIF 置位。当 CCR=<CNT<=ARR 时, OCxREF为无效的低电平。然后 CNT 又从 0 开始计数并生成计数器上溢事件,以此循环往复。
14.4.1.2 PWM中心对齐模式
在中心对齐模式下,计数器 CNT 是工作做递增/递减模式下。开始的时候,计数器 CNT 从 0 开始计数到自动重载值减 1(ARR-1),生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从 0 开始重新计数。
图示是中心对齐波形 是 PWM1 模式的中心对齐波形, ARR=8, CCR=4。第一阶段计数器 CNT 工作在递增模式下,从 0 开始计数,当 CNT<CCR 的值时, OCxREF 为有效的高电平,当CCR=<CNT«ARR 时, OCxREF 为无效的低电平。第二阶段计数器 CNT 工作在递减模式,从 ARR的值开始递减,当 CNT>CCR 时, OCxREF 为无效的低电平,当 CCR=>CNT>=1 时, OCxREF 为有效的高电平。
在波形图上我们把波形分为两个阶段,第一个阶段是计数器 CNT 工作在递增模式的波形,这个阶段我们又分为 ① 和 ② 两个阶段,第二个阶段是计数器 CNT 工作在递减模式的波形,这个阶段我们又分为 ③ 和 ④ 两个阶段。要说中心对齐模式下的波形有什么特征的话,那就是 ① 和 ③ 阶段的时间相等, ② 和 ④ 阶段的时间相等。
中心对齐模式又分为中心对齐模式 1/2/3 三种,具体由寄存器 CR1 位 CMS[1:0] 配置。具体的区别就是比较中断中断标志位 CCxIF 在何时置 1:中心模式 1 在 CNT 递减计数的时候置 1,中心对齐模式 2 在 CNT 递增计数时置 1,中心模式 3 在 CNT 递增和递减计数时都置 1。
谢谢阅读!