机器人电机怎么选:有刷直流、步进、舵机、无刷BLDC 一篇讲透
- 分清有刷直流、步进、舵机、无刷 BLDC 四类电机的原理与控制方式差异
- 按"小车轮 / 机械臂关节 / 精确步数 / 高速大扭矩"四条路径快速锁定电机类型
- 用 ESP32 + L298N/TB6612 跑通一段有刷直流电机的 PWM 调速代码
你想给自己的小车装两个轮子,打开购物网站搜"电机",结果跳出来一堆名词:直流减速电机、42 步进、SG90 舵机、2204 无刷、A4988、TB6612、ESC……每个都说自己适合机器人,但没一个告诉你"你这个场景到底该买哪个"。绕晕了,对吧。
这篇就干一件事:把机器人里最常用的四类电机摆在一张桌子上,讲清楚它们各自擅长什么、怎么控制、多少钱、配什么驱动,最后给你一条能照着走的决策路径——看完直接知道自己该下单哪个。
前置:你需要知道 PWM 是什么(占空比调能量),不熟的话先看 /principle/pwm-principle/。本篇只讲"选型矩阵",单个电机怎么接最小电路在 /guide/l2-motor/ 和 /guide/l2-servo/ 里已经手把手过了,这里不重复。驱动板的型号细节、堵转保护、H 桥原理留给 robot-motor-driver 专门展开。
四类电机,各管一摊
1. 有刷直流电机(Brushed DC)—— 便宜、皮实、轮子专业户
原理一句话:通电就转,电压越高转得越快,换向靠电机内部的碳刷机械接触完成。
怎么控制:给它一个 PWM 信号调占空比就能调速,正反转靠 H 桥驱动板切换两根线的极性。主控(ESP32/Arduino)出的是小信号,真正的大电流由驱动板供给。
优缺点:优点是便宜、控制简单、力矩在低速段就很足;缺点是碳刷会磨损(寿命有限)、换向有电火花(产生电磁干扰)、本身不知道自己转到哪了(开环,没有位置反馈)。
典型场景:四驱小车、履带车的驱动轮、风扇、水泵——凡是"只要转、不要求精确位置"的地方。
价格量级:一个带减速箱的 TT 马达 3-8 元,N20 微型减速电机 10-20 元,37mm 带霍尔编码器的好一点的 30-60 元。
配什么驱动:双路 H 桥,TB6612FNG(约 8-15 元,效率高、发热小,推荐)或 L298N(约 5-10 元,老但便宜、压降大、发热大)。
2. 步进电机(Stepper)—— 不用编码器就能精确定位
原理一句话:内部有一圈线圈,按固定顺序通电,转子就一"步"一"步"地走,常见 1.8°/步(即一圈 200 步)。
怎么控制:你不直接给它供电,而是给"步进驱动器"发脉冲——发一个脉冲走一步,发多少步它就走多少步,方向用一根 DIR 线控制。这叫开环:不需要反馈传感器,只要不丢步,发了多少脉冲就转了多少角度。
优缺点:优点是定位精确、不用编码器就能数着步数走、低速力矩大、停下来能自锁;缺点是力矩随转速升高而明显下降(转太快会"丢步"),高速场景拉胯,而且持续通电发热、待机也耗电。
典型场景:3D 打印机的 XYZ 轴、CNC、传送装置、需要"走 100mm 就准走 100mm"的机械结构。机器人里多用在底盘以外的精密机械部分。
价格量级:常见 42 步进(NEMA17)20-40 元,小一点的 28BYJ-48(5V,带减速)一套带驱动板才 5-10 元(适合入门玩)。
配什么驱动:A4988、DRV8825(约 5-15 元,便宜常见,配散热片)或 TMC2208(约 20-40 元,静音、细分好)。
3. 舵机(Servo)—— 内置闭环,专攻"转到某个角度"
原理一句话:舵机是"有刷电机 + 减速齿轮 + 位置传感器 + 控制电路"打包在一个壳里,你告诉它"转到 90°",它内部自己闭环调整到位并保持。
怎么控制:给一根信号线发 PWM——标准模拟舵机周期 20ms(50Hz),脉宽 0.5ms 对应 0°、1.5ms 对应 90°、2.5ms 对应 180°。给角度,不给转速。注意舵机的供电要单独从电源走,不要从主控的 5V 引脚硬扛,堵转电流能瞬间把主控拉重启。
优缺点:优点是控制极简单(一根信号线给角度)、自带闭环不用你操心定位、便宜;缺点是普通舵机只能转 0-180°(不能连续转,除非买 360° 连续旋转舵机但那个就退化成只能调速了)、力矩有限、塑料齿的廉价款容易打齿。
典型场景:机械臂的各个关节、云台、机器狗的腿、夹爪——凡是"摆到某个角度并保持"的活。
价格量级:SG90(9g 塑料齿)3-6 元,MG90S(金属齿)8-15 元,MG996R(大扭矩 180°)15-30 元,总线舵机(如 SCS/LX 系列,可读回角度)50-150 元。
配什么驱动:单个直接接主控 PWM 引脚即可;多个(比如 6 自由度机械臂)用 PCA9685 这块 16 路 PWM 扩展板统一驱动,细节看 robot-servo-pca9685。
4. 无刷电机 BLDC + 电调 ESC —— 高效、大功率、高端玩家
原理一句话:把有刷电机的碳刷换成电子换向(靠控制器按顺序给三相线圈通电),没有机械磨损,效率和功率密度都更高。
怎么控制:BLDC 不能直接接电池,必须配一个电调(ESC,Electronic Speed Controller)。航模 ESC 通常吃舵机式的 PWM 信号(50-400Hz)来调油门;做平衡车/精密控制则用 FOC 电调(如 SimpleFOC、VESC)能控制力矩和角度。
优缺点:优点是效率高(同样电池跑更久)、功率密度大、寿命长、没有电火花干扰;缺点是贵、必须配电调、控制复杂、低速力矩相对弱(普通航模电调),想要低速大扭矩得上 FOC 那套,门槛和成本都更高。
典型场景:无人机/穿越机、平衡车、电动滑板、高端机器人关节、需要高速或大功率的地方。
价格量级:航模 2204 无刷 20-50 元 + ESC 20-50 元;带 FOC 的云台电机 + 驱动器一套 100-300 元起。
配什么驱动:航模用电调(ESC),精密控制用 FOC 驱动器(SimpleFOC 配 DRV8313、或现成 VESC)。
选型对比表
| 类型 | 控制方式 | 定位能力 | 力矩特性 | 价格量级 | 典型用途 | 配套驱动 |
|---|---|---|---|---|---|---|
| 有刷直流 | PWM 调速 + H 桥换向 | 无(开环,需另加编码器) | 低速力矩足 | 3-60 元 | 小车轮、风扇、泵 | TB6612 / L298N |
| 步进 | 脉冲 + 方向 | 精确(数步数,开环可定位) | 随转速升高骤降 | 5-40 元 | 3D 打印轴、精密机械 | A4988 / DRV8825 / TMC2208 |
| 舵机 | PWM 给角度 | 精确(自带闭环) | 中等、有限 | 3-150 元 | 机械臂关节、云台、夹爪 | 直连 / PCA9685 |
| 无刷 BLDC | ESC(油门)/ FOC(力矩角度) | 需 FOC 才能精确 | 高效大功率、低速看方案 | 数十至数百元 | 无人机、平衡车、高端关节 | ESC / VESC / SimpleFOC |
一句话记忆:轮子用有刷,关节用舵机,要数步用步进,要高速大功率上无刷。
上手:ESP32 给有刷直流电机调速
四类里最该先跑通的是有刷直流——便宜、好接、调速直观。下面这段用 ESP32 的 LEDC(硬件 PWM)配 TB6612 或 L298N 驱动板,让电机从慢到快再到反转循环跑一遍。
引脚以你实物接线为准,下面只是示意。驱动板的 IN1/IN2 决定转向,PWM 引脚(TB6612 的 PWMA / L298N 的 ENA)决定转速。电机电源(VM)和主控电源(5V/3.3V)务必共地,否则信号没有参考、电机乱转或不转。
// ESP32 + TB6612(或L298N) 有刷直流电机调速最小示例
// 接线示意(以实物为准):
// ESP32 GPIO25 -> 驱动板 PWM (TB6612:PWMA / L298N:ENA)
// ESP32 GPIO26 -> 驱动板 IN1 (TB6612:AIN1 / L298N:IN1)
// ESP32 GPIO27 -> 驱动板 IN2 (TB6612:AIN2 / L298N:IN2)
// 驱动板 VM -> 独立电机电源(如7.4V锂电)
// 驱动板 GND <-> ESP32 GND ★必须共地★
// 驱动板 OUT1/OUT2 -> 电机两根线
const int PIN_PWM = 25; // 调速
const int PIN_IN1 = 26; // 转向
const int PIN_IN2 = 27;
const int PWM_CH = 0; // LEDC 通道
const int PWM_FREQ = 1000; // 1kHz, 有刷电机够用
const int PWM_RES = 8; // 8位分辨率 -> 占空比 0~255
void setup() {
pinMode(PIN_IN1, OUTPUT);
pinMode(PIN_IN2, OUTPUT);
// 较新版 arduino-esp32(3.x) 可直接用:
// ledcAttach(PIN_PWM, PWM_FREQ, PWM_RES);
// ledcWrite(PIN_PWM, speed);
// 这里用兼容 2.x 的写法:
ledcSetup(PWM_CH, PWM_FREQ, PWM_RES);
ledcAttachPin(PIN_PWM, PWM_CH);
}
// dir: true=正转 false=反转 speed: 0~255
void drive(bool dir, int speed) {
digitalWrite(PIN_IN1, dir ? HIGH : LOW);
digitalWrite(PIN_IN2, dir ? LOW : HIGH);
ledcWrite(PWM_CH, speed);
}
void loop() {
// 正转:从慢加速到快
for (int s = 60; s <= 255; s += 5) { drive(true, s); delay(40); }
delay(800);
// 停一下
ledcWrite(PWM_CH, 0);
delay(500);
// 反转:满速
drive(false, 200);
delay(1500);
// 停
ledcWrite(PWM_CH, 0);
delay(1000);
}
用经典 Arduino UNO 的同学,把 LEDC 那套换成
analogWrite(PIN_PWM, speed)即可,逻辑一样。
你应该看到什么
烧录后,电机先从一个低速慢慢加速到全速(占空比 60→255),停 0.8 秒;接着停转半秒;然后反方向以约 200/255 的速度连续转 1.5 秒;再停 1 秒,循环。
判断"成功"的标志:转速肉眼可见地随占空比变化,且 IN1/IN2 翻转时电机真的反向了。如果占空比很低(比如 30 以下)电机只是嗡嗡响不转,那是正常的——电机有个最低启动占空比,PWM 太小克服不了静摩擦。
故障排查
| 现象 | 可能原因 | 怎么查 |
|---|---|---|
| 电机完全不转 | 没共地 / PWM 占空比太低 / IN1=IN2(刹车态) | 万用表测 GND 是否真连通;占空比先给到 150 试;确认 IN1、IN2 一高一低 |
| 电机发烫、驱动板发烫 | 长时间堵转 / 电流超驱动板上限 / L298N 本身压降大 | 手别一直按住轮子(堵转电流是正常的好几倍);换 TB6612 或更大电流驱动 |
| 主控反复重启 | 电机和主控共用一路电源,启动/堵转瞬间把电压拉垮 | 电机电源(VM)和主控供电分离,各走各的,只共地 |
| 转速抖动 / 转向偶尔乱 | 接线松动 / PWM 频率太低有啸叫 / 电磁干扰 | 检查杜邦线;PWM_FREQ 提到 1-5kHz;电机两端并一个 0.1µF 陶瓷电容去火花 |
两个变体
变体一:换步进试"精确定位"。 把有刷电机换成 28BYJ-48 步进 + ULN2003 驱动板,写一段"走 200 步停 1 秒、再反走 200 步"的代码——你会直观看到"发多少步就转多少圈",这就是开环精确定位的威力。对比有刷电机"给多大油门转多快但不知道转了几圈",区别一目了然。
变体二:给有刷电机加编码器,为下一篇平衡车铺路。 上面的代码是纯开环,电机实际转速会随负载变化。带霍尔编码器的电机能把"实际转了多少"读回来,配上 PID 就能做闭环调速——这是 robot-self-balance 那种需要精确控制车轮速度的项目的地基。本篇先埋个钩子,知道"有刷 + 编码器 = 可闭环"就够了。
动手挑战
- 把上面的循环改成"用一个电位器(接 ESP32 的 ADC 引脚)实时控制电机转速"——读 ADC 值映射到 0-255 占空比,旋钮一转电机就跟着快慢。
- 接两个有刷电机做差速小车的左右轮,让它"前进 2 秒 → 原地左转 → 前进 2 秒"。两轮怎么配合转向,是 robot-differential-drive 的核心。
- 找一个 SG90 舵机,用 PWM 让它在 0°↔180° 之间来回扫,对比一下"给角度"和"给转速"在控制写法上的不同。
电机三条铁律,每条都能省你一块主控板或一个驱动板:
- 共地:电机驱动板和主控必须共 GND,否则信号没参考,轻则乱转重则烧。
- 供电分离:电机(尤其堵转时)电流是平时的好几倍,绝不能从主控的 5V/3.3V 引脚取电,要单独给驱动板的电机电源(VM)供电。堵转瞬间的大电流会把电压拉垮导致主控重启,甚至烧引脚。
- 别让电机长时间堵转:堵转 = 转子不动但持续大电流,电机和驱动板都会迅速发烫,可能烧毁。调试时手别一直死按住轮子或机械臂。锂电供电的安全注意见 /principle/lithium-safety/。
小结
四类电机其实不难选,记住这条决策路径就行:
- 小车轮子、只要转 → 有刷直流 + TB6612,最便宜最省心
- 机械臂关节、要摆到角度 → 舵机,自带闭环一根线搞定
- 要精确数着步数走 → 步进 + A4988/DRV8825,开环也能准
- 要高速或大功率 → 无刷 BLDC + ESC/FOC,贵但顶得住
你现在能用 ESP32 把一个有刷电机的转速和方向控制起来了。下一步是把"控制电机"这件事做扎实——驱动板到底怎么选、H 桥原理、电流和散热怎么算、怎么保护堵转,这些都在 robot-motor-driver 里专门讲。选好了电机和驱动,再回到 /robot/ 看整台机器人怎么搭起来。
本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。