L298N接Arduino:双电机接线、PWM调速与常见坑

2026-11-03 07:08:42 51阅读

做轮式小车绕不开一个坎:Arduino 的 IO 口带不动电机,直接接轻则不转、重则烧板子。L298N 红板模块是绕不过去的经典答案,便宜、耐造、双路 H 桥,一块板子管两个直流电机。这篇把它从引脚到代码一次讲清,最后把我翻各类教程和踩坑帖时高频出现的几个"翻车点"汇总出来,新手对照检查能省一下午。

L298N接Arduino双电机接线图

先认识板子:引脚各自管什么

L298N 模块的核心是一颗双 H 桥芯片,每一路桥驱动一个电机的正反转。板载 78M05 稳压还能把电机电源降到 5V 给逻辑部分用。接线前把引脚分组记牢:输出侧是 OUT1/OUT2 接 A 电机、OUT3/OUT4 接 B 电机;电源侧是 +12V(标称 5-35V,推荐 5-12V)、GND 和 5V;控制侧是 IN1~IN4 四个方向脚加 ENA/ENB 两个使能脚。

L298N模块引脚图

方向由 IN 脚的电平组合决定,使能脚 ENA/ENB 管的是"转不转、转多快"。这颗芯片本身压降不小,官方资料口径在 2V 上下,也就是说 12V 供电电机实际只能拿到 10V 左右,满转速会比电机标称低一截,这不是故障,选电源时把这块余量留出来。

L298N引脚功能表

标准接线:双电机方案

以 Arduino Uno 为例,一套被反复验证过的接法是:ENA 接 D9、IN1 接 D8、IN2 接 D7,这是 A 电机;ENB 接 D10、IN3 接 D5、IN4 接 D6,这是 B 电机。电池正极接 +12V 端子、负极接 GND,再把 Arduino 的 GND 和模块 GND 用一根杜邦线连起来。左右轮电机分别接 OUT1/OUT2 和 OUT3/OUT4,两根线如果转反了,对调一下就行。

L298N输入电平与转向对照表

方向和转向的对应关系看这张表就够:IN1、IN2 同高同低都是刹车或停止,一高一低才转,掉换高低方向就反过来。接线阶段强烈建议电机电源先断开,确认无误再上电。

PWM 调速:先拔跳线帽

模块出厂时 ENA/ENB 上插着跳线帽,把使能脚直接拉到高电平,电机只受方向控制、永远是全速。想用 PWM 调速,必须先把这两个跳线帽拔掉,再把 ENA/ENB 接到 Arduino 的 PWM 脚。这是所有教程里翻车率最高的一条——调速没反应,十有八九是跳线帽还插着。

还有一颗 5V 稳压跳线帽要分清:插着时板载稳压工作,5V 引脚是输出,供电在 12V 以内甚至可以反过来给 Arduino 供电;电机电源超过 12V 就必须拔掉,防止稳压器过热。新手建议干脆走"双电源"路线——电机吃电池、Arduino 吃 USB 或独立 5V,只要求两组电源共地,最稳也最好排查。

测试代码:先跑单电机

第一段代码只驱动 A 电机,正转两秒、停、反转两秒,逻辑清楚方便排线。代码取自真实教程原样搬运,引脚对应上面那套接线:

const int ENA = 9;  // PWM speed control
const int IN1 = 8;  // Direction
const int IN2 = 7;  // Direction

void setup() {
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  stopMotor();
}

void loop() {
  forward(180);
  delay(2000);
  stopMotor();
  delay(500);
  reverse(180);
  delay(2000);
  stopMotor();
  delay(1000);
}

void forward(int speedValue) {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, speedValue);
}

void reverse(int speedValue) {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, speedValue);
}

void stopMotor() {
  analogWrite(ENA, 0);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
}

analogWrite 的取值是 0 到 255,代表占空比而不是转速,180 大约是七成功率。确认 A 电机正常后,把同样的结构复制给 B 电机:ENB 接 D10、IN3/IN4 接方向脚,函数里换一组引脚号即可,逻辑完全一致。

常见坑清单:对照自查

坑一:忘了共地。Arduino、L298N、电池负极必须连在一起。不共地就没有统一电平参考,模块读不懂 Arduino 的高电平,症状是电机抖动、乱转或完全没反应。这是排查诡异问题的第一检查项。

坑二:跳线帽没拔就调 PWM。前文说过,使能跳线帽插着时 PWM 信号进不了芯片,调速"失灵"。拔掉再试。

坑三:PWM 值太低电机只响不转。直流电机要克服静摩擦和负载才有启动力矩,占空比太低时常见"滋滋声但不动"。从 150 左右往上逐步试,找到启死值再留余量。

坑四:9V 方块电池带不动小车。这类电池内阻大,接上电机电压瞬间垮掉,小车像没吃饭。双电机小车老实用 6 节 AA 电池组或 2S 锂电,别在电源上省。

坑五:电源从 Arduino 5V 取。电机启动和堵转瞬间的电流尖峰远超 Uno 的稳压能力,轻则复位重启、重则烧稳压。电机电永远走模块的 +12V 端子。

写在前面的最后一句

L298N 的优点是便宜皮实、教学资料海量,缺点也明摆着:压降大、发热高、效率一般。玩双 TT 马力的小车绰绰有余,但如果以后上大电流电机或在意续航,可以再考虑 TB6612FNG 这类 MOSFET 驱动。对第一辆小车来说,这块红板子仍然是性价比最高的起点——接好线、拔对帽、共好地,三件事做对基本一次点亮。


作者:隔壁老王的教程
链接:https://www.aiddithome.com/p/17b503d978040a.html
本作版权归作者所有,未经允许请勿转载。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
5条评论
调参到凌晨
1楼 · 2026-11-03 07:09:10

9V方块电池带不动双电机这条深有体会,电压一垮小车直接歇菜,老老实实换AA电池组

刷视频进来围观
2楼 · 2026-11-03 07:09:10

代码里stopMotor先刹车再换向这个习惯值得学,带载直接换向容易打齿轮,新手容易忽略

学生党玩机
3楼 · 2026-11-03 07:09:10

请问ENB那边的接线,IN3接D5 IN4接D6,PWM脚只有D9 D10这一对吗?Uno的3 5 6 9 10 11不是都能PWM?想确认下有没有讲究

触底反弹的Tony
4楼 · 2026-11-03 07:09:09

坑一共地这条太真实了,去年第一次接的时候电机疯转找了一晚上原因,最后发现就是少了那根杜邦线。现在带新人第一句话就是先共地再说别的。L298N压降大的问题也确实,12V供电电机感觉明显没劲,后来换了锂电才正常。

板砖搬不动
5楼 · 2026-11-03 07:09:09

跳线帽那个真的十个翻车八个是这个,我当年调了一下午PWM没反应,翻帖子才发现要拔帽