A4988是控制双极步进电机的驱动模块,在本文中,我们学习如何使用它控制步进电机。
A4988的逻辑电压范围是:3~5.5V,如果配备较好的散热条件每相最大电流可达2A,在没有配备散热器的情况下,每相连续电流最好控制在1A范围内。
先来看图:
---------------------------------------------------------------------------------------------------
从右边自上而下分析:
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
}
}
延时函数的生成↓