
做过智能小车项目的朋友大概率都经历过这么一段翻教程、看图片最后照着清单买回一套“评测都说不错”的组合。我这次翻车的组合是TB6612驱动模块加520编码电机当时还觉得这是“经典搭配”一边是入门套件里最常见的小驱动一边是带减速箱和霍尔编码器的大扭矩电机。结果上电三次模块直接烧了。整个过程下来我更深切地体会到了什么叫“小牛拉大车”——不是不能跑而是跑起来的每一刻都在透支。如果你也在考虑用TB6612去带520级别的编码电机或者你已经在这么干了只是暂时没烧、但发现动力很软、声音发闷、模块发烫那这篇经验你应该看看。我会把我踩过的坑、测过的数据、算过的账以及最后怎么从根上解决的全部摊开来说。1. 为什么会选上这套组合看似合理的决定埋了哪些雷1.1 小体积高兼容性的tb6612为什么会成为首选TB6612这个驱动芯片在入门级的电机驱动方案里确实很有号召力。它体积小、引脚少逻辑电源和电机电源分开接用两个GPIO加一个PWM就能控制一路电机还带STBY待机控制几乎没有门槛。很多开发板和电机驱动扩展板上都能看到它的身影教程也多随便一搜就是各种“驱动小车底盘”的接线图。对第一次做轮式机器人的人来说这是最容易接触到的驱动模块我也不例外。它的参数看起来也不是不能碰电机驱动电压范围比较宽逻辑部分支持3.3V和5V单个通道的峰值电流有1.2A左右。光看“峰值1.2A”这个数字再想到我的520电机空载电流才0.3A不到心里会觉得余量很足。但这里有个非常典型的误读很多人把这句“峰值1.2A”当成了“可以短时间超频使用”却忽略了它的持续电流能力其实只有0.6A左右。520编码电机是什么级别是那种上了减速箱、带着霍尔编码器、在12V下可以输出几百克甚至更大扭矩的“硬家伙”它的堵转电流动辄几个安培。把这两样东西放一起就相当于让一个小个子去扛几倍于体重的重物偶尔一下可能没事持续几次一定出问题。1.2 520编码电机的光环背后大扭矩不是免费的再说520编码电机这类电机在很多小型底盘的“愿望清单”里地位很高。它带减速箱转速适中扭矩大而且尾部集成编码器可以接PID做闭环控制是很多自平衡或者循迹项目的“进阶标配”。我当时的想法很简单既然要玩闭环、要跑底盘那不如一步到位上520反正接线也不是很复杂。但问题是电机选型不能只看“能不能转动”更要看它的电流特性。520电机由于内部线径粗、匝数少、扭矩大它的启动电流和堵转电流比常见的小型电机高出一大截。尤其是从静止到启动的那一下或者轮子被卡住的那几秒电流会迅速冲到几安培。我后来实测手里这个520堵转电流稳定在4.2A左右启动瞬间的冲击电流还能更高。TB6612的1.2A峰值在这条电流曲线面前连及格线都够不上。更关键的是这种大电流不是偶尔出现一次而是每次启动、每次加速、每次挣扎都会发生芯片根本得不到喘息。说句实话这个组合能在网上被部分人“成功运行”多半是电机类型不同、供电电压低或者只是空转测试。一旦把车子放地上加上负载、摩擦和坡度真实电流需求立刻显形。这也是为什么我坚持认为选驱动不能看别人照片里的成品效果要看你自己电机的实测电流。2. 上电三次板子就烧了可复现的故障现象2.1 空载正常一落地就没劲我当时的接线很常规模块的VM接12V锂电池VCC接5V逻辑电源STBY拉高AIN1/AIN2接单片机的两个GPIOPWMA接PWM输出电机两条线接AO1和AO2。刚插上电空载测试一切正常PWM给到50%的时候电机转速很漂亮编码器读数也正确我当时还暗自高兴“这套组合没网上说的那么邪乎嘛。”真正的问题出现在把底盘放到地上的那一刻。轮子一接触地面驱动立刻变得绵软无力PWM给到80%也只能慢慢挪。我当时第一反应是减速比不对或者PID参数没调好后来才发现这根本不是控制问题是驱动芯片能送出去的能量就只有那么多电机越要力气芯片越给不出。更明显的信号是模块背面的温度——手刚碰上去就被烫得缩回来前后不过十几秒。然后就是第二次上电测试车子在斜坡上起步轮子卡在坡底根本转不动只听到电机发出那种低频的“嗡嗡”声。第三次上电模块的一路输出就彻底失效了电机只往一个方向抖接着闻到一股淡淡的焦味。拆下来检查芯片表面出现了一个很小的烧灼痕迹整个模块报废。2.2 完整排查过程从“怀疑控制代码”到“锁定驱动电流”烧板之后我没急着下单新驱动而是把整个链路排查了一遍因为我不确定到底是代码写错了、电源有问题还是驱动真的扛不住。第一步我把电机直接接到一个12V电源上电机转动很有力说明电机本身没问题。第二步用另一个规格的小电机接到同一块TB6612模块上小电机运行正常说明模块的PWM控制逻辑也没问题。第三步用万用表串联到电机回路里测电流这一步最关键。实测记录是这样的空载电流约0.28A轮子压在地面上正常行走时电流在0.8A到1.5A之间波动用手捏住轮子模拟堵转时电流稳定在4.2A左右。这组数据一出来真相就非常清楚了——不是代码的问题不是电机的问题是驱动芯片的电流输出能力远低于电机的实际需求。我还顺手用示波器看了一下VM引脚的电压在电机堵转的瞬间模块输入电压从12V被拉低到了7V左右这说明电源的瞬态响应也跟不上属于后面的次生问题。这整个过程里最容易让人走弯路的是第一步和第二步的相互矛盾电机单独接电源有力小电机在模块上正常很容易让人误以为是“大电机不好控制”或者“PWM配置不对”。但你只要把电流表串进去看几秒钟一切都会变得透明。所以我想提醒一句排查电机驱动故障电流表永远是优先级最高的工具比示波器还直观。3. 一笔糊涂账tb6612的1.2A峰值遇上几安培的电机需求3.1 数据手册的极限值不能当“正常值”用要理解这次事故必须把数据手册上的几个数字重新念一遍。TB6612的单个通道连续输出电流大约是0.6A峰值电流是1.2A这本身是一个给小型直流电机准备的驱动能力。很多模块的规格页会写“驱动电流1.2A”但那是峰值不是持续值。而电机实际需要的电流不是一个恒定的数它是随负载变化的空载时零点几安培正常负载时一两安培堵转时四到八安培。这中间还有启动瞬间的浪涌通常是额定电流的几倍。我手里这个520电机空载0.28A看起来TB6612完全能胜任但真正让芯片受不了的是堵转电流和启动电流。4.2A的持续堵转电流几乎是芯片峰值能力的3.5倍是持续能力的7倍。更别提那种“PWM突然拉满”的瞬间电流尖峰还会比4.2A更高。这种工况下芯片内部的输出MOS管会工作在严重过流的状态发热速度根本不是小封装能散掉的。这就是“小牛拉大车”最直白的量化不是差一点是差一个数量级。更麻烦的是520电机因为有减速箱堵转的时候并不会立刻停下来冒烟而是内部齿轮卡住电机持续通电、持续转不动电流就一直维持在最大值。这种“温和的堵转”很容易被误判为“还没坏”但驱动芯片内部已经在持续承受超规格电流。3.2 用实测电流曲线来校核驱动能力选驱动的时候不能只看电机型号最好先测一下你的电机在各种工况下的电流。方法很简单电机电源线串联一个万用表调到电流档然后用不同的力去阻挡电机转动记录稳定时的电流值。如果有条件用电流探头加示波器看波形更好因为可以看到启动瞬间的电流尖峰。没有条件的话万用表的稳定读数也足够判断驱动是否够用。拿到这个电流值之后选驱动的原则应该是驱动模块的连续电流能力至少是电机最大工作电流的2倍如果是堵转电流比较大的减速电机最好按堵转电流来选。比如我测到520堵转4.2A那我至少需要一个标称连续电流8A以上的驱动方案。而TB6612的0.6A连续能力离这个需求差得太远。3.3 小芯片的内在热路径为什么烫得这么快TB6612之所以“烧得这么快”除了电流超限之外还和它的封装和热阻有关。小封装芯片的热量主要通过引脚和底部焊盘向外传导模块上几乎没有任何散热片。当输出MOS管导通电阻上流过2A电流时压降乘以电流就是功耗哪怕导通电阻只有0.7Ω2A电流带来的功耗也有2.8W3A的时候功耗会涨到6W以上。这些热量集中在一个指甲盖大小的芯片里没有散热通道温度会迅速突破芯片的过热保护点。实际上芯片内置的过热保护往往不是立即烧掉而是先降额、再关断。我那次烧板前期应该已经触发了多次热保护温度下来又恢复反复几次之后芯片内部键合线或者MOS管就彻底损坏了。这也是为什么有些人的板子“还能用但要重上电才恢复”那其实就是内部自恢复的动作等到物理损坏了就彻底冒烟了。4. 被忽略的次生灾害供电塌陷、编码器丢帧与反电动势4.1 共用的5V编码器供电为什么会丢脉冲电机驱动出问题很多时候不只在驱动芯片本身还会波及到控制板和后端传感器。我的520电机带的是霍尔编码器需要5V供电。起初我图省事直接把编码器供电接到了模块的VCC上和逻辑电源共用。这个做法在电流小时没毛病但520电机一旦大电流启动母线电压被拉低VCC上的5V也会跟着剧烈波动。结果就是编码器的读数经常丢脉冲或者出现一些完全对不上的异常值。当时我一度怀疑是编码器线接错了反复检查AB相和电源线后来用示波器看编码器供电引脚才发现电源上叠加了一大堆毛刺电压在4.2V到5.2V之间来回跳。那些丢帧不是什么玄学就是供电不稳导致的信号误判。解决办法很简单编码器单独用一个稳压源供电或者至少和电机的大电流回路分开走线、加一个足够大的退耦电容。4.2 大电流瞬间把母线电压拽垮单片机跟着遭殃520电机不只坑驱动芯片还会坑整个电源系统。我的车用一块标称12V的锂电池供电电池本身内阻并不算特别小加上杜邦线和大电流走线的电阻电机堵转瞬间模块VM引脚电压直接掉到7V以下。这种电压塌陷是极其危险的因为同一块电池往往还在给单片机供电电压一旦跌破单片机的工作电压下限控制板就会复位或者进入不稳定状态。我当时遇到的情况是小车在坡上一堵转单片机立刻重启然后编码器清零整个状态全乱。这个现象单独看非常像“代码跑飞了”很难联想到是电机把电压拽垮了。后来我把供电分开用一组电池给动力一组独立稳压给控制板问题立刻消失。所以如果你在做大扭矩电机项目供电拓扑一定要提前想好动力电源和控制电源最好隔离至少也要加足够大的母线电容来维持瞬态电压。4.3 电机断电瞬间的反电动势实际比预想更凶还有一个小马拉大车带来的隐藏杀手反电动势。电机是感性负载当PWM关断或者STBY拉低的瞬间电流不能突变电感会试图维持电流方向产生一个高压尖峰。TB6612内部有续流二极管但520电机这种大电感的储能更多反电动势的能量也更大。如果模块的耐压余量不足或者地线阻抗偏高这个尖峰有可能从VM或者逻辑引脚串出去打到单片机的IO口上。这次烧板之后我把坏模块拆开检查时发现单片机上面板的一个PWM引脚也烧了。很可能就是反电动势通过模块内部或引脚间隙串过去的。后来我换用大电流驱动方案时特意在电源输入两端并了一个大电解电容同时给控制板加了TVS管做保护后续再也没有出现烧引脚的情况。这个教训让我养成了一个习惯任何电机项目都必须假设反电动势一定会存在然后在电气层面做好钳位和隔离。5. 破局的三条路换驱动、换电机、软件救急5.1 第一选择把驱动能力放大到电机堵转电流的2倍以上烧掉两块板子之后我最先做的不是换电机而是换驱动。原则很简单驱动模块的连续电流能力要按520电机的堵转电流来选而不是按空载电流来选。我实测堵转4.2A那驱动模块的持续电流至少要8A以上才能留出足够的余量应对启动冲击和长时间堵转。市面上满足这个要求的方案有好几类一类是内置大电流MOS管的全桥驱动模块标称持续电流10A左右一类是功率更大的半桥驱动芯片配合外部MOS管搭建H桥还有一类是直接用分立元件按电流需求搭功率板。比较下来我选择了一款标称持续电流10A、带散热片的现成模块。换上去之后同样的520电机、同样的12V供电PWM给到50%就能轻松起步上坡也不再有那种软绵绵的感觉。这里要特别提醒买大电流驱动模块时别只看标题上的“10A”要看数据手册里“无散热条件下的连续电流”。很多模块标称10A实际在开放式环境里连续跑5A就已经烫手了。所以我的原则是标称值打五折才是可用值宁可买大不要买小。5.2 第二选择改选用tb6612扛得住的电机如果你手里的板子已经很多不想换驱动或者你的项目对扭矩需求没有那么极端那换小一号电机也是合理的。TB6612适合的是那种空载电流在0.2A以内、堵转电流在1A左右的小型电机比如常见的N20减速电机、25GA减速电机或者一些更小的370电机。这些电机同样可以带编码器做闭环控制也能玩得很顺。我自己后来在一台轻量化小车上就换成了某款N20级别的带编码器电机还是用TB6612驱动跑得非常稳。不是说520电机不好而是“合适”两个字比“高级”两个字重要。你只需要想清楚这个底盘的负载到底需要多少扭矩如果只是几十厘米的小车、跑平地、不载重N20级别完全够用何必让520电机和小驱动互相折磨。5.3 第三选择不改硬件的临时补救措施如果手头暂时没有新驱动又必须在短时间内跑起来有几种软件层面的补救办法可以临时续命。第一种是软启动在代码里让PWM从0逐步增加到目标值避免瞬间的电流冲击第二种是限制最大PWM占空比比如把上限设为60%这样平均电流会小一些第三种是增加堵转检测如果检测到电机持续低速且PWM很大就主动断开输出避免长时间过流。但这些办法的本质是“让电机干不了那么多活”扭矩会明显下降速度响应也会变慢。我试过把占空比限制到60%小车确实能走但爬坡彻底废了。软件限流适合应急演示不适合作为正式方案。还有一个小技巧是降低电机供电电压比如把VM从12V降到6V电压减半堵转电流也会相应下降但扭矩同样下降很多。这类救急手段我的建议是撑过测试可以最终还是要回到“驱动能力匹配电机”这个正道上来。5.4 并联两个tb6612为什么不推荐网上有说法是“一个不够两个并联不就够了”。我专门研究过这个方案结论是不建议。TB6612这类集成H桥的输出MOS管导通电阻存在差异两个芯片并联驱动同一个电机时电阻低的那一路会多分电流两路之间还会通过电机构成环流通路容易出现一路已经过流、另一路还在正常工作的状态反而让故障更加隐蔽。加上两路PWM的时序很难完全一致哪怕差一点点就会出现一瞬间的短路状态。如果确实需要更大的电流而手头只有多个TB6612更稳妥的做法是每个芯片驱动一个电机用两个电机协同工作而不是把两个芯片并联去驱动同一个电机。我见过一些履带底盘左右各用一个TB6612去带小型电机那是可行的。但并联扩流这件事除非你对器件一致性有绝对把握并且做了电流均衡否则只会增加新的风险。6. 换上大电流驱动之后还有几个坑等着你6.1 电源线、接插件和电容都是大电流的“隐形瓶颈”很多人以为换上大电流驱动模块就万事大吉其实不然。大电流驱动需要大电流的供电链路否则驱动芯片再有劲电也送不到电机上。我换模块后第一次测试就发现同样的杜邦线连接模块输入端电压已经被拉掉了0.8V线材明显发烫。后来我把所有动力回路的导线换成了至少20AWG的硅胶线电源接口换成大电流端子压降才恢复正常。除此之外强烈建议在驱动模块的电源输入端并联一个容量足够的母线电容。我并了一个1000μF的电解电容耐压选25V放在模块电源入口附近。这个电容能在电机启动瞬间提供瞬态电流缓解电池的瞬时压力。实测装上电容后母线电压的塌陷幅度从原来的5V降到了不到1V效果非常明显。电容的耐压要留足余量不要只按12V选16V的至少选25V更稳妥。6.2 逻辑电平匹配和共地搞不好又烧一回大电流驱动模块的逻辑输入电平不一定和单片机兼容。有些模块支持3.3V有些模块要求5V逻辑如果你用3.3V的单片机去驱动一个需要5V逻辑的模块输出可能不稳定或者干脆不动作。反过来用5V信号去驱动只支持3.3V输入的模块又可能损坏逻辑端口。另一个容易被忽略的是共地。驱动模块的逻辑地和电机电源地虽然可以在模块内部相通但从单片机到模块的GND要单独、可靠地连起来。如果共地电阻太大逻辑信号的参考地不稳就会出现“时好时坏”的诡 bug。我自己在连线时会把单片机GND、模块逻辑GND、电源GND三者用粗短线连到同一个点上形成星型接地实测信号稳定性好了很多。6.3 堵转保护逻辑别让新驱动也短命换了大驱动之后虽然余量大了但如果电机长时间堵转大电流一样会把驱动模块和电机线圈烧掉只是时间更长一些罢了。所以我后来在代码里加了一个简单的堵转保护逻辑设定一个速度阈值如果PWM大于某个值而编码器反馈的速度低于某个值持续超过500毫秒就认为堵转直接关闭输出并给出报警。这个逻辑的价值在于它把“硬件过载”转化成了“软件可感知的事件”。一旦轮子被异物卡住或者底盘翻车系统会在几十毫秒内主动断电而不是让驱动继续输出电流到烧毁为止。这是一个所有电机项目都值得加的保护尤其是用大扭矩电机的时候它能在关键时刻救下整套硬件。从这次“小牛拉大车”的教训里我最大的收获就是选电机驱动绝对不能拿“别人说能跑”当依据也不能拿“空载能转”当判定标准。务必先测你自己电机的真实电流特别是堵转电流和启动电流然后按这个电流去选驱动留出至少一倍的余量。TB6612是个好东西它适合的是小型电机520电机也是个好东西它需要的是能喂饱它的大驱动。把合适的芯片放到合适的位置上这个“小牛拉大车”的悲剧就不会重演。