STM32定时器单脉冲输出模式

本文详细探讨了STM32定时器如何在单脉冲输出模式下工作,包括比较输出功能、三种输出模式(强制、匹配、PWM)的应用,以及PWM输出模式下如何实现单个脉冲或多脉冲输出,涉及计数器、溢出、极性选择和高级定时器的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文整理于 https://www.sohu.com/a/292903672_807475 

原文作者:茶话MCU

STM32定时器单脉冲输出模式

单脉冲输出模式是定时器比较输出应用中的一种特殊情况或者特殊应用,是一种特殊的PWM输出模式。

1.比较输出【Compare Output】功能

        定时器通过对预设的比较值与计数器的值做匹配比较之后,依据比较结果结合相应的输出模式从而实现各类输出。如PWM输出、电平翻转、单脉冲输出、强制输出等。一般来讲,STM32的通用定时期和高级定时器都具有输入捕获、比较输出功能,不同的定时器可能通道数量上有差异。

        这里提到的比较值就是指放在CCR寄存器中的值,计数器的值当然就是CNT寄存器的值。一般来讲,在计数过程中,CNT寄存器的值往往是连续动态变化并呈现周期性,其变化规律跟我们设置的计数器的计数模式有关,比如向上计数模式、向下计数模式或者中心对齐计数模式等。这里的比较结果无非三种情况:①CCR = CNT②CCR > CNT③CCR < CNT

2.三种比较输出模式:

a.强制输出模式  b.匹配输出模式  c.PWM输出模式


强制输出模式:无视比较结果,直接根据配置指令输出相应电平;

匹配输出模式:只关注CCR=CNT值的时候,做相应电平的输出;

PWM输出模式:根据CCR是小于CNT还是CCR不小于CNT的比较结果做不同的输出;

    上面提到的输出信号,其中多次提到有效信号,无效信号,是指比较输出控制器输出的信号,我们称之为中间参考信号,即OcxREF信号。该OCxREF源于输出模式控制器,并硬件约定高电平为有效信号,低电平为无效信号。它经过极性选择后,再经输出控制电路输出到芯片管脚Ocx端。简单来说,当极性选择位CCxP=0时,Ocx输出与OcxREF信号同相;当CCxP=1时,Ocx输出与OcxREF信号反相 。

下图是当CCxP=0时 Ocx 与 OcxRef信号的相位情况【二者同相】

下图是当CCxP=1时 Ocx 与 OcxRef信号的相位情况【二者反相】

也就是说,OCXref信号只是个中间参考信号,并非最终输出信号。最终输出端OCX的active state【有效状态】/inactive state【无效状态】所对应的电平取决于极性选择控制位CCxP/CCxNP。

当然,如果是高级定时器的互补输出,最后的输出波形形状除了与极性选择有关外,输出波形还跟插入的死区有关。即对于互补输出时 Ocx =OCxREF + 极性 + 死区

3.PWM比较输出模式实现原理及相应波形

    从前面介绍中我们了解到PWM输出模式可以分两种,即PMW模式1与模式2,结合不同的计数模式可以实现多种输出组合。我们不妨以PWM模式1、计数器向上计数、极性选择高有效【CCxP=0】为例来看看比较输出过程中输出PWM波形的实现原理。

    上面图由两部分组成,上面部分是计数器周期性计数的示意图。深红色斜线表示计数器从0开始计数,记到ARR后重装(即计数到了最大值,计数器清零),再重新计数,这样循环。下面绿色方波是依据PWM模式1基于某个CCR值经过比较输出而得到PWM波形。

    根据上面介绍,我们知道在PWM输出模式1的前提下,当计数器的值小于CCR的值时输出有效电平,即高电平,当计数器值大于或等于CCR的值时输出无效电平,即低电平。由于计数器计数会发生周期性地溢出和重装,使得计数器的值可以周期性地循环计数,当CCR的值固定的时候,CNT与CCR的值二者的比较结果也往往呈现出周期性,此时也就输出规律性、周期性的PWM波形。

    不难理解,当我们修改CCR的值,其它不动的时候,PWM输出波形会相应变化。

上图的波形是在之前基础上将CCR值往上调大以后所得到的比较输出波形。

    看到这里,我们不禁会想:既然PWM输出模式的输出结果取决于CCR与CNT的比较结果的周期性变化,那么,当我们把CCR的值设置为0或者比ARR的值还大的时候,此时CCR与CNT的比较结果将不再变化,因为这里CNT的值不可能比0还小或比ARR还大。此时,自然就不会有变化的PWM波形输出,而是输出固定的电平,具体什么电平取决于CCR与CNT的比较结果与当前所选择的PWM输出模式。

    不妨用个具体的案例来理解。比如,在PWM模式1的前提下:

    当CCR=0时,由于计数器CNT的值永远不会小于CCR,此时将始终输出无效电平。

    当CCR=ARR+n【N不小于1】时,因CNT的值总小于CCR的值,此时始终输出有效电平。

    上面主要是基于PWM输出模式1、计数器向上计数模式来理解定时器比较输出中的PWM输出原理。至于PWM输出模式1、计数器向下计数模式或者PWM输出模式2等其它情形,我们可以结合STM32参考手册自行分析。

    结合上面的分析,我们不难看出,定时器之所以能输出PWM波形,原因在于定时器的计数器的计数的动态连续性和周期性,具体到这里,从0开始计数到ARR,溢出重装,再从0开始从新计数,循环往复,导致计数器与CCR的比较结果也具有周期性,从而产生周期性的PWM输出。

    根据定时器时基单元相关介绍,我们知道计数器计数发生溢出后,可以触发更新事件。对于通用定时器,每次溢出都可以产生更新事件;对于高级定时器,每发生RCR+1次溢出就可以产生更新事件。

    如果说,在PWM输出模式下,当定时器发生溢出产生更新事件时,通过硬件机制令计数器停止计数,既然计数器被停止计数了,计数器【CNT】的值将不再变化,之后的CNT与CCR的比较结果将维持不变,自然也就没有后续变化的的PWM波形输出了。这时我们就可以实现单个或几个PWM脉冲的输出了。

    基于上述原理或应用场景,便衍生出了单脉冲输出模式。所以,我们说单脉冲输出模式是一种特殊的PWM输出模式。

4.单脉冲输出模式的实现原理

    计数器启动后,在更新事件来临之前的时间段内实现一定个数的脉冲输出,当发生更新事件时计数器停止计数,导致后续不再有变化的PWM波形输出。输出的脉冲个数可以一个或几个。如果是通用计数器就是1个,如果是高级定时器,脉冲个数与RCR数值和计数模式二者有关。

    上图是个单脉冲输出实现的示意图。定时器工作在从模式,在外部触发信号【TI2】的作用下开启计数器,输出一个脉冲后发生更新事件并停止计数。

关于单脉冲输出模式应用的提醒:

1、使用单脉冲输出模式时,计数器的使能启动可以通过软件使能启动,也可以将定时器配置在触发从模式经过信号触发启动.

2、单脉冲输出模式是PWM输出模式的特例,利用该模式并不一定只是输出单个脉冲。如果是通用定时器,每次使能计数器后只输出一个PWM脉冲,如果是高级定时器,每次使能计数器后可能输出多个PWM脉冲,具体多少除了与RCR寄存器的值有关外,还跟计数器的计数模式有关;

3、要用好定时器的单脉冲输出模式,需了解下面三方面的知识点:

A:了解基本的PMW输出模式的基本特性;

B:了解定时器的更新事件;

C:了解计数器的溢出与重装;

    好,下面一起来看看几个基于单脉冲输出模式的实例以加深理解。

    下面案例都是基于高级定时器的。因为高级定时器可以使用单脉冲输出模式输出1到N个脉冲,如果使用通用定时器每次触发后就只能产生1个脉冲,产生多个脉冲就不那么方便。

案例一:使用高级定时器,单脉冲输出模式,借助RCR寄存器实现3个PWM脉冲输出

条件:UP counting + PWM1,RCR=2; 极性:高有效[CCxP=0]

    RCR=2,意味着发生RCR+1次溢出时产生更新事件,计数器停止计数,后续不再输出PWM波形。从上面来看输出基本是正确的,不过最后电平停在高电平,结尾这个地方怎么感觉不符合PWM1的输出特性呢?

    一起来看看,现在计数器是向上计数模式,它在第3个周期计到ARR时产生溢出,触发更新事件,计数器停止计数了,那计数器的值不是应该停留在ARR吗?如果计数器的值停在ARR,那此时CNT>CCR的值,按照PWM模式1的输出特性,输出应该停留在低电平,那怎么是高电平呢?

    前面提到过,要用好定时器的单脉冲输出模式,还得了解计数器溢出与重装。

    具体到这里,当计数器在第3个周期计到ARR时发生溢出,产生更新事件,计数器不再计数。但计数器溢出后重装还是照例执行,此时计数器被重装为0,因为计数器被停止,所以该0值保持不变。这样的话,后续的比较结果总是CNT<CCR值,按照PWM模式1的输出特性,输出自然应该是高电平并保持,这跟上面输出波形就吻合了。

好,那我们基于上面的条件,换成PWM输出模式2看看结果。

案例二:使用高级定时器,单脉冲模式,借助RCR寄存器实现3个PWM脉冲输出

条件:UP counting + PWM2,RCR=2; 极性高有效[CCxP=0]

 

    这次跟上面的案例1只是PWM模式做了变更,使用PWM输出模式2。仍然是输出3个PWM脉冲,跟上面输出波形相比,第3个脉冲最后停留的电平不一样,这里是低电平。分析过程跟上面一样,当计数器发生第3次溢出时,计数器依然重装为0,此时CNT<CCR,但此时PWM输出模式变更为模式2了,根据PWM模式2的输出特性此时就应输出低电平。

    至于其它不同的组合模式,这里就不一一分析了。我下面再放几副图进来,大家可以自行分析。

案例三:使用高级定时器,单脉冲模式,借助RCR寄存器实现3个PWM脉冲输出。

条件:Down counting + PWM1,RCR=2; 极性选择高有效 [CCxP=0]

 

案例四、使用高级定时器,单脉冲模式,借助RCR寄存器实现3个PWM脉冲输出。

条件:Down counting + PWM2,RCR=2; 极性选择高有效[CCxP=0]

小小结:Up+PWM1 = Down+PWM2    

              Up+PWM2 = Down+PWM1

案例五、使用高级定时器,单脉冲模式,借助RCR寄存器实现PWM脉冲输出

条件:Center counting / pwm1/ RCR=6 极性选择:高有效[CCxP=0]

 

最后小结:

    在使用定时器单脉冲输出模式做指定个数PWM波形输出时,我们要根据实际需求来选择合适的pwm输出模式、计数模式以及RCR寄存器的值。比方上面案例1与案例2的输出波形不能说谁对谁错,关键看你需要的是哪种输出结果。另外,一种输出结果可以有多种实现方案,比方上面案例2与案例3虽是不同的方案,但产生了相同的效果,此时我们可以根据具体的应用场景来选择合适的方案。

    关于定时器的单脉冲输出模式的应用就介绍到这里,大致介绍了单脉冲输出模式的来龙去脉以及实现原理。我们常常使用单脉冲模式是输出指定个数的PWM脉冲,当然还有别的方式可以灵活使用,比方通过通过统计比较事件或更新事件后修改CCR等。

寄存器的配置可以参考:http://news.eeworld.com.cn/mcu/article_2016101130329.html

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值