STM32定时器非对称PWM输出模式应用示例
有STM32用户使用STM32F3系列MCU开发产品,想利用片内定时器实现移相全桥的PWM波形输出。具体要求如下,并希望输出下图所示波形:
1、A与B波形的频率及占空比相同,波形错位的时间需可调,如图上半部分所示。
2、A与/A是同频率、同占空比的互补波形,两个波形的高电平之间可插入死区。
3、B与/B的关系同A与/A,如图中下半部分的图示。
要实现上面的波形,我们可以通过灵活运用比较输出的toggle模式结合DMA来实现,
不过,这对很多人来说,难度可能有点大。
具体到这里,因为他选择了STM32F3系列,而STM32F3/L4/F7/H7等系列的定时器都具备非对称PWM输出模式或组合输出模式,若使用非对称PWM输出模式实现上述输出就比较方便省事。下面一起来看看。
所谓非对称PWM输出模式它是相对基于中心对称计数时的对称PWM输出而言的。当计数模式为中心对齐,某个输出通道利用一个比较寄存器做PWM输出时,其对应的PWM输出波形呈中心对称,如下图所示:
那这里的非对称PWM输出呢?同样采用中心对齐计数模式,1个通道的输出要用到2个比较寄存器的值进行比较翻转。比方定时器通道3的输出,根据CCR3和CCR4的值分别在向上计数和向下计数过程中做两次比较而产生输出,由于CCR3与CCR4的值往往不一致进而输出非对称的PWM波形。如下图所示:
关于定时器比较输出的非对称PWM模式,OC1REFC或OC2REFC的输出特征由CCR1和CCR2的值及所选PWM模式决定,同样,OC3REFC或OC4REFC的输出特征由CCR3和CCR4的值和所选PWM模式决定。
STM32参考手册中在这个地方可能讲得比较简单,我这里再画图示意下。OC1/OC2都使用非对称PWM输出模式。CCR1=3,CCR2=6,ARR=8。注意,采用非对称PWM输出模式一定要使用中心对齐计数模式。
从上图中我们不难看出,对于OC1REFC和OC2REFC,它们的输出产生了相差,该相差取决于CCR1与CCR2的值。基于这点,我们就可以实现上面的A、B输出的相移问题,即通过修改CCR的值即可自由调整相差。【OCxREFC信号最终还是输出到OCx端的,并支持互补输出。】
这时我们再开启这两路的互补输出,到此就可以实现客户的输出要求了。
下面我们利用STM32CubeMx神器进行初始化配置。【了解下关键配置就好】
配置时钟等,然后生成初始化代码并打开相关工程。添加需要的用户代码。代码很简单,是基于cube HAL库。【开启CH1/CH2及互补通道的PWM输出功能,使能主输出、开启计数器。】
看下输出结果【未插入死区】:
我们也可以基于互补通道插入死区,得到带死区的输出结果。
看到这里,是不是觉得这个非对称PWM模式对实现那些相差可调的驱动波形很方便? 好,关于STM32定时器的非对称PWM功能输出就介绍到这里。当然,它还可以有些其它灵活的用法,有兴趣可以进一步了解并为你所用。
=====================
往期话题阅读链接:【点击即可阅读】