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

相关推荐
hollq2 小时前
STM32F103RCT6+STM32CubeMX+keil5(MDK-ARM)+Flymcu实现串口重定向
arm开发·stm32·嵌入式硬件
小鱼儿电子4 小时前
17-基于STM32的宠物饲养系统设计与实现
stm32·嵌入式硬件·物联网·宠物·宠物饲养系统
小莞尔5 小时前
【51单片机】【protues仿真】基于51单片机四层电梯系统
单片机·嵌入式硬件
CFZPL6 小时前
使用江科大串口发送函数发送freertos的vTaskList出现跑飞
单片机
F133168929576 小时前
WD5030A,24V降5V,15A 大电流,应用于手机、平板、笔记本充电器
stm32·单片机·嵌入式硬件·51单片机·硬件工程·pcb工艺
易享电子7 小时前
基于单片机电器断路器保护器系统Proteus仿真(含全部资料)
单片机·嵌入式硬件·fpga开发·51单片机·proteus
爱倒腾的老唐10 小时前
01、如何学习单片机
单片机·嵌入式硬件·学习
点灯小铭10 小时前
基于单片机的夹具压力控制系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计
雾削木16 小时前
stm32解锁芯片
javascript·stm32·单片机·嵌入式硬件·gitee
热爱编程的小刘17 小时前
STM32学习路线开启篇:外部中断
stm32