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. 定时器的计数模式
三种计数模式:向上,向下,向上/向下。这个是比较好理解的,一个小点:
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
|