江南体育app下载 · ACE缓冲器-小型
  • STM32有哪几种定时器 STM32高级定时器有哪些功能
STM32有哪几种定时器 STM32高级定时器有哪些功能

STM32有哪几种定时器 STM32高级定时器有哪些功能

  信息处理能力提出了更大的需求,时钟作为数字硬件的关键成员,其性能要求我们关注,尤其在高速对时钟性能有很高的需求,因此正确选择时钟是很关键的一步,前提是我们要了解时钟的关键

  SysTick定时器的功能比较单一,主要是供给系统使用的,系统默认设置为1ms触发一次中断。而用户想要使用自己的定时器,STM32提供的用户定时器不但数量多且功能更强大。不相同的型号的STM32提供的定时器数量不同。

  STM32F4xx 系列微控制器具有多达14个定时器。这中间还包括2个基本定时器,10 个通用定时器2个高级定时器。其中最大定时器时钟可通过 RCC_DCKCFGR寄存器配置为 84MHz 或者 168MHz。一般是默认配置。

  捕获/比较通道:每一个通道对应着外部一个管脚,接收外部的一些信号或者输出一些信号。

  基本定时器TIM6和TIM7:和SysTick定时器的功能差不多,基板上就是定时计数以及驱动DAC的功能。

  通用定时器TIM2、5、3、4、9、10、11、12、13、14:功能比基本定时器的功能多,且包含基本定时器的功能,多出来的功能包括输入捕获(通过捕获通道,一个外接的管脚来测量外部信号的频率和脉宽等)、输出比较、PWM输出(也对应一个专门的通道)、使用外部信号控制定时器和定时器串连的同步电路的应用等一些在特殊场合应用的功能。

  高级定时器TIM1和TIM8:包括了通用定时器的所有功能,在通用定时器的基础上增加了更加特殊更加专业的功能,主要是用于PWM控制一些工业上的电机,还有带一些死区控制、急刹车等专业功能。

  向上计数模式:计数器从0计数到自动加载值(TIMx_ARR,相当于SysTick的重载数值寄存器),然后重新从0开始计数,达到设定的数值时产生一个计数器溢出事件。

  向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。

  中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。该模式简单说明为先进行向上计数模式,当达到数值寄存器的值时,进行中断服务,而计数器的值不会恢复为0重新向上计数,而是保持该值转而采用向下计数模式,减到0时触发中断进行中断服务,再采用向上计数模式,周而复始。

  时钟源:定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 对应的APB 预分频器后分频提供

  计数器时钟:定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数,正常的情况下该时钟频率值就是时钟源的频率值,为默认配置

  自动重装载寄存器:这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断

  输入捕获:可拿来捕获外部事件,比如引脚的电平变化(上升沿,下降沿),并记录下变化的时间,通常可拿来测量外部信号的频率或者电平持续的时间。

  输出比较:此项功能是用来控制一个输出波形,当计数器与捕获/比较寄存器的内容相同时,输出比较功能做出相应动作,比如电平的翻转。通常用来生产PWM波形。

  STM32定时器定时中断实验:利用基本定时器实现定时1秒中断,并在中断处理函数中打印输出字符

  使用定时器必须知道定时器时钟源是多少,本实验使用基本定时器TIM6,挂载再APB1总线MHz,设置分频系数为8400-1,则计数器的时钟频率为10KHz,即一个CLK的周期为100us,想要实现1s中断,则装载寄存器的大小为1000-1。

  值得注意的是,STM32有很多片内外设,而正常的情况下每一种片内外设的数量不唯一,因此要有启动函数来启动用户想要的启动的目标外设。如本节中定时器数量有很多,需要一定的定时器启动函数区分不同的定时器,然后启动目标定时器,而系统定时器只有一个,再整个工作过程中一直工作,不需要专门的启动函数。HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)可以启动定时器,HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)既可以启动定时器,又可以使能定时器中断。

  在定时器中断处理函数中有很多不一样的事件可以触发定时器中断,如输入捕获,输出比较,由于向上计数到达指定数值时,计数器会重新更新数值,所以我们最终选择数值更新事件。

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

  ①时钟源:对于高级或者通用定时器来说,时钟源不仅仅只有来自APB总线的内部时钟,其时钟源还可以来自外部,通过定时器连接外部的管脚引入进来,正常的情况下我们都是使用内部时钟。

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

  ③时基单元:定时计数的核心,预分频器 PSC:对输入时钟进行分频得到计数器的驱动时钟CK_CNT,计数器 CNT: 在外部时钟的驱动下实时的进行计数,自动重载寄存器 ARR:用来存放与计数器,CNT 比较的值,如果两个值相等就递减重复计数器。

  重复计数器 RCR:高级定时器特有,在定时器发生上溢或下溢事件时递减重复计数器的值,只有当重复计数器为0 时才会生成更新事件。相当于有了一个缓冲,溢出时不会直接触发中断,而是时重复计数器减一,也就应该延长计数时间,想要延长几倍,重复计数器里的数值就是几。

  ④输入捕获:输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用来测量输入信号的脉宽和频率,一个定时器可能有很多通道,每个通道对应一个管脚,但是一个定时器不会拥有超过4个通道。

  外部通过管脚将信号输入后,信号会经过一个输入滤波器和边沿检测器。外部输入的信号杂乱,使用滤波器进行滤波调整,过滤出用户想要的频率的信号;边沿检测器用来检测输入波形的频率,以上升沿为例,第一次检测到上升沿,将计数器的值CNT放入到捕获寄存器CCR(捕获寄存器就是用来记录数值的),捕获到下一次上升沿后再把计数器的值CNT放入到捕获寄存器CCR,两次数值相减就知道中间经历了多少个上升沿,再根据中间经过的时间就可以算出频率。

  ⑤公共部分:公共部分就是CCR(capture compare),捕获/比较寄存器,用来记录特定数值。

  ⑥输出比较:输出一些固定频率,且电平的宽度能调节波形信号。输出比较是通过定时器的计数比较控制外部引脚对外输出高低电平,比较输出有很多种模式,其中PWM模式是输出比较中使用的最多的模式。

  输出比较的基础原理为:在CCR中记录一个值,专门用来与ARR(装载寄存器)中的值进行比较比较的,因此能这样设定,当CNT(计数器中的值,不断变化的)小于CCR中的值时输出低电平,当CNT的值大于CCR中的值时输出高电平。不会大于ARR中的值,因为ARR的值是用户设定的最大值,超过就会溢出触发中断,CNT变回0重新计数。因此通过设置CCR中的值就可以调节高/低电平的宽度,这就是所谓的PWM波的原理。

  高级控制定时器比通用定时器增加了可编程死区互补输出功能,常应用在工业电机控制方面,下面红框中的寄存器就是用来实现此功能的。

  H桥电机如下图所示,从上图中可以看到每个定时器通过DTG寄存器和输出控制单元连接了CHx和CHxN两根管脚,正是用来与H桥电机的OCx和OCxN相连

  互补输出:两根管脚一个输出高电平,另一个必须为低电平,在H桥电机中,OCx为高电平,OCxN必须为低电平,此时电机逆时针逆时针旋转,反之电机顺时针旋转。倘若两根管脚同时为高电平,则会导致电机损毁。如图,互补输出在一根管脚变为高电平的瞬间要求另一跟管脚变为低电平,但是这属于理想状态,实际上两根管脚的电平变化一定会有延时,就会出现两根管脚同时为高电平的情况,于是引入死区控制。

  死区控制是当一根管脚由高电平变为低电平时,另一管脚不会立即变为高电平,延时一小段时间后再变为高电平,延时的这一小段时间就称之为死区,插入死去就避免了电机烧毁的问题。DTG寄存器是配置死区发生器 (Dead-time generator setup),保存的值为死区持续的时间。

  输入捕获可以对输入的信号的上升沿,下降沿或者双边沿进行捕获,常用来测量输入信号的脉宽和频率。加入我们设置捕获下降沿,可以使能中断,捕获到下降沿后产生中断,在中断中执行用户程序。捕获到下降沿后将计数器的值保存到捕获寄存器中,当出现下一次下降沿后同样会触发中断,也会把当前计数器的值保存到捕获寄存器中。通过保存到捕获寄存器中两次数值的差值计信号频率或者电平持续的时间。

  如果想要捕获脉宽,捕获上升沿后应该立即设置为捕获下降沿。value2-value1就是高电平持续的时间,也就是脉宽。

  说明:根据原理图可得,按键KEY6的管脚为PA0,正常情况下管脚电平为高电平,按下后管脚电平为低电平。所以应当先设置捕获下降沿,当捕获到下降沿后立即设置未捕获上升沿。两簇计数器的差值即可得低电平持续的时间,但这知识理想状态下,实际的操作过程中人有需要考虑的因素。

  如果低电平的持续时间很长,那么计数器不可能无限增长,在计数时会产生N次溢出。所以有如下计算方法,当第一次捕获到下降沿的时候,在捕获中断中我们将计数器的值清零并设置下一次捕获为上升沿,这样,低电平持续的时间就为T=N*ARR+CCRx2。在第二次捕获到上升沿时,用户可在上升沿捕获中断中统计时间,设置其他参数等。

  占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比 .

  输出一个波形,该波形的脉宽和频率均可调节,把这种波形叫做PWM波。通过调节脉宽可以控制电机的速度,灯的亮灭,舵机的角度等多种应用,整个波形的平均电压取决于占空比,占空比越大,平均电压越高,则电机越快。

  PWM应用:它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。常见应用有:电机控制,DAC输出等。

  输出比较的基本原理为:在CCR中记录一个值(一定比ARR中的值小),专门用来与ARR(装载寄存器)中的值进行比较比较的,因此能这样设定,当CNT(计数器中的值,一直在变化的)小于CCR中的值时输出低电平,当CNT的值大于CCR中的值时输出高电平。不会大于ARR中的值,因为ARR的值是用户设定的最大值,超过就会溢出触发中断,CNT变回0重新计数。因此通过设置CCR中值的大小就能调节高/低电平的宽度,这是所谓的PWM波的原理。

  输出高电平和输出低电平都叫做通道有效,至于是哪一种,需要用户自己去配置他的输出极性。例如配置PWM输出极性为低电平有效,且计数器采用PWM1模式下递增方式,则计数器的值小于CCR时,输出低电平,计数器的值大于CCR时,输出高电平。

  呼吸灯是由亮逐渐变暗,再由暗逐渐变亮的过程,而不是瞬间亮,瞬间灭。因为电平变化的速度很快,微观实际上灯就是瞬间亮,瞬间灭,但是人眼无法分辨。宏观上就是通过平均电压来表现,在单位时间内通过配置多个有规律变化的占空比的大小就可以实现呼吸灯。

  由上述LED灯的电器原理图可知,PF7管脚的低电平维持的时间越长,灯越亮,也就是占空比越小,灯越亮。本实验采用采用PWM1模式下递增方式低电平有效。