元器件 · 驱动器

L298N 电机驱动板

L298N 是一块双 H 桥驱动板,能让单片机驱动两个直流电机正转和反转。本文讲 H 桥的工作原理、接线方法,以及它真实的能力极限。

它是什么

L298N 是双 H 桥电机驱动——单片机娇弱逻辑脚和胃口大得多的电机之间的肌肉。单片机引脚只能出几十毫安,再小的减速直流电机也要几百毫安。L298N 拿板子的低功率方向和速度信号,开关另一路大电流电机电源。独立带两个电机,正好是两轮车要的。

它老了——TB6612FNG、DRV8833 这类高效 MOSFET 驱动更凉、浪费电压更少——但 L298N 到处都是、便宜皮实,机器人套件默认装它,值得好好搞懂。

H 桥原理图:直流电机周围四个开关,上电源轨下地。左上右下闭合电流一个方向过电机前进;反过来另一对闭合就反转。
H 桥是电机周围四个开关。S1、S4 闭合前进,S2、S3 闭合后退——L298N 给两个电机同时做这件事。 下载 SVG

H 桥怎么工作

H 桥是电机周围排成“H”的四个开关。左上右下闭合电流一个方向——电机前进。反过来另一对闭合电流反向——电机后退。全部诀窍就一句:H 桥不用改线就能反转电机。

每路电机三个信号控制:

  • 两个方向脚(IN1/IN2)选前进、后退或刹车。
  • 一个使能脚(ENA),喂 PWM 信号,高速开关定速度。PWM 拉满全速,50% 占空比约半速。

使能脚喂控制环的输出,就能稳住目标转速、平滑转向,而不是在停车和全速间抽搐。

什么时候用它

单片机要带有刷直流电机就拿 L298N——或任何 H 桥——几乎每台轮式车都这样。每通道 2 A,循迹、漫游车的小黄电机轻松覆盖。

效率和续航重要时、电机小(L298N 压降吃 6 V 电机太多)时、想驱动凉快不用散热片时,换 MOSFET 驱动。

接线与坑

  • 两路电源,一个地。电机电池喂电机电源脚,5 V 逻辑喂逻辑侧。地必须连一起,不然控制信号没有参考——经典悄无声息故障。
  • **它偷约 2 V。**老 BJT 输出级先吃约 2 V。6 V 电机给约 8 V 电源才满速。
  • **它发热。**持续电流下芯片要散热片。跑着跑着电机变虚,先摸温度。
  • **注意板上 5 V 稳压跳帽。**很多模块能从电机电源给逻辑供电——方便,但只到约 12 V。超了拔跳帽单独供 5 V,不然烧稳压。

引脚

红色 L298N 模块人人指它:三组端子加两排针。

组 丝印 作用
电源 +12V 电机电源,5–35 V。名字骗人——电机要多少就是多少
电源 GND 地。必须和单片机共地
电源 +5V 跳帽装上时是输出;拔掉时是输入
A 电机 OUT1、OUT2 A 通道两电机端子
B 电机 OUT3、OUT4 B 通道两电机端子
控制 ENA A 通道使能。出厂跳帽短接为高——调速要拔了跳帽接 PWM
控制 IN1、IN2 A 通道方向
控制 IN3、IN4 B 通道方向
控制 ENB B 通道使能,同跳帽

ENA、ENB 上两个小跳帽是无数第一次“有方向无调速”的原因:**装着时通道永远使能,PWM 没用。**拔掉,接 PWM 脚。

电源排旁边第三个跳帽开板上 5 V 稳压。

真值表

每路电机三个信号,六种有意义组合。这张表就是全部控制接口。

ENA IN1 IN2 A 电机 说明
LOW × × 滑行 输出高阻,电机自由转
PWM HIGH LOW 按占空比前进 正常驾驶态
PWM LOW HIGH 按占空比后退
HIGH HIGH HIGH 刹车 两端都拉高——电机自己短路自己
HIGH LOW LOW 刹车 两端都拉低——同效果
HIGH HIGH LOW 全速前进 ENA 跳帽装着就是它

刹车和滑行真不一样,差别比想象中大。滑行车继续溜;刹车把电机反电动势经桥短路,转动能量变热烧掉,停得狠得多。每个路口都冲过的循迹车,经常是该刹车时滑行。

接到 Arduino

L298N Arduino Uno 说明
ENA 9 脚 必须是 PWM 脚(Uno 上 3、5、6、9、10、11)
IN1 8 脚 任一数字脚
IN2 7 脚 任一数字脚
IN3 5 脚 任一数字脚
IN4 4 脚 任一数字脚
ENB 3 脚 必须是 PWM 脚
GND GND 一切所系的连接
+12V 电机电池 + 不是 Arduino 的 Vin
+5V — 只在用 L298N 给 Arduino 供电时接

5 V 稳压跳帽,正确决策

跳帽 +5V 脚是 用在
装上 输出——板载稳压从电机电源造 5 V 电机电源 7–12 V,想一电池管所有
拔掉 输入——必须喂 5 V 电机电源超 12 V,或低于约 7 V

约 12 V 以上线性稳压烧差值烧到糊。约 7 V 以下稳不出 5 V,电机一加载逻辑就欠压。两种死法看起来都是随机复位。

能跑的最小代码

const int ENA = 9, IN1 = 8, IN2 = 7;
const int ENB = 3, IN3 = 5, IN4 = 4;

void setup() {
  for (int p : {ENA, IN1, IN2, ENB, IN3, IN4}) pinMode(p, OUTPUT);
}

// speed: -255..255. Negative is reverse, 0 coasts.
void driveA(int speed) {
  digitalWrite(IN1, speed > 0);
  digitalWrite(IN2, speed < 0);
  analogWrite(ENA, abs(constrain(speed, -255, 255)));
}

void brakeA() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, 255);
}

void loop() {
  driveA(180); delay(1500);   // forward
  brakeA();    delay(500);    // stop hard
  driveA(-180); delay(1500);  // reverse
  driveA(0);   delay(500);    // coast
}

注意 driveA(0) 是滑行不是刹车——占空比零等于桥关了。想急停必须明说。

2 V 问题,量化

L298N 输出级是双极晶体管,导通的每一对都压降。手册总饱和压降约 1 A 时 1.8 V、2 A 时约 2.7 V。这电压到不了电机,全变芯片的热。

后果看数字:

电机电源 电机实际得到 损失比例
6 V 约 4 V 33%
7.4 V(2S 锂) 约 5.4 V 27%
9 V 约 7 V 22%
12 V 约 10 V 17%

6 V 电机 6 V 电源,三分之一电池在加热芯片。这就是 L298N 在小车上感觉虚的全部原因——6 V 电机在它后面想要约 8 V 供电。

也是热问题。两路各 1 A 芯片烧约 4 W。小散热片没风够呛,限流堵转直接热保护——表现是跑着跑着电机变虚,歇会儿又好。

故障排查

现象 可能原因 解决
接线看着对,纹丝不动 无共地 L298N GND 连 Arduino GND——经典悄无声息故障
有方向无调速 ENA/ENB 跳帽还装着 拔掉,接 PWM 输出
调速只有开/关 使能脚不是 PWM 脚 Uno 上用 3、5、6、9、10 或 11
电机虚、驱动烫 约 2 V 压降加热负载 升电源,或换 MOSFET 驱动
跑着跑着电机变虚 热保护 散热片加风;降持续电流
电机一转 Arduino 复位 共用电源电压下垂 电机独立电池;只共地
稳压烫手 跳帽装着电机电源超约 12 V 拔跳帽单独喂 5 V
一路电机反转 电机线反了 对调 OUT1/OUT2——或软件修,更干净
两路一起抽 电机电源供不出堵转电流 更大电池包;查内阻

L298N 还是 TB6612FNG?

L298N TB6612FNG
输出级 双极 MOSFET
压降 约 1.8–2.7 V 合计约 0.5 V
持续电流 每通道 2 A(要散热) 每通道 1.2 A
峰值电流 3 A 3.2 A
电机电源 5–35 V 2.5–13.5 V
发热 要散热片 凉快
个头 大模块 邮票大
控制脚 每电机 2 方向 + 1 PWM 一样,再加一个共用待机脚

小车无脑 TB6612FNG:两个小黄电机、循迹、迷宫。效率差不是边际——6 V 系统上是三分之一电池。

L298N留给电机电源超 13.5 V、单通道持续超约 1.2 A,或套件里就是它。皮实耐造,搞懂它 H 桥就通了。

新设计还值得知道:DRV8833(像 TB6612FNG,加限流)和 BTS7960(43 A,真大电机)。

探索关联图谱

用到它的搭建

包含 L298N 电机驱动板 的项目、学习路线和模拟器。

对比

替代方案

问题

L298N 电机驱动板 常见问题

L298N 电机驱动板是什么?

L298N 是一种双 H 桥电机驱动模块。它位于单片机和电机之间,接收低功率的方向和速度信号,去开关另一路独立的大电流电源,从而独立驱动两个直流电机(或一个步进电机)。

L298N 用来做什么?

它让 Arduino 这样的单片机能够驱动那些它自己永远无法直接供电的电机。单片机引脚只能提供几十毫安的电流,而即便是一个小小的减速电机也需要几百毫安,所以 L298N 为轮式机器人提供“肌肉”——前进、后退和调速。

L298N 怎么接到 Arduino?

把电机电池接到 L298N 的电机电源端,把 L298N 的地和 Arduino 的地连在一起(这个共地至关重要),把每个电机接到 OUT 端子上,再把 IN1/IN2 方向引脚以及 ENA/ENB 使能引脚分别接到 Arduino 的数字引脚和 PWM 引脚。

用 L298N 怎么控制电机转速?

给使能引脚(ENA 或 ENB)输入 PWM 信号,而不是把它一直保持为高电平。PWM 占空比让 H 桥快速地导通和关断,电机响应的是平均值——所以 50% 的占空比大约就是半速。方向引脚决定前进还是后退。

为什么电机接在 L298N 上转得很慢?

L298N 采用较老的晶体管输出级,电压在到达电机之前就要先损失约 2 V。6 V 电机配 6 V 电源会显得无力;给它约 8 V 的电源,或者对小电机改用 TB6612FNG 这类高效的 MOSFET 驱动。

延伸阅读

参考资料