STM32F4定时器介绍

1. 定时器的种类

从下面这个这个图看出,高级定时器相比于通用定时器,高级在其有“带可编程死区的互补输出”。这在H桥等电机控制场景中十分重要。

  • 如何理解死区?通常,大功率电机、变频器等,末端都是由大功率管、IGBT等元件组成的H桥或3相桥。每个桥的上半桥和下半桥是是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。
    在这里插入图片描述
    在这里插入图片描述
    上图展示了带有可编程死区的互补输出的使用实例。

2. 定时器整体与时钟来源

在这里插入图片描述
如上图所示,定时器主要有几个部分组成:最上层的时钟部分,中间的时间计数部分,左下的输入捕获部分和右下的输出比较部分。其中时钟的来源很多,内部时钟是用的最多的,内部时钟一般是来自于APB总线的时钟;ETR(External Trigger)则是来自外部的时钟,ITRx是内部定时器级联的输出,可以用来制作级联定时器。定时器本身有一个预分频器PSC,是需要设置的重要参数之一。

  • 下图给出两个级联的实例。左下图使用了三个16bit的定时器组成了一个48bit定时器;而右图实例可以产生三个同步的计时器。很有意思的两个例子。
    在这里插入图片描述
    在这里插入图片描述
    上图展示了我所使用的STM32F411CEU6芯片的时钟配置,其最大主频是100Mhz,重点看右侧的APB1和APB2,每个APB总线都给定时器提供了单独的时钟即APBx Timer clocks。可以总结出一个规律,如果APB的分频系数是/2,则APB的Timer clock的分频系数是x2;如果APB的分频系数是/1,则APB的Timer clock的分频系数是x1。实现的效果就是,Timer的时钟都是100MHz。
    当然,还有一个小细节就是如何确定你的Timer是在哪个总线上的,这个可以通过查询参考手册的一般是第二章总线结构找到。比如本芯片的如下。
    在这里插入图片描述

3. 定时器的计数模式

三种计数模式:向上,向下,向上/向下。这个是比较好理解的,一个小点:

  • 计数值的最大值是由自动装载寄存器ARR的值决定的,比如向上计数,从0到ARR,就会产生溢出,从而产生更新事件,触发中断或DMA操作。
    在这里插入图片描述

  • 下图展示了STM32CubeMX中配置定时器需要设置的参数。其中,Perscaler是第二小节介绍的定时器时钟分频值。Counter Period则是ARR值。
    在这里插入图片描述

  • 其中,auto-reload prelod功能虽然没有使用,但是是一个有意思的功能,其表示如果中途修改了ARR的值,是本次比较的时候就生效呢,还是在下一个比较周期的时候再生效。为1,则代表下个周期再生效,也就是被buffer了一下;为0,则代表本周期就生效,即没有buffer。从上面的描述中的"buffer"字眼,可以知道ARR的值是有一个影子寄存器的!影子寄存器又是什么呢?
    在这里插入图片描述
    影子寄存器实际上才是起作用的那个寄存器,但是这个寄存器并没有开放给用户设置,我们能设置写入的是实际上是预装寄存器里的值,如果auto-reload prelod功能未开启,则预装寄存器的值直接被赋值给了影子寄存器;如果开启了,则一直到出现了一次Update Event(事件更新)后,预装寄存器的值才被赋值给了影子寄存器,从而影子寄存器在下次比较的时候才起作用。
    在这里插入图片描述
    在STM32的相关文档中,如果见到一个寄存器下面带有阴影,则说明其是一个带有影子寄存器的寄存器。
    在这里插入图片描述
    在这里插入图片描述
    在其他资料中,经常使用上面两张图来解释ARPE功能,图141是未开启的时候,可以看到在设置了ARR等于36以后,这个ARR在本次计数周期就生效了;而图152则是开启了ARPE功能,在ARR设置了36以后,并没有马上就起作用,还是原来的值即F5有效,直到本次事件更新后,ARR的值被写入影子寄存器,从而会在下个周期起作用。

4. PWM输出模式

在这里插入图片描述
PWM输出功能容易理解,其实就是在计数的基础上增加了一个比较器,设置其数值CCRx,在计数高于该比较值的时候输出高电平或低电平,在计数值低于该值的时候输出相反的电平。
那么在低于比较值的时候输出的是低电平还是高电平呢?取决于下图中相应寄存器的配置,TIMx_CCMR1中的OC1M[2:0]定义了输出比较的模式,如果是在PWM1模式下,低于比较值的时候会输出有效电平;如果是PWM2模式下,低于比较值时会输出无效电平。而有效电平是高还是低则是由TIMx_CCER寄存器中的CC1P位决定,该位为0,则有效电平是高电平;否则,有效电平是低电平。两个寄存器联合作用决定了输出波形长啥样。
在这里插入图片描述
在这里插入图片描述
在STM32CubeMX中配置的时候,关于PWM的有如上配置,其中Mode配置是PWM模式1还是模式2,CH Polarity配置通道的极性,经测试发现,这个极性的定义与上述 TIMx_CCER寄存器中的CC1P位 是相反的,即定义为High的话则有效电平是高电平;Low的时候有效电平是低电平,这一点尤其需要注意。Pulse值则是CCRx的值。
接下来,让我们再来看看几种有意思的PWM模式吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 输入捕获模式

输入捕获,稍后更新!

5. 参考

  • STM32L4-Timers Advanced-control, general-purpose and basic timers, Revision 2.0
  • stm32的互补输出和死区插入: https://blog.csdn.net/u011456016/article/details/70238923
  • 影子寄存器: https://zhuanlan.zhihu.com/p/349545023
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值