4. 驱动芯片入门:常用集成驱动芯片(L298N、TB6612、DRV8833)对比与选型
做扫地机器人,电机驱动芯片是绕不开的坎。我刚开始做项目时,也在这几个芯片之间纠结过。说白了,选对芯片,项目就成功了一半。今天咱们就聊聊市面上最常用的三款驱动芯片:L298N、TB6612 和 DRV8833。
4.1 为什么需要专用驱动芯片?
你可能会问:直接用单片机的IO口驱动电机不行吗?
嗯,这里要注意。单片机的IO口输出电流通常只有几毫安,而直流电机启动瞬间可能吃掉几百毫安甚至几安培。直接驱动的话,单片机分分钟烧给你看。
驱动芯片的作用,说白了就是个「功率放大器」。它接收单片机的小信号,然后输出大电流去驱动电机。同时,它还提供逻辑电平转换、电流保护等功能。
4.2 L298N:经典但笨重的老将
L298N 是我最早接触的驱动芯片。记得十年前做第一个智能小车项目,用的就是它。
| 参数 | L298N |
|---|---|
| 最大输出电流 | 2A(每通道) |
| 工作电压 | 4.5V - 46V |
| 导通电阻 | 约 2Ω(较高) |
| 封装形式 | MultiWatt15(大体积) |
| 逻辑电平 | 5V |
优点:
- 电压范围宽,能驱动大功率电机
- 技术成熟,资料多,新手友好
- 价格便宜,几块钱就能买到
缺点:
- 体积大,不适合紧凑设计
- 发热严重,必须加散热片
- 导通电阻高,效率低
- 有 2V 左右的压降,低压场景不适用
避坑指南: 我曾经用 L298N 驱动 12V 电机,没加散热片,结果芯片温度飙到 90°C 以上。后来不得不重新设计散热方案。如果你要用 L298N,务必预留散热空间。
4.3 TB6612:日系精工的代表
TB6612 是东芝的产品,我是在做一款小型扫地机器人时开始用的。说实话,用过之后就不太想碰 L298N 了。
| 参数 | TB6612 |
|---|---|
| 最大输出电流 | 1.2A(每通道) |
| 工作电压 | 2.7V - 13.5V |
| 导通电阻 | 约 0.5Ω(低) |
| 封装形式 | SSOP24(小体积) |
| 逻辑电平 | 2.7V - 5.5V |
优点:
- 体积小巧,适合空间受限的设计
- 导通电阻低,发热小,效率高
- 支持低电压工作,3.3V 单片机可直接驱动
- 内置待机模式,省电
缺点:
- 最大电流 1.2A,大功率电机带不动
- 价格比 L298N 贵一些
- 引脚间距小,手工焊接需要细心
我的经验: TB6612 非常适合扫地机器人的轮子驱动。我习惯在 PCB 上给它铺铜散热,这样即使长时间运行,温度也控制在 40°C 左右。
4.4 DRV8833:TI 的低压利器
DRV8833 是德州仪器的产品。如果你做的是电池供电的便携设备,这个芯片值得关注。
| 参数 | DRV8833 |
|---|---|
| 最大输出电流 | 1.5A(每通道) |
| 工作电压 | 2.7V - 10.8V |
| 导通电阻 | 约 0.4Ω(极低) |
| 封装形式 | QFN16(超小体积) |
| 逻辑电平 | 1.8V - 7V |
优点:
- 导通电阻极低,效率高,发热小
- 内置过流、过热保护
- 支持 1.8V 逻辑电平,兼容低压 MCU
- QFN 封装,占板面积小
缺点:
- QFN 封装焊接难度大,需要热风枪
- 最大电压 10.8V,不适合 12V 系统
- 价格相对较高
注意: DRV8833 的 QFN 封装底部有散热焊盘,必须焊接到 PCB 上才能正常工作。我曾经见过有人没焊散热焊盘,结果芯片一跑就过热保护。
4.5 三款芯片横向对比
| 对比项 | L298N | TB6612 | DRV8833 |
|---|---|---|---|
| 适用电压 | 4.5V - 46V | 2.7V - 13.5V | 2.7V - 10.8V |
| 最大电流 | 2A | 1.2A | 1.5A |
| 导通电阻 | 2Ω(高) | 0.5Ω(中) | 0.4Ω(低) |
| 封装大小 | 大 | 中 | 小 |
| 焊接难度 | 低 | 中 | 高 |
| 价格 | 低 | 中 | 高 |
| 效率 | 低 | 高 | 高 |
| 保护功能 | 无 | 待机模式 | 过流/过热 |
4.6 选型建议
怎么选?我个人的经验是这样的:
- 做教学演示或大功率项目: 选 L298N。便宜、皮实、好焊接,适合练手。
- 做扫地机器人轮子驱动: 选 TB6612。体积适中,效率高,发热小,非常适合 6V-9V 的电机。
- 做电池供电的便携设备: 选 DRV8833。低压性能好,保护功能全,省电。
核心建议: 对于大多数扫地机器人项目,我个人最推荐 TB6612。它在性能、体积、价格之间取得了很好的平衡。如果你需要驱动更大功率的电机,可以考虑用两个 TB6612 并联,或者直接上 DRV8833。
4.7 实际接线示例
以 TB6612 为例,接一个直流电机是这样的:
// TB6612 接线示例
// 单片机引脚 -> TB6612 引脚
// PB0 -> AIN1 (电机A方向控制1)
// PB1 -> AIN2 (电机A方向控制2)
// PB2 -> PWMA (电机A速度控制)
// PB3 -> BIN1 (电机B方向控制1)
// PB4 -> BIN2 (电机B方向控制2)
// PB5 -> PWMB (电机B速度控制)
// VCC -> 5V (逻辑电源)
// VM -> 电机电源 (6V-12V)
// GND -> 共地
// 初始化代码
void motor_init() {
// 设置引脚为输出
DDRB |= (1 << PB0) | (1 << PB1) | (1 << PB2);
// 初始状态:停止
PORTB &= ~((1 << PB0) | (1 << PB1));
// PWM 初始为 0
OCR0A = 0;
}
// 设置电机速度 (0-255)
void motor_set_speed(uint8_t speed) {
OCR0A = speed; // 设置 PWM 占空比
}
// 设置电机方向
void motor_set_direction(uint8_t dir) {
if (dir == FORWARD) {
PORTB |= (1 << PB0);
PORTB &= ~(1 << PB1);
} else if (dir == BACKWARD) {
PORTB &= ~(1 << PB0);
PORTB |= (1 << PB1);
} else {
// 刹车
PORTB |= (1 << PB0) | (1 << PB1);
}
}
小技巧: 实际项目中,我习惯在电机电源引脚旁边加一个 100μF 的电解电容。这能有效抑制电机启动时产生的电压尖峰,保护驱动芯片。
好了,关于这三款驱动芯片的对比就聊到这里。下一章咱们会深入讲 PWM 控制的具体实现,包括频率选择、占空比计算这些实战内容。到时候见!