http://www.taichi-maker.com/homepage/reference-index/motor-reference-index/arduino-a4988-nema-stepper-motor/
简化版本呢代码
/* 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控制A4988步进和方向的引脚为输出模式 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); }
Arduino通过A4988电机驱动板控制NEMA电机电路连接(完整版)
/* 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; } }
使用CNC电机扩展板配合A4988驱动步进电机
Arduino CNC 电机扩展板概述
CNC是计算机数字控制(Computerized Numerical Control )的英文缩写。顾名思义,Arduino CNC电机扩展板常用于驱动3D打印机、机械臂或机器人系统中的NEMA17电机(俗称42步进电机)。CNC扩展板可以支持A4988、DRV8825等步进电机驱动板。
使用一个CNC电机扩展板配合A4988驱动板可以让Arduuino一次控制1台-4台42步进电机,而且省去了连线的麻烦。如果您想了解如何操作,请点击以下链接进入本站相关教程页面
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度为一个物理位置)。因此步进电机在静止时会有电流声,这属于正常现象,不用担心。