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

这篇具有很好参考价值的文章主要介绍了基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

在步进电机控制过程中,为了实现精确的位置和速度控制,经常需要输出指定数量的脉冲。这就需要使用定时器功能来生成PWM脉冲信号。本文将详细介绍如何利用STM32CUBEMX配置定时器以输出指定数量的PWM脉冲。
定时器是STM32微控制器的一个重要功能模块,可用于生成各种定时和计数操作。通过合理配置定时器的参数和模式,我们可以实现精确的脉冲输出。

最近在弄ST的课程,需要样片的可以加群申请:615061293 。
基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划

样品申请

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

视频教学

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

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

完整代码下载

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

STM32CUBEMX配置

一种比较简单的方式是利用定时器中断来产生固定数量的脉冲。在这种方法中,我们可以将定时器配置为PWM输出模式,并在PWM输出的中断中进行计数操作。当计数达到设定的脉冲个数后,我们可以停止PWM输出,从而实现精确控制。下面以定时器1的通道4为例,介绍具体的步骤:
在STM32CUBEMX中,选择定时器1,并将其配置为PWM输出模式。确保选择了正确的定时器通道(通道4)。
基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划

配置定时器1的时钟源和预分频因子。根据应用的要求和系统时钟频率,选择适当的时钟源和预分频因子,以获得所需的脉冲频率。将定时器1的时钟源和预分频因子配置为适合您的应用的值。
PWM频率计算如下所示。
基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划

在上述配置中,将定时器1的预分频系数设置为48-1,自动重载值设置为1000-1。根据这些配置,PWM的频率可以计算为48,000,000 / ((48-1+1) * (1000-1+1)) = 1000Hz,即1kHz。
在定时器中,通道的 “pulse”(脉冲)是指定时器输出的信号的一种特性。每个定时器通道都可用于生成脉冲信号,而 “pulse” 通常指的是单个脉冲的持续时间。在这种设置中,我们将脉冲的占空比配置为50%,因此设置为500-1。
基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划
当PWM脉冲完成时,我们需要触发一个回调函数。HAL_TIM_PWM_PulseFinishedCallback函数是用于在非阻塞模式下处理PWM脉冲完成的回调函数。

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划

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

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划

产生固定数量的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个脉冲。
基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划

电机设置

这里使用的电机为步进角为18°,1:30的减速比,在这种情况下,如果步进电机的步进角为18°,减速比为1:30,那么旋转一周所需的脉冲数量可以计算为:
旋转一周所需脉冲 = (360 / 步进角) * 减速比 * 细分数
其中,步进角以度为单位,减速比是相对于电机输出轴和实际应用中的旋转轴之间的比率,细分数表示步进电机驱动器将一个步进角分割成多少个微步。
根据这个公式来计算出所需的脉冲数量,从而实现旋转一周的控制。

基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲,stm32cube,单片机,#STM32,STM32CUBEMX,STM32C011,STSPIN220,步进电机,细分,定时器,中断,原力计划

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圈代码如下所示。文章来源地址https://www.toymoban.com/news/detail-631889.html

  /* 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 */

到了这里,关于基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(3)----定时器中断产生指定数量脉冲的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX ULN2003步进电机驱动

    一、28BYJ-48 步进电机  28BYJ-48是一款5线单极步进电机,运行电压为5V。 根据数据表,当28BYJ-48电机在全步模式下运行时,每步对应于11.25°的旋转。这意味着每转有32步 (360°/11.25° = 32)。 如上图所示,步距角=5.625°/64 意思就是每64个脉冲步进电机就会转5.625度,因此我们很容易得

    2024年01月18日
    浏览(60)
  • 步进电机简单使用:STM32 PWM输出固定数目的脉冲数(基于CubeMX)

    使用步进电机之前,我们需要了解步距角的概念:步进电机接收到一个脉冲转动的角度,步进电机步距角通常 为1.8°,即步进电机接收到一个脉冲转动1.8°,则若步进电机接收到360°/1.8°=200个脉冲,步进电机就能转动一圈 步进电机通过驱动器控制,驱动器如下图所示(都比较

    2024年02月06日
    浏览(45)
  • 基于STM32的步进电机驱动设计

    程序源码提取链接放置文章底部,自行提取即可。 采用STM32驱动28BYJ4步进电机,实现正转反转,完成角度调整。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动------一个固定的角度(及步进角)。可以

    2024年02月02日
    浏览(56)
  • STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    该篇文章中用到的步进电机闭环驱动器为Emm42_V4.0步进电机闭环驱动器。该闭环驱动器自带FOC矢量闭环控制算法,能实现力矩、速度、位置三环控制。 如下图所示,该42步进闭环电机驱动器的A+、A-、B+、B-连接步进电机,通过右侧的使能、脉冲、方向端对步进电机进行驱动控制

    2024年02月01日
    浏览(56)
  • 步进电机驱动器细分功能的介绍以及设置

           步进电机驱动器的细分原理介绍,步进电机安装有带永久磁性的转子,而定子至少具有两个绕线。当转子磁性与定子绕线保持一致时,将驱动第二个绕线。两个绕线交替开启和关闭,这将导致电机锁定在想要的步进位置。通过绕线的电流方向还可反向。 在带有两个定

    2023年04月09日
    浏览(42)
  • arduino uno+驱动器控制42步进电机

    1.步进电机工作原理 步进电机通过不停的变换通电线圈和线圈的通电方向进行旋转,每次变换使步进电机转子转动1.8°。如图所示,这里采用的是两相四线步进电机,所有的转动都由以下四个步骤构成 2.arduino+驱动器+步进电机,接线示意图 3.编写arduino程序

    2024年02月13日
    浏览(37)
  • STM32步进闭环控制、速度控制(张大头Emm_V4.2驱动器)速度控制 角度控制 位置控制

    本文继续简述使用stm32对张大头步进电机进行速度控制和角度控制。 张大头与stm32的硬件连接请看这个 要注意哈!usart模式要先通过张大头的小屏幕进行设置的哈!!要配置好波特率和地址。这些在张大头提供的pdf说明文档里面都有写! 基础配置不说了,由于我们需要用stm32的

    2024年02月14日
    浏览(52)
  • 步进电机驱动器开发中遇到的问题和解决方法

    在开发步进电机驱动器的时候经常遇到以下问题 电机在高速启动或停止时候 烧坏驱动芯片 如何解决? 步进电机在低速时候抖动,如何解决? 步进电机长时间运行 发热严重 如何解决? 步进电机驱动芯片很容易烧坏如何解决? 如何降低步进电机驱动芯片的发热量? 如何在开

    2024年02月07日
    浏览(41)
  • 【STM32篇】4988驱动步进电机

    本文介绍的步进电机驱动为毕设所用,学习时也借鉴了其他博主和商家的资料,介绍的都很详细。但对于刚入门的友友萌来说,可能还会存在的一些不解。而我就是被卡在驱动电源上。下文为我对4988驱动的一些理解,希望能帮助到刚学习步进电机的朋友。 4988驱动IC价格便宜

    2024年02月01日
    浏览(70)
  • 【电机应用控制】——步进电机控制原理(四相五线/两相四线/细分驱动)&驱动器&梯形/S形加减速算法&直线/圆弧插补

    目录 一、步进电机简介 二、步进电机控制原理 1.四相五线 2.两相四线 3.细分驱动 三、步进电机驱动器 四、梯形加减速算法 五、S形加减速算法 六、直线插补 七、圆弧插补  八、步进电机闭环系统(位置闭环) 总结 前言 声明:学习笔记来自B站正点原子教程,仅供学习交流

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包