单片机
返回首页

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉

2025-10-21 来源:bilibili

概述

在步进电机控制过程中,为了实现精确的位置和速度控制,经常需要输出指定数量的脉冲。这就需要使用定时器功能来生成PWM脉冲信号。


本文将详细介绍如何利用STM32CUBEMX配置定时器以输出指定数量的PWM脉冲。 定时器是STM32微控制器的一个重要功能模块,可用于生成各种定时和计数操作。通过合理配置定时器的参数和模式,我们可以实现精确的脉冲输出。

样品申请

https://www.wjx.top/vm/PpC1kRR.aspx

视频教学

https://www.bilibili.com/video/BV1k94y1C7Gw/


完整代码下载

https://download.csdn.net/download/qq_24312945/88184732

STM32CUBEMX配置

一种比较简单的方式是利用定时器中断来产生固定数量的脉冲。在这种方法中,我们可以将定时器配置为PWM输出模式,并在PWM输出的中断中进行计数操作。当计数达到设定的脉冲个数后,我们可以停止PWM输出,从而实现精确控制。下面以定时器1的通道4为例,介绍具体的步骤: 

在STM32CUBEMX中,选择定时器1,并将其配置为PWM输出模式。确保选择了正确的定时器通道(通道4)。 

配置定时器1的时钟源和预分频因子。根据应用的要求和系统时钟频率,选择适当的时钟源和预分频因子,以获得所需的脉冲频率。将定时器1的时钟源和预分频因子配置为适合您的应用的值。 

PWM频率计算如下所示。 

在上述配置中,将定时器1的预分频系数设置为48-1,自动重载值设置为1000-1。根据这些配置,PWM的频率可以计算为48,000,000 / ((48-1+1) * (1000-1+1)) = 1000Hz,即1kHz。 

在定时器中,通道的 "pulse"(脉冲)是指定时器输出的信号的一种特性。每个定时器通道都可用于生成脉冲信号,而 "pulse" 通常指的是单个脉冲的持续时间。在这种设置中,我们将脉冲的占空比配置为50%,因此设置为500-1。 

 当PWM脉冲完成时,我们需要触发一个回调函数。HAL_TIM_PWM_PulseFinishedCallback函数是用于在非阻塞模式下处理PWM脉冲完成的回调函数。

为了触发HAL_TIM_PWM_PulseFinishedCallback回调函数,需要启用Capture Compare Interrupt中断。

产生固定数量的PWM


首先,可以定义一个全局变量,该变量用于控制输出脉冲的个数。通过操作该变量,我们可以在程序中灵活地控制所需的脉冲数量。


/* USER CODE BEGIN 0 */

void MX_GPIO_Init_mode3(void);

uint16_t STSPIN220_PwmNum;

uint8_t STSPIN220_flag=0;//电机完成步数标志位

uint8_t STSPIN220_Dir_flag=0;//方向

/* USER CODE END 0 */



首先,使用MX_TIM1_Init()初始化定时器1。 接下来,当需要输出脉冲时,将所需的脉冲数量赋值给变量STSPIN220_PwmNum。 最后,使用HAL_TIM_PWM_Start_IT(&htim1, TIM_CHANNEL_4)启动定时器1的PWM中断输出。


STSPIN220_PwmNum = 20;

MX_TIM1_Init();

HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);


HAL_TIM_PWM_PulseFinishedCallback回调函数的实现部分。 

在函数内部,如果STSPIN220_PwmNum的值为0,即已经输出了所需的脉冲个数,那么通过调HAL_TIM_PWM_Stop_IT(&htim1, TIM_CHANNEL_4)停止定时器1的PWM中断输出,以达到停止脉冲输出的目的。 

其次对全局变量STSPIN220_PwmNum进行递减操作,表示完成了一个脉冲的输出就进行减1。接着,通过条件判断if (STSPIN220_PwmNum == 0),检查是否已经输出了指定数量的脉冲。 

这段代码的作用是在每次PWM波形周期完成时,更新全局变量STSPIN220_PwmNum的值,并在达到指定的脉冲数量后停止PWM中断输出。通过这种方式,可以实现精确控制输出脉冲个数的功能。


/* USER CODE BEGIN 4 */

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)

{

if(STSPIN220_PwmNum==0)

{

HAL_TIM_PWM_Stop_IT(&htim1,TIM_CHANNEL_4);

STSPIN220_flag=1;//电机完成步数标志位

}

STSPIN220_PwmNum--;

}


/* USER CODE END 4 */


产生波形如下所示,可以看到有20个脉冲。 

电机设置

这里使用的电机为步进角为18°,1:30的减速比,在这种情况下,如果步进电机的步进角为18°,减速比为1:30,那么旋转一周所需的脉冲数量可以计算为: 

旋转一周所需脉冲 = (360 / 步进角) * 减速比 * 细分数 

其中,步进角以度为单位,减速比是相对于电机输出轴和实际应用中的旋转轴之间的比率,细分数表示步进电机驱动器将一个步进角分割成多少个微步。 

根据这个公式来计算出所需的脉冲数量,从而实现旋转一周的控制。

STSPIN220初始化

STSPIN220修改后初始化如下所示。


/* USER CODE BEGIN 2 */

MX_GPIO_Init_mode3();

HAL_Delay(100);


STSPIN220_SetStepMode(0);//mode1-mode4都关闭

STSPIN220_enable(0);//使能操作 1使能0失能

STSPIN220_Stby(1);//低功耗模式 1开启低功耗0关闭低功耗

HAL_Delay(100);


STSPIN220_SetStepMode(2);//细分操作

STSPIN220_Stby(0);//低功耗模式 1开启低功耗0关闭低功耗,加载mode

HAL_Delay(100);//等待电平稳定

STSPIN220_setDirection(0);//0反1正

HAL_Delay(100);//等待电平稳定

STSPIN220_enable(1);//使能操作 1使能0失能

HAL_Delay(100);


STSPIN220_PwmNum = 600*2;//步进角为18°,1:30的减速比,细分2则需要走(360/18)*30*2为一圈


MX_TIM1_Init();

// HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_4);

HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);

  /* USER CODE END 2 */



主程序

实现电机循环正转1圈反转1圈代码如下所示。


/* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

if(STSPIN220_flag)

{

HAL_Delay(1000);

// STSPIN220_Stby(1);//低功耗模式 1开启低功耗0关闭低功耗

STSPIN220_flag=0;

if(STSPIN220_Dir_flag==0)

{

STSPIN220_Dir_flag=1;

STSPIN220_setDirection(1);//0反1正

HAL_Delay(100);

STSPIN220_PwmNum = 600*2;//步进角为18°,1:30的减速比,细分2则需要走(360/18)*30*2为一圈

HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);

}

else

{


STSPIN220_Dir_flag=0;

STSPIN220_setDirection(0);//0反1正

HAL_Delay(100);

STSPIN220_PwmNum = 600*2;//步进角为18°,1:30的减速比,细分2则需要走(360/18)*30*2为一圈

HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_4);

}

}

HAL_Delay(10);

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

  }

  /* USER CODE END 3 */


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • 12V转110V/220V 500W逆变器

  • DS1669数字电位器

    相关电子头条文章