1. 从“电机不能反转”说起:H桥的拓扑直觉
做小车、做机械臂、做自动窗帘,凡是跟直流电机打交道,早晚会遇到同一个问题:怎么让电机换个方向转。发电机大家都知道,电机两端反一下电压极性,轴就反着转。看起来很简单,但放到单片机场景里就麻烦了——单片机输出的是逻辑电平,没法直接驱动大电流,更做不到“把电源正负极对调”这种操作。
最早有人用继电器解决。两个继电器做成交叉切换,通电之后把电机两端跟电源之间的极性对调,就能反转。继电器方案能转,但痛点很明显:体积大、有机械寿命、动作有延迟,而且PWM调速的时候继电器根本没法高速通断。后来出现了H桥电路,用四个开关管代替机械触点,从原理上解决“极性倒换”这个需求,成为直流电机驱动的事实标准。L298N就是这个思路最经典的芯片级实现之一。
所谓H桥,名字很形象:电机接在中间,左右两侧各有两个开关,一个接电源正、一个接电源负,从电路图看很像字母H。四个开关配合,就能控制电流从电机左侧流到右侧,还是从右侧流到左侧。电机两端建立了正或反的电压差,方向自然就跟着变。这是整个电机驱动体系里最核心、最值得抠明白的一页纸。
让我用最朴素的方式解释一下这个拓扑逻辑。你可以把电机想象成一段水管,电流就是水流。开关就是闸门。左上和右下两个闸门同时打开时,水流从左边进、右边出;右上和左下打开,水流就从右边进、左边出。如果同一个半边的上下两个闸门同时打开呢?那就完了,水流直接从电源正极漏到负极,相当于电源短路,冒烟就在一瞬间。这个“直通”问题在L298N和所有H桥驱动电路里都是头号禁忌。
搞懂了H桥的拓扑逻辑,再看L298N就顺理成章了。L298N本质上就是把这个“四个开关加一堆控制逻辑”装进一个15脚MultiWatt封装里,而且不止装了一组,装了两组——这就是标题里的“双H桥”。一组桥驱动一台直流电机,两组桥就能同时驱动两台电机,或者驱动一个两相四线步进电机。这也是为什么很多入门级机器人小车、智能小车开发板都爱用L298N的原因:一片芯片解决两个轮子的转向和调速,逻辑清楚,接线也不算复杂。
2. 拆开L298N:双H桥内部结构与每个引脚的真实职责
L298N是意法半导体设计的双H桥电机驱动器,核心输出结构是达林顿管,不是MOSFET。这一点特别重要,它决定了L298N后续的压降、发热、频率特性,是很多人用起来觉得“烫手”的根本原因。记住一个结论:达林顿管压降偏高,但好处是非常皮实、不容易静电击穿,对新手极其友好。
芯片内部框图大致是:左右两个H桥输出组,每组对应一个电机通道;每个通道包含两个输入引脚(IN1/IN2对应A通道,IN3/IN4对应B通道)、一个使能引脚(ENA/ENB);输入信号先经过逻辑整形,再驱动达林顿管开关。两组H桥的输出分别是OUT1/OUT2和OUT3/OUT4,电机就接在这两端之间。
引脚按功能分成四个梯队:
- 电源类:VS接电机电源,通常4.5V到46V,具体看器件等级;VSS接逻辑电源,5V左右,给芯片内部控制逻辑供电。
- 方向控制类:IN1到IN4,输入引脚,高电平/低电平决定对应H桥里哪些管子导通,从而决定电机方向。
- 使能类:ENA、ENB,要么直接接高电平,相当于上电就一直使能;要么接PWM信号,通过占空比调速。
- 电流检测类:ISENA、ISENB,接采样电阻后接地,用于测量当前通道的实际电流,一般模块上很少引出来,但自己做板子时很有用。
很多人第一次看原理图会觉得OUT引脚和电源引脚容易搞混。我建议你把每个通道想象成一套“独立的小电源开关”:VS是整个芯片的供电源头,OUT是把VS“切”到电机一端还是把GND“切”到电机一端的出口。IN决定切正还是切反,EN决定这套开关是否被激活。这么理解,引脚职责就清楚了。
这里要提一个非常容易忽视的点:VSS和VS必须共地。也就是说,5V逻辑电源的地和电机电源的地要接在一起。很多人在面包板上第一次接L298N,电机不转,或者转起来单片机疯狂复位,八成就是逻辑地和电机地没有连到一起。芯片内部的驱动管需要以同一个电位为参考来动作,地都不共,信号就飘了。这个坑不是L298N独有,所有电机驱动芯片都一样,但当你在L298N上第一次踩到时,印象会特别深。
另外,L298N模块上一般会有一个5V输出的稳压芯片(比如78M05),可以从VS取电给逻辑部分供电。但这里有个讲究:如果VS电压高于某范围,比如用12V电机电源硬给VSS供电,某些模块上的板载稳压还能扛住,如果是业余条件下做实验,我更推荐你用单独的5V逻辑电源,避免大电流电机启动瞬间把逻辑电压拉垮。
3. 真假值表:正转、反转、刹车、滑行四种状态的电路级解释
L298N每种状态说到底就是两个输入引脚的电平组合。以A通道为例:
| ENA | IN1 | IN2 | 电机状态 | 电流路径 |
|---|---|---|---|---|
| 高 | 高 | 低 | 正转 | VS→OUT1→电机→OUT2→GND |
| 高 | 低 | 高 | 反转 | VS→OUT2→电机→OUT1→GND |
| 高 | 高 | 高 | 制动 | 两端都接到电源高电位 |
| 高 | 低 | 低 | 制动 | 两端都接到电源低电位 |
| 低 | 任意 | 任意 | 滑行 | 输出处于高阻,电流通过续流二极管衰减 |
正转和反转好理解,就是前面说的“换侧导通”。关键在于“制动”和“滑行”这两个状态的差异,很多人做项目时根本没细想。
当IN1和IN2都为高时,H桥里两个上管同时导通,电机两端都被拉到VS高电位。结果是什么?两端电势差为零,不会有电流从电源方向流过电机,转着的电机靠惯性继续转,内部像发电机一样产生反电动势,这个能量通过导通的管子形成回路,产生制动力矩,电机快速停住。当IN1和IN2都为低时,两个下管同时导通,电机两端直接接到地,同样没有电压差,但反电动势会通过地回路消耗掉,同样形成刹车。这两种状态在很多资料里都被归类为“Brake”,但在具体应用里表现略有差异,实际测试中,我习惯用“都低”做紧急刹车,因为低端管导通时反电动势能量的泄放路径更直接。
那“滑行”呢?把使能端ENA拉低,输出级全部进入高阻态,电机两端既没被接到电源,也没被接到地,相当于断开了电路。这时候电机靠惯性自由旋转,没有制动,像自行车滑行一样慢慢停下来。这个状态在需要“让机械结构自由转动”的场景里用得到,比如你希望机械臂在断电后能被手轻松掰动。
这里必须反复强调一个原则:同一半桥的上下两个管子绝对不允许同时导通。什么叫同一半桥?左边那组:接VS的上管和接GND的下管,如果它们同时打开,VS直接经过两个管子到GND,回路里几乎没有电阻,电流瞬间变成灾难值。L298N内部虽然有一定内阻,但内阻不是保险丝,几纳秒内就会过热烧毁。控制IN1和IN2时,只给“一高一低”的组合,就是为了避免这个雷。
很多人会问:那PWM调速怎么办?其实很简单,方向引脚负责定方向,使能引脚负责调速。比如IN1高、IN2低、EN接PWM,电机就以某一方向运行,占空比越大,平均电压越高,转速越快。因为EN是使能端,它控制的是整个桥的工作与关闭,以几百到几千赫兹切换时,电机电感会滤掉高频成分,表现出来就是连续的转速变化。这是L298N最经典的调速方式。
4. 电压和电流的账:L298N的压降、功耗与散热估算
L298N的实际输出能力,是很多人最容易被厂商参数“骗”到的地方。你不是看到有模块标着“最大电流2A”就觉得能稳定输出2A吗?它的数据手册数据是:每通道连续工作电流2A标准,峰值3A左右(具体还有待查证),但注意这是理想封装和良好散热条件下的数值。而L298N内部达林顿管的饱和压降,在1A电流下高边加低边合计大概2.5V到2.7V。
这句话意味着什么?如果你的电机电源是12V,那么真正加到电机两端的电压只有大约9.3V到9.5V。多出来的2.5V左右,全部变成了驱动管上的热。如果电压是6V呢?电机真正分到的只剩3.5V左右,这还没算导线压降和接触电阻,电机基本转不起来了。所以一个很反直觉但极其重要的经验是:L298N不太适合低电压电源的场合。电池电压越低,压降占比越大,损耗比例越高。
功耗的估算方式很简单。每个通道的功耗大约等于压降乘电流:P = U × I。如果压降2.5V、电流1A,单通道就是2.5W。两个通道同时1A,就是5W。这5W全都在芯片内部变成热量。配合模块上那种指甲盖大小的散热片,长时间工作温度能摸到七八十度,烫手是很正常的。
那怎么优化?第一条路是降低PWM频率或者减少占空比运行时间,但治标不治本。第二条路是做好散热,芯片背面自带的那个金属散热片要贴到模块的散热铜面上,有条件可以加个小风扇吹。第三条路是根本性的——换MOSFET类驱动芯片,比如TB6612。但这是后话。
说到电流,ISEN引脚要提一嘴。这个引脚是从输出回路采样出的电流信号,外部接一个采样电阻到地。控制电路可以根据这个引脚电压判断当前输出电流是否超限,从而实现过流保护。L298N内部比较器的阈值大约在1.2V左右,如果你想限流在1A,采样电阻就取1.2Ω左右,阻值越小,允许的电流越大。实际模块上,这个引脚往往没有引出,默认接了一个小电阻做保护,但对自研板来说,这是很有用的一个设计点。
还有一点,PWM频率的选择对发热影响非常明显。我实测过:同一块L298N,用10kHz PWM和用1kHz PWM对比,在同样的占空比和负载下,高频时芯片表面温度明显更高。原因是达林顿管开关切换需要时间,频率越高,每个周期里管子处于“半开半关”过渡区的时间比重就越大,开关损耗也就越大。L298N不是为超高频设计的,常规用1kHz到5kHz就比较合理。低于人耳听觉范围的频率容易产生电机啸叫,高于10kHz意义不大而且损耗陡增。
5. 续流二极管与反电动势:不配二极管的后果实测
电机从电学本质上看是一个电感。电感有铁打不动的特性:电流不能突变。你把H桥里的管子关断,想让电机里的电流瞬间归零,是不可能的。电感会试图维持原来的电流方向,于是它自己产生一个高电压,把电流继续压着往外推。这个高压就是反电动势,数值可能远超电源电压,几十伏甚至上百伏。
没有续流通路的话,这个高压就会施加在刚刚关断的那只管子两端。管子不像电机那么耐压,瞬间就可能被击穿。击穿之后,高压沿低阻路径乱窜,烧的逻辑电路、单片机引脚,或者在电机电刷上拉出火花。你会看到的现象就是:一开始电机跑得好好的,一停,芯片就挂了,或者单片机的引脚直接烧糊。这几乎是所有自制电机驱动最容易踩的坑之一。
续流二极管就是给反电动势一条安全的“泄洪道”。当电机电流试图保持原方向流动时,二极管导通,让电流在电机、二极管、另一只管子或电源之间形成闭合回路,把电感储存的能量慢慢耗掉。这样二极管钳住了电压,管子就不会看到过高的尖峰。L298N内部已经集成了8只续流二极管,这是它作为一块“电机专用驱动芯片”比用普通MOSFET自己搭H桥省心很多的关键原因。
我当年第一次自己用四颗三极管搭H桥,完全不知道续流二极管这回事,结果每一组都烧。后来在电机两端反向并联两颗二极管,问题就不复存在了。L298N把这一层帮你封装好了,但如果你哪天听人建议“直接用四个MOS管自己搭”,不要忘了带上续流二极管。具体接法:每只开关管两端反向并联二极管,或者最简单粗暴的做法——电机两端并联一个反向二极管,也能起到一定的钳位效果,但不如每个管子都带二极管来得周全。
用示波器看电机两端的波形,加不加续流二极管差异非常直观。加了之后,关断瞬间的电压尖峰被钳在电源电压加一个二极管压降附近,波形干净;不拿,尖峰一下就顶上去,超出示波器采样量程都可能。如果你手头有示波器,非常推荐做一下这个对比实验,看完你就再也不会忘记续流二极管的重要性了。
还有一个小细节:高频PWM下,续流二极管的工作也很频繁。电机是感性负载,PWM每个周期里,高占空比时电机储能,低占空比时续流二极管在放电。二极管的开关速度和额定电流也要够,否则二极管本身会先过热。L298N内部集成的快恢复二极管在大多数应用场景下足够,如果你的电机电流特别大或PWM频率很高,那就得考虑外部再加装高速二极管。
6. 从原理图到面包板:完整接线、PWM调速与常见故障排查
理论讲再多,最终要落到接线和调试。以最常见的Arduino Uno加L298N模块驱动一台直流减速电机为例,完整接线按功能分组来:
- 电源部分:VS接电机电源正极,GND接电机电源负极,这个电源的电压要跟电机额定电压匹配。VSS接5V,注意VSS那个引脚的地和电机电源的地必须连通,通常直接在模块GND引脚上并联。
- 电机部分:电机两根线接OUT1和OUT2。
- 控制部分:IN1接Arduino任意数字引脚,IN2接另一个数字引脚,ENA接PWM引脚。如果只接一台电机,IN3、IN4、ENB不用动,但要确保它们有确定电平,不能悬空,否则芯片内部逻辑可能乱掉。
一个基本控制代码大致长这样:
#define ENA 5 #define IN1 7 #define IN2 8 void setup() { pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); } void loop() { // 正转,50%占空比 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 128); delay(2000); // 反转,50%占空比 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 128); delay(2000); // 刹车 digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); delay(1000); }如果你发现电机方向跟预期相反,不用改接线,只要把IN1和IN2的高低电平互换就行,这是最常用的解决办法。
实际使用中,会遇到一些非常典型的问题,我按出现频率排了一下:
- 电机完全不转。先查ENA有没有高电平,模块上如果使能跳线帽没插,等于EN悬空,芯片不工作。再查VSS和VS电压正不正常,共地有没有做到。
- 只有一边转。可能是另一路的跳线帽问题,或者对应通道的IN引脚线接触不良,先按顺序查控制信号。
- 电机转但没力气、转速上不去。大概率是供电电压太低,别忘L298N要吃掉2.5V左右压降;还有可能是PWM频率设置的太高,或者是占空比不够。
- 芯片烫到离谱。先确认是不是占空比长期在中间水平但负载很重,检查PID调速参数;再考虑加散热、降低PWM频率。
- 单片机一启动电机就复位。基本可以锁定是电源问题。电机启动瞬间电流很大,会把电源电压瞬间拉低,如果逻辑电源和电机电源共用一个源,单片机就会掉电复位。解决办法是分开供电、加大电源电容。
差速转向是双H桥被用到最多的场景。两个轮子各配一个电机,A通道管左轮或右轮,B通道管另一个轮子。让两个电机同向转就是直行,一个正转一个反转就是原地转向,一个转一个停就画弧线。用双通道去实现,相当于把两台独立电机驱动塞在一颗芯片里,这也是L298N作为入门级别非常合适的原因。
关于布线,还有一点经验要分享:通往电机的两根线尽量用粗一点的导线,双绞会更好,不要用那种细长的杜邦线承担超过1A的电流。细导线电阻大,电流大了会发热,压降也不小,会让本来就吃亏的电压预算雪上加霜。电机端子那一段我用过22AWG的硅胶线,稳妥多了。
7. 同样叫“双H桥”:L298N、L293D与TB6612怎么选
把L298N放到今天的芯片生态里看,它已经是爷爷辈的产品了。同类双H桥驱动芯片里,L293D和TB6612FNG是大家最常拿来对比的两个。它们功能相似,但底子完全不同。
| 对比项 | L298N | L293D | TB6612FNG |
|---|---|---|---|
| 内部管子 | 达林顿BJT | 达林顿BJT | MOSFET |
| 单通道连续电流 | 约1A~2A | 约0.6A | 约1A |
| 典型压降 | 2.5V左右 | 约1.5V~2V | MOS管内阻×电流,通常不到0.5V |
| 供电电压范围 | 最高约46V | 最高约36V | 最高约15V |
| 内部续流二极管 | 有 | 有 | 有 |
| 逻辑电压兼容性 | 5V友好 | 5V友好 | 3.3V/5V都可以 |
| 适合场景 | 高电压、大功率学习项目 | 小型TT电机教学 | 低压电池供电、效率优先 |
L293D跟L298N算是同一个思路,都是达林顿管,但功率等级小一号。适合驱动几百毫安级别的玩具电机,超过600mA就悬了。TB6612则是完全不同的路线:内部是MOSFET,压降非常小,同样的6V电池供电,TB6612几乎可以把全部电压给到电机,L298N要扣掉一大截。如果你做的是低压锂电池供电的机器人小车,L298N那部分压降会让电池续航和功率表现都差不少,TB6612是明显更懂事的选型。
但L298N到现在还有它的价值。第一是学习价值极高。它的引脚布局直观,内部结构足够复杂又没那么复杂,用它理解H桥、续流、使能、PWM这些概念,比直接上TB6612更能建立体系感。第二是电压适应范围广,最大支持到46V左右,这个特性让它在一些工业学习平台、教学实验箱上至今仍有一席之地。第三是皮实耐操,不容易被静电搞坏,对新手的容错度更高。我见过极限操作的人把线接反了、输入悬空了、PWM干到20k,结果芯片还是顽强地活了下来,换成MOSFET方案早就香消玉殒了。
选型时我个人的决策路径是:如果是做毕设、课程作业或者纯粹理解原理,直接用L298N,便宜、资料多、踩坑之后学到的东西也多。如果做的是电池供电的智能小车、有续航要求、电压又比较低,果断用TB6612。如果电机功率偏大,比如单电机额定电流超过2A,这两个都不太够穿,得往BTN7971、DRV8251这类大功率驱动器上走。
根据自己的实际需求来定,先看电流和电压,再看接口,最后看散热条件,不要被标称的“峰值电流”迷惑了,连续运行电流才是真正决定选型的那个数。我用L298N做过好几个项目,虽然它被我评价确实有压降小、效率不高的短板,但它让我真正看懂了电机驱动电路里那些电流是怎么流的。等你能不看原理图就默写出一组H桥的导通路径时,再上那些更现代的驱动芯片,就完全是顺势而为的事了。