步进电机驱动时序:让转子一格一格听话地转
更新时间:2026-09-24。本文是「集成电路大类 · 芯片设计」入门层(beginner)数字逻辑基础的一篇。普通电机给电就连续转,步进电机却能精确地「走一步停一步」:脉冲个数决定转角,脉冲频率决定转速,不用编码器也能开环定位,是 3D 打印机、数控机床、镜头调焦、平台进给背后的执行器。从数字侧看,它就是一个按节拍输出励磁序列的状态机;从功率侧看,它和继电器/H 桥续流里的感性线圈驱动完全同源。
本文要回答的问题
- 为什么给线圈按顺序通电,转子就会一格格转,断电后还能锁住?
- 全步(四拍)、半步(八拍)、微步的励磁序列到底差在哪?
- STEP/DIR 接口怎么用「一个脉冲走一步」同时控制位置和速度?
- 为什么步进太快会「丢步」?梯形曲线、S 形曲线在解决什么问题?
- 驱动 IC 里的恒流斩波(chopper)、细分微步和续流路径各干什么活?
一、结构:两组正交线圈把转子「吸」到固定角度
入门只需要记住最常见的一种:两相混合式步进电机。它的定子上有两组互相垂直的线圈,记作 A/A̅ 和 B/B̅——每一相都能正向或反向励磁;转子是一个带细密齿的永磁体。给定某一相通电,定子产生一个方向固定的磁场,磁场会把转子齿「吸」到与它对齐的最近平衡位置。此时若关掉这一相、改给下一相通电,磁场方向转过一个角度,平衡位置跟着转,转子就被拉着迈了一步。
一圈因此被切成固定数量的格子。常见的 1.8° 电机,一圈有 360/1.8 = 200 步;0.9° 电机则是 400 步。只要负载没有大到扯断磁场的「拉力」、加减速也给得合适,走了多少个脉冲就精确对应转了多少角度,这就是开环定位的基础。开环的意思是控制器只发命令、不看结果——对照之下,正交编码器是在轴上额外装尺子、闭环测量实际位置。
步进电机还有一个直流电机没有的特性:保持转矩。停转后继续给当前相通电,转子会被磁场锁在原地,外力不超过保持转矩就扳不动它,所以进给轴停机时不会自己滑走。
顺带认一下家族成员。步进电机按转子原理分三类:**永磁式(PM)**转子就是一块永磁体,步距角较大(常见 7.5°、15°),便宜、量大,常见于空调摆风、仪表指针;**反应式(VR)**转子是软铁齿、本身不带磁,靠磁阻最小原理被吸过去,成本低但没有保持转矩,现在已少见;**混合式(HB)**把永磁体和密集齿结合起来,靠齿与齿的精细错位做到 1.8°、0.9° 的小步距和大转矩,工控和消费电子里几乎都是它。所谓「两相」「四相」指的是定子绕组的组数(相数),本文讲的两相电机有 A、B 两组绕组,四相八拍里的「四」指四个可独立通电的绕组端点,这两个数字别混淆。
二、四相八拍通电时序:相邻状态只变一相
「步进电机驱动时序」的核心,就是那张励磁表。把四个线圈端点 A、B、A̅、B̅ 看成四位,1 表示通电,一个完整的半步循环(八拍)如下:
这张蛇形排列的图要从两个角度读。先看单数拍:拍1、3、5、7 只有一相通电(A、B、A̅、B̅),磁场方向落在某一组轴线上,这就是「单相四拍」的四个状态,每拍转子走一个完整步距角 1.8°。再看双数拍:拍2、4、6、8 是相邻两相同时通电(AB、BA̅、A̅B̅、B̅A),两个磁场矢量叠加,合成磁场落在两个轴线中间,对应一个中间角度 0.9°。
更关键的细节藏在出边上:任意相邻两拍只改变一相。拍1 到拍2 是在 A 的基础上加入 B;拍2 到拍3 是撤掉 A、只留 B。如果一次同时变两相,磁场方向就会「跳变」,转子容易失稳或反转。这个「每次只动一相」的约束,正是励磁状态机和随便排列组合的区别。
时序图还直接回答了「正反转怎么控制」:沿拍1→拍2→…→拍8 的顺序走,磁场顺时针旋转;倒过来拍8→拍7→…→拍1 走,磁场逆时针旋转,转子跟着反走。方向不需要改任何硬件接线,只改索引递增还是递减。实际通电时还要注意一拍持续的时间:脉冲间隔可以不均匀(加减速阶段正是如此),但每一拍都必须维持到转子真正稳定在新平衡位置之后,否则等于这一拍没走完。
三、整步与半步切换:在同一张表上选隔行还是逐行
有了八拍表,整步和半步就不是两套硬件,而是同一张表的两种走法。
图中上排是整步走法:只取八拍表里的双相节点(AB、BA̅、A̅B̅、B̅A),每个脉冲跨 1.8°,200 个脉冲转一圈。下排是半步走法:在每两个双相节点之间插入一个单相中间状态,每个脉冲只跨 0.9°,同样一圈要 400 个脉冲。所谓「整步/半步切换」,在固件里就是改状态机的索引步长——逐行走表是半步,隔一个取一个是整步,励磁序列和功率级一个字节都不用改。
三种基本励磁方式的取舍如下:
| 方式 | 序列 | 步距角 | 特点 |
|---|---|---|---|
| 全步·单相四拍 | A → B → A̅ → B̅ | 1.8° | 省电,但力矩略小、低速易振 |
| 全步·双相四拍 | AB → BA̅ → A̅B̅ → B̅A | 1.8° | 两相同时通电,力矩大、定位稳,最常用 |
| 半步·八拍 | 单相双相交替 | 0.9° | 分辨率翻倍,运转更平滑 |
再往前走一步就是微步(细分,microstep)。八拍本质上还是「满/空」两种电流,半步只是碰巧用双相叠加出一个中间角。微步则用 PWM 让两相电流按正弦、余弦连续变化:IA = I·cosθ、IB = I·sinθ,合成磁场可以指向任意角度,于是一个全步能再切成 1/8、1/16、1/256,转子停在中间任意位置,低速振动和噪声大幅下降。代价是驱动 IC 必须做电流闭环,细分倍数越高,对电流控制精度要求越苛刻。
用微步时有一个常见误解要破除:细分提高的是指令分辨率,不等于位置精度同比例提高。1.8° 电机做 16 细分后,一个脉冲对应 0.1125°,但受齿槽加工误差、摩擦力矩和电流正弦失真影响,转子实际停下的位置未必真落在理想点上,误差通常仍以弧分(一弧分等于 1/60 度)计量。所以细分的主要收益是平滑、安静、越过共振区,而不是把电机变成精密分度头;真要保证绝对精度,还得靠闭环反馈。
四、STEP/DIR 接口:一个脉冲走一步
数字侧最省事的接口是 STEP/DIR,只有两根控制线:DIR 给电平定方向,每来一个 STEP 脉冲,电机就走一个步(在微步模式下是一个微步)。控制器要做的全部工作,就是用一个定时器按指定频率产生指定个数的脉冲,这属于脉冲生成与计数的典型应用。位置 = 累计脉冲数 × (细分为 1 时的)步距角,速度 = 脉冲频率 × 步距角。比如 1.8° 电机以 2000 脉冲/秒运行,就是 10 圈/秒、600 转/分。
GPIO 当然推不动电机线圈,每相要接一个 H 桥(双极驱动):四个功率开关组成桥臂,让线圈电流可以正流也可以反流,对应正反向励磁。所有开关都必须配续流二极管或同步整流,否则关断瞬间线圈感应出的高压会击穿开关——步进电机的功率级和继电器、电磁阀是同一类问题。
高压步进驱动普遍再加一层恒流斩波(chopper):H 桥以几十 kHz 的 PWM 反复通断,桥臂下端串一个毫欧级采样电阻,电流转成电压后送比较器;电流升到上限就关断,降到下限就重新开通,线圈平均电流由此被恒定在设定值。这样设计有两个好处:一是可以用远高于绕组额定值的电源电压(如 24V 甚至 48V 驱动额定几伏的电机),电流建立更快,高速时扭矩不掉;二是平均电流受控,绕组不会过流发热。微步所需要的正弦、余弦电流波形,也是靠不断改写这个「设定值」、让斩波阈值跟着 sin/cos 走实现的,属于模拟混合信号与电流采样的地盘。
关断之后电流往哪里流,还有个「衰减模式」的选择:慢衰减时把两个下桥臂同时打开,电流沿绕组自身环流、下降慢,电流纹波小、低速平稳;快衰减时电流反向灌回电源母线、下降快,能跟上高速换相但纹波和噪声大。现代驱动 IC 普遍用两者折中的混合衰减,并允许在一个 PWM 周期内先快后慢,微步波形的正弦度很大程度取决于这个时序。此外 STEP/DIR 之外通常还有一根 ENABLE 用来整体关断桥路:停机但想保持位置时保持使能(可把电流设定调低省电),长时间不动或需要手动盘轴时再关闭输出。
五、丢步与加减速:为什么不能一上来就给高频
转子和负载都有惯量。如果静止时直接给很高的脉冲频率,旋转磁场每一步都迈得飞快,转子还没跟上,磁场已经跳到下一个位置,两者彻底「脱钩」,于是发生丢步(stall):实际转角小于脉冲对应的指令转角。开环系统对此毫无知觉——没有传感器告诉控制器位置错了,打印件错层、平台顶死往往就是这么来的。
所以速度必须沿曲线爬升,常见两条:
- 梯形曲线(trapezoidal):匀加速 → 匀速 → 匀减速。加速度恒定,定时器只需要逐拍递增/递减周期,实现最简单;
- S 形曲线:连加速度的变化率(加加速度)也加以限制,起步和收尾没有突兀的加速度台阶,冲击小、共振轻,高端进给用得多。
高速端还有另一道坎:线圈是感性负载,频率高到一定程度,电流还没升到设定值就又该换向了,实际扭矩随转速下降,最高脉冲频率因此由厂商给的「扭矩-转速曲线」决定。低速端则存在共振区——当脉冲频率恰好撞上机械固有频率(两相混合式电机典型在每秒 100~200 全步附近),转子在平衡位置附近越振越大,同样可能丢步。细分微步把大步拆成小步、加减速曲线快速冲过共振频段,就是对付它的两个常规手段。需要确认实际到位、或防止卡滞造成废品时,再加正交编码器构成闭环步进(混合伺服)。
给一个可以落地的量级感受:3D 打印机上典型的 1.8° 电机配 16 细分,走 1 毫米对应 80~160 个脉冲;梯形规划时起步频率常设在每秒 100~300 脉冲,再以每拍缩减一点定时器周期的方式匀加速到每秒上万脉冲,到位前对称地减回来。这套算法在 MCU 里就是一个定时器中断里做四则运算,难点不在算,而在把起始速度、加速度和最高速度调到「既快又不丢步」的窗口内——三个参数任何一个超过机械能力,表现都是位置莫名其妙地偏掉。这也是为什么选型要留足转矩裕量:行业经验是负载转矩不超过电机标称保持转矩的一半,否则电压波动、机械磨损都会把系统推过丢步的临界点。
选型时免不了把步进电机和另外两类常见电机摆在一起比较:
| 步进电机 | 有刷直流电机 | 伺服(无刷 + 编码器) | |
|---|---|---|---|
| 位置控制 | 开环,数脉冲即可 | 需要外加编码器和闭环 | 天生闭环,精度最高 |
| 低速特性 | 大力矩、可锁止 | 力矩一般,长时间停位困难 | 平稳但成本高 |
| 高速特性 | 扭矩明显下降 | 好 | 好 |
| 成本/复杂度 | 低,驱动 IC 便宜 | 最低 | 高,系统复杂 |
| 典型场合 | 3D 打印、进给、调焦 | 风扇、玩具、泵 | 机器人关节、高端机床 |
这张表的判断口径很直接:行程短、要知道走了多远、预算紧,选步进;只关心转速不关心位置,选直流有刷;精度和动态性能必须被保证且预算充足,才上伺服。步进电机恰好占据了「便宜的精确定位」这个生态位,这也是它在消费电子和小型自动化设备里长盛不衰的原因。
六、一个最小励磁状态机
剥掉功率级,数字控制的本质就是按节拍在励磁表上前进或后退的状态机/查找表:
// 八拍半步励磁(A,/A,B,/B),每来一个步进脉冲索引 +1/-1
const logic [3:0] SEQ [0:7] = '{4'b1000,4'b1010,4'b0010,4'b0110,
4'b0100,4'b0101,4'b0001,4'b1001};
always_ff @(posedge clk) if (step_pulse) idx <= dir ? idx+1 : idx-1;
assign coil = SEQ[idx[2:0]]; // 送驱动 IC;微步时改为送 sin/cos 电流设定这段代码对应第二节的八拍图:SEQ 就是蛇形环上的八个节点,step_pulse 是沿出边走一步的节拍,dir 决定顺时针还是逆时针,三位索引自然回绕,对应图里「拍8 回到拍1」的闭环。要做整步双相四拍,只取偶数项即可;要做微步,就把通断码换成按 sin(θ)、cos(θ) 量化的电流设定值,交给驱动 IC 的斩波级。脉冲从哪来、走多少个停,由计数器/定时器和加减速规划负责;驱动 IC 与 FPGA/MCU 之间的电平衔接,则参考 GPIO 与 PAD 驱动能力。实际工程中还要处理上电瞬间:励磁索引和转子的真实位置之间没有任何对应关系,所以上电后应先按当前输出建立磁场、确认轴已锁住,再从零开始累计步数,否则起步那一拍对应的角度是未知的。
这一篇在知识体系里的位置
本篇是芯片设计入门层里「数字逻辑 → 功率执行」的落点之一:往前是纯数字的 FSM/查找表、计数器/定时器/脉冲和 PWM 生成;往功率侧是同属感性驱动的继电器/H 桥续流;往反馈与闭环读,是正交编码器。理解了「励磁表 + 节拍 + 电流控制」这三件套,再看伺服、无刷电机的换相时序也会轻松很多。
总结
步进电机驱动时序的本质,是让 A/A̅、B/B̅ 两组正交线圈按励磁表逐拍通电:单相或双相四拍每拍走 1.8°(200 步/圈),八拍在相邻双相间插入单相中间态、每拍走 0.9°,整步与半步只是同一张表的隔行与逐行走法;STEP 脉冲是节拍、DIR 定方向,累计脉冲数即转角、脉冲频率即转速,可开环精确定位;微步用 PWM 让两相电流按正弦余弦连续变化,把全步再细分成几十上百份以减振降噪;功率侧每相一个带续流路径的 H 桥,并用恒流斩波把平均电流钉在设定值,兼顾高速电流建立与绕组不过热;由于转子带惯量,起步直接给高频会丢步且开环不报错,必须按梯形或 S 形曲线加减速并避开低速共振区,需要确认到位时再加正交编码器构成闭环。