脉冲信号用于设备控制是非常常见的,但在一些情况下,我们希望精确的控制脉冲的数量以实现对运动的精确控制。实现的方式也许有多种多样,但使用计时器来实现此类操作是人们比较容易想到的。
1、原理概述
我们知道在STM32平台上,使用计时器来实现PWM操作是非常常见的用法。使用的是单一计时器,事实上通过主从两个计时器配合我们也可通过生成PWM波的方式精确控制输出脉冲的数量。接下来我们就来简单了解一下使用主从计时器实现精确数量脉冲输出的原理。
对于STM32平台一般都有TIM1和TIM8两个高级定时器和TIM2、TIM3、TIM、TIM5等几个通用定时器。STM32的这些定时器可以通过另外一个定时器的某一个条件被触发而启动。这里所谓某一个条件可以是定时到时、定时器超时、比较成功等各种条件。这种通过一个定时器触发另一个定时器的工作方式称为定时器的同步,发出触发信号的定时器工作于主模式,接受触发信号而启动的定时器工作于从模式。这些个计时器都可用作从计时器,但作为主计时器则是对应不同的触发源,它们的主从关系必须遵循设定不可随意配置。具体的配置关系如下:

当然要实现精确控制脉冲输出,就需要按照上述列表中的要求实现主从计时器的配置。对于主计时器来说,要将输出配置为PWM输出,并将触发输出的主从模式启用。而对于从计时器来说,需要启用从模式,并设为门控方式,触发源则根据上述表中的描述来选择。
可是为什么主从计时器就能实现精确数量的脉冲输出呢?我们借助下面的简单图示来说明这个问题。

首先按前面所述的主从计时器要求配置好主从计时器,这是最基本的要求。主计时器负责设置脉冲输出的频率以及输出脉冲,从计数器所控制输出的脉冲数。具体过程是这样的,主进程启动主从计时器,从计时器通过主计时器输出的触发信号开始脉冲计数,当达到指定的计数值后,产生中断停止主计时器输出,直到主进程再次开启这一过程。
2、系统设计
我们已经了解了通过主从计时器实现精确数量脉冲输出的基本原理。那究竟如何实际做呢?接下来我们就设计一个简单的系统实现它。
在这一系统中,我是使用STM32F407作为实现平台,以TIM1作为主计时器,TIM4作为从计时器,同时输出四路脉冲信号。四路的频率是相同的,但每一路的输出数量是可以设定的。具体的操作结构如下图所示:

主进程轮询控制计时器TIM1和TIM4工作,而TIM1主计时器给TIM4从计时器输出触发信号,而从计时器到达指定脉冲数后输出中断信号控制TIM1的输出通道停止。我们人为规定TIM4的通道1、2、3、4与TIM1的输出通道1、2、3、4相对应。
3、代码实现
我们已经说明了使用主从计时器实现精确输出脉冲数的原理,也设计了我们的我们想要实现的系统结构,接下来我们实现这一系统。
3.1、主计时器的配置
首先我们来看一看主计时器的配置,具体代码如下:
/*TIM1初始化配置*/
static void TIM1_Init_Configuration(uint32_t period)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
htim1.Instance = TIM1;
htim1.Init.Prescaler = 1;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = (period-

本文介绍了一种利用STM32的主从计时器实现精确脉冲数量输出的方法,详细解释了配置过程及代码实现,适用于需要精确控制运动或信号的场景。
最低0.47元/天 解锁文章
1958





