【51单片机】 A4988驱动模块驱动四线步进电机

A4988是控制双极步进电机的驱动模块,在本文中,我们学习如何使用它控制步进电机。
A4988的逻辑电压范围是:3~5.5V,如果配备较好的散热条件每相最大电流可达2A,在没有配备散热器的情况下,每相连续电流最好控制在1A范围内。
先来看图:
A4988---------------------------------------------------------------------------------------------------

从右边自上而下分析:

VMOT、GND:
外接电源正负极,用来给步进电机供电的。
(注意:购买时看一下驱动电压参数,电压不要过高,小的步进电机在4-9v,如果选择12v供电,启动启动没多久就会发烫严重)

建议加个电容,起滤波作用,主要是电机启动时瞬时电流很大,保护驱动板免受瞬时电压的冲击 。

2B 2A 1A 1B:
接步进电机的四根线,不清楚顺序的可以问商家。

VDD、GND:
单片机的VCC、GND接到上面。


从左边自上而下分析:

ENABLE:
使能端,低电平工作,高电平则模块关机。

MS1、MS2、MS3:
细分设置,通过单片机IO口控制三个脚的高低电平设置细分,有1,2,4,8,16这5种细分,决定电机运行速度,具体见表1:
细分

RESET:
复位,置0复位。复位后系统将回归到原始A4988 I/O端口控制状态;

SLEEP:
睡眠模式,接低电平则电机断电,高电平则电机上电。

默认高电平,无需从单片机单独引个IO口。

图一中将SLEEP和RESET针脚连接起来,目的是将RESET针脚设置为高电平,以便模块可控。

STEP:
脉冲输入,用于控制电机旋转的步数控制,输入一个方波,电机转动一步。

以1.8°电机,16细分为例,就是(1.8/16)°

说白了就是控制一个I/O口不断的高、低电平切换↓

void step(void)
{	
	 STEP=0;    //脉冲输入
	 Delay(1);   //延时 Delay(1)=1ms
	 STEP=1; 
	 Delay(1);			
}

DIR:
方向控制,低电平正转,高电平反转。


正转代码↓

#include <reg51.h>
/**********************延时函数****************/
void Delay(unsigned int xms)  //延时函数 @12.000MHz Delay(1)=1ms  
{
   unsigned char i, j;
   while(xms--) 
  {
	i = 2;
	j = 239;
	do
	{while (--j);}
	 while (--i);
  }
}
/***********************************************/
sbit DIR=P2^0;       //方向控制,低电平正转,高电平反转
sbit STEP=P2^1;     //脉冲输入,控制高低电平不断变化
sbit ENABLE=P2^5;    //使能端,低电平启动
/***********分配细分方式引脚************/
sbit MS3=P2^2;      
sbit MS2=P2^3;
sbit MS1=P2^4;
#define MS {MS1=0;MS2=1;MS3=0;}    //选择细分方式4,可修改MS1~MS3的值选择细分方式
                                   //选择细分方式看表1
void steep(void)
{	
	 STEP=0;    //脉冲输入
	 Delay(1);   //延时 Delay(1)=1ms
	 STEP=1; 
	 Delay(1);			
}
void UP_dj(void)    //正转
{
		 DIR=0;     //低电平正转
		 step();

}
void DN_dj(void)    //反转
{
		 DIR=1;		//高电平反转
	     step();	
}
void main()         //主函数
{
		MS          //选择细分方式4
	    ENABLE=0;   //使能端,低电平启动
	   while(1)
	{
	   UP_dj();     //正转
	}	
}

正反转代码↓

#include <reg51.h>
unsigned int i,j;
/**********************延时函数****************/
void Delay(unsigned int xms)  //延时函数 @12.000MHz Delay(1)=1ms  
{
   unsigned char i, j;
   while(xms--) 
  {
	i = 2;
	j = 239;
	do{while (--j);} 
	while (--i);
  }
}
/***********************************************/
sbit DIR=P2^0;       //方向控制,低电平正转,高电平反转
sbit STEP=P2^1;     //脉冲输入,控制高低电平不断变化
sbit ENABLE=P2^5;    //使能端,低电平启动
/***********分配细分方式引脚************/
sbit MS3=P2^2;      
sbit MS2=P2^3;
sbit MS1=P2^4;
#define MS {MS1=0;MS2=1;MS3=0;}    //选择细分方式4,可修改MS1~MS3的值选择细分方式
                                   //选择细分方式看表1
void step(void)
{	
	 STEP=0;    //脉冲输入
	 Delay(1);   //延时 Delay(1)=1ms
	 STEP=1; 
	 Delay(1);			
}
void UP_dj(void)    //正转
{
		 DIR=0;     //低电平正转
		 step();

}
void DN_dj(void)    //反转
{
		 DIR=1;		//高电平反转
	     step();	
}
void main()         //主函数
{
		MS          //选择细分方式4
	    ENABLE=0;   //使能端,低电平启动
	   while(1)
	{	
		for(i=0;i<5000;i++)
		{
			 ENABLE=0; 	    //使能端,低电平启动
             UP_dj();        //正转
		}
		 
	        ENABLE=1;       //高电平停止
          	Delay(1000);    //停止1s
		
		 for(j=0;j<5000;j++)
		{    
		     ENABLE=0;      //启动
		     DN_dj();       //反转
			
		}
		
		    ENABLE=1;       //高电平停止
          	Delay(1000);    //停止1s  
	}	

}

延时函数的生成↓

利用烧录软件生成延时函数 新手学习

  • 11
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值