STM32精确控制步进电机

embedded/2024/10/4 13:05:33/

目的:学习使用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) //电机DIRMOTOR1_POS+=1;//电机CCW旋转else MOTOR1_POS-=1;//电机CW旋转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//电机DIR{if((HVAPI_OUTPUT_REG & 0x0200)==0)MOTOR2_POS+=1;//电机CCW旋转elseMOTOR2_POS-=1;//电机CW旋转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. 安全考虑:控制脉冲的最大输出数量,持续脉冲输出的时间。这样可以保护电机和滑台。


http://www.ppmy.cn/embedded/121884.html

相关文章

开发微信小程序 基础03

WXSS(类似CSS) 定义: WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML的组件样式,类似于网页开发中的 CSS。 分类: 全局样式:定义在 app.wxss 中的样式为全局样式,作用于每一个页面 局部样式&…

SpringBoot+Redis+RabbitMQ完成增删改查

各部分分工职责 RabbitMQ负责添加、修改、删除的异步操作 Redis负责数据的缓存 RabbitMQ里面角色职责简单描述 RabbitMQ里面有几个角色要先分清以及他们的对应关系: 交换机、队列、路由键 交换机和队列是一对多 队列和路由键是多对多 然后就是消息的发送者&…

【亲测有效】linux conda proxy报错问题解决方法

【亲测有效】linux conda proxy报错问题解决方法 conda proxy报错问题怎么解决?我的环境问题描述解决方法步骤1: 清除系统代理,unset掉带_proxy或_PROXY的系统变量 步骤2: 设置conda自带的代理,命令如下: conda proxy报错问题怎么解决&#x…

react 状态管理

Redux Redux是React中常用的状态管理组件,类似于Vue中的Pinia(Vuex),可以独立于框架运行 作用: 通过集中管理的方式管理应用的状态 配套工具 在react中使用redux,官方要求按照两个插件,Redux Toolkit 和 react-red…

Arduino使用网页连接修改esp8266等物联网并修改网络连接信息的基本思路

原因 这样不用每次修改程序中的代码,然后编译再传输到实物中。方便一般非嵌入式人员操作。基本就像买了一个需要联网的一个电子产品要进行的联网设置的操作 基本思路 参考视频图片来源 在硬件程序中,包含一个能够做为网页的请求数据字符串&#xff0c…

【接口测试】任务2:商品分类接口

需要技能竞赛软件测试资料的同学们可s聊我,详细了解 根据接口API文档,编写接口测试用例,分别使用PostMan及JMeter进行接口测试,需要检查系统接口是否能正常工作,返回值是否正确,保证接口调用的正确性。 Pos…

基于大数据的高校新生数据可视化分析系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

会声会影导出视频mp4格式哪个最高清,会声会影输出格式哪个清晰

调高分辨率后,mp4视频还是不清晰。哪怕全部使用4K级素材,仍然剪不出理想中的高画质作品。不是你的操作有问题,而是剪辑软件没选对。Corel公司拥有全球顶尖的图像处理技术,该公司研发的会声会影视频剪辑软件,在过去的20…