有人使用STM32G474芯片的片上高精度定时器HRTIM,他想使用其输出功能的Burst Mode。但不知如何使用,想找找参考例程。我这里就使用STM32G474芯片做下应用演示。
我们知道,STM32家族中有多个系列或子系列芯片内置HRTIM定时器。这里以STM32G474芯片为蓝本简单介绍下HRTIM时基单元中输出功能的BURST MODE原理及实现过程。HRTIM时基单元中输出模块【或通道】可以有三种工作状态,即运行态、空闲态、出错异常态【RUN、IDLE和FAULT】。
【注 :上面截图来自STM32G4系列参考手册】
此处所要讲的Burst模式其实就是运行态和空闲态交替地实现输出的模式,即输出通道一会工作在运行状态、一会工作在空闲状态,每种状态的持续时间可以编程,由Burst Mode控制器管理。
HRTIM输出单元的Burst 操作模式在轻量负载的电源逆变器产品中用得比较常见。通过减少输出跳变次数及开关损耗,可以显著地提升转换效率。
当工作在Burst模式时【下文中文我统一用交替输出模式来表述】,典型应用就是1个或几个周期的运行状态的有效输出后,紧跟着输出相应周期数的空闲状态,可以单次性,也可以周期性地实现。比方下图就是一个工作在交替输出模式的示例【注 :下面截图来自STM32G4系列参考手册】:
结合上图我们可以看出,交替输出控制器包括三个东西:
Burst计数器:时钟源【Burst Clock】可以有多种,甚至可以是HRTIM以外的事件,比较典型的是PWM周期事件。
寄存器HRTIM_BMCMP:用它定义空闲时间段长度。
寄存器HRTIM_BMPER:用它来定义一次交替输出的整个时间段,即上面的空闲事件段加上运行态时间段。时间段长短通过计数器的计数值来标定。【注 :下面截图来自STM32G4系列参考手册】
上图中的交替输出模块的计数器的时钟源是HRTIM定时器单元的计数周期事件;
HRTIM_BMCMP=4,则一次交替输出的时间段内有5个计数周期做空闲输出;
HRTIM_BMPER=7,则一次交替输出的时间段为8个计数周期,其中运行处于运行态有3个周期;
另外,要进入交替输出模式,还需要触发信号来激活。能触发交替输出模式的事件很多,可以是HRTIM的时基单元的复位事件、溢出事件、比较事件、重复计数事件等,还可以来自其它片上常规定时器的事件。
在下面的演示示例中,我选用TIMA的复位事件作为交替输出模式的触发事件。那么,现在就以STM32G474芯片为例,来介绍下HRTIM交替输出模式的实现过程。
我使用STM32CubeMx图形化工具进行基本配置。使用HRTIM里的TIMA单元,并开启其TA1/TA2的两路PWM输出。关于这两个通道的配置参数基本一样,有一点差别就是我只开启了TA1的交替输出模式,而没有开启TA2的。这样可以明显地做效果比较。重点关注下面配置截图中带下划线,尤其红色下划线的地方。
在交替输出模式配置【Burst Mode configuration】里,我们配置Burst Mode Period为10,它对应前面提到的寄存器HRTIM_BMPER的值,即一次交替输出的整个时间段为11个周期。
配置Burst Mode Idle Duration为4,它对应前面提到的寄存器HRTIM_BMCMP,即一次交替输出时间段中有5个周期处于空闲输出【当然空闲输出电平可以根据需要选择性配置,这里输出低电平】。至于交替输出模式的触发信号,这里选择的是TIMA的复位事件,交替输出模式的计数时钟选择TIMA的周期性溢出事件。当然,具体应用时我们可以根据实际需要选择。
其它配置细节这里就不啰嗦了,先跑出效果来。然后自己结合手册尝试调整,逐渐加深理解,慢慢进入自由使用。
基于我上面的配置,创建基于HAL库的工程后,只需添加几行如下代码即可运行查看结果。
上面截图就是基于前面配置及代码的实现结果。不难看出,TA1开启了交替输出功能,TA2没有开启。从TA1的输出,我们可以看出整个交替输出时间段为11个周期,其中6个周期为有效运行状态,5个周期处于空闲输出状态。