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 停止PWM
			gMotor1stPwmCnt=0;
			gMotor1stPluseMax=0;
			gMotor1stPluseCnt=0;
		}
	}
	if(htim->Instance == TIM3)//MOTOR2
	{
		if((HVAPI_OUTPUT_REG & 0x0200)==0)
			MOTOR2_POS+=1;
		else
			MOTOR2_POS-=1;

		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. 安全考虑:控制脉冲的最大输出数量,持续脉冲输出的时间。这样可以保护电机和滑台。

相关推荐
Bona Sun1 小时前
单片机手搓掌上游戏机(十四)—pico运行fc模拟器之电路连接
c语言·c++·单片机·游戏机
学生哥-_-2 小时前
STM32点亮WS2812 RGB灯板展示像素图片(一种较方便的取色值数据的方法)
stm32·单片机·嵌入式硬件
西欧伯爵2 小时前
模拟电路入门四
单片机·嵌入式硬件·集成电路
偶像你挑的噻2 小时前
12-Linux驱动开发- SPI子系统
linux·驱动开发·stm32·嵌入式硬件
逆小舟2 小时前
【STM32】手把手教你完成“天气预报项目”
stm32·单片机·嵌入式硬件
cjy_Somnr7 小时前
keil5报错显示stm32的SWDIO未连接不能烧录
stm32·单片机·嵌入式硬件
Lay_鑫辰7 小时前
西门子诊断-状态和错误位(“轴”工艺对象 V1...3)
服务器·网络·单片机·嵌入式硬件·自动化
无垠的广袤9 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
雲烟11 小时前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
泽虞11 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件