← 返回文章库

机器人电机怎么选:有刷直流、步进、舵机、无刷BLDC 一篇讲透

最后更新 2026-06-20
⏱ 约 14 分钟 🟡 涉接线/强电
你将学到
  • 分清有刷直流、步进、舵机、无刷 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 那种需要精确控制车轮速度的项目的地基。本篇先埋个钩子,知道"有刷 + 编码器 = 可闭环"就够了。

动手挑战

  1. 把上面的循环改成"用一个电位器(接 ESP32 的 ADC 引脚)实时控制电机转速"——读 ADC 值映射到 0-255 占空比,旋钮一转电机就跟着快慢。
  2. 接两个有刷电机做差速小车的左右轮,让它"前进 2 秒 → 原地左转 → 前进 2 秒"。两轮怎么配合转向,是 robot-differential-drive 的核心。
  3. 找一个 SG90 舵机,用 PWM 让它在 0°↔180° 之间来回扫,对比一下"给角度"和"给转速"在控制写法上的不同。
⚠️ 安全

电机三条铁律,每条都能省你一块主控板或一个驱动板:

  1. 共地:电机驱动板和主控必须共 GND,否则信号没参考,轻则乱转重则烧。
  2. 供电分离:电机(尤其堵转时)电流是平时的好几倍,绝不能从主控的 5V/3.3V 引脚取电,要单独给驱动板的电机电源(VM)供电。堵转瞬间的大电流会把电压拉垮导致主控重启,甚至烧引脚。
  3. 别让电机长时间堵转:堵转 = 转子不动但持续大电流,电机和驱动板都会迅速发烫,可能烧毁。调试时手别一直死按住轮子或机械臂。锂电供电的安全注意见 /principle/lithium-safety/

小结

四类电机其实不难选,记住这条决策路径就行:

  • 小车轮子、只要转 → 有刷直流 + TB6612,最便宜最省心
  • 机械臂关节、要摆到角度 → 舵机,自带闭环一根线搞定
  • 要精确数着步数走 → 步进 + A4988/DRV8825,开环也能准
  • 要高速或大功率 → 无刷 BLDC + ESC/FOC,贵但顶得住

你现在能用 ESP32 把一个有刷电机的转速和方向控制起来了。下一步是把"控制电机"这件事做扎实——驱动板到底怎么选、H 桥原理、电流和散热怎么算、怎么保护堵转,这些都在 robot-motor-driver 里专门讲。选好了电机和驱动,再回到 /robot/ 看整台机器人怎么搭起来。

📄 来源 / 自校链接

本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明