元器件 · 驱动器
L298N 电机驱动板
L298N 是一块双 H 桥驱动板,能让单片机驱动两个直流电机正转和反转。本文讲 H 桥的工作原理、接线方法,以及它真实的能力极限。
它是什么
L298N 是双 H 桥电机驱动——单片机娇弱逻辑脚和胃口大得多的电机之间的肌肉。单片机引脚只能出几十毫安,再小的减速直流电机也要几百毫安。L298N 拿板子的低功率方向和速度信号,开关另一路大电流电机电源。独立带两个电机,正好是两轮车要的。
它老了——TB6612FNG、DRV8833 这类高效 MOSFET 驱动更凉、浪费电压更少——但 L298N 到处都是、便宜皮实,机器人套件默认装它,值得好好搞懂。
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 驱动。
延伸阅读