硬件工程实践嵌入式

工程的核心就是 trade-off:从一台 3D 打印机看电机选型

打开一台 Bambu Lab 3D 打印机的顶盖,第一眼看到的是 XY 轴的横梁和皮带。跟着皮带找到末端,是一对外观看起来差不多的方块电机,就是步进电机。官方配件页上直接写着 “two same stepper motors”。再往工具头看,最新设计里挤出机位置开始出现无刷电机,那种转子里嵌着永磁铁、没有任何碳刷的结构。冷却风扇那里最安静,一个小小的有刷电机,给一点电压就开始转。

同一台机器,三种不同的电机。原因不在偷工减料或历史遗留。原因在于这台机器的每一个位置,都在做不同的 trade-off。有刷用寿命换极简控制,步进用速度换开环精度,无刷用控制复杂度换高速高效。这篇文章要讲的就是这件事:每种电机在做什么交换,以及怎么判断你的项目该用哪种。

两条分类轴

我一开始接触这几个词(有刷、无刷、步进),也习惯把它们当成同一条线上的三个档位,好像 “有刷 < 步进 < 无刷”,越贵越好。后来仔细对照结构才发现,这个直觉把两件事混在了一起。这里其实有两条独立的分类轴。

第一条轴是换相怎么做。电机要转,线圈里的电流方向必须随着转子位置不断切换,这叫换相。有刷电机用机械换向器加碳刷来自动完成这件事:转子转到哪里,碳刷就在机械接触点上换个方向,不需要任何外部逻辑。无刷电机没有碳刷,换相由外部的电子控制器来做,控制器要知道转子在哪里,才能决定什么时候给哪个线圈通电。

第二条轴是这个电机被设计来做什么。步进电机设计的目标是离散到位:一个脉冲转一个固定的角度,停在那里,等下一个脉冲。连续旋转电机(有刷连续旋转或 BLDC,即 Brushless DC,无刷直流电机)设计的目标是一直转,转速可以调,但不是为了精确停在某个角度。

这两条轴是独立的,交叉出来就是四种组合:有刷连续旋转(玩具车的那种小电机)、有刷步进(少见)、无刷连续旋转(BLDC,无人机的桨电机就是它)、无刷步进(步进电机)。

等等,步进电机也是无刷的?是的,步进电机没有碳刷,换相由控制器按顺序给线圈通电来做。但步进电机和 BLDC 虽然同属无刷,结构完全不同,行为也完全不同。

拆开一颗步进电机,能看到一件挺有意思的事:转子和定子上都布满了密密麻麻的齿,像两个相互咬合的梳子。控制器按顺序给不同的线圈通电,磁力就把转子的齿咬到下一个稳定位置,然后等待。这是一种主动的离散咬合动作,不是连续旋转。

典型的步进电机每一步转 1.8°,转满一整圈是 200 步。你发多少个脉冲,就知道转了多少步,不需要任何传感器去测量它实际转到哪里了,你发出去的脉冲数就是答案。这省掉了编码器,省掉了需要处理编码器信号的控制算法,省掉了复杂的信号调理,一个两美元的 A4988 驱动板(最常见的步进电机驱动芯片之一)就能驱动一颗步进电机。

停下来之后,磁结构自锁。步进有保持扭矩,不需要控制器持续花力气维持位置。

BLDC 是另一回事。连续旋转磁场拖着永磁转子跟着转,越快越顺(在一定范围内),几千到几万 RPM(每分钟转数)是它的主场。无人机电调(ESC,电子调速器)、电动工具、电动自行车轮毂电机,都是要一直转而且要出大力的场景。

每种电机在做什么交换

把这几种电机放在一起看,就会发现不能只看优缺点表,而是要看:它用什么换了什么

有刷电机用寿命和精度换来了极简的控制。碳刷会磨损、会产生碳粉、在换相时会有电火花和电磁干扰,效率也比无刷低。但代价换来的是:给电压就转,一个 Arduino 加一个 MOSFET(金属氧化物半导体场效应管,这里就是当一个电子开关用)就够了,几乎不需要任何控制逻辑。玩具车、小风扇、电动剃须刀,这些场景对寿命和精度的要求不高,极简控制这个优势就足够了。Bambu 里的冷却风扇也是一样:那个位置只需要吹风,寿命损耗在打印机整体寿命面前几乎不是问题,用最便宜、最简单的有刷电机完全够用。

步进电机用速度和效率换来了开环精确到位、低速大扭矩,以及便宜的驱动方案。发 200 个脉冲就转一圈,不需要反馈,$2 的驱动板就能转,这是步进最大的优势。但代价是:设计是一步一步咬过去,转得太快,磁力来不及咬住下一个位置,转子就直接溜过去了,这叫失步。失步是安静的,控制器不知道,还以为一切正常。高速段的扭矩暴跌,加上特定频率会触发共振和噪音,让步进在高速场景里基本失效。

BLDC 用控制复杂度换来了高速旋转、高效率、长寿命和更高的功率密度。连续磁场旋转不依赖离散咬合,高速下不会失步。但代价是:需要电子换相,需要知道转子位置,通常要配编码器,控制算法要用 FOC(磁场定向控制,一种让电流矢量始终与转子磁场保持最优角度的控制方式),需要 STM32 这类有足够算力的单片机控制器,软件和硬件的复杂度都比有刷和步进高出不止一个层级。

舵机(hobby servo,就是 SG90、MG996R 那种)用灵活性和精度上限换来了即插即用。把一个有刷电机、一套齿轮、一颗电位器(用来测量当前角度)和一块小控制板塞进一个壳子里,对外只暴露一个 PWM 信号接口(脉宽调制,用脉冲宽度编码目标角度),你发信号告诉它转到 90°,它自己闭环转过去,停在那里。遥控车的转向、机械爪、入门机器人,不需要自己处理控制逻辑,给信号就到位。代价是:180° 的活动范围、齿轮磨损带来的精度下降,以及有刷电机本身的寿命问题。

舵机做的事情,抽象上叫闭环位置控制:接收目标角度,实时感知当前角度,驱动电机到达目标。工业伺服做的事情,抽象上也叫闭环位置控制。但内部的实现差了几个数量级:工业伺服里是无刷电机加高精度编码器加 FOC 控制器,就是 BLDC 加上完整的闭环方案打包成一个集成件。精度、速度、寿命、响应速度,全都在另一个量级。

这和为什么无人机里那颗 ARM 芯片不跑 Linux里讲到控制器的逻辑正好对应:从控制器的角度看 BLDC 的电子换相与 FOC,和这里看电机本身的硬件结构,刚好是同一台机器的两面。

Bambu 在做什么交换

步进的开环定位是它最大的优势,但也是它最大的风险。“发 200 个脉冲就转一圈”的前提是:每一步磁力都成功咬住了。一旦失步,控制器不知道,它还在愉快地数脉冲,以为位置是对的。3D 打印机 XY 轴用步进,是因为那个位置的速度不高、步距已知、成本敏感,失步的概率被控制在可接受范围内,而且即便偶尔出问题,后果也只是那一层打歪了,重新开始就好。

但工具头是另一回事。挤出机要精确控制丝料的进退,在高速打印时对响应速度的要求更高;更重要的是,工具头的重量直接影响打印速度(越重越难加速),而步进电机相比 BLDC,同等扭矩下要更重。Bambu 在工具头位置开始换 BLDC 加闭环,是同时解决了两个问题:更轻、且能感知和纠正丢步。

步进本身没变差,变的是这个位置对用速度和效率换开环精度这个 trade-off 越来越不满意了。在中端 3D 打印机里,闭环步进(步进加编码器的混合方案)也越来越常见,是另一种在这条光谱上移动的方式。

回到那台 Bambu

现在再回头看那台机器。XY 轴要精确定位、速度不高、成本敏感,步进的 trade-off 在这里刚好对得上:发脉冲就知道到位了,$2 的驱动板就能转,用速度和效率去换开环精度和低成本,在这个位置是一笔划算的买卖。工具头要轻、要闭环、要在高速下可靠,BLDC 的 trade-off 开始更合适,虽然控制复杂度高,但能用更小的重量出更大的力,还能知道自己有没有失步。冷却风扇只需要吹风,有刷电机最便宜、给电压就转,那个位置没有任何理由用更复杂的方案。

三种电机,三种不同的交换,每种都在它应该在的位置上。

如果下次要为自己的项目选电机,可以问自己三个问题:你要转到位置停住还是一直转?速度高不高?成本和重量哪个更敏感?这三个问题的组合,会把你指向不同的方向。关键在于哪种电机的 trade-off 和你的场景更匹配,而不是哪种电机更先进。

打开一台 Bambu 的顶盖,看到的其实就是这三组交换同时在一台机器里运转:XY 轴的开环精准、工具头的轻量闭环、冷却风扇的极简控制。下次拆开设备或者为自己的项目选电机时,也许你也会问自己那三个问题:不在于哪种电机更先进,而在于那个具体的位置,到底需要用什么去换什么。

鸭哥每日手记

日更的深度AI新闻和分析