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

STM32精确控制步进电机

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

测试环境

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

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

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

一. 电机和A4999之间的连接

导线

电机

驱动模块

A+

1A

B+

2A

绿

A-

1B

B-

2B

二 . MCU和A4999之间的连接:

                                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) MOTOR1_POS+=1;else MOTOR1_POS-=1;gMotor1stPwmCnt+=1;if(gMotor1stPwmCnt>gMotor1stPluseMax){HAL_TIMEx_PWMN_Stop_IT(&htim1, TIM_CHANNEL_2);//Motor1st 停止PWMgMotor1stPwmCnt=0;gMotor1stPluseMax=0;gMotor1stPluseCnt=0;}}if(htim->Instance == TIM3)//MOTOR2{if((HVAPI_OUTPUT_REG & 0x0200)==0)MOTOR2_POS+=1;elseMOTOR2_POS-=1;gMotor2ndPwmCnt+=1;if(gMotor2ndPwmCnt>gMotor2ndPluseMax){											                                            HAL_TIM_PWM_Stop_IT(&htim3, TIM_CHANNEL_2);//Motor2nd 停止PWMgMotor2ndPluseMax=0;gMotor2ndPwmCnt=0;gMotor2ndPluseCnt=0;}}
}

测试结果

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

TIPs

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

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

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

相关文章:

  • 2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点
  • Java面试:ArrayList 和 LinkedList 的区别是什么?谈谈你对ArrayList和LinkedList的理解
  • 基于深度学习的学情智能监测系统设计与实现(PYQT+YOLOv8+训练数据集+论文+部署文档)
  • we3.0里的钱包是什么?
  • 基于python+flask+mysql的音频信息隐藏系统
  • Llama 3.2 90B刚开源就被Molmo-72B全面击败!
  • SpringCloud入门
  • Java Web应用升级故障案例解析
  • 高效处理大规模数据:MATLAB实践指南
  • 828华为云征文|部署敏捷项目管理系统工具 ZenTao
  • 千亿大数据不为人知的数据库缺陷——中看不中用的设置——MySQL大数据优化
  • 第17周 第3章Servlet开发应用实践 ---Servlet启动时加载与错误页面设置
  • 车辆重识别(利用扩散模型合成有效数据进行行人再识别预训练)论文阅读2024/9/27
  • Mac电脑上最简单安装Python的方式
  • PyTorch VGG16手写数字识别教程
  • 分享的文章《人生如棋》
  • 【Linux系统编程】快速查找errno错误码信息
  • 30天自制操作系统-2
  • ECMAScript6(0):ES6简明参考手册
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Kibana配置logstash,报表一体化
  • scala基础语法(二)
  • scrapy学习之路4(itemloder的使用)
  • Vue.js源码(2):初探List Rendering
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 缓存与缓冲
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 两列自适应布局方案整理
  • 入手阿里云新服务器的部署NODE
  • 我是如何设计 Upload 上传组件的
  • 正则表达式
  • 中文输入法与React文本输入框的问题与解决方案
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #if #elif #endif
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)常见O(n^2)排序算法解析
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (接口自动化)Python3操作MySQL数据库
  • (九)One-Wire总线-DS18B20
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十六)串口UART
  • (已解决)vscode如何选择python解释器
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • **PHP分步表单提交思路(分页表单提交)
  • .Net Winform开发笔记(一)
  • .NET 回调、接口回调、 委托
  • .NET/C# 的字符串暂存池
  • .netcore如何运行环境安装到Linux服务器