37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
CNC Shield V3.0 是一款多功能扩展板,可让您创建基于 Arduino UNO 控制器(或其模拟)的 CNC 机器(3D 打印机、打标机、雕刻机、铣床、等离子切割机等)。扩展板直接连接到控制器(CNC Shield 插在 Arduino UNO 上)。这种电路板与 A4988、DRV8825 或其类似物的组合可以控制 4 轴(包括设置步进电机的微步进模式)、主轴(主轴激活、主轴方向控制、冷却液供应)以及连接限位开关和控制按钮。要开始运行这样一组电子设备,必须输入GRBL Arduino固件(控制器使用G代码与PC交换信息)。以下软件可用于发送 G 代码:GRBL 控制器、蜡烛、通用 G 代码发送器或类似物。
应用:铣床、雕刻机、等离子切割机、打标机、3D打印机、自动化系统等。
![0000.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/f6a6370e242414257742c4ca0c0f0445.jpg)
模块特征:
A 轴可以复制 X、Y、Z 轴之一或自主工作
兼容 A4988、DRV8825 或同等驱动程序
使用跳线(跳线)安装电机的微步
能够连接外部驱动程序
电路板上有用于连接的焊盘:紧急停止按钮、暂停按钮、继续按钮、返回起始位置的按钮、限位开关、主轴开启、主轴旋转方向和冷却液供应
兼容 GRBL:v0.6b、v0.7d、v0.8c、v0.9g
易用性
紧凑型设计
低成本
![000-6.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/3c6ce0e8c6645025e39b827700ea72d8.jpg)
技术规格
品牌:Protoneer
型:CNC扩展板
版本: 3.0
控制轴数:4(X、Y、Z、A)
兼容控制板:Arduino UNO 或同等产品
兼容驱动程序:A4988、5 或同等产品A4988,
微步调整:现在
主轴控制:存在
逻辑器件电源电压:5
电源电压:12-36V
接口:UART、I2C
控制器固件:GRBL:v0.6b、v0.7d、v0.8c、v0.9g
尺寸:68x52.5x18.5 mm
重量: 31 克
![000-9-.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/3b869ffac241a03b621ada09212d64e1.jpg)
模块电原理图
![000-2.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/22d32dd2e7aff90fd8a2132eeca60bcd.jpg)
模块端口
![000.jpeg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/719e4c2177936dc4de0b001e1ec62a62.jpeg)
![000-.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/199f9feb8327f7977ef4b0ec6070458a.jpg)
![000-8.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/eb0fe450c86a36b07238b2bfd526b9b0.jpg)
![000-10.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/1f2465ca98041ab3bac3ac770c201583.jpg)
模块接线图
![000-0.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/a16f6dc1fb37699ca0e447ab5ea42d32.jpg)
视频:简单易懂的cnc shield V3.0 使用教程(3分35秒)
![0.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/b2e161d71d479d1e04229d88eeedfc87.jpg)
Arduino CNC 电机扩展板概述
CNC是计算机数字控制(Computerized Numerical Control )的英文缩写。顾名思义,Arduino CNC电机扩展板常用于驱动3D打印机、机械臂或机器人系统中的NEMA17电机(俗称42步进电机)。假如您想要用Arduino扩展板来驱动直流电机或28BYJ-48步进电机,推荐使用AFMotor电机扩展板。CNC扩展板可以支持A4988、DRV8825等步进电机驱动板。
精心设计的CNC解决方案,采用Arduino CNC Shield V3.0步进电机扩展模块(支持四轴驱动),为您的DIY项目提供无限可能。无论是打造个性化的雕刻机、创新的3D打印机、智能的写字机、艺术化的画蛋机、精密的微型铣钻床、灵活的多轴机械臂,还是多功能的轮式机器人,这款模块都能满足您的需求。
它不仅简化了复杂的机械控制过程,更以其卓越的性能和可靠性,成为您创意实现的强大助手。无论是初学者还是资深爱好者,Arduino CNC Shield V3.0都能助您一臂之力,将创意转化为现实。
![a7.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/3e28a81b90246310caa17ea4ecbc6f7b.jpg)
软件安装
GRBL库安装
打开:https://github.com/,搜索:GRBL
![00.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/b6cb23619409ed2ca38e166d3060b24a.jpg)
![01.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/4cacd49744b50d36564b82bb4ca323cf.jpg)
下载并解压grblmain.zip,放到Arduino IDE安装目录的libraries文件夹中。
实验模块接线示意图
![a1.jpeg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/94d20413e994c1a22d1d68ce1f3fa6f0.jpeg)
![a7.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/4bcfa1770441c0b7a0d181da4adc1a97.jpg)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之一:CNC Shield 驱动一只步进电机Y实现往复旋转
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之一:CNC Shield 驱动一只步进电机Y实现往复旋转
*/
//本程序使用AccelStepper库
#include <AccelStepper.h>
// 定义电机控制用常量
// A4988连接Arduino引脚号
// Y方向控制引脚
const int xdirPin = 6;
// Y步进控制引脚
const int xstepPin = 3;
// 全局通用使能控制引脚
const int xenablePin = 8;
//运行步数200(往复旋转一圈)
const int moveSteps = 200;
//建立步进电机对象
AccelStepper stepper1(1, xstepPin, xdirPin);
void setup() {
// Arduino控制A4988步进引脚为输出模式
pinMode(xstepPin, OUTPUT);
// Arduino控制A4988方向引脚为输出模式
pinMode(xdirPin, OUTPUT);
// Arduino控制A4988使能引脚为输出模式
pinMode(xenablePin, OUTPUT);
// 将使能控制引脚设置为低电平从而让
digitalWrite(xenablePin, LOW);
// 电机驱动板进入工作状态
// 设置电机最大速度300
stepper1.setMaxSpeed(300.0);
// 设置电机加速度20.0
stepper1.setAcceleration(20.0);
}
void loop() {
// 控制步进电机往复运动
if ( stepper1.currentPosition() == 0 ) {
stepper1.moveTo(moveSteps);
} else if ( stepper1.currentPosition() == moveSteps ) {
stepper1.moveTo(0);
}
// 控制Y电机运行
stepper1.run();
delay(6);
}
实验记录视频
【花雕学编程】项目实验之一:CNC Shield 驱动一只步进电机Y实现往复旋转
实验场景图
![03.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/dc693682a559a6e13398f8067ad1c5df.jpg)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之二:使用CNC Shield 驱动二只步进电机X与Y实现往复旋转
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之二:使用CNC Shield 驱动二只步进电机X与Y实现往复旋转
*/
// 定义引脚
const int StepX = 2;
const int DirX = 5;
const int StepY = 3;
const int DirY = 6;
const int StepZ = 4; //未接入电机
const int DirZ = 7; //未接入电机
void setup() {
pinMode(StepX,OUTPUT);
pinMode(DirX,OUTPUT);
pinMode(StepY,OUTPUT);
pinMode(DirY,OUTPUT);
pinMode(StepZ,OUTPUT);
pinMode( DirZ,OUTPUT);
}
void loop() {
digitalWrite(DirX, HIGH); //设置方向,HIGH表示顺时针,LOW表示逆时针
digitalWrite(DirY, HIGH);
digitalWrite(DirZ, HIGH);
for(int x = 0; x<200; x++) { //循环200步
digitalWrite(StepX,HIGH);
delayMicroseconds(500);
digitalWrite(StepX,LOW);
delayMicroseconds(500);
}
delay(1000); //延迟1秒
for(int x = 0; x<200; x++) { //循环200步
digitalWrite(StepY,HIGH);
delayMicroseconds(500);
digitalWrite(StepY,LOW);
delayMicroseconds(500);
}
delay(1000); //延迟1秒
for(int x = 0; x<200; x++) { //循环200步
digitalWrite(StepZ,HIGH);
delayMicroseconds(500);
digitalWrite(StepZ,LOW);
delayMicroseconds(500);
}
delay(1); //延迟1秒
}
实验模块接线示意图
![a2.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/f6bb30145979cf74452d418e16b4a797.jpg)
![a9.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/5f463cb868e897b407b2955cb181c070.jpg)
实验场景图
![05.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/f2c76da6589a43de60cbacd9bc63ba8f.jpg)
实验记录视频
【花雕学编程】项目实验之二:使用CNC Shield 驱动二只步进电机X与Y实现往复旋转
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之三:使用AccelStepper库驱动三只步进电机X、Y与Z 实现循环各个旋转
实验模块接线示意图
![a4.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/d536ce367fdea6ac1d727b55d6ef5390.jpg)
![a6.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/48265acf0a3790a994f2c10ef4b738ef.jpg)
项目实验之三:使用AccelStepper库驱动三只步进电机X、Y与Z 实现循环各个旋转
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之三:使用AccelStepper库驱动三只步进电机X、Y与Z 实现往复旋转
*/
//本程序使用AccelStepper库
#include <AccelStepper.h>
// 定义电机控制用常量
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 = 300; //测试电机运行使用的运行步数
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号电机运行
}
实验记录视频
【花雕动手做】实验三:使用AccelStepper库驱动三只步进电机X、Y与Z 实现往复旋转
实验场景图
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之四:无库控制三只步进电机X、Y与Z 实现动态旋转
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之四:无库控制三只步进电机X、Y与Z 实现动态旋转
*/
// 定义引脚
const int StepX = 2;
const int DirX = 5;
const int StepY = 3;
const int DirY = 6;
const int StepZ = 4;
const int DirZ = 7;
void setup() {
pinMode(StepX, OUTPUT);
pinMode(DirX, OUTPUT);
pinMode(StepY, OUTPUT);
pinMode(DirY, OUTPUT);
pinMode(StepZ, OUTPUT);
pinMode( DirZ, OUTPUT);
}
void loop() {
//设置方向,HIGH表示顺时针,LOW表示逆时针
digitalWrite(DirX, HIGH);
digitalWrite(DirY, HIGH);
digitalWrite(DirZ, HIGH);
//循环300步
for (int x = 0; x < 300; x++) {
digitalWrite(StepX, HIGH);
delayMicroseconds(500);
digitalWrite(StepX, LOW);
delayMicroseconds(500);
}
delay(500); //延迟0.5秒
//循环300步
for (int x = 0; x < 300; x++) {
digitalWrite(StepY, HIGH);
delayMicroseconds(500);
digitalWrite(StepY, LOW);
delayMicroseconds(500);
}
delay(500); //延迟0.5秒
//循环200步
for (int x = 0; x < 200; x++) {
digitalWrite(StepZ, HIGH);
delayMicroseconds(500);
digitalWrite(StepZ, LOW);
delayMicroseconds(500);
}
delay(500); //延迟0.5秒
}
实验记录视频
【花雕动手做】实验之四:无库控制三只步进电机X、Y与Z 实现动态旋转
实验场景图
![07.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/d8e45a357487b689813f13b842af874e.jpg)
使用端口A驱动电机
![07-.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/c5a9eff3d682f69eea0527aaf5898f8c.jpg)
端口A的两种工作模式
CNC扩展板的端口A比其它三个端口的功能要更丰富一些。但是使用端口A以前,我们必须先进行一些设置工作,因此很多朋友对如何使用该端口有些不知所措。接下来我将解释如何使用和设置CNC扩展板的端口A来控制步进电机。
端口A有两种工作模式。第一种模式是复制X、Y、Z中任意一个端口上的电机运行情况(以下简称复制模式)。第二种模式是独立模式。
所谓复制模式就是端口A所接的电机完全复制其它端口上的电机运行状态。比如我们将端口A设置为复制端口X,那么端口A电机的运行状况将是完全复制端口X上的电机运行状况。注:在复制模式下,端口A电机不受Arduino开发板的程序控制而只是单纯的复制端口X电机运行。
![07--.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/a7ddf548a980740fb275531a5879a2d3.jpg)
除了复制模式外,端口A也可以独立模式来控制电机。这时端口A上的电机才会根据Arduino的程序控制运行。注意:在独立模式下,端口A上安装的A4988驱动板的step引脚是由Arduino的D12引脚所控制。dir引脚是由Arduino的D13引脚所控制。
设置端口A的工作模式。以上两种模式的设置是通过扩展板上专门用于设置端口A工作模式的一系列插针来完成的,如下图所示。
![08.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/457901fabd0ce043bda57ab766671bfe.jpg)
驱动4个NEMA步进电机(42步进电机)电路连接示意图
![0-1.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/7466ff60952c829f6aed955bdd1fb370.jpg)
![01.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/a2c775578ffcb93ff2fed520545161dd.jpg)
![03.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/a73d01b602c7f08a10971492a95a9235.jpg)
![07.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/250410b40faf2925f975f8aaf0e23431.jpg)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之五:无库控制四只步进电机X、Y、Z与A轴实现动态旋转
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之五:无库控制四只步进电机X、Y、Z与A轴实现动态旋转
*/
#define EN 8
//方向接脚
#define X_DIR 5
#define Y_DIR 6
#define Z_DIR 7
#define A_DIR 13
//步态接脚
#define X_STP 2
#define Y_STP 3
#define Z_STP 4
#define A_STP 12
// 运动周期
int steps = 300;
void setup() {
// 执行输出
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
pinMode(A_DIR, OUTPUT); pinMode(A_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);
}
void loop() {
for (int i = 0; i < steps; i++) {
digitalWrite(Y_DIR, HIGH);
digitalWrite(Y_STP, HIGH);
delay(1);
digitalWrite(Y_STP, LOW);
delay(1);
}
for (int i = 0; i < steps; i++) {
digitalWrite(X_DIR, HIGH);
digitalWrite(X_STP, HIGH);
delay(1);
digitalWrite(X_STP, LOW);
delay(1);
}
for (int i = 0; i < steps; i++) {
digitalWrite(Z_DIR, HIGH);
digitalWrite(Z_STP, HIGH);
delay(1);
digitalWrite(Z_STP, LOW);
delay(1);
}
for (int i = 0; i < steps; i++) {
digitalWrite(A_DIR, HIGH);
digitalWrite(A_STP, HIGH);
delay(1);
digitalWrite(A_STP, LOW);
delay(1);
}
delay (1000);
}
实验场景图
![10.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/43c156ad98aadf12f1a09cfc2d83111d.jpg)
实验记录视频
【花雕动手做】实验之五:无库控制四只步进电机X、Y、Z与A轴实现动态转动#电子爱好者 #单片机开发 #科技改变生活
说明:电机控制引脚标识
上图中蓝色方框的引脚名称对应的是蓝色引脚插针,黄色方框中的引脚名称对应的是黄色引脚插针。这些引脚的作用是便于我们使用Arduino开发板以外的开发板来控制CNC扩展板。比如您可以使用树莓派或者ESP32等开发板通过这些备用引脚来控制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端口步进控制引脚)
GND:接地
5V: 所有电机驱动板供电引脚(此引脚与各端口上的A4988 VDD引脚联通)
请注意,当使用非Arduino开发板来控制CNC扩展板时,请不要忘记为这里的5V引脚提供电源。这一操作的目的是为了确保各个A4988端口上的驱动板有电源供应。
![09.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/fff4413ef142b074c0dde7cd89475a47.jpg)
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之六:用AccelStepper库控制四只步进电机X、Y、Z与A轴实现不同的转速
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十四:Arduino CNC Shield V3 步进电机拓展模块(驱动四只电机)
项目实验之六:用AccelStepper库控制四只步进电机X、Y、Z与A轴实现不同的转速
*/
#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 = 1000; //测试电机运行使用的运行步数
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号电机运行
}
实验记录视频
【花雕动手做】实验之六:用AccelStepper库控制四只步进电机X、Y、Z与A轴实现不同的转速
实验场景图
![11.jpg](https://makelogimg.dfrobot.com.cn/makelog/5ab819e19e087152393ebf1f/8ed3c885bf89894c92ee58b2907b699b.jpg)
评论