DRV8833 是一块双 H 桥电机驱动板——一块 1.8 x 2.1 cm 的小板,带得动两个直流有刷电机,或者一个双极步进电机——而只要电机是靠电池跑的,它就赢过 L298N。它从 2.7 V 就能开工,自己桥内只吃掉约 0.36 V,所以一颗 3.7 V 的 18650 仍然能把大约 3.4 V 送到电机上。L298N 要大约 5 V 才肯起步,然后不管你喂它多少,它先吃掉 1.8 V 到 3.2 V。用火牛供电、或者用 12 V 电机,L298N 才是更划算的那一块。
DRV8833 模块是什么?板上有些什么?
DRV8833 模块就是一颗 Texas Instruments 的 DRV8833 芯片,装在一块 1.8 x 2.1 cm 见方的黑色 PCB 上。那颗芯片里面是两组完整的 H 桥,所以一块板可以独立驱动两个直流有刷电机,或者驱动一个双极步进电机——每组桥各带一个线圈。
板子背面有两个丝印名字是被截短的。EEP 就是 nSLEEP,使能脚;ULT 就是 nFAULT,故障标志。其余几个写的是 VCC、GND、IN1 到 IN4,以及 OUT1 到 OUT4。留意少了什么:这里没有一个独立的逻辑电源脚。芯片的控制电路直接从电机电源取电,这也正是 2.7 V 这个下限是真下限、而不是一个宣传数字的原因。
两块驱动板,外加一套把它们比一比的实验装置
可选加购
这是三条各走各的路线,不是一整篮。要搭那台两轮小车:加两个 68 mm 轮子,直接压进 TT 电机的白色十字轴。想用 ESP32 而不是 Uno 来驱动这块板:拿 ESP32 开发板,跳过 Uno。习惯在面包板上做实验:排针焊好之后,DRV8833 可以像一颗芯片那样跨骑在面包板中间的凹槽上,公对公杜邦线从那里就够得着它。双槽 18650 电池座是给电压那一节里讲的 7.4 V 双节电池组用的。
为什么一颗 18650 在 DRV8833 上跑得动机器人,在 L298N 上却推不动?
DRV8833 的桥臂是用 N 沟道 MOSFET 搭出来的,而一颗导通的 MOSFET,表现出来就是一个小电阻。TI 的数据手册给出上桥 FET 200 mΩ、下桥 160 mΩ(5 V、室温),而电流去电机的路上要穿过一颗,回来又要穿过一颗。也就是路径上一共 360 mΩ,所以 1 A 时驱动板自己留下 0.36 V,其余全交给电机。这两个数字会随着电源电压下降或芯片发热而上升——到量程下限时是 250 mΩ 和 200 mΩ——所以电池半没电时,1 A 下要按接近 0.45 V 来算。重点在于:这个损耗跟着电流走,你只要半安培,就只损失一半。
红板里那颗 L298 是更老的设计,用双极晶体管搭成,而一颗进入饱和的双极晶体管,不管你要的电流多小,压降都大致固定。ST 的数据手册写明 1 A 时一组桥两半加起来的总压降,最好是 1.8 V,最差 3.2 V;再把它上管、下管的典型饱和压降 1.35 V 和 1.2 V 加起来,一颗正常的片子大约落在 2.55 V。
L298 的逻辑侧另外还要一路自己的 4.5 V 到 7 V 电源,而红色模块用板载那颗小小的 5V 稳压来解决——由电源端子旁边那个跳线帽切入,只要电机电源不超过 12 V,逻辑就从电机电源那里取电。但线性稳压只能把电压往下降,而且还要留几伏的余量才降得出来,所以它要电机端子上大约有 7 V,才做得出一个干净的 5 V——把一颗 3.7 V 的电池交给那块板,还没轮到电机上场,它的逻辑电源就已经不成立了。
现在把一颗 18650 电池装进电池座,替一对额定 3 V 到 6 V 的 TT 减速电机算一算这笔账。
| 供电 | 桥内损耗 | 留给电机的 | 结果 |
|---|---|---|---|
| 1 颗 18650,3.7 V,接 DRV8833 | 半安培时约 0.2 V | 约 3.5 V | 转得动——落在电机 3-6 V 的范围里 |
| 1 颗 18650,3.7 V,接 L298N | 1.8-3.2 V | 0.5-1.9 V | 低于电机的范围;根本起不来 |
| 2 颗 18650 串联,7.4-8.4 V,接 DRV8833 | 约 0.2 V | 7.2-8.2 V | 太高了——要限制 PWM 占空比 |
| 9 V 或 12 V 火牛,接 L298N | 1.8-3.2 V | 6-10 V | 没问题——这才是 L298N 的主场 |
固定的 2.5 V 损耗,从 12 V 里扣掉不痛不痒,从 3.7 V 里扣掉却是致命的。用双节电池座时,充满的 8.4 V 仍然在 DRV8833 的 10.8 V 上限之内,但已经远高于一个 6 V 电机想要的电压,所以把 PWM 封顶在 255 里的大约 185——6 V 除以 8.2 V,大约是 73% 的占空比。双节电池组只能用双节充电器来充:可以看我们的18650 电池组、BMS 板与充电指南,单节的话看 TP4056 充电。

DRV8833 实际能给多大电流?L298N 为什么非要那片散热片?
DRV8833 的额定是每通道 1.5 A 连续、2 A 峰值。这个数字是发热的极限,不是保险丝,而这份热量很好算:驱动板自身的电阻会把电流变成功率,也就是 I 平方乘以 R。1 A 时就是 1 A x 1 A x 0.36 Ω = 0.36 W,散在一颗平贴在板子铜箔上的芯片里——只是温温的,如此而已。小机器人上两个 TT 电机各自吃几百毫安,离这个天花板还远得很。
同一条算式套到 L298N 身上,那片散热片就不再像装饰品了。它的损耗是电压乘电流,而不是 I 平方 R,所以每通道 1 A、两个通道一起,就是 2.55 V x 1 A x 2 = 5.1 W。一颗裸的 L298 封装在静止空气里,散热能力大约是每瓦 35 °C,对着 130 °C 的结温上限,这意味着 178 °C 的温升。把它锁到那块带鳍片的金属块上,热才有地方去——这就是这块板为什么长成这样,也是为什么 L298N 那个每通道 2 A 的标称数字,只有在散热片装好、鳍片露在空气里的前提下才算诚实。
DRV8833 怎么接到 Arduino 或 ESP32 上?
DRV8833 模块出厂时,那条十二针排针是散在袋子里的,没有焊上去;TT 电机那边也是裸的焊片,没有引线。第一次上电之前,先给自己留五分钟拿烙铁:我们的排针焊接指南讲的就是这块板,而每个电机焊片接一根杜邦线的公头端、或者一小段剪下来的线头就行。这一回合 L298N 是真的赢了——它那些蓝色螺丝端子直接夹裸线,一点都不用焊。

针脚焊好之后,用公对母杜邦线从模块的公针接到 Uno 的母排座上。请照着模块背面印的名字来接,不要数位置。
| 模块引脚 | 接到哪里 | 作用 |
|---|---|---|
| VCC | 电池 + | 电机电源和芯片电源合二为一,2.7-10.8 V |
| GND | 电池 – 和 Arduino 的一个 GND | 共地基准;不接的话输入脚就悬空 |
| IN1 / IN2 | Uno 的 D9 / D10 | A 桥:一根送 PWM,另一根拉 LOW |
| IN3 / IN4 | Uno 的 D3 / D11 | B 桥,同样的做法 |
| OUT1 / OUT2 | 左边电机的两个焊片 | A 桥输出 |
| OUT3 / OUT4 | 右边电机的两个焊片 | B 桥输出 |
| EEP(nSLEEP) | 空着不接 | 板上自带的上拉电阻已经把它拉高 |
| ULT(nFAULT) | 可选:接任一个 Arduino 输入脚 | 开漏输出,出故障时被拉低;用 INPUT_PULLUP |
留意少了哪一行:这张表里没有任何一项在给 Arduino 供电。Uno 自己那颗稳压,要 VIN 或电源座上有大约 7 V,才守得住一条稳定的 5 V 轨,所以一颗 3.7 V 的 18650 能把 DRV8833 喂得很好,却完全带不动 Uno。在桌面上测试时,Uno 就让它接着 USB 线,然后把两边的地接在一起——正是这条共地线,才让那几个 IN 脚有意义。如果这台机器人要脱线自己跑,那就改成两边都由一组 7.4 V 双节电池供电:刚充满的 8.4 V 落在 Uno 的输入范围内,同时仍在 DRV8833 的 10.8 V 上限之下,PWM 按前面说的封顶,电机平均拿到的还是大约 6 V。一个双槽电池座一件事就搞定,或者把两个单槽电池座正负相接,用两颗同型号、电量也相同的电池。
这里混用两路电源是安全的:DRV8833 的输入脚本身就额定到 5.75 V,不管 VCC 是多少,所以 Uno 的 5 V 逻辑没有问题,而板子自己靠一颗 3.7 V 电池跑。这块板真正毫无防备的是电源接反——红线进 VCC,黑线进 GND,电池放进电池座之前先核对一遍。
EEP 可以空着不接。单看芯片,DRV8833 内部有一个 500 kΩ 的电阻把 nSLEEP 往下拉,所以一颗裸芯片上电时是睡着的——而模块用一颗 47 kΩ 的上拉电阻从 EEP 接到 VCC 来回应这件事,正好落在 TI 建议的 20-75 kΩ 之内。对上芯片那 500 kΩ,这个分压把引脚稳在电源的大约 91%——单颗 18650 就是 3.4 V——远远超过芯片需要看到的 2.5 V,所以板子会自己醒过来。以后要是碰到哪块驱动板明明其他都对却毫无反应,就把它的使能脚接到 VCC 再试一次。
方向由一组桥的两个输入脚里、哪一根在送 PWM 决定。IN1 送 PWM、IN2 拉低,电机往一边转;把两根对调,它就往另一边转。两个输入同时拉高,等于把绕组经由桥臂短路,而一个还在转的电机同时也是发电机:它自己发出的电压现在会在这个短路里推出电流,而这股电流反过来拖住转动——这就是刹车。两个输入同时拉低,绕组两端开路,没有东西可以顶,于是它就自由滑行。
换成 ESP32,接线一模一样——芯片从 2 V 起就认作逻辑高,所以 3.3 V 的输出可以直接驱动它——你只是把 analogWrite 换成 ledcAttach 和 ledcWrite。这一换是有实际好处的:ledcAttach(pin, 20000, 8) 用 20 kHz 斩波,已经在听觉之上,而 Uno 卡在 490 Hz。PWM 驱动的电机发出的那阵细细的嗡声,就是这个开关频率,不是故障。
值得看一看这块板拿在手上、在真实尺寸下是什么样子:
下面这段程序让两个电机加速上去、刹车,再往另一个方向加速上去。它刻意用 Uno 的 9、10、3、11 脚,而不是看起来更顺手的 5 和 6:5 脚和 6 脚跟 millis() 共用同一个定时器,所以它们真正的占空比会高于你要的那个数字。把一组桥接在 5/6、另一组接在 9/10,同样的指令下两个轮子就会跑出不同的速度——机器人画着弧线跑偏,而搭它的人去怪电机。
// DRV8833 调速与换向测试,Arduino Uno。
// A 桥带左边的电机,B 桥带右边那个。
// 每一组桥,一根输入送 PWM,另一根一直保持 LOW。
// 把送 PWM 的那根换成另一根,电机就往反方向转。
// 两根输入都 HIGH = 刹车。都 LOW = 自由滑行。
// 9 脚和 10 脚在定时器 1 上,3 脚和 11 脚在定时器 2 上,都是 490 Hz。
// 5 脚和 6 脚是刻意避开的:它们跟 millis() 共用定时器 0,
// 占空比会跑得偏高,两组桥就对不上了。
const int AIN1 = 9; // A 桥 - 定时器 1
const int AIN2 = 10; // A 桥 - 定时器 1
const int BIN1 = 3; // B 桥 - 定时器 2
const int BIN2 = 11; // B 桥 - 定时器 2
// 一颗 18650 标称 3.7 V,刚充满是 4.2 V,而 TT 电机额定
// 3-6 V,所以单节电池下跑满占空比是安全的。
// 换成双节电池组(7.4-8.4 V)时,把这个值降到大约 185,
// 让电机两端的平均电压保持在 6 V 以下。
const int MAX_DUTY = 255;
// speed:-255 全速反转,0 滑行,+255 全速正转。
void drive(int inA, int inB, int speed) {
if (speed >= 0) {
digitalWrite(inB, LOW);
analogWrite(inA, constrain(speed, 0, MAX_DUTY));
} else {
digitalWrite(inA, LOW);
analogWrite(inB, constrain(-speed, 0, MAX_DUTY));
}
}
void brake(int inA, int inB) {
digitalWrite(inA, HIGH);
digitalWrite(inB, HIGH);
}
void setup() {
Serial.begin(9600);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
Serial.println(F("DRV8833 test: ramp up, brake, ramp back the other way."));
Serial.println(F("If nothing moves, meter VCC to GND at the module first."));
}
void loop() {
// 从 60 开始而不是 0:占空比低于大约四分之一时,平均电压
// 顶不过减速箱自己的摩擦力,电机就只会嗡嗡响。
for (int duty = 60; duty <= MAX_DUTY; duty += 5) { // 正转,逐步加速
drive(AIN1, AIN2, duty);
drive(BIN1, BIN2, duty);
delay(60);
}
brake(AIN1, AIN2);
brake(BIN1, BIN2);
delay(700);
for (int duty = 60; duty <= MAX_DUTY; duty += 5) { // 反转,逐步加速
drive(AIN1, AIN2, -duty);
drive(BIN1, BIN2, -duty);
delay(60);
}
brake(AIN1, AIN2);
brake(BIN1, BIN2);
delay(700);
}
如果这是你第一块电机驱动板,我们的 L298N 调速指南会一步一步把 H 桥和 PWM 占空比讲清楚。
DRV8833 的过热保护、欠压锁定和过流保护跳起来是什么样子?
DRV8833 带三种保护,而这三种保护都是先把输出关掉,然后自己再把输出打开。
| 保护 | 什么时候跳 | 你会看到什么 |
|---|---|---|
| 欠压锁定 | 电源掉到大约 2.6 V 以下 | 电池一塌下去电机就断掉,电压回来了又重新转起来 |
| 过流保护 | 输出超过跳闸门槛:典型 3.3 A,最低可能只有 2 A | 电机不转,只发出嗡嗡声或者一顿一顿的——通常是减速箱卡死,或者有线短路 |
| 过热保护 | 芯片结温超过大约 160 °C | 重活干上几分钟之后全部停下来,板子发烫;凉下来就自己恢复 |
三个里面最值得搞懂的是过流的行为,因为它是刻意做成不瞬发的。芯片会忽略任何短于 4 微秒的事件,所以电机启动那一下的浪涌尖峰不会让它跳闸。超过之后,它把这组桥关掉大约 1.35 毫秒再试一次——也就是每秒重试大约 700 次,你听到的那阵嗡声就是它。只有跳闸的那一组桥会被关掉——另一组照常在驱动,所以一台有一个轮子卡死的机器人不会当场停住,它会原地打转。
与此同时,过流或过热跳闸都会把 ULT 拉低,所以一个设成 INPUT_PULLUP 的 Arduino 输入脚可以知道出过故障——两种故障共用这一个标志,它不会告诉你是哪一种。欠压恢复时带 90 mV 的回差,所以电池电压塌一下并不会让它来回抖动。
一块会停下来、然后又自己回来的板子,是在做它该做的事。要修的在上游:换一颗电量更足的电池、把卡住的减速箱弄顺、或者把占空比调低。真正常常骗到人的,是电机一启动就断电那一种,而那几乎从来都不是驱动板的问题:那是电池在启动电流下电压塌了下去,把供电拖过了欠压门槛。电池引线短一点、粗一点,再配一颗真的充饱的电池,就能解决。

那到底该买哪一块,DRV8833 还是 L298N?
用电池、小电机、地方又挤:DRV8833——循迹小车、两轮驱动底盘、一台 HC-05 蓝牙遥控车。用火牛供电或者 12 V 电机:L298N;而且如果你希望裸线直接锁进螺丝端子、完全不碰烙铁,赢的也是它。
| DRV8833 | L298N | |
|---|---|---|
| 电机电源 | 2.7-10.8 V | 大约 5 V 到 35 V |
| 需要几路电源 | 一路 | 12 V 以下时一路,由板上自己的稳压做出 5V 逻辑轨;超过 12 V 就还要另外一路 5 V |
| 1 A 时的桥内损耗 | 约 0.36 V | 1.8-3.2 V |
| 连续电流 | 每通道 1.5 A,不用散热片 | 每通道 2 A,要装散热片 |
| 接线方式 | 要焊 12 根排针 | 螺丝端子,不用焊 |
| 板子尺寸 | 1.8 x 2.1 cm | 大约 5.5 x 4.4 cm,再加散热片 |
| 保护 | 过流、过热、欠压 | 过热 |
我们常见到的错误
为 12 V 电机买了 DRV8833。上限就是 10.8 V,而且是硬上限。12 V 的减速电机或者 12 V 的水泵,该配的是 L298N。
以为 28BYJ-48 插上去就能用。DRV8833 驱动的是一个双极步进电机,一组桥带一个线圈。常见的 28BYJ-48 出厂状态是单极的,要配它自己那块 ULN2003 板。
到处找 ENA 和 ENB。这个习惯来自 L298N——在那边速度住在一个独立的使能脚上,方向脚只管 HIGH 或 LOW。DRV8833 没有那种使能脚:速度和方向共用同样那两个输入脚,一根送 PWM,另一根拉 LOW。EEP 是睡眠脚,不是油门。
两边的地没有接在一起。电机吃电池、Arduino 吃 USB,这两个电路只有在地线接起来之后,才对什么算逻辑 HIGH 有共识。少了这一根线,输入脚就悬空——电机抽搐、你手一碰线它就动、或者根本不动。
常见问题
DRV8833 比 L298N 好吗?
做电池项目,是的——它从 2.7 V 就起步,1 A 时只浪费大约 0.36 V,而不是 1.8-3.2 V。用火牛供电或者 12 V 电机的话,L298N 更好:它吃得下 35 V,而 DRV8833 到 10.8 V 就停了。
DRV8833 可以用一颗 18650 或者一颗 LiPo 电池来跑吗?
可以,而且这正是它最强的一点。单颗锂电池落在 3.0 V 到 4.2 V 之间,高于 DRV8833 那 2.7 V 的下限,而且它也没有另外一路逻辑电源要伺候。L298N 做不到:它要大约 5 V 才起步,然后还自己留下 1.8 V 以上。
DRV8833 可以驱动步进电机吗?
可以驱动一个双极步进电机,两组 H 桥各带一个线圈。它带不动出厂状态的常见 28BYJ-48——那是一颗五线的单极电机,要配 ULN2003 板。如果你还在挑电机类型,我们的步进电机与舵机怎么选指南会先帮你把这一步定下来。
我的 DRV8833 发烫然后停了,是不是坏了?
几乎可以肯定没坏。过热保护、过流保护和欠压锁定都是先把输出关掉,等原因消失之后再把输出打开。一个堵转的电机会让过流保护大约每 1.35 毫秒重试一次,听起来就是一阵嗡声。让它凉一凉、把减速箱弄顺,或者把 PWM 占空比调低。
DRV8833 模块一定要自己焊吗?
要——那条十二针排针是散装在袋子里的,所以留五分钟拿烙铁。焊好之后模块就是公针:公对母杜邦线可以接到 Arduino 的母排座,而这块板也能像一颗芯片那样跨骑在面包板中间的凹槽上。
最后更新:2026 年 9 月。有问题?WhatsApp 联系我们。



DRV8833 Dual Motor Driver 2 DC Motors 1.5A Arduino Smart Car Project
L298N Motor Driver Module Arduino Compatible Dual H Bridge Dual DC Motor Control Arduino Robotic Car
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
200RPM TT MOTOR With 68mm Wheel 3V 5V 6V 9V Motor Plastic Gear Motor For Arduino Smart Car - TT MOTOR
18650 Battery Holder 1/2/3/4 Slot 3.7V Battery Cell Housing Battery Case Battery Casing - 18650 BATTERY HOLDER (1)
3.7V 18650 Battery Rechargeable Li-Ion Battery 1200mAh 2200mAh 3200mAh Flat Top - 18650 Li-Ion Battery (2200mAh)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 20CM
NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32 (CH340)
200RPM TT MOTOR With 68mm Wheel 3V 5V 6V 9V Motor Plastic Gear Motor For Arduino Smart Car - WHEEL (FOR TT MOTOR)
MB102 Breadboard 170 400 830 Holes Breadboard Donut Board Arduino Prototype Multi Color - BREADBOARD (830 HOLES)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM
18650 Battery Holder 1/2/3/4 Slot 3.7V Battery Cell Housing Battery Case Battery Casing - 18650 BATTERY HOLDER (2)