资讯详情

4相5线步进电机驱动全解析:从线序识别到ULN2003实战

📅 2026/10/7 19:07:02 | 华诺云谱 👁 阅读
4相5线步进电机驱动全解析:从线序识别到ULN2003实战
很多玩步进电机的人第一次接触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打印机、CNC1.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相通电绕组11100AB20110BC30011CD41001DA2.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 // 双相励磁步序表AB - BC - CD - DA 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电路写几行步序代码让它转起来。这个过程比看十篇原理文章都有用。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑