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 三款芯片的选型决策树
说了这么多,到底怎么选?我整理了一个简单的决策流程:
- 供电电压是多少?
- 低于10.8V → 考虑DRV8833
- 10.8V - 13.5V → 选TB6612
- 高于13.5V → 只能用L298N或外置MOS管
- 电机电流多大?
- 小于1A → 三款都可以,优先TB6612
- 1A - 1.5A → TB6612或DRV8833
- 大于1.5A → L298N或外置H桥
- 空间限制严不严?
- 空间大 → L298N模块
- 空间小 → TB6612或DRV8833贴片封装
- 成本敏感吗?
- 批量采购: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真正用起来。