|
Arduino 电机驱动完全指南:A4988 步进电机 + L298N 直流电机实战

Arduino 电机驱动完全指南:A4988 步进电机 + L298N 直流电机实战

引言

在 Arduino 项目中,电机是最常用的执行器之一。无论是 3D 打印机、CNC 雕刻机、还是自平衡小车,都离不开电机驱动。Arduino 本身只能输出微弱的数字信号(最大 40mA),无法直接驱动电机,因此需要专用的驱动模块来放大电流和控制方向。

本篇指南将介绍两种最常用的电机驱动方案:A4988 驱动步进电机(精确位置控制)和 L298N 驱动直流电机(速度控制)。通过本文,你将掌握从接线、代码到调试的完整流程。


第一部分:A4988 驱动步进电机

所需材料

名称数量
Arduino Uno1
A4988 步进电机驱动模块1
42 步进电机(NEMA 17)1
面包板1
9V 电源1
杜邦线若干

A4988 模块介绍

A4988 是一款微步进步进电机驱动器,内置过流保护功能。它可以驱动双极步进电机,支持最高 35V 电压和 2A/相 电流。模块自带电位器可以调节输出电流,防止电机过热。

微步进配置

A4988 的最大亮点是支持微步进。通过 MS1、MS2、MS3 三个引脚的高低电平组合,可以设置不同的步进精度:

模式MS1MS2MS3每转步数
全步LOWLOWLOW200
1/2 步HIGHLOWLOW400
1/4 步LOWHIGHLOW800
1/8 步HIGHHIGHLOW1600
1/16 步HIGHHIGHHIGH3200

以常见的 1.8° 步进电机为例:全步模式下每转需要 200 步,而 1/16 微步模式下则需要 3200 步——精度提升了 16 倍!

接线图

引脚说明

A4988 引脚Arduino 连接说明
EN(使能)数字引脚 6LOW 有效,拉低时驱动器工作
STEP(步进)数字引脚 5每个脉冲走一步
DIR(方向)数字引脚 4HIGH 正转,LOW 反转
VMOT电源正极8V ~ 35V 供电
GNDArduino 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 Uno1
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 对比

特性A4988L298N
电机类型步进电机直流电机
精度高(微步进)低(开关控制)
调速方式脉冲频率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 用于直流电机(简单速度控制)。掌握接线和代码后,你就可以自由控制各种电机了。动手试试吧!