1. 项目缘起与核心需求拆解
1.1 为什么偏偏是TC118S这颗芯片
搞过小功率直流马达驱动的朋友都知道,市面上能选的驱动方案实在太多了,从最简单的三极管搭H桥,到L9110S、DRV8833、TB6612FNG,再到各种集成驱动模块,价格从几毛到几十块不等。那为什么我还要单独拿TC118S出来讲?原因很简单:在3V到6V这个极低电压区间里,TC118S的性价比和易用性几乎没有对手。
我最早接触这颗芯片是在一个用两节干电池供电的玩具小车项目上。客户要求成本压到极致,同时马达要能正反转,还要用单片机IO口直接控制。当时试过用分立元件搭H桥,四个三极管加一堆电阻电容,板子面积大不说,调试起来还特别容易烧管子。后来换成L9110S,发现它在3V供电时压降太大,马达转起来软绵绵的,扭矩明显不够。直到用了TC118S,才算真正把这个问题解决掉。
TC118S是一颗双通道直流马达驱动芯片,内部集成了完整的H桥电路,采用SOP8封装,工作电压范围宽到2.5V到12V,持续输出电流能到1.2A,峰值可以到2A。最关键的是,它的导通电阻只有0.6欧姆左右,在3V供电时压降非常小,马达能吃到接近满额的电压。这个特性在电池供电的低压场景里太重要了,因为电池电压本来就不高,再被驱动芯片吃掉一截,马达就没力气了。
1.2 3V和6V两个电压档位的实际意义
很多人可能会问,为什么标题里特别强调3V和6V?这两个电压档位不是随便选的,它们对应着两种最典型的应用场景。
3V档位主要对应两节干电池或者单节锂电池供电的场景。两节AA电池串联是3V,单节18650锂电池标称3.7V但放电截止也在3V左右。这类场景包括小型玩具、微型机器人、电动牙刷、便携式按摩器等等。这些产品对体积和成本极其敏感,PCB面积往往只有指甲盖大小,驱动电路必须足够精简。
6V档位则对应四节干电池或者两节锂电池串联的场景。四节AA电池是6V,两节18650串联是7.4V但满电时接近8.4V。这类场景包括中型遥控车、云台电机、小型水泵、自动门锁等等。6V场景下马达功率更大,对驱动芯片的电流能力和散热要求也更高。
这两个档位看起来只差一倍电压,但在实际电路设计上,走线和滤波的处理方式完全不同。3V时主要矛盾是压降和效率,6V时主要矛盾是尖峰电压和EMI。我见过太多人用同一套PCB布局去套3V和6V的方案,结果3V的没力气,6V的烧芯片。后面我会详细拆解这两套设计的具体差异。
1.3 这篇文章适合谁来读
如果你正在做下面这些事情,这篇文章应该能帮你省下不少试错时间:
- 第一次用TC118S做马达驱动,不确定外围电路怎么搭
- 之前用L9110S或分立元件方案,想换到TC118S但担心踩坑
- 3V电池供电时马达转不动,不知道问题出在哪里
- 6V供电时芯片发热严重或者偶尔烧毁,找不到原因
- 想用单片机PWM调速,但不知道怎么接线和配置
我下面会从芯片内部结构讲起,然后给出3V和6V两套完整的原理图和PCB布局建议,再分享几个我实际调试中遇到的典型问题和解决方法。所有参数和步骤都是经过实际验证的,你可以直接抄作业。
2. TC118S内部结构与外围电路设计要点
2.1 芯片内部到底集成了什么
TC118S的SOP8封装里其实集成了相当完整的H桥驱动电路。八个引脚分别是:两个电源脚(VCC和GND)、两个控制输入脚(INA和INB)、两个输出脚(OUTA和OUTB),还有两个是马达连接端。内部结构上,每个输出通道由两个P沟道MOS管和两个N沟道MOS管组成完整的H桥,逻辑控制部分负责解析INA和INB的电平组合,决定马达是正转、反转、停止还是刹车。
这里有个细节值得注意:TC118S的输入控制逻辑是兼容TTL和CMOS电平的。这意味着你可以直接用3.3V单片机的IO口驱动它,不需要额外的电平转换电路。我实测过STM32的3.3V IO口直接接INA和INB,芯片能正常识别高低电平,这一点比某些需要5V逻辑的驱动芯片方便很多。
真值表如下:
| INA | INB | 马达状态 |
|---|---|---|
| 0 | 0 | 停止(惰行) |
| 1 | 0 | 正转 |
| 0 | 1 | 反转 |
| 1 | 1 | 刹车(短接制动) |
这个真值表看起来简单,但实际用的时候有个坑:上电瞬间如果INA和INB都是高电平,马达会进入刹车状态,电流会比较大。如果你的单片机IO口在上电复位期间默认输出高电平,就可能在每次上电时给马达一个刹车脉冲。解决方法是加一个下拉电阻,或者在软件初始化时先把IO口设为低电平再配置为输出。
2.2 外围元件到底需要几个
TC118S的外围电路极其精简,这也是它最大的优势之一。最基本的外围只需要两个去耦电容和两个下拉电阻,总共四个元件。
去耦电容方面,我建议在VCC和GND之间并联两个电容:一个10uF的钽电容或电解电容,负责吸收马达启动时的浪涌电流;一个100nF的陶瓷电容,负责滤除高频噪声。这两个电容要尽量靠近芯片的VCC引脚放置,走线越短越好。我见过有人只放了一个100nF电容,结果马达一启动单片机就复位,就是因为浪涌电流把电源拉垮了。
下拉电阻方面,在INA和INB各接一个10k欧姆的电阻到地。这两个电阻的作用是确保单片机IO口处于高阻态时,输入引脚被拉到低电平,马达不会意外转动。特别是在单片机复位期间或者IO口配置为输入的瞬间,这两个电阻能防止马达乱转。
注意:下拉电阻不能用太大,比如100k欧姆,否则抗干扰能力会变差。也不能太小,比如1k欧姆,否则会增加IO口的驱动负担。10k欧姆是一个比较稳妥的选择。
2.3 电源滤波和续流回路的处理
马达是一个典型的感性负载,在PWM调速或者突然停止时,马达线圈会产生反向电动势。虽然TC118S内部已经集成了续流二极管,但在大电流或者长导线场景下,外部再并联一个肖特基二极管能显著提高可靠性。
具体做法是在OUTA和OUTB之间反向并联一个肖特基二极管,比如SS34或者1N5819。注意是并联在马达两端,不是在芯片输出和地之间。这个二极管的作用是给马达线圈的反向电流提供一个低阻抗回路,避免电流灌回芯片内部。
电源滤波方面,如果你用的是电池供电,电池内阻本身就能起到一定的滤波作用。但如果是用稳压电源或者DC-DC供电,建议在VCC入口处再加一个LC滤波电路:一个10uH的电感串联在电源线上,后面跟一个100uF的电解电容到地。这个LC滤波能有效抑制马达产生的传导干扰,避免干扰通过电源线串到单片机或者其他敏感电路。
我实测过一个案例:用6V稳压电源给TC118S供电,同时给一个STM32最小系统板供电。不加LC滤波时,马达一转,STM32的ADC采样值就跳变几十个LSB。加了LC滤波后,跳变降到3个LSB以内。这个改善非常明显。
3. 3V低压场景的电路设计与实操要点
3.1 3V供电时最大的敌人是压降
3V供电场景下,TC118S面临的最大挑战是导通压降。虽然TC118S的导通电阻只有0.6欧姆,但在1A电流下,压降就是0.6V。3V减去0.6V只剩2.4V,马达的转速和扭矩都会明显下降。
更麻烦的是,电池电压本身还会随着放电而下降。两节AA电池满电是3.2V左右,用到快没电时可能只有2.4V。这时候再减去驱动芯片的压降,马达可能就完全转不动了。
解决这个问题的核心思路是降低回路总电阻。具体措施包括:
- 选用导通电阻更低的马达,或者并联两个马达绕组
- 缩短马达连接线的长度,使用更粗的线径
- PCB走线尽量宽,输出走线建议不小于40mil
- 电池连接器选用接触电阻小的型号
我实测过不同线径对马达转速的影响:用28AWG导线时马达空载电流0.15A,用22AWG导线时电流降到0.12A。虽然只差了0.03A,但在3V场景下,这0.03A对应的压降差异就能让马达转速差出几百转。
3.2 3V场景的PWM调速策略
3V供电时,PWM调速有一个特殊问题:占空比低于50%时马达可能根本转不起来。因为马达有启动扭矩要求,占空比太低时平均电压不够,马达只会发出嗡嗡声但不转动。
我的经验是,3V场景下PWM频率建议设在15kHz到20kHz之间。频率太低会有可闻噪声,频率太高则MOS管开关损耗增加,效率下降。占空比的有效调节范围大概在30%到100%之间,低于30%基本没用。
如果你需要更低的启动占空比,可以考虑两个方案:一是用电压泵把3V升到5V再给TC118S供电,这样驱动能力会强很多;二是选用空心杯马达,这种马达启动扭矩小,低占空比下也能转动。
实操心得:在3V场景下调试PWM时,我习惯先用50%占空比让马达转起来,然后再慢慢往下调,找到能稳定转动的最低占空比。这个值记录下来,作为软件里的最小启动占空比。不同批次的马达这个值可能不一样,所以最好留20%的余量。
3.3 3V场景的PCB布局实战
3V场景的PCB布局有几个关键点:
第一,电源走线要短而粗。从电池连接器到TC118S的VCC引脚,走线宽度建议不小于60mil。如果板子空间允许,可以在电源走线上开窗镀锡,进一步降低电阻。
第二,去耦电容要紧贴芯片。10uF电容和100nF电容的接地端要直接连到芯片的GND引脚,不要经过任何过孔或者长走线。我通常把这两个电容放在芯片背面,用最短的路径连接。
第三,马达输出走线要对称。OUTA和OUTB的走线长度要尽量一致,宽度也要一致。不对称的走线会导致马达正反转时电流不平衡,影响寿命。
第四,信号地和功率地要分开。INA和INB的下拉电阻接地端,以及单片机的接地端,应该用单独的走线连到电源负极,不要和马达的功率地混在一起。如果板子有地平面,可以在功率地和信号地之间用一个0欧姆电阻或者磁珠连接。
我画过一版3V的TC118S驱动板,尺寸只有15mm x 20mm,上面集成了TC118S、两个去耦电容、两个下拉电阻和一个肖特基二极管。实测驱动一个3V的N20减速马达,空载电流0.08A,堵转电流0.6A,芯片表面温度在连续工作10分钟后只比环境温度高8度。这个温升完全可以接受。
4. 6V场景的电路设计与散热处理
4.1 6V供电时尖峰电压才是主要矛盾
6V供电场景下,压降不再是主要问题,因为6V减去0.6V还有5.4V,马达能吃到足够的电压。但尖峰电压变成了新的挑战。
马达在换向时会产生反向电动势,这个电压可能达到电源电压的2到3倍。6V供电时,尖峰电压可能冲到18V甚至更高。虽然TC118S的绝对最大额定电压是15V,但长期在接近极限值的电压下工作,芯片寿命会大幅缩短。
我实测过用示波器抓TC118S输出端的波形:6V供电、马达空载时,关断瞬间的尖峰电压达到14.8V,已经非常接近芯片的极限了。如果马达负载更重或者导线更长,尖峰电压很容易超过15V,直接击穿芯片。
解决尖峰电压问题需要三级防护:
第一级是芯片内部的续流二极管,这个只能处理小电流和短导线的场景。
第二级是外部肖特基二极管,在马达两端反向并联一个SS34,能把尖峰电压钳位在0.3V左右。注意这个二极管要选反向恢复时间短的,普通整流二极管反应太慢,来不及钳位。
第三级是RC吸收电路,在马达两端并联一个100欧姆电阻串联100nF电容的RC网络。这个RC网络能吸收高频振铃,进一步降低尖峰电压的幅度。电阻和电容的取值需要根据马达参数调整,我一般从100欧姆和100nF开始试,用示波器看效果再微调。
4.2 6V场景的散热设计
6V供电时,如果马达电流达到1A,TC118S的功耗就是0.6W。SOP8封装的热阻大约是160度每瓦,0.6W的功耗意味着芯片结温比环境温度高96度。如果环境温度是30度,结温就达到126度,已经超过芯片的125度极限了。
所以6V场景下,散热设计必须认真对待。具体措施包括:
- 增加铜箔面积:在芯片的GND引脚和输出引脚下方铺大面积铜箔,通过过孔连接到板子背面的铜层。铜箔面积越大,散热效果越好。
- 使用导热垫:如果板子空间允许,可以在芯片表面贴一个小的导热垫,把热量传导到外壳或者金属支架上。
- 降低PWM频率:开关损耗和PWM频率成正比。如果散热压力大,可以把PWM频率从20kHz降到10kHz,开关损耗能降低一半。但要注意10kHz可能会进入可闻噪声范围。
- 限制最大占空比:如果不需要全速运行,可以在软件里把最大占空比限制在80%或90%,减少平均电流。
我做过一个对比测试:同样的6V供电、1A负载,不加散热措施时芯片表面温度在5分钟内升到95度;加了2平方厘米的铜箔散热后,温度稳定在62度;再加一个10mm x 10mm的铝制散热片,温度降到48度。这个差异非常显著。
4.3 6V场景的EMI抑制
6V场景下马达功率更大,EMI问题也更突出。马达产生的传导干扰会通过电源线和空间辐射两种途径影响其他电路。
传导干扰的抑制主要靠LC滤波。在电源入口处串联一个10uH到100uH的功率电感,后面跟一个100uF到470uF的电解电容。电感的额定电流要大于马达的最大电流,否则会饱和失效。我通常用22uH、2A的功率电感,配合220uF的电解电容,能把传导干扰降低20dB以上。
空间辐射的抑制主要靠屏蔽和布局。马达连接线尽量短,最好使用双绞线。如果马达线长度超过10厘米,建议用带屏蔽层的线缆,屏蔽层单端接地。PCB上,TC118S和马达连接器要远离单片机和敏感模拟电路,至少保持2厘米以上的距离。
注意:EMI滤波电感和电容要放在PCB的边缘,靠近电源入口,不要放在板子中间。否则滤波后的干净电源会被板子上的其他走线重新污染。
5. 常见问题排查与避坑经验实录
5.1 马达不转或者只抖动不转
这是最常见的问题,可能的原因有五个:
第一个原因是电源电压不够。用万用表量一下TC118S的VCC引脚电压,如果低于2.5V,芯片根本不工作。3V场景下如果电池快没电了,电压可能降到2.4V以下,这时候需要换电池或者改用升压方案。
第二个原因是控制信号不对。用示波器或者逻辑分析仪看一下INA和INB的波形,确认电平幅度和时序正确。有些单片机IO口在复位期间是浮空的,如果没有下拉电阻,输入引脚的电平是不确定的。
第三个原因是马达连接错误。TC118S的OUTA和OUTB要接到马达的两个端子上,如果接反了马达会反转,但不会不转。如果马达完全不转,检查一下马达本身是不是坏了,直接用电池接马达两端试试。
第四个原因是PWM占空比太低。3V场景下占空比低于30%时马达可能转不起来,把占空比调到50%以上再试。
第五个原因是芯片损坏。如果以上都排查过了还是不行,用万用表量一下OUTA和OUTB对GND的电阻,正常应该在几百千欧以上。如果电阻很小,说明芯片内部击穿了,需要更换。
5.2 芯片发热严重甚至烧毁
芯片发热严重通常有三个原因:
第一个原因是电流超限。TC118S的持续电流是1.2A,如果马达堵转电流超过这个值,芯片会过热保护或者烧毁。用电流表量一下马达的工作电流和堵转电流,如果堵转电流超过1.5A,建议换更大电流的驱动芯片,比如TB6612FNG。
第二个原因是尖峰电压击穿。6V场景下如果没有外部肖特基二极管和RC吸收电路,尖峰电压可能超过15V,导致芯片内部MOS管击穿。用示波器看一下输出波形,如果尖峰超过14V,必须加吸收电路。
第三个原因是散热不足。如果芯片表面温度超过100度,说明散热设计有问题。增加铜箔面积、加散热片、降低PWM频率都能改善。
我踩过的一个坑:有一次用6V供电驱动一个370马达,马达空载电流0.3A,看起来没问题。但实际跑起来后芯片很快就烫手,后来发现是马达启动瞬间的浪涌电流达到了2.5A,超过了TC118S的峰值电流2A。解决方法是在软件里加一个软启动逻辑,让PWM占空比在200毫秒内从0慢慢升到目标值,浪涌电流就降到了1.8A以下。
5.3 单片机复位或者ADC采样异常
这个问题通常是马达干扰通过电源线或者地线串到了单片机。排查思路如下:
第一步,确认干扰路径。用示波器同时看单片机的VCC和TC118S的VCC,如果马达一转,单片机VCC上就有明显的毛刺,说明是传导干扰。如果单片机VCC干净但ADC值还是跳,说明是地线干扰或者空间辐射。
第二步,切断传导路径。在TC118S的VCC入口加LC滤波,在单片机的VCC入口加一个100nF加10uF的去耦电容。如果单片机和TC118S共用同一个电源,建议用磁珠或者0欧姆电阻把两者的电源分开,各自独立滤波。
第三步,改善地线布局。单片机的接地端和TC118S的功率地要分开走线,最后在电源负极单点汇合。如果板子有地平面,可以在功率地和信号地之间留一个隔离带,用磁珠连接。
第四步,增加软件滤波。如果硬件上已经尽力了还是有干扰,可以在软件里对ADC采样值做中值滤波或者滑动平均滤波。我通常用5点中值滤波,能滤掉大部分马达干扰引起的跳变。
5.4 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 马达不转 | 电源电压不足 | 万用表量VCC | 更换电池或升压 |
| 马达不转 | 控制信号错误 | 示波器看INA/INB | 检查单片机配置 |
| 马达不转 | PWM占空比太低 | 调高占空比 | 设置最小启动占空比 |
| 芯片发热 | 电流超限 | 电流表量马达电流 | 换大电流驱动芯片 |
| 芯片发热 | 尖峰电压击穿 | 示波器看输出波形 | 加肖特基和RC吸收 |
| 芯片发热 | 散热不足 | 测温枪测芯片温度 | 增加铜箔或散热片 |
| 单片机复位 | 传导干扰 | 示波器看VCC毛刺 | 加LC滤波 |
| ADC跳变 | 地线干扰 | 检查地线布局 | 分开功率地和信号地 |
6. 两套完整方案的参数对比与选型建议
6.1 3V方案和6V方案的元件清单对比
我把两套方案的元件清单整理成表格,方便你直接对照采购:
| 元件 | 3V方案 | 6V方案 | 说明 |
|---|---|---|---|
| 驱动芯片 | TC118S | TC118S | 相同 |
| 去耦电容1 | 10uF钽电容 | 22uF钽电容 | 6V方案加大容量 |
| 去耦电容2 | 100nF陶瓷 | 100nF陶瓷 | 相同 |
| 下拉电阻 | 10k欧姆 x2 | 10k欧姆 x2 | 相同 |
| 肖特基二极管 | SS34 | SS34 x2 | 6V方案建议双管并联 |
| RC吸收电路 | 可选 | 100欧姆+100nF | 6V方案强烈建议 |
| 电源电感 | 可选 | 22uH/2A | 6V方案建议加 |
| 电解电容 | 可选 | 220uF/16V | 6V方案建议加 |
| PCB铜箔面积 | 1平方厘米 | 3平方厘米以上 | 6V方案需要更好散热 |
6.2 什么场景选3V方案,什么场景选6V方案
选3V方案还是6V方案,主要看你的供电条件和马达参数。
选3V方案的情况:
- 供电是两节AA电池或者单节锂电池
- 马达额定电压是3V到4.5V
- 马达工作电流小于0.5A
- PCB空间极其有限,比如玩具内部
- 成本要求极致,能省一个元件是一个
选6V方案的情况:
- 供电是四节AA电池或者两节锂电池
- 马达额定电压是6V到9V
- 马达工作电流在0.5A到1.2A之间
- 对可靠性要求高,需要长时间连续工作
- 有足够的PCB空间放滤波和散热元件
如果你拿不准,我建议直接按6V方案设计,然后降额到3V使用。6V方案多出来的滤波和散热元件,在3V场景下只会提高可靠性,不会带来负面影响。唯一的问题是成本和板子面积会增加,但如果你的项目对这两点不是极度敏感,多花几毛钱换来的稳定性是值得的。
6.3 从TC118S升级到更大电流方案的时机
TC118S虽然好用,但它的电流能力有限。如果你发现下面任何一个情况,就应该考虑升级到TB6612FNG或者DRV8833:
- 马达堵转电流超过1.5A
- 需要驱动两个以上的马达
- 需要更精细的PWM调速(比如16位分辨率)
- 需要电流检测或者故障反馈功能
- 供电电压超过12V
TB6612FNG的持续电流是1.2A,峰值3.2A,和TC118S差不多,但它的导通电阻更低,只有0.5欧姆,而且支持更高的PWM频率。DRV8833的持续电流是1.5A,峰值2A,导通电阻0.36欧姆,效率更高。这两颗芯片的价格比TC118S贵一些,但在需要更大电流或者更高效率的场景下,多花的钱是值得的。
我个人在实际操作中的体会是,TC118S最适合的场景就是3V到6V、1A以下、成本敏感、空间受限的小型直流马达驱动。在这个定位里,它的表现非常出色,外围电路简单到令人发指,调试起来也很快。但如果你超出了这个范围,就不要硬撑,该换芯片就换芯片,否则调试花掉的时间成本远超过芯片本身的差价。
最后再分享一个小技巧:TC118S的INA和INB引脚可以并联使用,把两个通道的输出并在一起,持续电流能提高到2A左右。我实测过并联两个通道驱动一个1.5A的马达,连续工作30分钟芯片温度稳定在75度,完全可用。这个技巧在需要临时提高驱动能力但又不想换芯片的时候特别有用。