资讯详情

A4988驱动NEMA步进电机(42步进电机)

请注意:本页面主要针对Arduino通过A4988控制NEMA步进电机(也称42步进电机)。如果你需要知道如何使用它。Arduino控制28BYJ-48双极步进电机,请参考太极创客网站stepper库”页面。

NEMA介绍步进电机(42步进电机)

为了帮助朋友如何使用它Arduino控制NEMA我们制作了17步进电机(42步进电机)的免费视频教程。您可以通过以下链接查看本部分的教程内容。

A4988电机驱动板

0e6144f0060419a786cdbcbbf8c38263.pngA4988步进电机驱动模块

A4988是一款非常受欢迎且实惠的步进电机驱动板。特别是在3D打印和数控机床,A4988很常见。Arduino通过A当4988控制步进电机时,我们还需要一个额外的电子元件,即电解电容器。该电容器用于保护A4988控制板。

让我们先来看看A4988电机驱动板的引脚功能:

A4988电机驱动板引脚说明 引自上述示意图dronebot workshop(www.dronebotworkshop.com)网站

VMOT – 电机电源正极(可用电源电压为8V ~ 35V)注:此引脚用于连接为电机供电的电源

GND – 电机电源接地

2B, 2A – 电机绕组2控制引脚

1A, 1B – 电机绕组1控制引脚

VDD – 正极(3)逻辑电源 – 5.5伏注:此引脚用于注:A4988电机驱动板供电

GND – 接地逻辑电源

ENABLE – 能引脚(低电平有效)

引脚说明:此引脚为低电平时,A当引脚为高电平时,4988才能进行电机驱动,A4988将不进行电机驱动。如果引脚悬挂,则A4988默认为使能状态。也就是说,当引脚不连接任何电平时,A4988能正常工作。

MS1, MS2, MS3 – 驱动模式引脚

引脚说明:这三个引脚控制:A4988微步细分驱动模式。我们可以调整这三个引脚的逻辑电平A4988驱动电机模式为全、半、1/4、1/8 及 1/16 步进模式。如何在上图右侧的表格中调整这三个引脚电频和A不同电平组合下的4988驱动模式。表格中“L代表低电平,H代表高电平。“FULL全步进,HALF为半步进,QUATER一/四步, “EIGHTH为1/8步进, “SIXTEENTH1/16步进。当MS1, MS2, MS当这些引脚悬空时,A4988默认为全步进电机驱动模式。

RESET – 复位引脚

引脚说明:引脚低电平有效,即引脚低电平时,A4988将复位。如果引脚悬空,则A4988默认为高电平。也就是说,当引脚不连接任何电平时,A4988能正常工作。

SLEEP – 睡眠引脚

引脚说明:当引脚连接电平为低电平时,A4988将进入低能耗睡眠状态,即消耗最少的电能。如果不需要使用SLeep功能,可以SLEEP引脚与RESET引脚连接,然后A在不进入低能耗状态的情况下,4988将继续保持正常的能耗状态。

STEP – 步进引脚

引脚说明:此引脚用于通过Arduino等微控制器方向A4988发送脉冲控制信号,A4988接收此信号后,将根据 MS1, MS2 和 MS三引脚控制电机运转。

DIR – 方向引脚

引脚说明:这个引脚可以调整A4988控制电机运行方向。引脚为低电平,A4988将控制电机顺时针旋转。逆时针旋转高电平。

Arduino通过A4988电机驱动板控制NEMA电机电路连接(简化版)

A4988电机驱动板只需两个Arduino引脚可控制步进电机的运行。

Arduino控制Nema-17步进电机(简化版)

请注意以上电路,A4988电机电源引脚连接100uF电解电容(电解电容引脚可分为正负极,电容正极引脚应连接A4988电机电源正极引脚,电解电容负极引脚相反A4988电机电源接地引脚)。这个电容器可以起作用A4988驱动板电源保护的作用。如果没有100uF任何超过47的电解电容都可以使用uF替换电解电容。请尽量将电容器安装在附近VMOT和GND引脚。

其它连接相对简单,请根据上述示意图进行连接。

本例为简化版电路连接,在此模式下:

1. A4988模块只能全步驱动,不能通过Arduino控制A半步进或微步模式驱动4988。

2. A4988模块的SLEEP/ENABLE/RESET功能不可用

如需使用此功能,请参考此功能Arduino通过A步进电机(完整版)4988模块控制

注:连接接线后,请不要立即通电。我们还需要做一项非常重要的工作:A4988电流调节

A4988 Vref电压调节

所谓Vref电压调节是通过的A调整4988上的电位器旋钮Vref参考电压。该电压将直接影响步进电机在工作时流过线圈的电流强度。请注意,此步骤非常重要。如果忽略此步骤,可能会导致电机损坏。

A4988 Vref参考电压计算公式:

Vref = Imax X Rcs X 8

Rcs: 市面上A4988模块上的Rcs一般有三种类型的电阻值,0.05 欧姆, 0.1 欧姆或0.2 欧姆。大部分A顺时针旋转4988模块4988模块Vref,逆时针旋转电位器调小Vref。

Vref: 金属旋钮和电位器GND之间的电压是Vref。使用小锥旋转电位器旋钮来改变Vref。(如下图所示)

Imax:当步进电机工作时,线圈允许流过的最大电流

万用表测量A4988步进电机驱动模块Vref参考电压

例:Rcs为0.1欧姆,电机Imax为1.5A,以上公式计算,Vref参考电压为1.2 V。也就是说,我们将调节电位器旋钮 将Vref调节为1.2伏特左右。

测量Vref时注意:

1. A4988模块的VDD需要连接引脚 5V电压(可连接Arduino的 5V引脚)

2. A4988模块的GND引脚必须与电路中的其他设备共用(可连接)Arduino的GND引脚)

3. A4988模块的VMOT引脚无需通电,但是通电也不影响Vref的测量。

4. A4988模块的1A/1B/2A/2B引脚不能与步进电机连接,但连接不会影响Vref的测量

5. Arduino无需操作任何程序

Arduino通过A4988电机驱动板控制NEMA电机示例程序(简化版)

Arduino

/*

Arduino控制NEMA步进电机测试程序

by 太极创客()

本示例程序旨在演示如何通过Arduino控制NEMA步进电机。

如何使用本示例程序的详细电路信息Arduino更多关于控制电机的知识,请参考太极制造商网站:

http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-a4988-nema-stepper-motor/

*/

// 定义电机控制常量

// A4988连接Arduino引脚号

const int dirPin = 2; // 方向引脚

const int stepPin = 3; // 步进引脚

// 电机每圈步数

const int STEPS_PER_REV = 200;

void setup() {

// Arduino控制A输出模式是4988步进和方向的引脚

pinMode(stepPin,OUTPUT);

pinMode(dirPin,OUTPUT);

}

void loop() {

// 设置电机顺时针旋转

digitalWrite(dirPin,LOW);

// 电机旋转缓慢

for(int x = 0; x < STEPS_PER_REV; x ) {

digitalWrite(stepPin,HIGH);

delayMicroseconds(2000);

digitalWrite(stepPin,LOW);

delayMicroseconds(2000);

}

// 等待一秒

delay(1000);

// 设置电机逆时针旋转

digitalWrite(dirPin,HIGH);

// 电机快速旋转

for(int x = 0; x < (STEPS_PER_REV * 2); x ) {

digitalWrite(stepPin,HIGH);

delayMicroseconds(1000);

digitalWrite(stepPin,LOW);

delayMicroseconds(1000);

}

// 等待一秒

delay(1000);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

/*

Arduino控制NEMA步进电机测试程序

by 太极创客()

本示例程序旨在演示如何通过Arduino控制NEMA步进电机。

如需获得本示例程序详细电路信息以及如何使用Arduino控制电机的更多知识,请参考太极创客网站:

http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-a4988-nema-stepper-motor/

*/

// 定义电机控制用常量

// A4988连接Arduino引脚号

constintdirPin=2;// 方向引脚

constintstepPin=3;// 步进引脚

// 电机每圈步数

constintSTEPS_PER_REV=200;

voidsetup(){

// Arduino控制A4988步进和方向的引脚为输出模式

pinMode(stepPin,OUTPUT);

pinMode(dirPin,OUTPUT);

}

voidloop(){

// 设置电机顺时针旋转

digitalWrite(dirPin,LOW);

// 电机慢速旋转

for(intx=0;x

digitalWrite(stepPin,HIGH);

delayMicroseconds(2000);

digitalWrite(stepPin,LOW);

delayMicroseconds(2000);

}

// 等待一秒

delay(1000);

// 设置电机逆时针旋转

digitalWrite(dirPin,HIGH);

// 电机快速旋转

for(intx=0;x

digitalWrite(stepPin,HIGH);

delayMicroseconds(1000);

digitalWrite(stepPin,LOW);

delayMicroseconds(1000);

}

// 等待一秒

delay(1000);

}

Arduino通过A4988电机驱动板控制NEMA电机电路连接(完整版)

Arduino通过A4988模块控制步进电机电路连接说明(完整版)

Arduino通过A4988电机驱动板控制NEMA电机示例程序(完整版)

Arduino通过A4988模块控制步进电机示例程序

Arduino

/*

Arduino控制NEMA步进电机测试程序 (2018-09-25)

by 太极创客(www.taichi-maker.com)

本示例程序旨在演示如何通过Arduino控制NEMA步进电机。

用户可通过串口监视器控制电机的各个功能

如需获得本示例程序详细电路信息以及如何使用Arduino控制电机的更多知识,请参考太极创客网站:

http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-a4988-nema-stepper-motor/

控制指令:

顺时针旋转/逆时针旋转 - x0/x1

运行步数 - z100(走100步)

步进方式 - b1(全步),b2(半步),b4(四分),b8(8分),b16(16分)

速度 - d2000(转动速度2000)

允许工作/禁止工作(enable/disable) - g1/g0

睡眠 - m0(sleep)/m1(awake)

*/

// A4988引脚连接Arduino引脚编号

const int dirPin = 2; // Direction

const int stepPin = 3; // Step

const int sleepPin = 4; // Sleep

const int resetPin = 5; // Reset

const int ms3Pin = 6; // Ms3

const int ms2Pin = 7; // Ms2

const int ms1Pin = 8; // Ms1

const int enPin = 9; // Enable

// 步进电机旋转一周步数

const int STEPS_PER_REV = 200;

char cmd; //用户指令字符

int data; //用户指令数据

int motorSpeed = 2000; //电机转速(数值越小速度越小)

void setup() {

// 设置引脚模式

pinMode(stepPin,OUTPUT);

pinMode(dirPin,OUTPUT);

pinMode(sleepPin,OUTPUT);

pinMode(resetPin,OUTPUT);

pinMode(ms3Pin,OUTPUT);

pinMode(ms2Pin,OUTPUT);

pinMode(ms1Pin,OUTPUT);

pinMode(enPin,OUTPUT);

// 初始化引脚状态

digitalWrite(sleepPin, HIGH);

digitalWrite(resetPin, HIGH);

digitalWrite(enPin, LOW);

// 初始化电机步进模式为全步进

digitalWrite(ms1Pin, LOW);

digitalWrite(ms2Pin, LOW);

digitalWrite(ms3Pin, LOW);

Serial.begin(9600);

Serial.println("++++++++++++++++++++++++++++++++++");

Serial.println("+ Taichi-Maker A4988 Steper Demo +");

Serial.println("+ www.taichi-maker.com +");

Serial.println("++++++++++++++++++++++++++++++++++");

Serial.println("");

Serial.println("Please input motor command:");

}

void loop() {

if (Serial.available()) { // 检查串口缓存是否有数据等待传输

cmd = Serial.read(); // 获取电机指令中电机编号信息

Serial.print("cmd = ");

Serial.print(cmd);

Serial.print(" , ");

data = Serial.parseInt();

Serial.print("data = ");

Serial.print(data);

Serial.println("");

runUsrCmd();

}

}

//此函数用于运行用户指令

void runUsrCmd(){

switch(cmd){

case 'x': // 设置步进电机旋转(顺时针/逆时针)

Serial.print("Set Rotation To ");

if (data == 0){

digitalWrite(dirPin, 0);

Serial.println("Clockwise.");

} else {

digitalWrite(dirPin, 1);

Serial.println("Counter Clockwise.");

}

break;

case 'g': // 设置A4988 enable功能

Serial.print("Set Motor To ");

if (data == 0){

digitalWrite(enPin, 1);

Serial.println("Disable.");

} else {

digitalWrite(enPin, 0);

Serial.println("Enable.");

}

break;

case 'm': // 设置A4988 sleep功能

Serial.print("Set Motor To ");

if (data == 0){

digitalWrite(sleepPin, 0);

Serial.println("Sleep.");

} else {

digitalWrite(sleepPin, 1);

Serial.println("Awake.");

}

break;

case 'b': // 设置步进模式

if (data == 1 || data == 2 || data == 4 || data == 8 || data == 16){

Serial.print("Set Motor Step Control To ");

setStepMode(data);

} else {

Serial.println("Wrong Step Mode Cmd!");

}

break;

case 'z': // 设置步进电机运行步数

runStepper(motorSpeed, data);

break;

case 'd': // 设置步进电机运行速度

motorSpeed = data;

Serial.print("Set Motor Speed To ");

Serial.println(data);

break;

default: // 未知指令

Serial.println("Unknown Command");

}

}

//运行步进电机

void runStepper (int rotationSpeed, int stepNum){

for(int x = 0; x < stepNum; x++) {

digitalWrite(stepPin,HIGH);

delayMicroseconds(rotationSpeed);

digitalWrite(stepPin,LOW);

delayMicroseconds(rotationSpeed);

}

}

//设置步进模式

void setStepMode(int modeNum){

switch(modeNum){

case 1: // 全步进

digitalWrite(ms1Pin, LOW);

digitalWrite(ms2Pin, LOW);

digitalWrite(ms3Pin, LOW);

Serial.println(F("Stepping Mode: Full"));

break;

case 2: // 半步进

digitalWrite(ms1Pin, HIGH);

digitalWrite(ms2Pin, LOW);

digitalWrite(ms3Pin, LOW);

Serial.println(F("Stepping Mode: 1/2"));

break;

case 4: // 1/4 步进

digitalWrite(ms1Pin, LOW);

digitalWrite(ms2Pin, HIGH);

digitalWrite(ms3Pin, LOW);

Serial.println(F("Stepping Mode: 1/4"));

break;

case 8: // 1/8 步进

digitalWrite(ms1Pin, HIGH);

digitalWrite(ms2Pin, HIGH);

digitalWrite(ms3Pin, LOW);

Serial.println(F("Stepping Mode: 1/8"));

break;

case 16: // 1/16 步进

digitalWrite(ms1Pin, HIGH);

digitalWrite(ms2Pin, HIGH);

digitalWrite(ms3Pin, HIGH);

Serial.println(F("Stepping Mode: 1/16"));

break;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

/*

Arduino控制NEMA步进电机测试程序 (2018-09-25)

by 太极创客(www.taichi-maker.com)

本示例程序旨在演示如何通过Arduino控制NEMA步进电机。

用户可通过串口监视器控制电机的各个功能

如需获得本示例程序详细电路信息以及如何使用Arduino控制电机的更多知识,请参考太极创客网站:

http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-a4988-nema-stepper-motor/

控制指令:

顺时针旋转/逆时针旋转 - x0/x1

运行步数 - z100(走100步)

步进方式 - b1(全步),b2(半步),b4(四分),b8(8分),b16(16分)

速度 - d2000(转动速度2000)

允许工作/禁止工作(enable/disable) - g1/g0

睡眠 - m0(sleep)/m1(awake)

*/

// A4988引脚连接Arduino引脚编号

constintdirPin=2;// Direction

constintstepPin=3;// Step

constintsleepPin=4;// Sleep

constintresetPin=5;// Reset

constintms3Pin=6;// Ms3

constintms2Pin=7;// Ms2

constintms1Pin=8;// Ms1

constintenPin=9;// Enable

// 步进电机旋转一周步数

constintSTEPS_PER_REV=200;

charcmd;//用户指令字符

intdata;//用户指令数据

intmotorSpeed=2000;//电机转速(数值越小速度越小)

voidsetup(){

// 设置引脚模式

pinMode(stepPin,OUTPUT);

pinMode(dirPin,OUTPUT);

pinMode(sleepPin,OUTPUT);

pinMode(resetPin,OUTPUT);

pinMode(ms3Pin,OUTPUT);

pinMode(ms2Pin,OUTPUT);

pinMode(ms1Pin,OUTPUT);

pinMode(enPin,OUTPUT);

// 初始化引脚状态

digitalWrite(sleepPin,HIGH);

digitalWrite(resetPin,HIGH);

digitalWrite(enPin,LOW);

// 初始化电机步进模式为全步进

digitalWrite(ms1Pin,LOW);

digitalWrite(ms2Pin,LOW);

digitalWrite(ms3Pin,LOW);

Serial.begin(9600);

Serial.println("++++++++++++++++++++++++++++++++++");

Serial.println("+ Taichi-Maker A4988 Steper Demo +");

Serial.println("+     www.taichi-maker.com       +");

Serial.println("++++++++++++++++++++++++++++++++++");

Serial.println("");

Serial.println("Please input motor command:");

}

voidloop(){

if(Serial.available()){// 检查串口缓存是否有数据等待传输

cmd=Serial.read();// 获取电机指令中电机编号信息

Serial.print("cmd = ");

Serial.print(cmd);

Serial.print(" , ");

data=Serial.parseInt();

Serial.print("data = ");

Serial.print(data);

Serial.println("");

runUsrCmd();

}

}

//此函数用于运行用户指令

voidrunUsrCmd(){

switch(cmd){

case'x':// 设置步进电机旋转(顺时针/逆时针)

Serial.print("Set Rotation To ");

if(data==0){

digitalWrite(dirPin,0);

Serial.println("Clockwise.");

}else{

digitalWrite(dirPin,1);

Serial.println("Counter Clockwise.");

}

break;

case'g':// 设置A4988 enable功能

Serial.print("Set Motor To ");

if(data==0){

digitalWrite(enPin,1);

Serial.println("Disable.");

}else{

digitalWrite(enPin,0);

Serial.println("Enable.");

}

break;

case'm':// 设置A4988 sleep功能

Serial.print("Set Motor To ");

if(data==0){

digitalWrite(sleepPin,0);

Serial.println("Sleep.");

}else{

digitalWrite(sleepPin,1);

Serial.println("Awake.");

}

break;

case'b':// 设置步进模式

if(data==1||data==2||data==4||data==8||data==16){

Serial.print("Set Motor Step Control To ");

setStepMode(data);

}else{

Serial.println("Wrong Step Mode Cmd!");

}

break;

case'z':// 设置步进电机运行步数

runStepper(motorSpeed,data);

break;

case'd':// 设置步进电机运行速度

motorSpeed=data;

Serial.print("Set Motor Speed To ");

Serial.println(data);

break;

default:// 未知指令

Serial.println("Unknown Command");

}

}

//运行步进电机

voidrunStepper(introtationSpeed,intstepNum){

for(intx=0;x

digitalWrite(stepPin,HIGH);

delayMicroseconds(rotationSpeed);

digitalWrite(stepPin,LOW);

delayMicroseconds(rotationSpeed);

}

}

//设置步进模式

voidsetStepMode(intmodeNum){

switch(modeNum){

case1:// 全步进

digitalWrite(ms1Pin,LOW);

digitalWrite(ms2Pin,LOW);

digitalWrite(ms3Pin,LOW);

Serial.println(F("Stepping Mode: Full"));

break;

case2:// 半步进

digitalWrite(ms1Pin,HIGH);

digitalWrite(ms2Pin,LOW);

digitalWrite(ms3Pin,LOW);

Serial.println(F("Stepping Mode: 1/2"));

break;

case4:// 1/4 步进

digitalWrite(ms1Pin,LOW);

digitalWrite(ms2Pin,HIGH);

digitalWrite(ms3Pin,LOW);

Serial.println(F("Stepping Mode: 1/4"));

break;

case8:// 1/8 步进

digitalWrite(ms1Pin,HIGH);

digitalWrite(ms2Pin,HIGH);

digitalWrite(ms3Pin,LOW);

Serial.println(F("Stepping Mode: 1/8"));

break;

case16:// 1/16 步进

digitalWrite(ms1Pin,HIGH);

digitalWrite(ms2Pin,HIGH);

digitalWrite(ms3Pin,HIGH);

Serial.println(F("Stepping Mode: 1/16"));

break;

}

}

A4988电机驱动板常见问题

1)4988驱动板可以驱动多大的电流?

如果4988芯片上没有加散热片,电流最好在1.2A以下。如果加散热片,电流可以达到2A。

2)步进电机的连接方式是什么?

如果你的电机线是标准的红蓝绿黑的颜色,可以按照颜色连接为:红-蓝-绿-黑,或相反:黑-绿-蓝-红。

3)接上电后,电机左右抖动不能正常运行是什么原因?

电机出现抖动一般有两个原因,一是缺相:可能是4988与电机没有接好导致4988的输出端某一相断开,造成电机缺相从而抖动。也有可能是步进电机接线接错:如果步进电机没有正确的进行连接,电机会出现抖动的情况。

4)电机丢步如何解决?

相电流的大小跟步进电机的扭力有直接关系,如果感觉你的步进电机扭力不足、丢步,可能是4988输出的电流太小。您可以调节A4988模块上的电位器调节A4988模块的输出电流强度。具体调节方法请参考本页面中关于Vref电压的调节方法。请注意:如A4988输出电流强度大于电机工作电流强可能会烧毁您的步进电机。请小心调节。

5)4988可以驱动两相六线或两相五线的电机吗?

可以,两相连线按照问题2连接,将中间抽头悬空即可。

6)电机停止转动时会有滋滋的电流声。

这是正常现象。步进电机有一个参数-步距角。通过细分驱动可以缩小步进角度,比如步距角为1.8度的步进电机,采用16细分,最小可以走的角度是1.8/16=0.1125度。由于这个角度非常小,当电机停止时,可能处于非电机物理位置(1.8度为一个物理位置)。因此步进电机在静止时会有电流声,这属于正常现象,不用担心。

相关阅读:

标签: 9uf运转电容80uf450v运转电容g628电机电容器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台