当前位置: 首页 > news >正文

STM32精确控制步进电机

目的:学习使用STM32+电机驱动器+步进电机,进行电机运动精确控制。

测试环境

  1. MCU主控芯片STM32F103RCT6 ;
  2. A4988步进电机驱动器模块;                                                                    
  3. 微型2相4线步进电机10mm丝杆滑台,金属丝杆安装有滑块。

10mm二相四线微型步进电机电机的输入接线是4个引脚,需要自己焊线,相电阻53欧,步进角度估计18度,丝杆滑块行程32mm,丝杆转一圈铜滑块大约移动行程0.4mm。步进电机重约7.3g。

主要模块之间的连接如下:

一. 电机和A4988之间的连接

导线

电机

驱动模块

A+

1A

B+

2A

绿

A-

1B

B-

2B

二 . MCU和A4988之间的连接:

                                PD2 MCU  -->  MOTOR1_EN

                                PB3 MCU  -->  MOTOR1_MS1

                                PB4 MCU  -->  MOTOR1_MS2

                                PB5 MCU  -->  MOTOR1_MS3 

                                PB0 MCU  -->  MOTOR1_STEP

                                PB6 MCU  -->  MOTOR1_DIR

软件设计的关键设置: 使用TIM1作为脉冲步进输出:

关键代码: 在脉冲计数的回调函数对数据脉冲数量进行控制。

uint32_t gMotor1stPluseMax=0;
uint32_t gMotor2ndPluseMax=0;
uint32_t gMotor1stPwmCnt=0;
uint32_t gMotor2ndPwmCnt=0;
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM1)//MOTOR1
	{
		if((HVAPI_OUTPUT_REG & 0x0002)==0) //电机DIR
			MOTOR1_POS+=1;//电机CCW旋转
		else 
			MOTOR1_POS-=1;//电机CW旋转

		gMotor1stPwmCnt+=1;
		if(gMotor1stPwmCnt>gMotor1stPluseMax){
			HAL_TIMEx_PWMN_Stop_IT(&htim1, TIM_CHANNEL_2);//Motor1st 停止PWM
			gMotor1stPwmCnt=0;
			gMotor1stPluseMax=0;
			gMotor1stPluseCnt=0;
		}
	}
	if(htim->Instance == TIM3)//MOTOR2//电机DIR
	{
		if((HVAPI_OUTPUT_REG & 0x0200)==0)
			MOTOR2_POS+=1;//电机CCW旋转
		else
			MOTOR2_POS-=1;//电机CW旋转

		gMotor2ndPwmCnt+=1;
		if(gMotor2ndPwmCnt>gMotor2ndPluseMax){											                                            
           HAL_TIM_PWM_Stop_IT(&htim3, TIM_CHANNEL_2);//Motor2nd 停止PWM
		    gMotor2ndPluseMax=0;
			gMotor2ndPwmCnt=0;
			gMotor2ndPluseCnt=0;
		}
	}
}

测试结果

        在步进电机不堵转的情况下,可以实现移动距离的精确控制。

TIPs

        1. 主程序设置电机的启动、停机、运动方向、运动的步数。

        2. 在回调函数中计算步数,当步数达到的时候,停止脉冲输出。

        3. 安全考虑:控制脉冲的最大输出数量,持续脉冲输出的时间。这样可以保护电机和滑台。

相关文章:

  • uniapp 知识点
  • 给Windows系统设置代理的操作方法
  • DC00024基于ssm实验室预约管理系统java web项目web教师预约jsp预约管理系统
  • [sql-04] 连续出现至少三次的数字
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十六章 Linux 第一个程序 HelloWorld
  • linux基础命令
  • uniapp框架中实现文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
  • 排水系统C++
  • 信息安全工程师(22)密码学网络安全应用
  • 新品 | Teledyne FLIR IIS 推出Forge 1GigE SWIR 短波红外工业相机系列
  • PostgreSQL 17:新特性与性能优化深度解析
  • [Linux][进程] 命令行参数
  • React Native使用高德地图
  • 自动驾驶系列—自动驾驶MCU架构全方位解析:从单核到多核的选型指南与应用实例
  • 使用socket编程来实现一个简单的C/S模型(TCP协议)
  • C++教程(三):c++常用的配置文件类型
  • MySQL常用SQL语句(持续更新中)
  • 计算机毕业设计 基于Python高校岗位招聘和分析平台的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • 贪吃蛇游戏
  • 植物叶片病害检测数据集 5100张 29类 带标注 voc yolo
  • 临港新片区:发布再保险、国际航运、生物医药3个领域数据出境操作指引
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 14岁女生瞒报年龄文身后洗不掉,法院判店铺承担六成责任
  • 教育部答澎湃:2025世界数字教育大会将发布系列重磅成果
  • 陕西永寿4岁女童被蜜蜂蜇伤致死,当地镇政府介入处理
  • 习近平同俄罗斯总统普京茶叙