4. 电机驱动芯片实战:L298N、TB6612、DRV8833的对比与电路设计

做窗帘电机,驱动芯片是绕不开的坎。

我见过不少新手,上来就买L298N模块,结果发现又大又烫,根本塞不进窗帘电机那点小空间。也有朋友选了DRV8833,结果没注意电流限制,一上电就冒烟。

今天咱们就把这三款主流芯片掰开揉碎讲清楚。你想想看,选对了芯片,后面画板子、调参数都能省一半功夫。

4.1 三款芯片的核心参数对比

先看一张表,心里有个底。

参数 L298N TB6612 DRV8833
工作电压 4.5V - 46V 2.7V - 13.5V 2.7V - 10.8V
最大持续电流 2A(每通道) 1.2A(每通道) 1.5A(每通道)
峰值电流 3A 3.2A(短时) 2A
导通电阻 约2Ω 约0.5Ω 约0.3Ω
封装形式 MultiWatt15 SSOP24 / QFN QFN / TSSOP
控制接口 IN1-IN4 + ENA/ENB IN1-IN4 + PWM IN1-IN4 + nSLEEP
保护功能 无(需外接二极管) 过热关断、低压检测 过流、过热、欠压锁定

看完表,我直接说结论:做窗帘电机,首选TB6612,次选DRV8833,L298N基本可以放弃。

为什么?窗帘电机一般用12V供电,电流在0.5A到1A之间。L298N那2Ω的内阻,1A电流下光发热就2W,你想想看,一个小壳子怎么散热?

我的个人习惯: 12V/1A以下的电机驱动,我闭着眼睛选TB6612。超过1.5A才考虑DRV8833或者加MOS管搭H桥。

4.2 L298N:老将迟暮,但仍有价值

说实话,L298N是上世纪的产品了。我刚开始做电机驱动时,淘宝上全是这个模块,便宜又皮实。

但它的问题也很明显:

  • 体积大——MultiWatt15封装,比拇指还宽,塞不进窗帘电机管状外壳
  • 发热严重——2Ω内阻,1A电流就烫手,必须加散热片
  • 效率低——压降大,12V供电到电机端可能只剩10V
  • 保护缺失——没有过流、过热保护,烧了就是烧了

不过,L298N也有它的优势:

  • 电压范围宽(最高46V),适合大电压电机
  • 驱动能力强,峰值3A
  • 电路简单,新手容易上手

什么时候用L298N? 我个人觉得,只有两种情况:一是做实验验证,手头正好有模块;二是驱动24V以上的大电机。做窗帘电机,还是算了吧。

我曾经踩过的坑: 用L298N驱动12V窗帘电机,连续运行10分钟后,芯片温度飙到85°C。手都不敢碰。后来换了TB6612,温度直接降到40°C。所以,别在散热上省钱。

4.3 TB6612:窗帘电机的黄金搭档

TB6612是我最常用的驱动芯片。东芝出品,性能稳定,价格适中。

它的优点很突出:

  • 内阻低——0.5Ω,发热小,效率高
  • 体积小——SSOP24封装,指甲盖大小
  • 双通道——可以同时驱动两个电机,窗帘电机一个就够了,另一个可以留着做备用
  • PWM控制——支持独立PWM输入,调速方便
  • 保护完善——过热关断、低压检测,不容易烧

来看看典型电路怎么搭:

// TB6612 典型接线(以驱动一个直流电机为例)
// 控制引脚连接MCU
#define AIN1  GPIO_Pin_0   // PA0
#define AIN2  GPIO_Pin_1   // PA1
#define PWMA  GPIO_Pin_2   // PA2 (PWM输出)
#define STBY  GPIO_Pin_3   // PA3 (待机控制)

// 电机接线
// VM  -> 12V电源
// VCC -> 3.3V或5V (逻辑电源)
// GND -> 共地
// AO1 -> 电机正极
// AO2 -> 电机负极

// 控制逻辑
void motor_forward(uint8_t speed) {
    GPIO_SetBits(AIN1);   // AIN1 = 1
    GPIO_ResetBits(AIN2); // AIN2 = 0
    TIM_SetCompare1(PWM, speed); // 设置PWM占空比
    GPIO_SetBits(STBY);   // 退出待机
}

void motor_backward(uint8_t speed) {
    GPIO_ResetBits(AIN1); // AIN1 = 0
    GPIO_SetBits(AIN2);   // AIN2 = 1
    TIM_SetCompare1(PWM, speed);
    GPIO_SetBits(STBY);
}

void motor_stop(void) {
    GPIO_ResetBits(AIN1);
    GPIO_ResetBits(AIN2);
    TIM_SetCompare1(PWM, 0);
    GPIO_ResetBits(STBY); // 进入待机,省电
}

小技巧: TB6612的STBY引脚一定要接。不接的话,芯片一直处于待机状态,电机不转。我见过有人焊好板子发现电机不动,查了半天才发现STBY悬空了。

实际画PCB时,要注意几点:

  • VM和GND之间的去耦电容要靠近芯片引脚,我用的是10μF+0.1μF组合
  • 电机输出线要粗,至少0.5mm线宽
  • 芯片底部如果有散热焊盘,一定要焊接到地平面

4.4 DRV8833:低电压场景的优选

DRV8833是TI的产品,主打低电压、小体积。它的内阻只有0.3Ω,比TB6612还低。

但要注意,它的工作电压最高只有10.8V。如果你用12V供电,就超了。

DRV8833的几个特点:

  • 内阻极低——0.3Ω,发热更小
  • 封装更小——QFN封装,适合空间受限的场景
  • 保护全面——过流、过热、欠压锁定,三重保护
  • nSLEEP引脚——低功耗模式,待机电流仅1μA

它的电路和TB6612类似,但有个细节要注意:

// DRV8833 的nSLEEP引脚处理
// nSLEEP = 0 时,芯片进入休眠,所有输出高阻
// nSLEEP = 1 时,芯片正常工作

// 建议:nSLEEP不要直接接VCC,而是接MCU的GPIO
// 这样可以在待机时彻底关断驱动,省电

void drv8833_init(void) {
    GPIO_SetBits(nSLEEP);  // 唤醒芯片
    delay_ms(1);           // 等待内部电路稳定
}

void drv8833_sleep(void) {
    GPIO_ResetBits(nSLEEP); // 进入休眠
}

我曾经犯过的错: 用DRV8833驱动12V电机,结果芯片直接烧了。后来仔细看手册,发现最高电压是10.8V。所以,选芯片前一定要确认供电电压。如果你用3.7V锂电池或者5V供电,DRV8833是很好的选择。

4.5 三款芯片的选型决策树

说了这么多,到底怎么选?我整理了一个简单的决策流程:

  1. 供电电压是多少?
    • 低于10.8V → 考虑DRV8833
    • 10.8V - 13.5V → 选TB6612
    • 高于13.5V → 只能用L298N或外置MOS管
  2. 电机电流多大?
    • 小于1A → 三款都可以,优先TB6612
    • 1A - 1.5A → TB6612或DRV8833
    • 大于1.5A → L298N或外置H桥
  3. 空间限制严不严?
    • 空间大 → L298N模块
    • 空间小 → TB6612或DRV8833贴片封装
  4. 成本敏感吗?
    • 批量采购:TB6612约3-5元,DRV8833约4-6元,L298N约8-12元
    • TB6612性价比最高

我的推荐: 做窗帘电机,12V供电,电流0.5A-1A,用TB6612。这是经过多个项目验证的黄金组合。如果你做的是电池供电的低压窗帘电机(比如5V),那就选DRV8833,它的低内阻能帮你省电。

4.6 电路设计中的避坑指南

最后,分享几个我实际项目中踩过的坑:

  • 电源滤波不能省——电机启动瞬间电流很大,会在电源线上产生毛刺。VM引脚旁边一定要加电解电容,我一般用100μF+0.1μF。
  • 逻辑电源和电机电源要分开——MCU用3.3V,电机用12V,共地但不要共用电源。否则电机一启动,MCU就复位。
  • 输出端加续流二极管——虽然TB6612和DRV8833内部有续流二极管,但外加肖特基二极管(如SS34)能提供更好的保护。
  • PCB走线注意电流——电机驱动线的电流是脉冲式的,走线宽度至少按1A/1mm来算。我习惯用2mm线宽走电机线。
  • 预留测试点——在VM、VCC、GND、电机输出端预留测试点或排针,方便调试时量波形。

嗯,关于驱动芯片,今天就聊这么多。下一章咱们开始画原理图和PCB,把TB6612真正用起来。