你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32定时器关于PWM输出

[复制链接]
yumeii 发布时间:2019-12-24 15:52
对于STM32常规定时器,其比较输出模式除了强制输出模式以外,还有匹配切换模式、PWM输出模式,不论是匹配切换模式还是PWM输出模式,最终的输出电平由计数器的值与比较寄存器的值之比较结果,并结合极性选择位来决定。


当极性选择位为0时,OCx端的输出跟比较输出控制器的输出信号OCxREF保持同相,当极性选择位为1时,OCx端的输出跟比较输出控制器的输出信号OCxREF保持反相关系。


下图是一常规定时器的通道4的输出结构框图.


1.png


我们在使用TIMER的pwm过程中,当通过关闭计数器停止PWM输出时,由于停止时间点的随机性导致计数器的值不定,进而引起CNT的值与CCR的值出现不定的比较结果,最终体现在OC输出端呈现不确定的电平。有些时候,我们停止或暂停PWM输出时往往希望OC输出端呈现我们所期望的电平。


这个怎么办呢?方法一般可以有下面几种。


第一种,将相关PWM输出的GPIO口的复用功能取消,对其进行GPIO的高低控制。这种方法简单可行,有点粗暴。但不影响定时器的现有输出配置。要恢复功能的话,需重新对GPIO做复用配置。


第二种,采用定时器输出模式中的强制输出,将相应的OC端输出指定的高低电平。


这种方法,同样简单有效。不影响GPIO配置,但影响了定时器的现有输出配置。要恢复PWM功能时需重新对定时器的输出功能做配置。


第三种,通过修改CCR为特别的值,将CCR的值与CNT的比较结果固定下来,从而得到所期望的输出电平。


第一种、第二种方式,可行但稍显繁琐了点。除非不需要PWM输出了,不然还得重新配置回去。这里重点介绍第三种,简单地修改CCR寄存器地值而锁定OC脚的输出电平,要继续输出PWM的话,只需修改CCR值即可,无须其它配置。


下图是定时器某通道的PWM输出波形示意图。采用PWM1输出模式,计数器采用向上计数模式。极性选择为高有效,即极性控制位CCxP=0。此时OCx输出将与中间参考信号OCxREF同相输出。其中ARR=8。


2.png


从上图中我们看到,当CCR的值取0或比ARR值还大时,OCxREF将保持固定电平输出,相应地OCx端也会结合极性选择位输出固定电平。基于这个特性,我们可以随时修改某通道的CCR值来取消其PWM输出。【严格上讲,不能说取消了它的PWM输出,只是输出了一个固定电平,占空比为100%或0】


上面是针对非互补通道停止PWM输出的确定电平的实施方案。有人会问那对于互补通道的PWM输出的中途停止,电平如何确定呢?这个问题其实有点怪,但偏偏常有人问起。


3.png


通常情况下,对于互补输出通道不同状态下的输出特性,在STM32参考手册中高级定时器的寄存器描述中有个表格都罗列出来了。下图是STM32F4参考手册中TIM1的互补通道输出特性表【只是完整表格中的一部分,主输出使能的情况下】。


4.png


对于PWM互补输出的停止,可能是停止1个通道,也可能停止一对互补通道,即2个通道。


如果只需停止1个通道的输出,我们可以参考上述表格来配置。


若希望停止了PWM输出的OCx端输出低电平,我们可以选择上图中橙色栏的配置。


若希望停止了PWM输出的OCx端输出高电平,这时情况稍微复杂些。


此时我们可以考虑选择浅蓝色栏的配置。不过,此时的OCx输出跟极性选择位一致,如果极性选择位为0,则输出低电平;如果极性选择位为1,则输出高电平。也就是说,这种情况下,所选择通道停止输出时的电平跟极性选择位有关。


如果觉得自己的应用有这方面的需求,事先规划PWM功能时就要考虑极性选择位安排问题。当然,由于极性选择位影响到最终OCx输出端,可能会遇到极性选择位和PWM输出波形在应用上兼顾不过来的情形,这时可以考虑对所选择通道的PWM复用功能取消,直接操作GPIO来控制OCx脚的输出电平。


若希望暂停一对互补通道的PWM输出呢?这里有几种情况:


1、暂停PWM输出后,希望OCx/OCxN端输出低电平,这点好办。参照上图中红色栏配置即可。即令CCXE=CCXNE=0。


2、暂停PWM输出后,希望OCX/OCXN端输出一高一低呢?


如果该互补通道的极性选择位一样,参照上面单个非互补通道的作法,修改CCR寄存器的值比ARR大或者等于0,一定可以实现输出一高一低的电平。


如果如果该互补通道的极性选择位不一样,参照上面单个非互补通道的作法,修改CCR寄存器的值比ARR大或者等于0,这时OCX/OCXN端的电平一定一致的,要么同高要么同低。这时可以尝试回头重新规划下互补通道的输出与极性选择,看看能否做调整而不影响应用功能。不行的话,考虑将其中某个通道的PWM输出复用功能取消,直接操作GPIO。


3、暂停PWM输出后,希望OCX/OCXN端输出同为高呢?这在上面第2点已经提到了。如果互补通道的输出极性选择位不一样,通过调整CCR寄存器的值一定可以实现双通道同时输出高电平。如果说互补通道的输出极性选择位是一致的,同样可以尝试重新规划互补通道的输出与极性选择位的安排。不行的话,考虑取消其中某个通道的GPIO复用功能,直接操作寄存器来控制该输出端的电平。


好,关于停止STM32定时器PWM输出后电平的确定话题,就聊这么多。供君参考。最后提醒一点,关于修改CCR值后的生效时间点跟是否开启了其预装载功能有关。

收藏 评论0 发布时间:2019-12-24 15:52

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版