【51单片机】 A4988驱动模块驱动四线步进电机
A4988是控制双极步进电机的驱动模块,在本文中,我们学习如何使用它控制步进电机。
A4988的逻辑电压范围是:3~5.5V,如果配备较好的散热条件每相最大电流可达2A,在没有配备散热器的情况下,每相连续电流最好控制在1A范围内。
先来看图:
---------------------------------------------------------------------------------------------------
从右边自上而下分析:
VMOT、GND:
外接电源正负极,用来给步进电机供电的。
(注意:购买时看一下驱动电压参数,电压不要过高,小的步进电机在4-9v,如果选择12v供电,启动启动没多久就会发烫严重)
建议加个电容,起滤波作用,主要是电机启动时瞬时电流很大,保护驱动板免受瞬时电压的冲击 。
2B 2A 1A 1B:
接步进电机的四根线,不清楚顺序的可以问商家。
VDD、GND:
单片机的VCC、GND接到上面。
从左边自上而下分析:
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 }}
延时函数的生成↓
利用烧录软件生成延时函数 新手学习