使用Arduino和A4988驱动器掌握步进电机控制:分步指南
本Arduino教程将讲解如何使用A4988步进电机驱动器控制步进电机。您可以观看以下视频或阅读下方文字教程。 A4988是控制两相混合式步进电机的微细分驱动器,内置转换器便于操作。这意味着仅需控制器的2个引脚即可控制电机:一个控制旋转方向,一个控制步进。 驱动器提供五种步进分辨率:全步、半步、1/4步、1/8步、1/16步。板载电位器调节输出电流,具过温热关断和交叉电流保护。逻辑电压3-5.5V,最大相电流2A(需良好散热)或1A连续(无散热片)。 详细引脚图及与步进电机、控制器连接:右下角两针为VDD和GND,接3-5.5V电源(本例用Arduino 5V)。随后4针接电机:1A/1B接一线圈,2A/2B接另一线圈。接下来两针GND和VMOT接电机电源8-35V,需并联至少47µF去耦电容防尖峰电压。 STEP和DIR两针为控制引脚:DIR控制旋转方向,接单片机数字引脚(本例接Arduino 4号)。STEP控制微步进,每个脉冲电机转一步。得益于内置转换器,无需复杂编程、相序表、频率控制线等。注意这两针内部不上拉/下拉,程序中不应悬空。 SLEEP引脚:低电平进入睡眠模式以降低功耗。RESET引脚:将转换器复位到预定义Home状态(不同微步分辨率下Home状态不同,见数据手册)。低电平时忽略所有STEP输入。RESET为悬空引脚,若不程序控制需接到SLEEP引脚拉高使能。 MS1、MS2、MS3三针选择五种步进分辨率(见真值表),内部下拉,悬空时默认全步模式。ENABLE引脚控制FET输出开关,高电平禁用输出。 完整电路图:驱动器工作在全步模式,MS1-3悬空。DIR和STEP分别接Arduino 3、4号引脚,GND和5V供电。去耦电容用100µF,电机供电用12V 1.5A适配器。电机为NEMA 17两相混合式步进电机,A/C相接1A/1B,B/D相接2A/2B。 接电机前应调节驱动器电流限制,确保电流在电机额定范围内。通过电位器调节参考电压Vref,参考公式: 但此公式不总是准确,因不同厂家A4988板子不同。实测:调节电位器测得Vref=0.6V,理论电流限制=0.6*2=1.2A。但全步模式下绕组电流仅达电流限制70%(数据手册),即0.84A。实测串联电流表测得0.5A,说明公式不适用于此板。 示例代码:定义STEP和DIR引脚(Arduino 3、4号),setup()设为输出。 loop()中先将DIR置高设定方向。for循环200次产生脉冲完成一圈(全步模式,步距角1.8°即200步/圈)。digitalWrite间延时决定电机速度。延时1秒后DIR置低反向,400脉冲转两圈,再延时1秒。 另一个示例:用电位器控制电机速度。源码如下:概述


A4988步进驱动器引脚图


本Arduino教程所需组件
电路原理图

A4988电流限制



Arduino与A4988代码
代码语言: Arduino (arduino)
/* 简单步进电机控制示例代码
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
const int stepPin = 3;
const int dirPin = 4;
void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); // 设定旋转方向
// 200个脉冲完成一圈(全步模式,步距角1.8°)
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000);
digitalWrite(dirPin,LOW); // 改变方向
// 400个脉冲转两圈
for(int x = 0; x < 400; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000);
}
代码语言: Arduino (arduino)
/* 简单步进电机控制示例代码
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
const int stepPin = 3; const int dirPin = 4;
int customDelay,customDelayMapped;
void setup() {
pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT);
digitalWrite(dirPin,HIGH);
}
void loop() {
customDelayMapped = speedUp(); // 从自定义函数获取延时值
digitalWrite(stepPin, HIGH);
delayMicroseconds(customDelayMapped);
digitalWrite(stepPin, LOW);
delayMicroseconds(customDelayMapped);
}
// 读取电位器函数
int speedUp() {
int customDelay = analogRead(A0); // 读取电位器 0-1023
int newCustom = map(customDelay, 0, 1023, 300,4000); // 映射为期望延时 300-4000微秒
return newCustom;
}
制造工艺
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
- Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
- Blynk + Arduino 读取 DHT11 温湿度数据教程
- Arduino 合成乐音:从零实现 88 键钢琴全音域
- 使用 Arduino Uno 和蓝牙实现遥控小车:分步指南
- Arduino Modbus 从机开发全攻略:基于 RS485 扩展板的分步实现指南
- 精准步进电机控制:28BYJ-48 + Arduino UNO + 摇杆
- 自制 AI 助手机器人:Arduino 与 Python 协同实现语音交互与肢体动作
- 蓝牙智能恒温器与照明控制系统——基于 Arduino Nano
- 在家用 Arduino 和 MPU-6050 构建手势控制机器人