很多玩步进电机的人第一次接触4相5线,都是在拆旧打印机、扫描仪或者老式空调风门的时候。排线拆下来一看,五根线,红蓝黄白黑,颜色倒是齐整,可是翻遍Datasheet都找不到对应型号,上网搜也众说纷纭。有人说是两相电机,有人说是四相电机,有人说能接A4988,有人说只能接ULN2003,越看越乱。
我最早也被这个5线弄迷糊过。后来把电机拆开、把线圈引脚一个个量过,又在示波器上看了好几轮波形,才算彻底搞清楚它和常见2相4线电机、4相6线电机的本质区别。这篇文章就把我对4相5线步进电机的理解从头捋一遍,从内部结构讲到驱动时序,再给出可以直接抄的驱动电路和代码,最后把我踩过的坑一并列出来,希望能帮你少走点弯路。
1. 4相5线步进电机到底是个什么东西
1.1 名字里的“相”和“线”分别指什么
先说“相”。步进电机里的“相”指的不是三相交流电那种“相位”,而是指电机内部独立的绕组组数。你把电机拆开,能看到定子上绕了很多线圈,这些线圈被分成几组,每一组就是一个“相”。4相5线电机有四组独立绕组,分别是A、B、C、D相。为了让转子转起来,控制器要按一定顺序给这四组绕组轮流通电。
再说“线”。电机引出来的线一共是5根,其中4根是四相绕组的引出端,剩下1根是公共端。公共端的意思是四组绕组的一端在电机内部被接到了一起,共用一根线引出来。所以4相5线电机本质上是把4组绕组做成了一端共用、另一端各自引出的结构。
这种结构你拿万用表一量就很直观:公共端到任意一根相线,电阻都是一样的。而任意两根相线之间,电阻是公共端到相线电阻的两倍。比如公共端到相线量出来是25欧,那相线到相线就是50欧。这一点是判断电机线序的最重要依据,后面实操部分我会细讲。
1.2 4相5线、4相6线、2相4线的区别
很多资料会把4相5线和4相6线混为一谈,接线方式也容易搞混,但其实它们内部结构有明显差异。
4相6线电机是四组绕组各自独立引出,两头都出线,一组绕组两根线,4组一共8根线,但为了适配不同接法,厂家会把某些线在内部短接,最后引出6根线。这种电机既可以接成公共端共阳,也可以接成公共端共阴,灵活性大。
2相4线电机则完全是另一回事。它的定子上其实有8个绕组,但每两个绕组串联成一组,形成A+、A-、B+、B-四根线,本质上是两组带中心抽头结构的绕组被内部合并成了两相。这种电机可以用双H桥驱动,也可以用A4988这类专用芯片。
4相5线电机从驱动角度看更接近“单极性”电机,因为它的公共端在驱动时要么接电源正极、要么接电源负极,四根相线轮流被拉低或拉高。它不能用传统的双H桥两相驱动芯片直接驱动,原因后面我在电路章节详细说。
三者对比我放在下面的表里,方便你一眼看清楚:
| 类型 | 引出线数 | 内部绕组 | 典型驱动方式 | 常见场合 |
|---|---|---|---|---|
| 4相5线 | 5根(1公共端+4相线) | 4组独立绕组,一端共用 | ULN2003等单极性驱动 | 打印机、扫描仪、空调风门 |
| 4相6线 | 6根(2组公共端,或公共端+多抽头) | 4组绕组,但引出方式更灵活 | 单极性或双极性均可 | 老式软驱、工业设备 |
| 2相4线 | 4根(A+、A-、B+、B-) | 2组带中心抽头绕组 | A4988、DRV8825等双H桥 | 3D打印机、CNC |
1.3 它为什么到现在还没被淘汰
你可能想问,既然2相4线电机用A4988驱动又方便又静音,4相5线这种老结构为什么还存在?
原因有几个。第一,4相5线电机的驱动电路极其简单。ULN2003这种芯片一片只要几毛钱,加上一个单片机就能转,不需要专门的步进驱动芯片,成本低到不可思议。第二,4相5线电机的定位扭矩在某些场景下比2相电机更稳定,特别是低速大扭矩场合。第三,大量存量设备还在使用这种电机,比如楼道里的风机盘管电动阀、老式仪表、办公设备,维护替换需求一直存在。
所以不是它多先进,而是它在低成本、低要求的场景里太合适了。理解它的驱动原理,对理解其他类型的步进电机也有帮助,因为步序和磁场切换的基本逻辑是通用的。
2. 4相5线步进电机的驱动原理细节
2.1 转子为什么能转起来:磁场切换的接力游戏
步进电机的转动原理,说穿了就是“磁场追着跑”。定子上的四相绕组,你按顺序给它们通电,就会在定子周围形成一组不断旋转的磁场;转子上是永磁体或带齿的铁心,它有一个固定的磁极方向,会本能地转向磁场最强的位置。你每切换一次通电状态,转子就往一个方向走一小步,把所有步走完,转子就转满一整圈。
4相5线电机的定子结构是四组绕组均匀分布在圆周上。如果你只给A相通电,转子会被吸到A相磁场方向;然后你断开A相、给B相通电,磁场方向偏了90度,转子也跟着偏90度;再切换C相、D相,转子就一步一步地转了整整一圈,走完一圈需要4步。
这里的“步”就是你常听到的“步距角”。但4相5线电机的步距角不一定就是90度,因为转子可能有很多个齿。转子齿数越多,每一步对应的机械角度就越小。常见的小型4相5线电机步距角是7.5度或者15度,也就是说转子有24个齿或12个齿。这个参数和定子绕组的通电方式一起决定了最终精度。
2.2 三种通电方式:单相励磁、双相励磁和半步驱动
4相5线电机有四相绕组,你可以有不同的通电组合。最基础的是单相励磁:依次只给一个相通电,时序是A→B→C→D→A。这种方式的优点是省电、发热小,但缺点是扭矩波动大,因为每次只有一个绕组产生磁场,转子在两步之间的位置不稳定,容易振动和丢步。
第二种是双相励磁:每次给两个相邻相绕组同时通电,时序是AB→BC→CD→DA→AB。两个绕组同时产生磁场,合成磁场方向正好在两者之间,转子会停在一个更中间的位置。这种方式扭矩大、平稳性好,是绝大多数应用的首选。
第三种是1-2相励磁,也叫半步驱动:把单相和双相交替使用,时序是A→AB→B→BC→C→CD→D→DA→A。一个周期里有8个状态,所以同样的电机,每圈走的步数翻了一倍,相当于把分辨率提高了一倍。虽然扭矩会有一些波动,但很多需要精细定位的场合会优先用半步模式。
下面是4相5线电机双相励磁的完整步序表,公共端接电源正极、相线拉低时为“通电”:
| 步骤 | A相 | B相 | C相 | D相 | 通电绕组 |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 0 | 0 | A+B |
| 2 | 0 | 1 | 1 | 0 | B+C |
| 3 | 0 | 0 | 1 | 1 | C+D |
| 4 | 1 | 0 | 0 | 1 | D+A |
2.3 公共端的作用:为什么5根线能省掉“反向”
要理解公共端,先要理解电流走向。在4相5线电机里,电流从公共端流入,从某一相线流出,就能在该相绕组里形成方向确定的磁场。所以要反转磁场方向,不需要把电流反向,只需要换一根相线通电就行。
这就是“单极性”的含义:驱动电流永远是一个方向,从公共端到相线。相比2相4线电机必须让电流正反交替流动(双极性),4相5线的驱动电路简单很多,不需要H桥来翻转电流方向,只需要一根线拉低或拉高就能控制一相的通断。
但代价是:单极性驱动的绕组利用率低。因为任何时候只有一部分绕组在工作,而双极性驱动可以让一相绕组在正反两个方向都出力。所以同样体积下,4相5线电机的扭矩通常不如2相4线电机。这也是后来2相4线电机在3D打印机、CNC领域大规模普及的原因之一。
3. 硬件驱动方案:用ULN2003还是专用步进芯片
3.1 ULN2003方案:最经典也最省心的组合
ULN2003是一颗达林顿晶体管阵列芯片,内部有7路达林顿管,每一路能承受500mA左右的电流和50V的耐压,驱动小型步进电机绰绰有余。它内部还自带续流二极管,这个很重要,因为步进电机的线圈是感性负载,断电瞬间会产生反向电动势,没有续流二极管会打坏驱动管。
用ULN2003驱动4相5线电机的接法非常简单:公共端接电源正极,四根相线分别接ULN2003的四路输入端对应的输出端,单片机的IO口分别控制ULN2003的四个输入引脚。给哪个引脚输出高电平,对应那一路的输出就导通,相线被拉低到地,该相通电,转子就转一步。
有一个细节很多人不知道:ULN2003的输入是高电平有效,但它本质上是反相器,输入高电平、输出低电平。所以你单片机上的“通电”逻辑值,经过ULN2003之后恰恰是“该相线被拉低”的动作。这不会影响你写代码,只要记住步序表里写的是“哪一相通电”,而代码里给那个相线对应的引脚写1就行。
市面上那些蓝色的“步进电机驱动板”,核心就是一颗ULN2003,板上已经预留了电源端子和信号端子,买回来直接插杜邦线就能用,非常适合入门。
3.2 为什么5线电机不能直接接A4988或DRV8825
这是个非常常见的坑。很多人手里有3D打印机的A4988驱动板,看到4相5线电机第一反应是想接上去试试。但A4988、DRV8825这类芯片是专门为2相双极性电机设计的,它们的内部拓扑是双H桥,只有A+、A-、B+、B-四个驱动端,每一个端口都必须能输出正电压和负电压(通过H桥翻转方向)才能让电流反向。
4相5线电机虽然也可以把四组绕组两两串并联,凑成“看起来像”两相的结构,但因为它只有一个公共端,公共端要么固定接电源正、要么固定接地,导致每一相绕组的电流方向永远是固定的。你强行把它接到A4988上,相当于给单极性电机灌双极性驱动信号,轻则转不动、重则烧驱动板或者电机。
所以4相5线电机的驱动方案,老老实实走ULN2003或者分立三极管阵列,别想着找专用芯片替代。A4988再便宜,在这条路上帮不上忙。如果你实在想用专用芯片,得用针对单极性步进电机设计的驱动芯片,比如老的PBL3717、SLA7024之类,但这些芯片现在又贵又不好买,完全没有必要。
3.3 电源电压和限流电阻怎么选
4相5线电机都是小电流器件,但不同型号的额定电压和额定电流差异很大。以常见的二手打印机步进电机为例,额定电压常常是5V到12V,每相电流在200mA到400mA之间。你拿万用表量一下公共端到相线的电阻,用欧姆定律就能估算额定电流:I = U / R,其中U是额定电压、R是绕组电阻。
ULN2003本身没有限流功能,所以要么电源电压不要超过电机额定电压,要么串联限流电阻。很多便宜驱动板上预留了限流电阻的焊盘位置,就是因为这个原因。我自己的习惯是:电机额定5V就用5V电源,12V电机就用12V电源,不强行超压,省心也不会烧。
如果你手里的电源电压比电机额定电压高,比如只有12V电源、电机是5V的,那就必须串限流电阻。限流电阻的阻值可以用这个公式算:R限流 = (电源电压 - 电机额定电压) / 额定电流。比如12V电源、5V电机、0.4A额定电流,R = (12 - 5) / 0.4 = 17.5欧,功率要选 I²R = 0.4² × 17.5 ≈ 2.8W,至少选5W的电阻。
注意:限流电阻的功率一定不能按常规1/4W选,必须按实际功耗选大功率电阻,不然通电几分钟电阻就冒烟了。
4. 从零到一转:一个完整的驱动实践
4.1 第一步:万用表识别5根线的公共端和相线
拿到一个没有Datasheet的电机,第一件事是分辨哪根是公共端、哪四根是相线。拿起万用表打到电阻档,任意选两根线测量。如果某根线到其他四根线的阻值都相等,那这根就是公共端;剩下的四根就是A、B、C、D相线。
具体操作时,我习惯把万用表的表笔一端夹住一根线,用另一根表笔依次碰另外四根线。如果四次测量的阻值完全一样,那这根被夹住的线就是公共端。确认公共端之后,再记录公共端到每一根相线的阻值,方便后面判断电机额定电压。
那四根相线之间怎么区分A、B、C、D呢?用万用表是分不出来的,因为它们在电气上完全对称。这和2相4线电机不一样——2相4线的A+和A-之间是通的,B+和B-之间是通的,A组和B组之间不通,你可以测量阻值来分组。但4相5线电机的四根相线到公共端阻值都一样,彼此独立,从电气上无法排序。
这就意味着:代码里的“A、B、C、D”只是你自定义的编号,实际接线的顺序决定了转向。如果接完线电机反转了,你不需要改代码,只需要把任意两根相线对调就能反转。这一点在调试时特别管用,记住它。
4.2 第二步:搭建最小驱动电路
建议从一块ULN2003驱动板加一个Arduino(或者STM32、ESP32,都一样)开始。接线顺序别搞反:
- ULN2003板的电源正极接电机公共端(通常板上已经连好了,你只要把电机的公共端接到板子的供电端子上)。
- 电机四根相线分别接到驱动板的OUT1到OUT4端子。
- 驱动板的IN1到IN4接单片机四个GPIO。
- 驱动板的电源输入接你的外置电源,GND和单片机共地。
这里有个关键点:驱动板的逻辑电源和电机电源虽然很多板子是共用的,但你最好确认一下。如果驱动板没有独立的逻辑电源引脚,那就用一个电源给板和电机一起供电,单片机通过共地来控制。如果驱动板有VCC和VLOGIC分开的引脚,逻辑电源接3.3V或5V,电机电源按电机额定电压接。
接线时还要注意电机的公共端极性。4相5线电机公共端是接电源正极还是电源负极,要看绕组方向。大多数通用电机的公共端接正极,相线被拉低时通电;但也有少数电机是公共端接负极、相线被拉高时通电。如果你按公共端接正的方法接完,电机不转或者振动,就把电源极性反过来试一下。
提示:千万不要在通电状态下反接电源极性,容易烧驱动芯片。断电、换线、再上电,这是基本的调试纪律。
4.3 第三步:写驱动代码,让电机转起来
以Arduino为例,4相5线电机双相励磁转起来的代码非常短。你只需要定义一个数组,数组里存好步序状态,然后按顺序输出到GPIO就行。
// 4相5线步进电机 - 双相励磁(半步在注释中给出另一组数组) // 假设电机公共端接正极,相线接 ULN2003 输出,IN1~IN4 接 Arduino D8~D11 #define IN1 8 #define IN2 9 #define IN3 10 #define IN4 11 // 双相励磁步序表:A+B -> B+C -> C+D -> D+A bool stepTable[4][4] = { {1, 1, 0, 0}, // 步骤1 {0, 1, 1, 0}, // 步骤2 {0, 0, 1, 1}, // 步骤3 {1, 0, 0, 1} // 步骤4 }; // 如果要半步驱动,把上面的表替换成下面8个状态: // {1,0,0,0}, {1,1,0,0}, {0,1,0,0}, {0,1,1,0}, // {0,0,1,0}, {0,0,1,1}, {0,0,0,1}, {1,0,0,1} int stepIndex = 0; int delayTime = 3000; // 微秒,速度越快值越小 void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); } void setStep(int s) { digitalWrite(IN1, stepTable[s][0]); digitalWrite(IN2, stepTable[s][1]); digitalWrite(IN3, stepTable[s][2]); digitalWrite(IN4, stepTable[s][3]); } void loop() { setStep(stepIndex); delayMicroseconds(delayTime); stepIndex = (stepIndex + 1) % 4; // 4步一个周期,半步改% 8 }这个代码的核心逻辑就是“按表输出”。每一步改变四个引脚的电平状态,然后延时一小段时间,再进入下一步。循环起来,电机就匀速旋转了。
如果你想反转,把stepIndex的递增改成递减就行。想控制圈数,就定义一个步数计数变量,走到目标步数后停止输出。想控制速度,就调整delayTime。但要注意,delayTime不能太小,否则电机跟不上脉冲的速度会丢步,这个后面在问题章节详细讲。
4.4 第四步:用示波器验证驱动波形
如果你手头有示波器,把探头接到任一相线上,你会看到一个近似方波的脉冲串。A、B、C、D四根相线的波形依次错开,每个波形占空比是50%,且相邻两相波形有重叠部分——那个重叠区就是双相励磁时两个绕组同时通电的时间。
这一步验证特别重要,它能帮你确认三件事:第一,单片机输出的步序对不对;第二,ULN2003有没有正常开关;第三,电机是否因为机械负载过大而出现波形异常(负载过大时,反电动势会把波形扭曲得很明显)。
没有示波器也没关系,用一个LED接在相线上,也能看到LED逐个点亮的顺序。虽然不如示波器精确,但对于验证逻辑已经足够。
5. 调试中一定会遇到的那些坑
5.1 电机不转,只嗡嗡响或者抖动
这是最常见的故障,罪魁祸首几乎永远是线序不对。四根相线的顺序接错了,导致磁场切换的顺序混乱,转子不知道该往哪走,就在原地颤。
排查方法是:把电机四根相线从驱动板上拆下来,先只接任意一根相线通电,转子会被吸到一个固定位置;然后断开这根,换另一根通电,如果转子的位置发生了明显的角度变化,说明这两根线在电气上是相邻的相。依次试完四根线,你能确认正确的相序,再按这个顺序重新接回驱动板。
另一个可能是公共端接反了。前面说过,公共端的极性要匹配驱动方式,接反的话电机也会抖动不转。这时候把电源正负极对调试一下,注意先断电再操作。
5.2 电机能转但转着转着突然停住或者反向颤一下
这种现象通常是驱动电流不够,或者电源带载能力不足。ULN2003虽然便宜,但它的导通压降不小,如果电源电压刚好等于电机额定电压,实际加到电机上的电压可能比额定低不少,扭矩不足就会丢步。
处理办法是先检查电源。用万用表在电机旋转时测量电源电压,如果电压掉得很厉害,说明电源功率不够,换一个电流更大的电源。如果电源没问题,再检查驱动板上的续流二极管是否接对,或者换一块驱动板试试。
5.3 电机发热特别严重
步进电机工作时发热是正常的,但“烫手”就不正常了。最常见的原因是电机静止时仍然有绕组持续通电,这个叫“保持电流”。如果你不需要电机在静止时保持位置,那么在代码里加一个逻辑:电机停止后,把所有输出置0,让绕组断电。
另一个原因是驱动电压太高。有些教程为了让电机跑得快,会建议提高电源电压,但4相5线电机没有斩波限流机制,电压高了电流就大,发热自然严重。遵循电机额定电压来供电,别盲目超压。
5.4 高速时扭矩下降,甚至完全丢步
这是所有步进电机的通病,不是4相5线特有的。步进电机的扭矩会随着转速上升而下降,因为绕组电感会限制电流上升速率,转速越高,每相通电时间越短,电流来不及建立到额定值,扭矩就不够。
解决思路有两个。一个是软件上做加减速曲线:启动时频率低一点,让电机逐步加速到目标速度,而不是一上来就高频脉冲。另一个是硬件上提高电源电压,同时加限流电路(或者用带限流的驱动方案),让电流更快建立。但在ULN2003这种简单方案里,通常只能靠软件加减速来缓解。
我常用的一个简单加减速伪代码思路是:设定一个目标速度,每走一步,如果当前速度低于目标速度就逐步缩短延时,直到达到目标;如果当前速度高于目标就逐步增大延时。这样电机在启动和停止阶段都处于低速高扭矩状态,高速丢步的概率会小很多。
6. 一个容易忽视的问题:半步驱动真的靠谱吗
在4相5线电机上做半步驱动,很多人会想当然,以为和2相电机的细分一样,都是提高精度。实际上4相5线电机用1-2相励磁做出来的“半”步,精度提升效果和2相电机的16细分完全不是一回事,因为它改变的是磁场方向的跳变程度,而不是电流大小的连续渐变。
2相电机的细分驱动是通过PWM控制绕组电流大小,让合成磁场方向连续变化,所以转子位置可以停在任意中间角度。4相5线用ULN2003做的半步,只是让转子停在“单相通电位置”和“双相通电位置”的中间,位置点仍然是离散的。虽然每圈步数翻倍,但位置精度和稳定性都不如真正的细分驱动。
但这不代表半步没价值。在需要低速平稳运行的场合,比如云台、仪表指针,半步能明显改善振动和噪音。如果你的应用是高速旋转,半步的意义就不大,直接用双相励磁就够了。
经验分享:同样的电机,用双相励磁时振动很大,切到半步驱动后,噪音低了、轴也稳了,但扭矩略有下降。设计时要根据具体场景取舍,不能只看“步数越多越好”。
7. 再聊聊4相5线电机和其他电机驱动的区别
很多人入门步进电机是从28BYJ-48开始的,那颗电机就是4相5线,配一个ULN2003驱动板,几十块钱一套,是学习步进原理的经典教具。但28BYJ-48和打印机拆机电机有个不同点:它内部带减速齿轮,输出轴转一圈,电机本体要转几十圈,所以转速特别慢但扭矩很大。
如果你用28BYJ-48学完原理,想换更快的电机,拆机打印机电机就是下一站。它们的绕组电阻更小、电流更大、转速上限更高,但也意味着驱动电路的要求更高。ULN2003驱动28BYJ-48没问题,驱动大电流打印机电机就可能发热、丢步,这时候得考虑用分立MOS管做驱动,或者换其他类型的电机。
判断驱动能力是否足够,最直接的办法是实测电机相线电流。拿万用表电流档串进公共端和电源之间,看工作电流是否超过ULN2003单路的500mA。超过的话,把两路并联起来给一相通电,也能分担电流,但治标不治本,更推荐换驱动方案。
写在最后
从一个4相5线电机拆出来五根线,到把它搞转,再到现在能写清楚驱动原理,我最大的体会是:步进电机这东西,看着简单,但把电压、电流、磁场、时序这些概念串起来,每一步都有值得琢磨的地方。4相5线这条技术路线虽然“老”,但它恰好把步进电机最核心的驱动逻辑——按顺序切换磁场——讲得明明白白。你搞懂了它,再看2相4线电机的细分驱动、闭环控制,会发现底层思路完全一致,只是换了个更精细的实现手段。
如果你手头刚好有一颗吃灰的4相5线电机,别急着扔,拿万用表量一量线序,搭一个ULN2003电路,写几行步序代码,让它转起来。这个过程比看十篇原理文章都有用。