ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TB6612与编码电机接线实战:6根线分辨与避坑指南

TB6612与编码电机接线实战:6根线分辨与避坑指南 玩电机驱动的朋友应该都经历过这个时刻模块、电机、电源、主控全都堆在桌上插线插得头昏眼花结果一上电要么电机纹丝不动要么干脆闻到一股焦味。尤其是换成 TB6612 驱动模块之后看着手头那台带着 6 根引线的编码电机很多人第一反应是懵——之前用两线直流电机只要接两条线就行怎么编码电机多出四根这 6 根线到底分别接哪儿接错了会不会烧这篇文章就专门解决编码电机的接线问题。我会把 TB6612 驱动模块和编码电机的接线逻辑拆开讲清楚从怎么用万用表分辨那 6 根线到具体接到模块哪个引脚再到实际烧模块、测速数据乱跳的排查实录一次性给你讲透。适合正在做小车底盘、视觉循迹车、机械臂关节的同学或者说只要你在用编码电机做闭环速度控制这篇文章都能帮你少走弯路。1. 先搞懂 TB6612 和编码电机各自是什么角色1.1 TB6612 能做什么和 L298N 比强在哪TB6612 本质上是一个双 H 桥电机驱动芯片内部集成了两个 H 桥电路。所谓 H 桥通俗点说就是用四个开关管搭成一个“H”形的回路通过控制对角两个开关管的通断改变流过电机的电流方向从而实现电机正反转。再加上 PWM脉冲宽度调制信号控制开关管的导通时间比例就能调速。这就是电机驱动的核心原理。很多同学之前用的是 L298N那个模块体积大、压降大、发热厉害逻辑电压还得单独供实际输出电流衰减比较严重。TB6612 的优势在于它用的是 MOSFET 场效应管导通压降比 L298N 的双极性晶体管小得多同样的电池电压下真正送到电机两端的电压更接近电源值转速和扭矩表现都会更好。它的最大连续驱动电流在 1.2A 左右峰值电流能到 3A对常见的 N20 减速电机、JGB37 电机、MG310 这类小型编码电机来说完全够用。TB6612 的控制逻辑也不复杂。每个通道有三根控制线以 A 通道为例AIN1 和 AIN2 控制方向PWMA 控制速度。当 AIN1 为高、AIN2 为低时电机正转反过来就是反转两个都为低或都为高时电机刹车。PWMA 输入 PWM 波就可以调节等效电压占空比越大转速越高。这样的控制方式比直接用继电器切换方向要平滑得多也便于做 PID 闭环调速。1.2 编码电机那 6 根线其实是“两套系统”揉在一起编码电机从外部看有 6 根引线但这 6 根线并不是一体的拆开看其实是两套系统一套是电机本体两套是编码器。电机本体两根本来就是普通直流电机的两条引线接驱动模块的输出端就能转。编码器四根则是独立的霍尔传感器和磁环码盘组成的小系统负责输出速度反馈信号。生活里找个类比电机好比人的关节——肌肉收缩驱动它运动编码器就像关节上的“角度计”它不产生动力只是默默记录你的手臂转了多少角度、往哪个方向转、速度多快。所以要记住一个关键认知编码电机接线的时候不要试图去找一根“公共线”之类的东西电机两根线和编码器四根线在电路上基本是隔离的各自有各自的用途。通常编码电机 6 根线的颜色定义大致是红色和黑色或其他某两色是电机线圈线其余四根常见红色、黑色加上蓝色、绿色等多色组合是编码器线。但这只是“通常情况下”不同厂家、不同型号之间颜色定义差别很大甚至同一厂家不同批次都可能不一样所以不能只靠颜色下判断。1.3 三组“地”必须分清楚接线中大家最容易忽略的不是信号线而是地线。TB6612 模块上有一个 VM电机电源、一个 VCC逻辑电源、一个 GND。编码器上又有一个 GND。这里面的地线关系如果处理不好就会出现电机能转但编码器读数乱跳、或者模块无故发热的问题。很多集成板上会把逻辑地、电机地、编码器地在物理上连在一起理论上只要“共地”就能工作。但需要提醒的是如果你用的是独立模块拼接方案电机是大电流回路编码器是微弱信号回路两者如果共用地线时走线不合理电机的大电流会在地线上产生噪声电压干扰编码器信号。所以接线时尽量让电机的负线和编码器的 GND 各自单独回到电源负极采用星型接地方式不要图省事把一堆线都在一个洞上拧死。这个习惯能帮你避免大量莫名其妙的干扰问题。2. 那 6 根线的“身份验证”万用表才是最好的老师2.1 用电阻法快速分出电机线圈和编码器线拿到一台没标线定义的编码电机第一步不是查资料而是拿万用表测。这个方法我从没失手过先把万用表打到蜂鸣档或电阻档Ω 档量程选 200Ω 或 2kΩ直接去量这 6 根线两两之间的阻值。电机线圈因为是铜线绕组静态阻值通常只有几欧到几十欧蜂鸣档量到会响或者阻值很小。而编码器的四根线之间供电脚 VCC 和 GND 之间会有二极管结特性或者几百欧到几千欧的阻值A 相和 B 相对 GND 之间往往有上拉或推挽结构阻值不会像电机线圈那样低。所以只要找到“两两之间阻值最小”的那一对就是电机线圈两根线。这里有一个注意点测量之前一定要确保电机完全断电最好把从模块上拆下来再测。带电测量不仅可能烧万用表还会把万用表的数据搞到完全不可信。另外有些编码电机带减速箱用手拧输出轴会带动内部电机转动产生微弱感应电压虽然不会伤人但会影响电阻读数所以测的时候也尽量让输出轴静止。如果手头有两种颜色系统比如一根红、一根黑、一根黄、一根白、一根绿、一根蓝那么通常红黑中的某一对是编码器电源或电机线具体怎么分就用这个电阻法判断。我自己的习惯是先给每根线贴一个标签比如 1 到 6 号然后测量记录所有两两组合的阻值做成一个小表格这样一目了然。2.2 用供电法确认编码器的 VCC、GND、A 相、B 相电机线圈两根线确认之后剩下四根就是编码器线。编码器四根线里首先要分清电源线和信号线。电源线有两根一根是 VCC一根是 GNDA 相和 B 相是信号输出线。我常用的方法是先确认 VCC 和 GND把万用表打到二极管档用红表笔接某一根线、黑表笔接另一根线观察读数如果某对线之间有一个明显的二极管正向压降大约 0.4V 到 0.7V或者反向不通那这对线大概就是电源线。因为编码器内部霍尔传感器芯片的供电端通常带有保护二极管。确认电源线后剩下两根就是 A 相和 B 相。要区分谁是 A、谁是 B以及这两根线是否真的正常工作可以给 VCC 和 GND 接上对应电压拿示波器或者逻辑分析仪看波形最省事的是用万用表的直流电压档。把电压表红表笔接 A 相或假设的 A 相黑表笔接 GND用手慢慢转动电机轴看电压在 0V 和 VCC 之间来回跳变那这根就是编码器信号线。另外一个信号线也一样。两根信号线都会跳变区别在于顺序正转时 A 相和 B 相跳变的相位关系不一样相位差接近 90 度也就是正交信号。在示波器上能明显看到两个方波之间有相位差这就意味着编码器工作正常。如果手头没有示波器和逻辑分析仪用 LED 大法也行拿一个 LED 串一个 1kΩ 电阻接到信号线和地之间然后用手拧电机输出轴如果 LED 闪烁说明这根线有信号输出。不过 LED 反应速度有限转太快时可能只是看起来变暗但至少能初步判断“线是活的”。2.3 一张接线逻辑图从编码电机到 TB6612 到主控很多人说“一张图搞定”那我在这就用文字表格的方式也给你画一张“接线逻辑图”把 6 根线的去向你标清楚电机侧 6 根线线的身份接到哪里作用第 1 根电机线圈 MTB6612 输出端 AO1 / BO1电机电流流入端第 2 根电机线圈 M-TB6612 输出端 AO2 / BO2电机电流流出端第 3 根编码器 VCC主控板 3.3V / 5V视编码器规格给编码器供电第 4 根编码器 GND电源负极与主控共地编码器回路地第 5 根编码器 A 相主控板支持外部中断的 IO如 D2/D3输出转速脉冲测速用第 6 根编码器 B 相主控板普通 IO 或另一个外部中断输出方向与相位信号这张表就是整套接线的主心骨。记住一个原则电机线圈两根线走 TB6612 的输出端编码器四根线走主控的 GPIO 和电源绝对不要把编码器信号接到电机驱动输出口上。很多人把编码器 A 相、B 相接进 TB6612 的输入口导致 PWM 信号被编码器信号干扰这是很典型的错误。3. TB6612 接线实操从模块引脚到编码器接口3.1 拆开模块看引脚先分四组TB6612 模块买回来之后板子上引脚通常这样排布一侧是 VM、VCC、GND、PWMA、AIN1、AIN2、STBY、PWMB、BIN1、BIN2另一侧是 AO1、AO2、BO1、BO2。看起来多实际可以分成四组理解电源组VM、VCC、GND、控制组AIN1/AIN2、PWMA、BIN1/BIN2、PWMB、STBY、输出组AO1/AO2、BO1/BO2。分组之后接线思路就清晰多了。VM 接电机电源正极。这里的电压范围不同模块略有差异常见的是 2.5V 到 12V最高不要超过 15V。我一般用两节 18650 锂电串联作为 7.4V 电源或者直接用 3S 锂电 11.1V也跑过只要不长时间满油门堵转就行。VCC 是逻辑电源接 3.3V 或 5V由主控板供电口引出不能省。GND 是整个模块的地也必须要和主控共地否则 PWM 信号没有参考基准。特别强调一下 STBY 这个引脚。很多人第一次用 TB6612 会忽略它结果模块怎么都不输出。STBY 是待机控制引脚它接高电平模块才正常工作接低电平所有输出全部关闭。所以默认情况下 STBY 要接到 VCC 或者主控的一个高电平 IO 口如果接到低电平电机肯定不动。有些模块上这个引脚已经用跳线拉高了但独立模块或自己画板子时必须注意。3.2 电机两线怎么接到输出端确认好电源组之后开始接电机线。前面已经用万用表找到了电机的两根线圈线接下来把它们接到 TB6612 的输出端。假设你用的是 A 通道就把这两根线的一根接到 AO1另一根接到 AO2。这里不需要纠结正负因为 H 桥本身支持翻转方向如果发现电机转向和你预期相反直接交换这两根线的位置或者在程序里把 AIN1 和 AIN2 的电平反过来效果一样。但有一个细节要提醒睡眠或待机状态下AO1 和 AO2 端子千万不要在通电状态下直接碰在一起或者摸到别的金属。H 桥输出端一旦短路瞬间电流可能超过芯片承受能力然后芯片就挂了。所以接线时养成好习惯先断电再接电机线检查没有问题再上电。另外如果电机是减速电机堵转电流会明显上升长时间堵转就可能把 TB6612 的 H 桥烧穿所以我一般在电源输入侧并联一个几百微法的电解电容抑制瞬间电流波动给芯片一个缓冲。同理 B 通道接另一颗电机接到 BO1 和 BO2。如果你只需要驱动一台电机就用 A 通道就行B 通道闲置即可。3.3 编码器四线怎么接回主控编码器四根线我按照前面表格说过的方法VCC 接主控电源GND 共地A 相和 B 相接主控 GPIO。但这里有几个实际运行中需要注意的问题新手特别容易在“看似接对了”的情况下翻车。第一编码器 VCC 的电压等级要认清。大多数小型编码电机内置霍尔编码器的工作电压是 3.3V 到 5V比如常见的 N20 电机带 6 线编码器VCC 可以接 3.3V 或 5V。但有的编码器 5V 供电时 A/B 相输出也是 5V 电平如果你的主控板是 3.3V 的树莓派 Pico 或者 STM32就不能直接把 5V 信号接到 3.3V 引脚否则有灌坏 GPIO 的风险最好加电平转换或串电阻分压。反过来如果编码器是 3.3V 供电A/B 相输出大概 3.3V 高电平接 5V 主控也能识别为高电平相对安全一些。第二A 相最好接到带有外部中断能力的引脚。编码器测速为什么要用到中断因为编码器输出的 A 相是一个脉冲信号电机转速越高脉冲频率越高。如果主控在轮询循环里读电平变化当你同时还要跑 PID 调节、OLED 显示、串口打印时很可能会漏掉脉冲测速数据就会出现偏差。用外部中断让 A 相的每个上升沿或者下降沿触发一次计数就不怕 CPU 忙不过来。常见的 Arduino Uno 的 D2、D3 就是外部中断引脚STM32 几乎所有 GPIO 都能配置成中断模式。B 相则用来判断方向当 A 相上升沿中断触发时如果读到 B 相是低电平说明正转如果是高电平说明反转。这就是最基础的正交解码逻辑。第三四根线尽量用双绞线或短线不要和电机驱动输出线绑在一起走。电机转动时的大电流会在导线周围产生变化的磁场编码器信号如果贴着电机线走容易被耦合出毛刺和误脉冲。实测下来编码器线超过 20cm 又不做任何屏蔽处理的话系统跑高速时测速数据就容易跳动。工业上的做法是用屏蔽双绞线我们玩小车的至少也应该让编码器信号线尽量不要靠近电源线和电机输出线。3.4 逻辑电压与电机电压必须分开接TB6612 有一个很容易被忽略的设计VCC 和 VM 是两个独立电源引脚。VCC 负责给芯片的逻辑部分供电几毫安就够VM 给电机提供动力电流从 VM 经过 H 桥流向电机可以到一两安。这两个电压可以不一样VCC 一般固定 3.3V 或 5VVM 由电池决定比如 7.4V、11.1V 都可以。很多人收到模块之后看图发现板上印着 VCC 和 VM想当然地“反正都是接正极”就把两个脚并在一起接同一个电源。如果这个电源恰好是 3.3V那电机端只分到不到 3V 电压还要扣掉 MOSFET 压降转速和扭矩都很弱如果这个电源是 12V那逻辑部分可能直接烧掉。正确做法是VM 接电机电源经过开关或保险丝的正极VCC 接主控板的 3.3V 或 5V 端子GND 三个地连好。如果你用的是带降压模块的电池方案那逻辑电源就从降压模块输出端取电机电源直接取电池两边井水不犯河水。3.5 完整接线总表直接照着连为了让你实际动手时有据可依我把 A 通道驱动一个编码电机的完整接线列成一张总表TB6612 VM接电池正极比如 7.4VTB6612 VCC接主控 3.3V 或 5VTB6612 GND接电源负极以及主控 GND共地TB6612 STBY接 VCC或主控高电平 IOTB6612 PWMA接主控 PWM 引脚如 Arduino D5TB6612 AIN1接主控 GPIO如 D4TB6612 AIN2接主控 GPIO如 D7TB6612 AO1接编码电机 M 线TB6612 AO2接编码电机 M- 线编码器 VCC接主控 3.3V 或 5V与编码器规格匹配编码器 GND接电源负极编码器 A 相接主控外部中断引脚如 D2编码器 B 相接主控普通 GPIO如 D3这张表几乎覆盖了 90% 以上小型小车项目的接线需求。如果你做的是四驱底盘就走两路A 通道和 B 通道各接一个电机对应的 A 相 B 相分别接两组中断引脚即可。4. 常见问题与排查技巧实录4.1 电机完全不动从哪里查起我见过太多同学接完线写好几行代码上电之后电机纹丝不动然后第一反应是怀疑代码写错了。实际上代码出问题的概率反而不大更多的是硬件接线或者是电源问题。这时候按顺序排查最省时间。第一步看模块上的电源指示灯是否点亮。如果灯都不亮检查 VM 和 GND 是否接反或者电源开关有没有打开。第二步检查 STBY 引脚是不是接了高电平。很多第一次用这个模块的人就在这里栽跟头STBY 悬空默认是低电平模块处于待机状态无论 PWM 怎么给AO1/AO2 都没有输出。第三步检查 PWM 信号是否真的送到了 PWMA 引脚——用万用表电压档测 PWMA 对 GND 的电压如果程序里给了 50% 占空比且引脚高电平逻辑正常会测到一个大约 VCC 一半的平均电压。第四步如果这些都正常把电机两线从 AO1/AO2 卸下来用一个单独直流电源直接给电机通电排除电机本身损坏的可能。如果还是不行就要考虑共地问题。TB6612 模块的 GND 和主控的 GND 如果没有连在一起PWM 信号对模块来说就是“悬空”的信号模块会认为引脚电平不确定输出自然不正常。所以只要有 PWM 控制就必须保证主控和驱动模块共地。这是 H 桥驱动电路里的绝对底线。4.2 电机能转但编码器测速数据乱跳怎么办这是做闭环控制时最常见的问题。现象通常是用手转动电机输出轴串口监视器上的脉冲计数忽多忽少或者程序跑起来之后测得的速度值和真实转速差得很远甚至突然某个时刻变成 0 又跳回来。这种问题十有八九是编码器信号质量问题。第一个要查的就是接线是不是接触不良。编码器信号线通常很细插在面包板或者杜邦线插座上时只要稍一活动就有可能出现虚接。虚接并不会让系统完全停摆而是会随机丢掉若干脉冲看起来就是数据跳变。检查方法很简单固定好线缆然后故意小幅拉扯信号线观察串口计数有没有异常跳动。如果跳整理接线把杜邦线换成直接焊接或者用压线端子固定。第二个原因是 A 相和 B 相接反了。虽然 A/B 反接不会导致脉冲丢失但会导致方向判断完全反掉。如果你在程序里通过 B 相电平判断方向发现电机明明是正转而方向变量显示为“反转”那么把 A 相和 B 相在程序里交换就行不需要动线。第三个原因是供电电压不稳定。编码器 VCC 如果接在变压器模块的输出端而这个模块又和电机共用同一个电源那么电机启动瞬间的大电流会把 VCC 拉低编码器芯片可能复位输出信号就会中断。所以编码器电源尽量从主控板的 3.3V/5V 引脚取不要直接取自电机电源。第四个原因比较隐蔽那就是中断服务函数里做的事情太多。如果你在一个外部中断回调里面去做 Serial.print 或者别的耗时操作整个中断程序处理时间过长就有可能导致第二次中断到来时还没处理完计数器就丢了。正确办法是中断函数里只做变量自增并记录一个时间标志让主循环去统一处理显示和控制逻辑。这个优化在很多平台上都能明显改善测速的准确性。4.3 容易烧 TB6612 的几种接法千万要避开烧模块这种事情我也不是没干过。回过头来总结烧 TB6612 的几个典型原因其实非常固定。第一种是电源极性接反。VM 和 GND 一旦接反模块内部的二极管可能先导通电流直接灌进芯片颗粒冒烟和芯片报废往往就在一瞬间。有些模块板上有防反接二极管或者自恢复保险丝但并不是所有廉价模块都有。所以上电之前认真核对电源线和 GND养成先空载测试再带负载的习惯。第二种是电机堵转。H 桥的最大允许电流是有限度的堵转时电机电流会飙升到正常工作电流的几倍如果时间足够长超过芯片的散热情感就会烧掉。所以我做小车的时候有一个原则测试阶段不要用脚踩住轮子也不要把小车顶着墙强行开。有必要的话在程序里加超时保护比如设定超过 1 秒检测到堵转就自动断电。第三种是负载超过模块能力。TB6612 是一片很优秀的小功率驱动芯片但你不能拿它去驱动那种几安培的大功率直流电机。如果你手里拿着的是一个 555 电机或者大型 775 电机那还是老老实实换大功率驱动比如 BTS7960 或者 IBT-2 模块。选驱动模块的核心原则是看电机堵转电流而不是空载电流。第四种是静电伤害。你在干燥环境中用手摸芯片引脚打完静电再来焊接就可能把 CMOS 栅极击穿。焊接时先把烙铁接地或者等烙铁达到工作温度后断电再焊接都能减少这种风险。不要觉得这是玄学在北方干燥季节我确实因为没防静电处理烧过一板子驱动。4.4 避坑速查表症状、原因、对策为了方便查阅我把实际项目里遇到过的典型问题整理成一张速查表症状最常见原因解决办法上电后模块电源灯不亮VM 或 GND 接反 / 电源开关未开检查电源极性确认电池有电电机完全不动模块灯亮STBY 引脚未拉高 / PWM 未送到STBY 接 VCC检查 PWMA 信号电机能转但速度很慢VM 电压偏低或编码器 VCC 单独低检查电池电压分开供电电机转向与预期相反AIN1/AIN2 逻辑反了或电机线接反交换 AO1/AO2 接线或程序里翻转电平编码器测速数据乱跳接触不良/信号线过长/中断函数耗时太长焊接固定线缆缩短距离精简中断函数方向判断反了A 相 B 相接反或程序判断反了交换 A/B 相定义电机一启动就重启电机电流过大拉低系统电压用更大容量电池或电机电源与主控分开运行一段时间后模块发烫电机堵转过流或散热不足加堵转保护加装散热片这张速查表基本涵盖了我做四驱小车、麦克纳姆轮底盘、机械臂关节过程中 90% 的故障场景。把它打印出来放在手边遇到问题不用翻一堆资料按表排查就行。4.5 两个特别容易“看着没错但就是不行”的坑还有一个我看着无数人踩过的坑TB6612 的 GND 和编码器的 GND 各接各的没有真正共地。很多同学买的是集成了 TB6612 和 STM32 的一体板那自然没问题但如果像我一样是自己分离式搭的主控、驱动模块、编码器三个 GND 必须连在一起。我最初做的就是主控和模块共地但编码器的 GND 图省事只在电源端共地结果编码器读出来的数据怎么都对不上后来把编码器 GND 也纳入共同的星型地网络数据立刻稳了。唯一要注意的是共地线的线径最好粗一点毕竟电机电流也会回流到负极细线产生的压降会成为编码器的“参考噪声”。另外一个坑是供电顺序问题。建议上电时先给主控上电再合上电机电源断电时先切断电机电源再拔主控 USB。这样能避免电机启动瞬间的反向电动势冲击主控和编码器。如果实在担心可以在 VM 输入侧并联一个 33V 左右的 TVS 瞬态抑制二极管吸收电机刹车时产生的反向尖峰电压好几块模块就是这个小元件救回来的。最后再分享一个个人体会编码电机的接线本质上就是把“电机驱动”和“转速反馈”两条链路分开规划。电机驱动链路要高电压、大电流、短线粗线编码器反馈链路要低电压、小信号、双绞线远离开关场源。只要把这两套逻辑分清楚TB6612 那 6 根线就再也不会成为拦住你项目的坎。希望这份避坑指南也能帮你把更多精力留给算法和结构而不是耗在跳线乱麻里。
返回列表