双极性四线步进电机:整步、半步与微步细分驱动选型

发布时间:2026/10/29 18:38:28
双极性四线步进电机:整步、半步与微步细分驱动选型 简介面向步进电机控制初学者与嵌入式开发者的技术文档聚焦双极性四线步进电机的驱动时序与精度提升问题。内容从单4拍、双4拍整步及8拍半步的通电顺序展开给出线圈激励表与正反转控制思路并进一步说明1/4、1/8、1/16乃至1/256微步的细分原理、步距角换算及专用驱动芯片DRV8889A-Q1的SPI配置方式兼顾基础概念与工程实现。资源包仅含1个docx文件约1.25MB便于集中阅读和查阅时序表。已有1020人学习适合希望理解整步、半步与细分驱动差异并为自动化设备、精密定位系统选型的读者参考可从中获得时序设计、电流控制与芯片方案的基础框架。1. 一颗 1.8° 的电机为什么能走出 0.18° 的步子双极性四线步进电机的控制看上去是所有电机里最不需要动脑的一类四根线单片机四个 IO 出高低电平按顺序轮流拉高电机就转。真上手经常翻车——线圈明明导通了电机只在原地抖手拨一下才肯动。问题多半不在代码而在对“四拍、八拍、细分微步”这三种时序到底在做什么的理解上。整步给的是方波半步给的是方波与两相合成的中间态微步给的是正弦化的相电流三者其实是同一条空间磁场矢量在不同采样密度下的离散化。搞懂这条线才能明白为什么基本步距角 1.8° 的电机 200 个脉冲转一圈10 细分后要发 2000 个脉冲才转一圈也才能判断手上的项目该用 ULN2003 凑合还是必须换 DRV8889A-Q1 这类专门的微步驱动芯片。2. 双极性四线四根线里到底藏着几个绕组2.1 四根线的真实含义两个绕组、八个开关管把双极性四线步进电机的外壳拆开定子上只有两个独立的线圈习惯叫 A 相和 B 相。每个线圈有两个引出端A / A- 是一个线圈的两头B / B- 是另一个线圈的两头四根线就是这么来的。转子是永磁体带若干对齿。给 A 相通电定子产生一个沿 A 轴方向的磁场转子齿被吸到与它对齐的位置换成 B 相通电磁场转 90° 电气角转子跟着转过去。这就是最朴素的驱动逻辑。关键在于“双极性”三个字。单极性电机的每个线圈有中心抽头五线或六线线圈两端轮流接地、公共端固定接电源电流方向永远是同一头进另一头出。双极性电机没有抽头想让磁场反向必须把线圈两端的电压极性对调电流真的要倒着流。这意味着每个线圈前面得挂一个 H 桥两个线圈就是两个 H 桥、八个开关管。ULN2003 那种达林顿阵列是开漏输出只能把输出拉低吸电流天然做不了高边推电流所以它单独构不成一个完整的 H 桥。代价换来的是效率。同样体积的线圈单极性每次只有一半绕组在做功另一半空着双极性是整段绕组全程参与同电流下磁场强度更高转矩大约能到单极性的 1.4 倍上下。这是双极性四线在精密定位场合更常见的原因之一。H 桥的四个开关不是随便开合的它有三种有效状态。正向导通时对角两个管子开线圈两端加满电压电流快速上升反向导通时另一对对角管开电流反向续流时下管全开线圈两端被短接电流经体二极管或同步整流管缓慢衰减。第三种状态常被忽略但它决定了关断时电流下降有多快也就决定了高速时还剩下多少力矩。2.2 为什么 ULN2003 只能算“能转”的下限方案很多简易驱动板用 ULN2003 配一个小步进电机接法是把电机公共端接电源正极四相分别接到 ULN2003 的四个输出芯片内部达林顿管导通时把对应相拉低电流从电源经线圈流入芯片到地。这种接法只对五线单极性电机成立。把双极性四线电机硬套到这个接法上常见的做法是把 A 和 B 接到电源正极A- 和 B- 分别接两个 ULN2003 通道靠拉低 A- 或 B- 来形成回路。这样一来A 相和 B 相各自只有一个方向能被驱动另一个方向靠断电后的自由续流。电机确实能转但每次换相都有一相处于“没劲”的状态转矩只有额定值的一半左右低速时抖动明显高速时直接丢步。真正的双极性驱动需要一个完整 H 桥。分立方案用四颗 MOS 或三极管搭集成方案用 L293D、L298N 这类双 H 桥芯片一个芯片驱动两个线圈正好。选型时看的不是“能不能转”而是三件事导通电阻够不够小决定发热和实际加到线圈上的电压、有没有死区控制防止上下管直通炸管、支不支持 PWM 斩波决定能不能做电流闭环。这三条决定了后面能不能平滑过渡到微步。2.3 电感与续流高速丢步的物理根源线圈是电感电感里的电流不能突变。给 A 相加满电压电流按指数规律往上爬时间常数 τ L / R典型小步进电机的相电感在几毫亨到几十毫亨相电阻几欧τ 落在毫秒量级。也就是说一个脉冲如果只给几百微秒电流根本爬不到额定值磁场没建立起来转子就没被真正抓住。低速时这不是问题每个脉冲给足时间电流总能到位。速度一上去脉冲宽度被压缩电流还没升到额定值就该换相了平均转矩随频率升高而快速下降。这就是步进电机“空载能跑到很高带载一加就失步”的根本原因不是驱动器不行是物理上的时间常数摆在那儿。工程上的解法有两条。一条是提高驱动电压用几十伏去冲几伏的线圈让电流上升更陡靠 PWM 斩波把平均电流限制在额定值这就是常说的“高压驱动、电流斩波”。另一条是在换相时选择合适的衰减模式快衰减让电流迅速归零慢衰减让电流平缓过渡不同速度段用不同模式才能兼顾高速力矩和低速平稳。后面要讲的专用微步驱动芯片核心工作之一就是把这两件事在芯片内部做掉。3. 整步与半步时序表背后是磁场在转圈3.1 单4拍一相一相地点亮单 4 拍是最容易理解的时序任何时刻只有一相导通四拍走完一个电气周期。用 A、A-、B、B- 四路来表示就是下面这张表。拍号1234A1000A-0100B0010B-0001对应的合成磁场方向依次是 A 轴正向、A 轴反向、B 轴正向、B 轴反向每拍之间转 90° 电气角。两相电机的一个电气周期对应 4 个整步机械角上就是 4 × 1.8° 7.2°走完 50 个电气周期正好 360°。单 4 拍的优点是逻辑最简单一个数组轮询就行缺点是同一时刻只有一相在出力转矩只有双相励磁的一半而且每拍切换时磁场是“跳”过去的转子要经历一次明显的冲击低速共振特别明显。用手摸着电机壳跑单 4 拍能明显感觉到一下一下的顿挫。3.2 双4拍两相合成转矩上去了角度没变双 4 拍让相邻两相同时导通合成磁场落在两个轴的中间偏一点的位置转矩接近单 4 拍的两倍。拍号1234A1100A-0011B1001B-0110按拍号读一遍第 1 拍 A 与 B 同时通合成矢量指向 A、B 之间第 2 拍 A 与 B- 通矢量转到另一侧第 3 拍 A- 与 B- 通第 4 拍 A- 与 B 通。四拍的合成矢量依次旋转 90° 电气角电机转动方向就是 (A)—(B)—(A-)—(B-) 这个循环。注意一个容易混淆的点双 4 拍的“双”指的是同时两相通电不是步距角减半。它一个电气周期还是 4 拍每拍还是 1.8°只是每拍的力矩更足、磁场过渡更连续。很多人第一次看到双 4 拍表会以为它比单 4 拍精细一倍实际并没有。把这两种时序写成代码最直观的形式是一张相位表加一个索引#include stdint.h /* 相位位定义bit0~bit3 依次对应 A、A-、B、B- */ #define PH_A_P (1u 0) #define PH_A_N (1u 1) #define PH_B_P (1u 2) #define PH_B_N (1u 3) /* 单4拍任一时刻只激励一相一个电气周期 4 拍 */ static const uint8_t seq_single_4[4] { PH_A_P, PH_A_N, PH_B_P, PH_B_N }; /* 双4拍相邻两相同时激励一个电气周期仍是 4 拍步距角不变 */ static const uint8_t seq_double_4[4] { PH_A_P | PH_B_P, PH_A_P | PH_B_N, PH_A_N | PH_B_N, PH_A_N | PH_B_P }; /* 8拍半步单相拍与双相拍交替一个电气周期 8 拍步距角减半 */ static const uint8_t seq_half_8[8] { PH_A_P, PH_A_P | PH_B_P, PH_B_P, PH_B_P | PH_A_N, PH_A_N, PH_A_N | PH_B_N, PH_B_N, PH_B_N | PH_A_P }; /* 通用的相位推进函数dir 为 1 正转、0 反转step 为当前拍号 */ void motor_step(const uint8_t *seq, uint8_t len, uint8_t *step, uint8_t dir) { if (dir) { *step (*step 1) % len; /* 正转拍号递增 */ } else { *step (*step len - 1) % len; /* 反转拍号递减等价于时序倒放 */ } /* 这里把 seq[*step] 展开写到 H 桥的四个栅极实际工程中还要插入死区 */ }这段代码里最关键的不是循环而是seq数组的设计方式——用位或把“同一拍里哪几相同时导通”编码成一个字节比写四个 if 干净得多反转时也不用另写一张表把索引往回退一格就是倒序时序。真正落地时motor_step之后还要加一段死区延时先关断再开通否则 H 桥上下管会短暂直通。3.3 8拍为什么半步能把共振压下去8 拍半步等于把单 4 拍和双 4 拍交替起来单相拍、双相拍、单相拍、双相拍……一个电气周期变成 8 拍每拍转 0.9°正好是基本步距角的一半。拍号12345678A11000001A-00011100B01110000B-00000111合成矢量的旋转顺序是 (A)—(AB)—(B)—(BA-)—(A-)—(A-B-)—(B-)—(B-A)相邻两拍之间只转 45° 电气角比整步的 90° 细密一倍。减振的机制在于转矩波动的幅度。整步时合成矢量的幅值在“一相”和“两相”之间摆两相导通时磁场强、一相导通时磁场弱转子每走一步都要经历一次忽强忽弱的拉扯这就是低频振动的来源。半步虽然也有一相、两相的交替但因为相邻步的角度变小、每一步的速度变化更缓能量被摊薄到更细的步子里共振峰明显被压下去。这在低速段特别有效也是老式打印机、扫描仪的走纸机构普遍用 8 拍的原因。半步的代价是控制复杂度上升而且每拍停留时间只有原来的一半高速段如果还用半步等于强行把脉冲频率翻倍反而更容易丢步。所以速度一上去不少方案会自动从半步切回整步这叫“半步—整步切换”切换点要卡在共振区之外。4. 细分微步用电流插值出 0.18° 的步子4.1 三个数字的换算步距角、脉冲数、细分倍数两相步进电机的基本步距角是 1.8°这是整步下的机械角。整步走一圈需要 360 / 1.8 200 个脉冲这就是常说的“200 步电机”。细分倍数改变的是每个脉冲对应的角度。10 细分时一个脉冲走 0.18°走一圈需要 2000 个脉冲。换算关系很直接每圈脉冲数 360 / (基本步距角 / 细分倍数)实际步距角 基本步距角 / 细分倍数但这里有个必须看清的边界。细分倍数只决定“我给电机下发了多少个中间位置”不决定“电机能不能停在这些位置上”。0.18° 是电气上要求转子停的位置转子实际停在哪取决于相电流控制得准不准、绕组电感带来的电流滞后有多大、齿槽转矩和静摩擦会不会把转子拽偏。细分数越高要求的电流精度越高机械误差的占比也越大。1/256 微步的驱动器标称能分辨 0.007°但那是在空载、理想电流环、无回差条件下的数字带上真实负载后能稳定复现到 1/16 或者 1/32 就已经很不错了。4.2 电流矢量微步本质是把方波换成正弦整步和半步给线圈的是开关量要么满电流要么零。微步给的是模拟量A 相电流按余弦走B 相电流按正弦走两相合成的磁场矢量就在空间里连续旋转而不是在四个或八个固定角度上跳。$$\theta \arctan\frac{I_B}{I_A},\quad |I| \sqrt{I_A^2 I_B^2}$$只要保持合成矢量的幅值不变、角度均匀递增转子就会平滑地跟着转。1/4 微步就是每 90° 电气角取 4 个点1/16 微步就是取 16 个点。所谓“微步”本质是对这条正弦曲线做离散采样采样点越多走得越顺。用代码生成一张查找表比每次实时算三角函数更实际单片机上跑浮点开销不小import math def build_microstep_table(microsteps16, full_step_deg1.8): 生成一个电气周期的微步电流查找表 microsteps: 每个整步细分成多少微步 一个电气周期 4 个整步所以表长 microsteps * 4 返回值是 (Ia, Ib) 的整数对满量程 32767 对应额定相电流 table [] n microsteps * 4 for i in range(n): theta 2.0 * math.pi * i / n ia int(round(32767 * math.cos(theta))) # A 相走余弦 ib int(round(32767 * math.sin(theta))) # B 相走正弦 table.append((ia, ib)) return table tbl build_microstep_table(microsteps16) print(表长:, len(tbl)) # 64一个电气周期 64 个微步 print(起始点:, tbl[0]) # (32767, 0)A 相满电流矢量指向 0° print(四分之一处:, tbl[16]) # (0, 32767)矢量转过 90° 电气角 print(单个微步机械角:, 1.8 / 16) # 0.1125°microsteps * 4这个表长容易被写错。一个电气周期覆盖 4 个整步所以 16 细分下一个电气周期有 64 个微步对应机械角 64 × 0.1125° 7.2°和前面算的一致。整数化用 32767 是因为大多数电流环的 DAC 或者 PWM 比较寄存器是 1516 位满量程对齐后可以直接送进寄存器。表建好之后运行时只做查表和写寄存器代价极低。真正难的不是算表是把表里的目标电流“压”进线圈——这就得有电流闭环。4.3 DRV8889A-Q1 接管了什么SPI 配置加内部电流环分立 H 桥做整步、半步够用一旦上微步就不行了。原因在于微步要求相电流精确停在某个中间值而线圈电流会随温度、电压、转速漂移开环给 PWM 占空比根本稳不住。专用微步驱动芯片干的就是这件事内部集成两个 H 桥、电流采样、PWM 斩波比较器和一套状态机外面只需要告诉它“走哪个微步、往哪个方向、电流多大”。DRV8889A-Q1 这类芯片支持到 1/256 微步典型用法是单片机通过 SPI 配置微步分辨率、额定电流、衰减模式、失速检测阈值用一个 DIR 引脚控制方向一个 STEP 引脚给脉冲芯片自己按内部的正弦表推进微步索引不需要主控去查表。机制上可以拆成三层。第一层是微步索引器每来一个 STEP 脉冲内部索引加一或减一然后从内置正弦表里取出对应的 Ia、Ib 目标值。第二层是电流环每个 PWM 周期采样一次相电流和目值比较超了就关断低了就开通形成斩波。第三层是衰减模式选择根据当前微步位置和转速决定续流时是慢衰减还是快衰减慢衰减保力矩快衰减保跟随性。主控省下来的不只是算力还有一致性。自己搭 H 桥做微步最难调的就是电流环参数和衰减模式切换点换个电机、换个电压就得重调一遍。集成芯片把这些做成可配置寄存器代价是成本上升、需要 SPI 通信、封装通常带散热焊盘PCB 布局要留够铜箔。4.4 细分的精度天花板在哪细分不是万能药它的收益有明确的上限卡在四个地方。第一是电流精度。1/256 微步要求相邻两个微步的电流差只有满量程的千分之几电流采样放大器的失调、PWM 斩波的纹波、电源的波动都会直接变成位置误差。第二是绕组电感造成的电流滞后。目标电流是正弦实际电流因为电感跟不上而相位滞后转速越高滞后越明显合成矢量就不再是均匀旋转而是被“拖”着走。高速下微步的实际效果会退化成整步。第三是齿槽转矩和静摩擦。转子有自己偏好的停位电流矢量给的位置如果正好落在两个齿之间转子会被齿槽力往回拽。这就是为什么很多机构在极低速度下用微步反而看到位置抖动。第四是机械回差。联轴器、丝杠、减速箱的间隙通常远大于 1/256 微步对应的角度电气上再精细机械上也复现不出来。所以选细分数不是越高越好。常见做法是先按机械精度反推丝杠导程 4mm、要求定位精度 0.01mm一圈 400 个位置就够1/2 细分就满足如果要求 0.001mm才需要上到 1/16 以上。把细分堆到 1/256 却配一个回差 0.05mm 的联轴器属于把钱花在了看不见的地方。5. 避坑与排查线圈通了电机不抖先看这几条5.1 上电就抖转子左右摆但不转现象给脉冲电机发出轻微的“哒哒”声转子在两个位置之间来回摆不形成连续旋转。原因时序顺序写错了。双极性四线电机的两相必须交错推进A → B → A- → B- 才是旋转写成 A → A- → B → B- 就变成了同一绕组正反交替磁场只在一条轴上来回翻转子当然只抖不转。单极性五线电机那种按 A、B、C、D 顺序拉低的写法直接搬到双极性上就是这个结果。解决把相位表按 3.1 到 3.3 节的顺序重排用示波器或者逻辑分析仪同时抓 A 和 B 两路确认它们的上升沿是交替出现的、相位差 90° 电气角而不是同时。5.2 空载能转带上负载就丢步现象电机拿在手上转得很顺一装到机构上低速还行速度一调高就开始丢步位置越跑越偏。原因多半是相电流没到额定值。用 ULN2003 那种开漏接法输出管上有 1V 以上的饱和压降电源 5V 时线圈实际只拿到 3V 多电流远低于额定力矩自然不够。另一个可能是加速曲线太陡脉冲频率一下子上去了电流还没建立就换相。解决先量线圈两端的实际电压和电流确认达到额定值如果用的是集成 H 桥检查供电电压和斩波限流设置。软件上加速度曲线要做成梯形或者 S 形起步频率控制在电机的牵入频率以内逐步加速到工作频率。5.3 低速段抖动明显过了某个速度反而平稳现象转速在几十转到一百多转之间时机壳振得厉害噪声大速度再往上反而安静了。原因这是典型的低频共振。整步驱动时转子每步都要经历一次冲击激励频率和转子的固有振荡频率对上就会共振。转子的自然振荡频率通常在几十赫兹到一两百赫兹之间具体取决于转子惯量和负载。解决三条路。换半步或者微步把每一步的能量摊薄、激励频率抬高直接跳过共振区加加减速曲线让电机快速通过共振转速段不在那里停留机械上增加阻尼比如加惯量盘或者弹性联轴器。血泪经验是别指望靠调电流解决共振电流调小只会让力矩不足共振反而更明显。5.4 反转时抖动、堵转甚至丢步现象正转正常一给反转指令就卡顿严重时直接堵住不动。原因方向切换的时机不对。DIR 引脚在脉冲还在发的时候翻转电机相当于在半步中间被强行改向磁场矢量和转子位置错开产生很大的反向转矩表现出来就是抖动甚至堵转。解决先停脉冲、等电机停稳再改 DIR然后再重新发脉冲。如果用的是带内部索引器的驱动芯片注意 DIR 的建立时间要求芯片手册里一般会给一个最小提前量比如 DIR 变化后要等若干个 STEP 周期才生效。软件上最简单的做法是加一个“方向锁”——只有在速度为零时才允许改方向。5.5 微步设得很高定位精度却没提升现象把驱动器配到 1/128 或 1/256 微步实测重复定位精度和 1/16 时差不多甚至更差。原因细分数超过了机械系统能分辨的极限。联轴器回差、丝杠间隙、导轨摩擦任何一项大于微步对应的机械角高细分就白费。另外高细分下每步的转矩增量很小静摩擦会把转子卡在整步位置上形成“该走半步却跳过去”的现象。解决按机械精度反推需要的细分数宁可留一点余量也不要盲目堆高。如果确实需要高精度考虑加编码器做闭环用失速检测或者位置反馈来纠正丢步比单纯提高细分数有效得多。6. 设计取舍整步、半步、微步该怎么选驱动方式每圈脉冲数相对转矩低速平稳性驱动成本适用场景单4拍整步200基准差共振明显最低ULN2003 级对精度无要求的位置切换双4拍整步200约 1.4 倍一般低需 H 桥需要力矩、速度不高的场合8拍半步400介于两者之间较好低低速走纸、送料机构集成微步80051200略低于整步好高需专用芯片加 SPI精密定位、低噪声场合从这张表能看出一个常被忽略的事实微步的定位精度上去了但每微步的转矩是下降的。整步时合成矢量幅值最大微步时矢量在正余弦之间过渡某些位置的幅值会略低加上电流环的跟随误差实际出力比整步要打一点折扣。所以在需要大转矩启动的场合常见做法是启动阶段用整步或者半步跑起来之后切到微步这叫“微步切换”不少驱动器把它做成了自动档。想验证自己选的方案对不对最直接的办法是拿电流探头看相电流波形。整步应该是方波半步是方波和零交替微步应该是接近正弦的阶梯波。如果微步设了 1/16示波器上看到的却是一级一级跳变的方波说明电流环带宽不够或者斩波频率太低细分没有真正生效。再拿一个百分表打在与电机同轴的量块上让电机走 100 个微步看实际位移和理论值差多少一比就知道细分有没有被机械系统吃掉。我自己的习惯是每拿到一个新电机先用整步把它跑起来用示波器确认四路时序的相位关系再退到半步观察共振点最后才上微步并逐级提高细分数直到定位精度不再提升为止——停下来的那个点就是这套机械系统真正能消化的细分上限。这比一上来就把寄存器配到最高档然后反复怀疑电机质量要省事得多。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询