> 文档中心 > 【51单片机】 A4988驱动模块驱动四线步进电机

【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 /延时函数/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的值选择细分方式//选择细分方式看表1void 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 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的值选择细分方式//选择细分方式看表1void 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  }}

延时函数的生成↓

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