Arduino Arduino 电机驱动完全指南:A4988 步进电机 + L298N 直流电机实战
引言
在 Arduino 项目中,电机是最常用的执行器之一。无论是 3D 打印机、CNC 雕刻机、还是自平衡小车,都离不开电机驱动。Arduino 本身只能输出微弱的数字信号(最大 40mA),无法直接驱动电机,因此需要专用的驱动模块来放大电流和控制方向。
本篇指南将介绍两种最常用的电机驱动方案:A4988 驱动步进电机(精确位置控制)和 L298N 驱动直流电机(速度控制)。通过本文,你将掌握从接线、代码到调试的完整流程。
第一部分:A4988 驱动步进电机
所需材料
| 名称 | 数量 |
|---|---|
| Arduino Uno | 1 |
| A4988 步进电机驱动模块 | 1 |
| 42 步进电机(NEMA 17) | 1 |
| 面包板 | 1 |
| 9V 电源 | 1 |
| 杜邦线 | 若干 |
A4988 模块介绍
A4988 是一款微步进步进电机驱动器,内置过流保护功能。它可以驱动双极步进电机,支持最高 35V 电压和 2A/相 电流。模块自带电位器可以调节输出电流,防止电机过热。
微步进配置
A4988 的最大亮点是支持微步进。通过 MS1、MS2、MS3 三个引脚的高低电平组合,可以设置不同的步进精度:
| 模式 | MS1 | MS2 | MS3 | 每转步数 |
|---|---|---|---|---|
| 全步 | LOW | LOW | LOW | 200 |
| 1/2 步 | HIGH | LOW | LOW | 400 |
| 1/4 步 | LOW | HIGH | LOW | 800 |
| 1/8 步 | HIGH | HIGH | LOW | 1600 |
| 1/16 步 | HIGH | HIGH | HIGH | 3200 |
以常见的 1.8° 步进电机为例:全步模式下每转需要 200 步,而 1/16 微步模式下则需要 3200 步——精度提升了 16 倍!
接线图

引脚说明
| A4988 引脚 | Arduino 连接 | 说明 |
|---|---|---|
| EN(使能) | 数字引脚 6 | LOW 有效,拉低时驱动器工作 |
| STEP(步进) | 数字引脚 5 | 每个脉冲走一步 |
| DIR(方向) | 数字引脚 4 | HIGH 正转,LOW 反转 |
| VMOT | 电源正极 | 8V ~ 35V 供电 |
| GND | Arduino GND | 共地 |
完整代码
// 定义引脚
int stepPin = 5;
int dirPin = 4;
int enPin = 6;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enPin, OUTPUT);
digitalWrite(enPin, LOW); // 使能驱动器
digitalWrite(dirPin, HIGH); // 设置方向
}
void loop() {
// 发送 200 个脉冲,步进电机转一圈(全步模式)
for (int i = 0; i < 200; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500); // 脉冲高电平时间
digitalWrite(stepPin, LOW);
delayMicroseconds(500); // 脉冲低电平时间
}
delay(1000); // 暂停 1 秒
// 反转方向
digitalWrite(dirPin, LOW);
// 再转一圈
for (int i = 0; i < 200; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000);
// 恢复方向
digitalWrite(dirPin, HIGH);
}
关键注意事项
- 脉冲时序:
delayMicroseconds()的值决定转速。值越小转速越快,但不能过小导致电机丢步(一般不低于 100μs)。 - 电流调节:首次使用时,用万用表测量电位器,调节参考电压,确保不超过电机的额定电流。
- 散热:A4988 在驱动大电流时容易发热,建议安装散热片。
第二部分:L298N 驱动直流电机
所需材料
| 名称 | 数量 |
|---|---|
| Arduino Uno | 1 |
| L298N 电机驱动模块 | 1 |
| 直流减速电机 | 2 |
| 9V 电池盒 | 1 |
| USB 线 | 1 |
| 杜邦线 | 若干 |
L298N 模块介绍
L298N 是一款双 H 桥电机驱动芯片,可以同时控制两个直流电机(或一个步进电机)。它支持最高 46V 电压和 2A 电流输出,内置续流二极管,使用方便。
| 模块名称 | 双H桥电机驱动模块 | 工作模式 | H桥驱动(双路) |
|---|---|---|---|
| 工作电压 | 5V ~ 35V | 工作电流 | 2A(峰值 3A) |
| 逻辑电压 | 5V ~ 7V | 最大功耗 | 20W |
| 驱动形式 | 双 H 桥 | 工作温度 | -20℃ ~ +135℃ |
引脚说明

| 引脚 | 说明 |
|---|---|
| 12V 输入 | 接外部电源正极(7V-12V) |
| GND | 电源负极,与 Arduino 共地 |
| 5V 输出 | 可作为 5V 电源给 Arduino 供电 |
| ENA / ENB | 使能跳线帽,控制通道 A/B(PWM 调速时需拔出) |
| IN1 / IN2 | 通道 A 方向控制 |
| IN3 / IN4 | 通道 B 方向控制 |
| OUT1 / OUT2 | 接电机 A |
| OUT3 / OUT4 | 接电机 B |
接线图

关键注意事项
- 供电问题:直流电机需要 7V-12V 外部电源供电。Arduino 的 USB 5V 电流太小,无法驱动电机,必须使用独立电源。
- PWM 调速:ENA 和 ENB 跳线帽默认插上,此时电机全速运转。如需调速,拔出跳线帽,将 ENA/ENB 接到 Arduino 的 PWM 引脚(5、6、9、10)。
完整代码
// 电机 A:ENA 接引脚 5,IN1 接引脚 7,IN2 接引脚 8
// 电机 B:ENB 接引脚 6,IN3 接引脚 9,IN4 接引脚 10
int enA = 5;
int in1 = 7;
int in2 = 8;
int enB = 6;
int in3 = 9;
int in4 = 10;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// 设置初始速度(PWM 值 0-255)
analogWrite(enA, 150); // 电机 A 中等速度
analogWrite(enB, 200); // 电机 B 较快速度
}
void loop() {
// 电机 A 正转,电机 B 正转
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// 电机 A 反转,电机 B 反转
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// 电机 A 停止,电机 B 停止
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(2000);
}
第三部分:A4988 vs L298N 对比
| 特性 | A4988 | L298N |
|---|---|---|
| 电机类型 | 步进电机 | 直流电机 |
| 精度 | 高(微步进) | 低(开关控制) |
| 调速方式 | 脉冲频率 | PWM 占空比 |
| 典型应用 | 3D打印机、CNC | 小车、机器人 |
| 驱动电流 | 2A/相 | 2A/桥 |
| 是否需要编码反馈 | 否(开环控制) | 否(无位置反馈) |
简单来说:需要精确定位选 A4988 + 步进电机,需要高速运转选 L298N + 直流电机。
常见问题排查
步进电机不转
- 检查脉冲时序:
delayMicroseconds()值是否合理(建议 300-1000μs 测试) - 检查电流设置:用电位器调节 A4988 的参考电压,确保电机有足够电流
- 检查接线:确认 STEP、DIR、EN 三个引脚连接正确,EN 引脚需要拉低
直流电机不转
- 检查供电电压:确保外部电源在 7V-12V 之间,USB 供电不够
- 检查 H 桥接线:确认 IN1-IN4 与 Arduino 连接正确,OUT 与电机连接正确
- 检查跳线帽:ENA/ENB 跳线帽是否插上(全速)或接到 PWM 引脚
模块过热
- 安装散热片:A4988 和 L298N 在大电流下都会发热,建议加装散热片
- 调低电流:调节 A4988 电位器降低输出电流
- 检查电压:确保供电电压在模块范围内(A4988: 35V,L298N: 46V)
总结
Arduino 电机驱动并不复杂。记住两个核心模块:A4988 用于步进电机(精确位置控制),L298N 用于直流电机(简单速度控制)。掌握接线和代码后,你就可以自由控制各种电机了。动手试试吧!