STM32驱动步进电机测试

今天来简单测试一下用STM32驱动步进电机。

方法是通过STM32控制A4988模块来驱动步进电机。A4988 是一款带转换器和过流保护的 DMOS 微步进电机驱动器,它用于操作双极步进 电机,在步进模式,输出驱动的能力 35V 和±2A。该 A4988 包括一个固定关断时间电流调 节它有能力在慢或混合衰减模式运作。 转换器是 A4988 易于实施的关键。只要在“步进”输入中输入一个脉冲,即可驱动电动机产生微步。

首先,先描述一下用到的A4988和A4988模块扩展板。

如下图为tb上可买的常见的步进电机驱动板,多用于3D打印,CNC雕刻机等的控制。

 当我们将A4988安装到 CNC扩展板以后,它就变成了下面的样子。注意,安装A4988驱动板的时候请注意驱动板安装方向不要搞反。

 如下图所示,CNC扩展板的步进模式设置插针是用来设置电机步进模式的。通过向插针安装跳线帽,我们可以改变电机的步进模式。

 步进模式设置可参考下表的内容。 

测试中选择型号为 17HS5413(42BYGH)的两相四线步进电机,步距角为 1.8°,200 个 脉冲转动一圈。

A4988模块中:STEP、DIR 分别连接单片机的两个控制端口,EN 可以使用单片机端口控制,也可以直接连接 GND 使能,EN=0时成功被使能;MS1、MS2、MS3 按照上表“步进模式设置”,接高低电平,设置步进模式,来选择不同的步距角。例如全模式时,一个脉冲,步进电机旋转角度 1.8°;在 1/4 模式时,一个脉冲,步进电机旋转角度为 0.45°。设置脉冲的频率,来控制旋转速度。 2B、2A、1A、1B 分别接步进电机红、蓝、黑、绿线。 VMOT、GND 接 12V 左右直流电源。 VDD、GND 接 3.3V 或 5V。A4988模块的引脚图如下。1A、1B、2A、2B引脚接步进电机的四条引线,其中1A1B为一组,2A2B为一组,可以用万用表测试一下,互相导通的两个端口是一组,本次测试用到的步进电机黑线与绿线是一组,红线与蓝线是一组。如果你的电机线是标准的红蓝绿黑的颜色,可以按照颜色连接为:红-蓝-绿-黑,或相反:黑-绿-蓝-红。本次接线为:A1——绿线、B1——黑线、A2——红线、B2——蓝线。

 

步进电机控制插针如下图所示,步进电机控制插针共有两排。

在插针旁印有各个引脚的名称标识。每行插针标识都使用”/”作为分割。”/”左侧的文字是图中蓝色插针的引脚标识。”/”右侧的文字是图中黄色插针的引脚标识。

以下是这组引脚的功能。

EN: 所有电机驱动板使能引脚/低电平有效。(此引脚与各端口上的A4988 EN引脚联通)
GND:接地
X.STEP: X端口步进控制引脚
X.DIR: X端口方向控制引脚
Y.STEP: Y端口步进控制引脚
Y.DIR: Y端口方向控制引脚
Z.STEP: Z端口步进控制引脚
Z.DIR: Z端口方向控制引脚
A.STEP: A端口步进控制引脚
A.DIR: A端口方向控制引脚
5V: 所有电机驱动板供电引脚(此引脚与各端口上的A4988 VDD引脚联通)

如下图所示,CNC扩展板上还配有两排很长的引脚插针。

 这两排引脚中,一排是黑色的而另一排是白色的。其中黑色的引脚全都是GND引脚。白色引脚插针旁的文字标识是这些引脚的名称。下面列出这些引脚的名称。

CNC 扩展板 Z+ 引脚 
CNC 扩展板 Z- 引脚 
CNC 扩展板 Y+ 引脚
CNC 扩展板 Y- 引脚
CNC 扩展板 X+ 引脚
CNC 扩展板 X- 引脚
CNC 扩展板 SpnEN 引脚
CNC 扩展板 SpnDir引脚 
CNC 扩展板 CoolEn引脚 
CNC 扩展板 Abort 引脚
CNC 扩展板 Hold 引脚 
CNC 扩展板 Resume引脚
CNC 扩展板 E-STOP引脚 

上引脚的名称看起来十分奇怪,事实上这些名字是来自CNC扩展板的最初设计。最早CNC扩展板主要用于驱动小型数控机床。上面列表中的引脚在机床中各自承担不同的作用。比如X+/X-这两个引脚用于工件台X向限位,再比如CoolEn用于冷却液的开关控制。因此这些引脚才会有了这些”奇奇怪怪”的名字。不过如今CNC扩展板的应用已经远远超越了数控车床而成为了3D打印机,机器人等项目的热门选择。但是这些引脚的名字还是保留了下来。

如下图所示,我们可以用小改锥顺时针旋转外接电源接口上的螺钉来固定电源引线。若想移除引线,只要逆时针旋转螺钉就可以了。我这里用了12V电源适配器的转接头接到了这个部分。

 

本次测试用到了正点原子的STM32F103精英板。

 下面讲解一下接线。

A4988驱动板5V————————STM32   5V

A4988驱动板GND———————STM32   GND

A4988驱动板EN————————STM32   PF0

A4988驱动板XSTEP——————STM32   PF1

A4988驱动板XDIR———————STM32   PF2

A4988驱动板YSTEP——————STM32   PF3

A4988驱动板YDIR———————STM32   PF4

随便找一份正点原子的例程复制下来,然后添加以下文件,并修改主函数。下面是STM32用到的程序,下面是HARDWARE中nema.c和nema.h的内容。

---------------------------------nema.c----------------------------------------------

#include "nema.h"
#include "timer.h"
#include "led.h"
#include "usart.h"


//初始化步进电机控制端口
//STEP PFout(0)
//DIR PFout(1)
//--------------A4988驱动电路设置初始化函数-----------------------
void STEP_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);	 //使能PF端口时钟
	
	//----------------------EN初始化--------------------------------------------
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 //EN-->PF.0 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);					 //根据设定参数初始化GPIOF.2
 GPIO_ResetBits(GPIOF,GPIO_Pin_0); 	//驱动电路EN=0,使能
	//-------------------------------------------------------------------------
	
//-----------------------XSTEP、XDIR初始化-------------------------------------
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;				 //XSTEP-->PF.1 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);					 //根据设定参数初始化GPIOF.1

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;				 //XDIR-->PF.2 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);					 //根据设定参数初始化GPIOF.2
//-----------------------------------------------------------------------------
	
//-----------------------YSTEP、YDIR初始化-------------------------------------
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;				 //YSTEP-->PF.3 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);					 //根据设定参数初始化GPIOF.3

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 //YDIR-->PF.4 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOF, &GPIO_InitStructure);					 //根据设定参数初始化GPIOF.4
//-----------------------------------------------------------------------------					  
}



//dir:为方向控制,TRUE:正转 FALSE:反转
//period 为周期
//steps:脉冲个数

void XStep_Control(u8 dir,u16 period,u32 steps)
{
	u32 i;
	for(i=0; i <= steps; i++)
	{
		XDIR = dir;
		XSTEP = 1;
		delay_us(1);
		XSTEP = 0;
		delay_us(period);
	}
}

void YStep_Control(u8 dir,u16 period,u32 steps)
{
	u32 i;
	for(i=0; i <= steps; i++)
	{
		YDIR = dir;
		YSTEP = 1;
		delay_us(1);
		YSTEP = 0;
		delay_us(period);
	}
}

---------------------------------nema.h----------------------------------------------

#ifndef __NEMA_H
#define __NEMA_H
#include "sys.h"


void STEP_Init(void);//step端口初始化


//dir:为方向控制,TRUE:正转 FALSE:反转
//period 为周期
//steps:脉冲个数

void XStep_Control(u8 dir,u16 period,u32 steps);//X方向步进电机控制函数
void YStep_Control(u8 dir,u16 period,u32 steps);//Y方向步进电机控制函数

#define XSTEP PFout(1)
#define XDIR PFout(2)
#define YSTEP PFout(3)
#define YDIR PFout(4)

#endif

下面是主函数中的内容。实现结果是X电机反转 1 圈,Y电机正转1圈,X电机正转 2 圈,Y电机反转两圈,Y电机的转动速度是X电机的两倍。

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "nema.h"

#define TRUE 1
#define FALSE 0
int main(void)
{
	u8 dir=1;
	delay_init(); //延时初始化
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	STEP_Init(); //步进电机驱动端口初始化
	LED_Init(); //初始化与 LED 连接的硬件接
	while(1)
	{
		LED0 = !LED0;
		XStep_Control(FALSE,1600,200);
		delay_ms(1000);
		YStep_Control(TRUE,800,200);
		delay_ms(1000);
		XStep_Control(TRUE,1600,400);
		delay_ms(1000);
		YStep_Control(FALSE,800,400);
		delay_ms(1000);
	}
}

下面附上调试的照片。。。。。。如果有问题欢迎讨论,希望能够帮到您。。。。。。。

 

  • 6
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
你好!HR4988是一种常用的步进电机驱动芯片,广泛应用于各种步进电机控制场景中。它具有高性能和多种功能,可以提供精确的步进电机控制。 要使用HR4988来驱动步进电机,需要将其与微控制器或其他控制器连接,并通过控制信号来控制步进电机的旋转。以下是基本的步骤: 1. 连接电源:将电源正极(VCC)连接到HR4988的VCC引脚,负极(GND)连接到GND引脚。确保电源的电压范围在HR4988规格的要求内。 2. 连接控制信号:HR4988有几个控制引脚,包括步进脉冲(STEP)、方向(DIR)和使能(EN)引脚。将这些引脚连接到微控制器或其他控制器的相应引脚上。 3. 连接步进电机:HR4988有两个输出引脚,用于连接步进电机的两个相位。将步进电机的两个相位分别连接到HR4988的相应引脚上。确保正确连接引脚,以防止步进电机旋转方向错误。 4. 设置电流限制:HR4988内部有一个可调的电流限制,用于控制步进电机的电流。通过调整相应的电流限制电位器,可以设置步进电机的电流限制,以适应具体的应用需求。 5. 编写控制程序:使用合适的编程语言(例如C/C++、Python等),编写控制步进电机的程序。通过控制HR4988的控制信号,可以实现步进电机的旋转和控制。 请注意,以上只是基本的步骤,具体的驱动步骤和设置可能因实际应用和硬件配置而有所不同。建议参考HR4988的数据手册和相关文档,以了解更详细的信息和使用指南。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值