Arduino CNC电机扩展板详解(A4988驱动42步进电机)
参考:步进电机相关文章
Arduino CNC 电机扩展板概述
CNC是计算机数字控制(Computerized Numerical Control )的英文缩写。顾名思义,Arduino CNC电机扩展板常用于驱动3D打印机、机械臂或机器人系统中的NEMA17电机(俗称42步进电机)。假如您想要用Arduino扩展板来驱动直流电机或28BYJ-48步进电机,我们推荐您使用AFMotor电机扩展板。
CNC扩展板可以支持A4988、DRV8825等步进电机驱动板。本教程页面主要介绍如何使用A4988驱动板来配合CNC扩展板使用。
学习使用Arduino CNC扩展板需要以下预备知识。您可通过点击以下链接进入太极创客团队为您制作的教程页面:
– NEMA步进电机
– A4988电机驱动板
– AccelStepper库
当您完成了以上的预备知识学习后我们就可以开始学习使用CNC驱动板了。首先,我们来看一看CNC电机扩展板的外观。
Arduino CNC 电机扩展板(正面)
A
rduino-CNC电机扩展板背面
当我们将A4988安装到 CNC扩展板以后并且将其安装到Arduino Uno开发板上,它就变成了下图这副模样。
Arduino CNC 电机扩展板外观
上图中CNC电机扩展板装配有3个A4988驱动板。具体安装多少个A4988是根据您需要驱动步进电机数量来决定的。一台步进电机需要一个A4988。比如您需要驱动1个步进电机,那么只需要安装一个A4988就够了。
安装A4988驱动板的时候请注意驱动板安装方向不要搞反。如下图所示:
Arduino-CNC-安装A4988模块正确方法
电机步进模式设置
如下图所示,CNC扩展板的步进模式设置插针是用来设置电机步进模式的。通过向插针安装跳线帽,我们可以改变电机的步进模式。
Arduino-CNC-电机扩展板步进设置插针
每一个A4988接口上都有三组步进设置插针。这三组插针旁的电路板上印刷有M0/M1/M2。通过安置跳线帽,我们可以设置电机的步进模式。如下图所示,在Z端口上的M0无跳线/M1有跳线/M2无跳线。对应查找表格即可看到,当前Z端口上A4988驱动模式为1/4步进。
Arduino-CNC-电机扩展板步进设置说明
注:与单独使用A4988电机模块不同的是,我们只能使用CNC扩展板上的“步进设置跳线”来控制电机的步进模式。
外接直流电源
Arduino CNC电机扩展板上配有外接直流电源接口。该接口允许接入的电压范围是12V~36V。具体应该连接多大的电源电压是根据被驱动的电机工作电压所决定的。如果您使用的电机是NEMA17步进电机(42步进电机),通常该电机的工作电压是12伏特,那么您可以为扩展板配一个12伏特的外接电源。另外请注意:千万不要将电源的正负极接反,否则可能会对电路板造成损坏。
Arduino-CNC-扩展板外接电源接口
如下图所示,我们可以用小改锥顺时针旋转外接电源接口上的螺钉来固定电源引线。若想移除引线,只要逆时针旋转螺钉就可以了。
Arduino-CNC-扩展板外接电源连接方法
请注意:CNC扩展板的外接电源是无法为Arduino开发板供电的。因此在使用CNC扩展板时,您需要为Arduino单独提供一个电源。假如您不知道如何来为Arduino提供电源的话,可以点击这里了解几种常用的为Arduino供电方法。
用于控制电机的Arduino引脚
使用Arduino驱动CNC扩展板需要了解各引脚的具体控制功能。在以下说明图中,我们将Arduino各个引脚与CNC扩展板上印刷的标识文字一一对应,另外在下图后面还用文字对引脚功能进行说明。这些都是为了便于您参考使用。
Arduino-CNC-电机扩展板引脚说明
Arduino引脚 8 ———————– CNC 扩展板 EN ( 所有电机驱动板使能引脚/低电平有效 )
Arduino引脚 5 ———————– CNC 扩展板 X.DIR ( X端口方向控制引脚)
Arduino引脚 2 ———————– CNC 扩展板 X.STEP ( X端口步进控制引脚)
Arduino引脚 6 ———————– CNC 扩展板 Y.DIR ( Y端口方向控制引脚)
Arduino引脚 3 ———————– CNC 扩展板 Y.STEP ( Y端口步进控制引脚)
Arduino引脚 7 ———————– CNC 扩展板 Z.DIR ( Z端口方向控制引脚)
Arduino引脚 4 ———————– CNC 扩展板 Z.STEP ( Z端口步进控制引脚)
Arduino引脚 13 ———————– CNC 扩展板 A.DIR ( A端口方向控制引脚)
Arduino引脚 12 ———————– CNC 扩展板 A.STEP ( A端口步进控制引脚)
**请注意:
- 以上列表仅列出了用于控制电机的Arduino引脚。有关其它引脚介绍,请参考本教程页面的其它引脚说明部分。
- 要使用CNC扩展板的A端口来控制步进电机,您必须先对扩展板进行额外设置。如果您想了解这一知识内容的具体信息,请参考本教程页面的使用端口A驱动电机部分。
**
Arduino CNC扩展板驱动1个NEMA步进电机(42步进电机)电路连接
Arduino-CNC-电机扩展板驱动步进电机电路连接-1
Arduino CNC扩展板驱动1个NEMA步进电机(42步进电机)示例程序
本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动NEMA17步进电机(42步进电机)。本示例程序将用到AccelStepper库,如果您对该库不太了解,请点击这里进入我们制作的AccelStepper库教程页面。
Arduino CNC电机扩展板驱动NEMA17步进电机示例程序-1
Arduino
/*
Arduino CNC电机扩展板驱动NEMA17步进电机示例程序-1
By 太极创客(http://www.taichi-maker.com)
2019-03-10
本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动NEMA17步进电机(42步进电机)。
如需获得更多关于本示例程序的电路连接以及CNC电机扩展板的资料信息,
请参考太极创客网站(http://www.taichi-maker.com),并在首页搜索栏中搜索关键字:CNC扩展板
*/
#include <AccelStepper.h> //本示例程序使用AccelStepper库
// 定义电机控制用常量
// A4988连接Arduino引脚号
const int xdirPin = 5; // 方向控制引脚
const int xstepPin = 2; // 步进控制引脚
const int xenablePin = 8; // 使能控制引脚
const int moveSteps = 200; //运行步数
AccelStepper stepper1(1,xstepPin,xdirPin);//建立步进电机对象
void setup() {
pinMode(xstepPin,OUTPUT); // Arduino控制A4988步进引脚为输出模式
pinMode(xdirPin,OUTPUT); // Arduino控制A4988方向引脚为输出模式
pinMode(xenablePin,OUTPUT); // Arduino控制A4988使能引脚为输出模式
digitalWrite(xenablePin,LOW); // 将使能控制引脚设置为低电平从而让
// 电机驱动板进入工作状态
stepper1.setMaxSpeed(300.0); // 设置电机最大速度300
stepper1.setAcceleration(20.0); // 设置电机加速度20.0
}
void loop() {
// 控制步进电机往复运动
if ( stepper1.currentPosition() == 0 ){
stepper1.moveTo(moveSteps);
} else if ( stepper1.currentPosition() == moveSteps ){
stepper1.moveTo(0);
}
stepper1.run(); // 1号电机运行
}
Arduino CNC扩展板驱动3个NEMA步进电机(42步进电机)电路连接
Arduino-CNC-电机扩展板驱动步进电机电路连接-1
Arduino CNC扩展板驱动3个NEMA步进电机(42步进电机)示例程序
本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动3个NEMA17步进电机(42步进电机)。本示例程序将用到AccelStepper库,如果您对该库不太了解,请点击这里进入我们制作的AccelStepper库教程页面。
Arduino CNC电机扩展板驱动3个NEMA17步进电机示例程序
Arduino
/*
Arduino CNC电机扩展板驱动3个NEMA17步进电机示例程序
By 太极创客(http://www.taichi-maker.com)
2019-03-10
本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动3个NEMA17步进电机。
如需获得更多关于本示例程序的电路连接以及CNC电机扩展板的资料信息,
请参考太极创客网站(http://www.taichi-maker.com),并在首页搜索栏中搜索关键字:CNC扩展板
*/
#include <AccelStepper.h> //本示例程序使用AccelStepper库
// 定义电机控制用常量
const int enablePin = 8; // 使能控制引脚
const int xdirPin = 5; // x方向控制引脚
const int xstepPin = 2; // x步进控制引脚
const int ydirPin = 6; // y方向控制引脚
const int ystepPin = 3; // y步进控制引脚
const int zdirPin = 7; // z方向控制引脚
const int zstepPin = 4; // z步进控制引脚
const int moveSteps = 200; //测试电机运行使用的运行步数
AccelStepper stepper1(1,xstepPin,xdirPin);//建立步进电机对象1
AccelStepper stepper2(1,ystepPin,ydirPin);//建立步进电机对象2
AccelStepper stepper3(1,zstepPin,zdirPin);//建立步进电机对象3
void setup() {
pinMode(xstepPin,OUTPUT); // Arduino控制A4988x步进引脚为输出模式
pinMode(xdirPin,OUTPUT); // Arduino控制A4988x方向引脚为输出模式
pinMode(ystepPin,OUTPUT); // Arduino控制A4988y步进引脚为输出模式
pinMode(ydirPin,OUTPUT); // Arduino控制A4988y方向引脚为输出模式
pinMode(zstepPin,OUTPUT); // Arduino控制A4988z步进引脚为输出模式
pinMode(zdirPin,OUTPUT); // Arduino控制A4988z方向引脚为输出模式
pinMode(enablePin,OUTPUT); // Arduino控制A4988使能引脚为输出模式
digitalWrite(enablePin,LOW); // 将使能控制引脚设置为低电平从而让
// 电机驱动板进入工作状态
stepper1.setMaxSpeed(300.0); // 设置电机最大速度300
stepper1.setAcceleration(20.0); // 设置电机加速度20.0
stepper2.setMaxSpeed(300.0); // 设置电机最大速度300
stepper2.setAcceleration(20.0); // 设置电机加速度20.0
stepper3.setMaxSpeed(300.0); // 设置电机最大速度300
stepper3.setAcceleration(20.0); // 设置电机加速度20.0
}
void loop() {
// 控制步进电机1往复运动
if ( stepper1.currentPosition() == 0 ){
stepper1.moveTo(moveSteps);
} else if ( stepper1.currentPosition() == moveSteps ){
stepper1.moveTo(0);
}
// 控制步进电机2往复运动
if ( stepper2.currentPosition() == 0 ){
stepper2.moveTo(moveSteps/2);
} else if ( stepper2.currentPosition() == moveSteps/2 ){
stepper2.moveTo(0);
}
// 控制步进电机3往复运动
if ( stepper3.currentPosition() == 0 ){
stepper3.moveTo(moveSteps/4);
} else if ( stepper3.currentPosition() == moveSteps/4 ){
stepper3.moveTo(0);
}
stepper1.run(); // 1号电机运行
stepper2.run(); // 2号电机运行
stepper3.run(); // 3号电机运行
}
使用端口A驱动电机
Arduino-CNC-扩展板端口A的A4988驱动板
端口A的两种工作模式
CNC扩展板的端口A比其它三个端口的功能要更丰富一些。但是使用端口A以前,我们必须先进行一些设置工作,因此很多朋友对如何使用该端口有些不知所措。接下来我将为您解释如何使用和设置CNC扩展板的端口A来控制步进电机。
端口A有两种工作模式。第一种模式是复制X、Y、Z中任意一个端口上的电机运行情况(以下简称复制模式)。第二种模式是独立模式。
所谓复制模式就是端口A所接的电机完全复制其它端口上的电机运行状态。比如我们将端口A设置为复制端口X,那么端口A电机的运行状况将是完全复制端口X上的电机运行状况。注:在复制模式下,端口A电机不受Arduino开发板的程序控制而只是单纯的复制端口X电机运行。
除了复制模式外,端口A也可以独立模式来控制电机。这时端口A上的电机才会根据Arduino的程序控制运行。注意:在独立模式下,端口A上安装的A4988驱动板的step引脚是由Arduino的D12引脚所控制。dir引脚是由Arduino的D13引脚所控制。
设置端口A的工作模式
以上两种模式的设置是通过扩展板上专门用于设置端口A工作模式的一系列插针来完成的。(如下图所示)
Arduino-CNC-扩展板端口A设置插针
您可以使用跳线帽来设置端口A的工作模式(如下图所示)
Arduino-CNC-扩展板端口A设置说明
驱动4个NEMA步进电机(42步进电机)电路连接
CNC扩展板驱动4个步进电机(A端口电机独立运行)
驱动4个NEMA步进电机(42步进电机)示例程序
注:以下示例程序演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动4个NEMA17步进电机(42步进电机)。此示例中端口A电机工作模式为独立模式。
本示例程序将用到AccelStepper库,如果您对该库不太了解,请点击这里进入我们制作的AccelStepper库教程页面。
Arduino CNC电机扩展板驱动4个NEMA17步进电机示例程序
Arduino
/*
Arduino CNC电机扩展板驱动4个NEMA17步进电机示例程序
By 太极创客(http://www.taichi-maker.com)
2019-03-10
本示例程序旨在演示如何使用Arduino Uno开发板通过Arduino CNC电机扩展板来驱动4个NEMA17步进电机。
如需获得更多关于本示例程序的电路连接以及CNC电机扩展板的资料信息,
请参考太极创客网站(http://www.taichi-maker.com),并在首页搜索栏中搜索关键字:CNC扩展板
*/
#include <AccelStepper.h> //本示例程序使用AccelStepper库
// 定义电机控制用常量
const int enablePin = 8; // 使能控制引脚
const int xdirPin = 5; // x方向控制引脚
const int xstepPin = 2; // x步进控制引脚
const int ydirPin = 6; // y方向控制引脚
const int ystepPin = 3; // y步进控制引脚
const int zdirPin = 7; // z方向控制引脚
const int zstepPin = 4; // z步进控制引脚
const int adirPin = 13; // a方向控制引脚
const int astepPin = 12; // a步进控制引脚
const int moveSteps = 200; //测试电机运行使用的运行步数
AccelStepper stepper1(1,xstepPin,xdirPin);//建立步进电机对象1
AccelStepper stepper2(1,ystepPin,ydirPin);//建立步进电机对象2
AccelStepper stepper3(1,zstepPin,zdirPin);//建立步进电机对象3
AccelStepper stepper4(1,astepPin,adirPin);//建立步进电机对象4
void setup() {
pinMode(xstepPin,OUTPUT); // Arduino控制A4988x步进引脚为输出模式
pinMode(xdirPin,OUTPUT); // Arduino控制A4988x方向引脚为输出模式
pinMode(ystepPin,OUTPUT); // Arduino控制A4988y步进引脚为输出模式
pinMode(ydirPin,OUTPUT); // Arduino控制A4988y方向引脚为输出模式
pinMode(zstepPin,OUTPUT); // Arduino控制A4988z步进引脚为输出模式
pinMode(zdirPin,OUTPUT); // Arduino控制A4988z方向引脚为输出模式
pinMode(astepPin,OUTPUT); // Arduino控制A4988a步进引脚为输出模式
pinMode(adirPin,OUTPUT); // Arduino控制A4988a方向引脚为输出模式
pinMode(enablePin,OUTPUT); // Arduino控制A4988使能引脚为输出模式
digitalWrite(enablePin,LOW); // 将使能控制引脚设置为低电平从而让
// 电机驱动板进入工作状态
stepper1.setMaxSpeed(300.0); // 设置电机最大速度300
stepper1.setAcceleration(20.0); // 设置电机加速度20.0
stepper2.setMaxSpeed(300.0); // 设置电机最大速度300
stepper2.setAcceleration(20.0); // 设置电机加速度20.0
stepper3.setMaxSpeed(300.0); // 设置电机最大速度300
stepper3.setAcceleration(20.0); // 设置电机加速度20.0
stepper4.setMaxSpeed(300.0); // 设置电机最大速度300
stepper4.setAcceleration(20.0); // 设置电机加速度20.0
}
void loop() {
// 控制步进电机1往复运动
if ( stepper1.currentPosition() == 0 ){
stepper1.moveTo(moveSteps);
} else if ( stepper1.currentPosition() == moveSteps ){
stepper1.moveTo(0);
}
// 控制步进电机2往复运动
if ( stepper2.currentPosition() == 0 ){
stepper2.moveTo(moveSteps/2);
} else if ( stepper2.currentPosition() == moveSteps/2 ){
stepper2.moveTo(0);
}
// 控制步进电机3往复运动
if ( stepper3.currentPosition() == 0 ){
stepper3.moveTo(moveSteps/4);
} else if ( stepper3.currentPosition() == moveSteps/4 ){
stepper3.moveTo(0);
}
// 控制步进电机4往复运动
if ( stepper4.currentPosition() == 0 ){
stepper4.moveTo(moveSteps/8);
} else if ( stepper4.currentPosition() == moveSteps/8 ){
stepper4.moveTo(0);
}
stepper1.run(); // 1号电机运行
stepper2.run(); // 2号电机运行
stepper3.run(); // 3号电机运行
stepper4.run(); // 3号电机运行
}
其它CNC扩展板的引脚功能介绍
除了以上我所介绍的控制电机用引脚以外,CNC扩展板上还有另外2组引脚插针。如下图所示,这2组引脚插针分别是:
– 步进电机控制插针
– 其他引脚插针
CNC电机扩展板引脚
步进电机控制插针
如下图所示,步进电机控制插针共有两排。
电机控制引脚(备用)
在插针旁印有各个引脚的名称标识。每行插针标识都使用”/”作为分割。”/”左侧的文字是图中蓝色插针的引脚标识。”/”右侧的文字是图中黄色插针的引脚标识。(如下图所示)
电机控制引脚标识说明
上图中蓝色方框的引脚名称对应的是蓝色引脚插针,黄色方框中的引脚名称对应的是黄色引脚插针。这些引脚的作用是便于我们使用Arduino开发板以外的开发板来控制CNC扩展板。比如您可以使用树莓派或者ESP8266-NodeMCU等开发板通过这些备用引脚来控制CNC扩展板。
以下是这组引脚的功能。
EN: 所有电机驱动板使能引脚/低电平有效。(此引脚与各端口上的A4988 EN引脚联通)
GND:接地
X.STEP: X端口步进控制引脚
X.DIR: X端口方向控制引脚
Y.STEP: Y端口步进控制引脚
Y.DIR: Y端口方向控制引脚
Z.STEP: Z端口步进控制引脚
Z.DIR: Z端口方向控制引脚
A.STEP: A端口步进控制引脚
A.DIR: A端口方向控制引脚
5V: 所有电机驱动板供电引脚(此引脚与各端口上的A4988 VDD引脚联通)
请注意,当使用非Arduino开发板来控制CNC扩展板时,请不要忘记为这里的5V引脚提供电源。这一操作的目的是为了确保各个A4988端口上的驱动板有电源供应。
其它引脚插针
如下图所示,CNC扩展板上还配有两排很长的引脚插针。
CNC扩展板其它引脚
这两排引脚中,一排是黑色的而另一排是白色的。其中黑色的引脚全都是GND引脚。白色引脚插针旁的文字标识是这些引脚的名称。它们与Arduino的引脚是联通的。这些引脚与Arduino引脚的联通关系可通过以下列表查询。
CNC 扩展板 Z+ 引脚 ———————– Arduino引脚 11
CNC 扩展板 Z- 引脚 ———————– Arduino引脚 11
CNC 扩展板 Y+ 引脚 ———————– Arduino引脚 10
CNC 扩展板 Y- 引脚 ———————– Arduino引脚 10
CNC 扩展板 X+ 引脚 ———————– Arduino引脚 9
CNC 扩展板 X- 引脚 ———————– Arduino引脚 9
CNC 扩展板 SpnEN 引脚 ———————– Arduino引脚 12
CNC 扩展板 SpnDir引脚 ———————– Arduino引脚 13
CNC 扩展板 CoolEn引脚 ———————– Arduino引脚 A3
CNC 扩展板 Abort 引脚 ———————– Arduino引脚 A0
CNC 扩展板 Hold 引脚 ———————– Arduino引脚 A1
CNC 扩展板 Resume引脚 ———————– Arduino引脚 A2
CNC 扩展板 E-STOP引脚 ———————– Arduino引脚 Reset
以上引脚的名称看起来十分奇怪,事实上这些名字是来自CNC扩展板的最初设计。最早CNC扩展板主要用于驱动小型数控机床。上面列表中的引脚在机床中各自承担不同的作用。比如X+/X-这两个引脚用于工件台X向限位,再比如CoolEn用于冷却液的开关控制。因此这些引脚才会有了这些”奇奇怪怪”的名字。不过如今CNC扩展板的应用已经远远超越了数控车床而成为了3D打印机,机器人等项目的热门选择。但是这些引脚的名字还是保留了下来。
由于CNC扩展板完全将Arduino开发板覆盖住了,假如我们的项目中除了要控制步进电机还需要Arduino来进行其它工作。您可通过上面列表中的对应关系来找到Arduino引脚并加以利用。比如我们想要让Arduino驱动一个LED点亮和熄灭,这时就可以使用CNC扩展板的 SpnEN 引脚来控制LED。在写程序的时候,只要使用Arduino引脚12就可以控制这个LED了。原因是SpnEN引脚与引脚12是联通的。用程序来控制Arduino引脚12就等同于用程序控制SpnEN 引脚。