ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

步进电机从入门到进阶:原理、驱动、闭环与FOC实战

步进电机从入门到进阶:原理、驱动、闭环与FOC实战 搞步进电机这么多年我越来越觉得这东西才是真正适合所有人入门的运动控制设备。3D打印机里有它小型CNC雕刻机里有它自动灌装机、送料机构、云台、板球平衡系统里全都有它的影子。哪怕现在伺服和FOC方案越来越流行42步进电机这类产品依然是很多项目的第一选择原因很简单结构直接、控制链路短、成本低到可以随便折腾。这篇文章就把步进电机从原理、选型、驱动接线、代码控制一直讲到闭环和FOC玩法把我这几年踩过的坑、总结出的经验一次性写清楚。不管是刚接触电机控制的大学生、创客还是刚入行的自动化工程师都能照着做、照着调。1. 步进电机工作原理从“牙齿咬合”到精准定位1.1 步进电机是怎么“一步一步”转起来的步进电机本质上是一个把电脉冲信号转换成角位移的同步电机。它的转子上有永磁体定子上有多相绕组最常见的是两相双极步进电机也就是我们常说的两相四线电机引线通常是A、A-、B、B-这四根。当驱动器按顺序给绕组通电时定子产生的磁场会带着转子转到磁阻最小的位置每切换一次通电状态转子就转过一个固定的角度这个角度就叫步距角。常用的42步进电机步距角是1.8度转一圈需要360除以1.8等于200步。如果让驱动器在每一步之间再插入一半位置实现半步控制一圈就是400步。再往上就是微步细分驱动器通过控制电流的渐变把一个整步切成4、8、16甚至256份。所以步进电机的控制核心思路其实很简单给定子绕组制造一个旋转的磁场转子就跟着磁场走磁场转到哪转子就停在哪。我自己常用的理解方式是步进电机转动就像齿轮咬合但这里的“齿轮”是电磁场和永磁体。脉冲来了磁场跳一步转子跟着跳一步。没有反馈位置信息靠“数脉冲”得到这就是为什么它被归类为开环控制系统。短期看这很可靠但负载过重或速度突变时可能失步这也就是后面为什么要讨论闭环和FOC。1.2 看懂42步进电机型号、参数和选购思路“42步进电机”这个名字看着神秘其实就是机身截面尺寸是42毫米见方对应NEMA17标准。28步进电机机身截面是28毫米对应NEMA11常用于小负载57步进电机是57毫米见方对应NEMA23常用于雕刻机、较大负载机构86步进电机则对应NEMA34用于更重的场合。除了机身尺寸买步进电机还要看几个关键参数机身长度、额定电流、静力矩、轴径和引线数量。机身长度决定了扭矩上限。以42步进电机为例常见的机身长度有34毫米、40毫米、48毫米三档长度越长静力矩越大。额定电流一般从0.8A到2A不等这个参数直接决定驱动器的选型电流太大而驱动板输出不足会出现一种典型的“电流饥饿”现象表现为高速丢步、失速甚至完全转不动。静力矩是指电机在静止状态下克服外部扭矩的能力一般42电机在0.3到0.6N·m之间选型时要留出1.5到2倍的余量。另外要区分两相四线和四相五线。四相五线多见于老的28BYJ-48这种玩具级电机带减速齿轮箱不能用普通的两相步进驱动器直接驱动需要选择对应的ULN2003驱动板。真正在DIY和工业场合用的几乎都是两相四线接线和驱动都更标准。所以新入门的朋友记住一点买电机时优先选两相四线、1.8度步距角、额定电压在12V到24V之间、额定电流在1.5A左右的42电机这个配置兼容性最高后续换驱动、换主控的灵活度也大。1.3 优点与短板为什么它还没有被淘汰先说优点。步进电机最大的优势是结构简单、控制容易给它脉冲它就转不需要编码器和复杂的伺服调试流程这大大降低了开发门槛。其次它在低速状态下扭矩很大甚至在零速时能保持一个稳定的保持扭矩所以适合需要定点停靠的机构。最后它很便宜一个42步进电机加一块A4988驱动板加起来才几十块坏了就换不心疼。短板也很明显。第一是发热量大因为步进电机在静止时为了让转子锁定在当前位置定子绕组里会持续流通电流时间久了会烫手。第二是高速扭矩下降快随着脉冲频率升高绕组电感带来的阻抗变大电流跟不上扭矩就会迅速衰减。第三是存在共振区在某段转速范围内振动和噪音特别大甚至可能引发共振丢步。第四是开环状态一旦失步就无法自动纠偏位置可能永久错位。但正因为有这些短板才催生了闭环步进和步进FOC这些进阶方案。我在第4章会专门展开讲。在我看来步进电机不是“要被淘汰的旧技术”而是一门值得认真学的基础功。你只有先把开环步进电机的脾气摸透了才能真正理解伺服和FOC里那些参数到底在解决什么问题。2. 驱动器选型与接线实战别把电机直接接到MCU上2.1 常见驱动板怎么选A4988、DRV8825、TMC2209、TB6600、DRV8833步进电机不能直接接Arduino或者树莓派的GPIO口因为电机绕组动辄需要几百毫安到几安培的电流而GPIO只能提供几毫安。驱动板的核心作用有两个一是把MCU的低压逻辑信号转成高压大电流二是在不同绕组之间按顺序切换电流方向从而形成旋转磁场。驱动板型号很多我按实际使用频率整理了一张选型表方便对照。驱动芯片/板卡最大电流最高细分推荐电压典型应用备注A4988约2A1/168-35V42步进电机、小型CNC必须加散热片电流设置靠VrefDRV88252.5A峰值1/328.2-45V42/57步进电机引脚兼容A4988电流更大TMC22092A RMS左右1/2564.75-29V3D打印机静音改造支持UART配置运行非常安静TB66004A以上1/329-42V57/86步进电机、较大设备带外壳的独立驱动盒DRV8833约1.2A每桥/2.7-10.8V微型步进电机、玩具电机双路全桥可驱动两相四线小电机A4988是入门的经典选择市面上的资料最多出问题也容易搜到答案。它的缺点是容易过热在1.5A以上的工作状态下必须加散热片否则容易触发过热保护或者直接烧毁。DRV8825是A4988的直接升级版电流更大、细分更高引脚排列基本兼容如果刚开始不确定选哪个直接买DRV8825容错空间更大。TMC2209贵一些但它在低中速区间极其安静适合3D打印机这种对噪音敏感的设备。TB6600适合大一点的57、86电机接线端子是螺丝压接式不需要焊接但要注意它的逻辑电平接口有的需要共阳接法接错会不工作。DRV8833则是一个偏小众但很有意思的选择它本质上是一个双路电机驱动芯片可以驱动两路直流电机也可以把两路全桥拼起来驱动一路两相四线步进电机工作电压低到2.7V适合电池供电的微型项目。42步进电机驱动拓展板这种产品其实就是把驱动芯片、接线端子和细分拨码开关集成到一块扩展板上可以插在STM32、Arduino或者树莓派底板上使用。它比裸芯片方案少了很多飞线适合快速验证电机能不能转也适合教学演示。新手用这种板子最大的好处是接线不容易错拨码开关直接决定细分不同档位对照丝印就能找到。2.2 搞清楚STEP、DIR、ENA三个引脚特别是ENA几乎所有步进驱动器都有三个逻辑控制引脚STEP、DIR、ENA。STEP是脉冲输入端来一个上升沿或者下降沿电机走一步DIR是方向控制端高电平和低电平决定电机转动方向ENA是使能控制端它控制驱动器的功率输出级是否工作。这个逻辑看起来简单但实际接线时很多朋友都卡在ENA上。最容易混淆的地方在于ENA通常以差分对形式引出也就是ENA和ENA-两个引脚。ENA接高电平、ENA-接低电平时驱动器功率输出级关闭电机轴可以自由转动这叫脱机反过来ENA和ENA-接法交换时驱动器输出级使能电机轴呈锁定状态。不同驱动板的使能逻辑不太一样有的驱动板是ENA-接GND、ENA接单片机引脚引脚输出低电平时使能输出高电平时脱机比如常见的TB6600就经常这样接。A4988这类低压模块上往往直接标了EN引脚有些设计成低电平使能有些高电平使能一定要对照具体模块的原理图确认。我的建议是如果不确定使能逻辑先不给ENA接任何线。很多驱动板都有默认使能的状态电机只要一上电就会保持扭矩转轴有明显阻尼感这说明驱动已经在工作。等到需要脱机比如手动把电机轴拨到某条起始位置时再临时接一个信号去控制ENA这样能避免因为使能接反而导致电机完全无力矩运转的诡异问题。调试中如果发现电机通电后轴非常轻、怎么转都行就要优先怀疑ENA信号接反了。2.3 细分和电流决定电机手感的核心参数细分就是把一个整步再分成若干微步比如设置为16细分后原本200步一圈的42电机每圈需要的脉冲数就是200乘以16等于3200个脉冲。细分的意义不仅是提高名义上的分辨率更重要的是让电机运转更平滑、噪声更低。但要注意细分不会提高绝对定位精度它只是让每一步更小相当于在原来的齿之间插入一些“虚拟位置”这些插值位置的精度受限于电机自身制造精度和驱动器电流控制能力。除了细分电流设置是驱动调试里最容易出错的地方。A4988模块上有一个电位器通过调整Vref电压来设定目标电流。A4988的典型计算公式是Vref等于目标电流乘以采样电阻再乘以8。常用的模块采样电阻是0.1欧姆如果想让电机工作在1.5AVref就调整为1.5乘以8乘以0.1等于1.2V。实际操作时用万用表红表笔接电位器调节端的测试点黑表笔接GND一边用小螺丝刀旋转电位器一边观察电压读数稳定到1.2V左右就可以了。DRV8825、TMC2209的计算系数各不相同一定要查对应芯片手册不要套用同一个公式。电流设置遵循一个基本原则能用多小的电流就开多小够用就行设置过大的电流只会让电机和驱动板都过热并不会带来明显的好处。比如一个额定1.5A的42电机做轻负载传动时开到0.8A到1A已经能稳定工作。判断电流是否合适的方法是电机连续运行半小时后摸一下外壳能明显感觉到温热但手能一直按住不动这是比较理想的状态如果烫到根本碰不了那就是电流大了。2.4 接线顺序和上电检查避免“烧板子”的坏习惯接线顺序这件事很多教程一句话带过但恰恰是新手最容易犯的错误。正确流程是先把电机线接到驱动器输出端A、A-、B、B-然后接电源线和GND最后才接控制信号的STEP、DIR、ENA。上电前用万用表蜂鸣档检查一下电源正负极之间有没有短路确认无误再上电。如果你用的是开关电源电机上没有动静时先量一下电源输出端有没有电压很多开关电源在负载很小或过流时会有保护动作导致电压丢失这种现象容易误判成驱动板损坏。在信号线上也有一个经验STEP和DIR信号线尽量远离电机电源线和电机绕组线避免脉冲被电磁干扰淹没。对于脉冲频率较高的应用比如超过20kHz需要把信号线缩短或者改成绞线/屏蔽线否则会出现时走时不走、偶尔跳一步的间歇性丢步。我调试过的一套设备里步进驱动器装在电控箱角上信号线从电机线旁边穿过运行半小时后就会有随机丢步后来把信号线换到独立走线槽里问题立刻消失。这类软故障排查起来极其费时间最好一开始就按规范布线。3. 控制方法与代码实操从点动到加减速曲线3.1 脉冲频率和转速之间的换算步进电机控制的所有问题归根结底都是时间与脉冲数量的协调问题。假设电机步距角为1.8度驱动器细分为16那么电机每转一圈需要200乘以16等于3200个脉冲。如果主控每秒钟发出3200个脉冲电机刚好每秒转一圈也就是60转每分钟。脉冲频率为1000Hz时转速就是1000除以3200转每秒等于0.3125转每秒折算成每分钟就是18.75转。控制方向也很常用已知目标转速求需要设置的脉冲频率公式是频率等于目标转速乘以每转所需脉冲数再除以60。比如希望42步进电机以120转每分钟运行细分16每转需要3200个脉冲那么频率就是120乘以3200除以60等于6400Hz。只要掌握了这个换算关系后面无论是写代码还是手动输入参数心里都有底。但要注意这只是静态换算。实际运行时电机从静止一下子进入一个较高的频率会因为转子惯性导致跟在磁场后面跑这就是失步的根源。所以任何时候都不能直接按目标速度开脉冲必须先经过一个加速过程。加速曲线就是一系列频率逐渐升高的脉冲序列让电机从低速平稳爬到高速。3.2 Arduino和MicroPython的代码实例这里给两个可以直接用的例子。第一个是Arduino加AccelStepler库它天然支持梯形加减速代码量很少。接线方式为驱动板的STEP接Arduino的2号引脚DIR接3号引脚ENA不接GND共地。#include AccelStepper.h // 定义一个两相四线步进电机对象 AccelStepper stepper(AccelStepper::DRIVER, 2, 3); void setup() { stepper.setMaxSpeed(3200); // 最大速度3200脉冲/秒 stepper.setAcceleration(1600); // 加速度1600脉冲/秒^2 stepper.moveTo(6400); // 目标位置3200脉冲的一圈再多走一圈 } void loop() { stepper.run(); }AccelStepper内部会自动做梯形加减速只要目标位置在最大速度和加速度允许范围内电机就能稳定到达。如果单纯想持续转动可以用move()函数叠加相对位移。第二个例子是树莓派Pico加MicroPython实现最基础的脉冲输出适合理解脉冲/方向控制的本质。接线为STEP接GPIO2DIR接GPIO3共GND。from machine import Pin import time step_pin Pin(2, Pin.OUT) dir_pin Pin(3, Pin.OUT) dir_pin.value(0) # 方向正转 # 每秒输出1000个脉冲持续10秒 for _ in range(10000): step_pin.value(1) time.sleep_us(500) # 高电平保持0.5ms step_pin.value(0) time.sleep_us(500) # 低电平0.5ms构成1ms周期这段代码的问题是没有任何加减速只适合测试线路或者极低速运转。真要用于项目可以把sleep_us的时间按曲线逐步缩短实现加速效果也可以把脉冲生成逻辑放到PWM模块里输出频率由PWM占空比定期改变控制这样更省CPU资源。3.3 加减速曲线为什么不能一上来就全速很多人第一次驱动步进电机时都会遇到这种情况电机嗡嗡响几声却纹丝不动或者转了几下就卡住用手推一下又能转了。这基本就是启动频率太高导致的失步。步进电机的扭矩随频率升高而下降在零速度附近扭矩最大速度一旦上去扭矩就开始衰减所以它需要一个从小到大慢慢爬升的过程。理想的加减速曲线是S形加速度连续变化运行最平滑但实现相对复杂。工程中用得最多的是梯形加减速即匀加速、匀速、匀减速三段。AccelStepper库默认就是这种模式。在不知道电机最佳加速度时我的经验是先把加速度设为最大速度的一半也就是比如最大速度3200脉冲每秒时加速度设为1600脉冲每秒平方然后逐渐加大最大速度或减小加速度直到电机稳定不出错。如果出现明显的“咔咔”声说明加速度过大应该立即减小。板球平衡系统这类对响应速度要求高的项目加减速参数的设置更考研调参功底。系统既要让平台快速倾斜以反馈球的运动趋势又要避免速度突变导致球被甩飞。实际调试中通常把加速度设置到一个中间值然后靠视觉算法预测球的轨迹提前分配两个步进电机的目标位置而不是靠暴力加减速强行修正。4. 进阶玩法闭环控制、FOC与社区里的新花样4.1 从开环到闭环加编码器才能真正做到不丢步开环步进最大的问题就是不知道电机有没有真正执行到目标位置。一旦因为负载突变、加速度过大、机械卡滞等原因失步后续所有位置都不对了。要解决这个问题有两种思路一是提高开环系统的可靠性把电流调大、加减速调平缓、留足扭矩余量二是直接改成闭环步进让电机后端加一个编码器实时读取实际位置并反馈给控制器。闭环步进驱动器的典型功能是正常运行时控制器和普通开环一样发脉冲但驱动板内部会检测编码器位置。如果发现实际位置滞后于目标位置驱动板会自动增大电流纠正甚至在全速段保持高扭矩。这一步纠正动作是实时、自动完成的不需要外部控制器干预。所以闭环步进在负载波动大、速度高的场合可靠性远超开环而成本又低于交流伺服。市面上常见的闭环方案分两类。一类是自己动手在电机轴加一个磁编码器比如AS5600或MT6701再用单片机做PID位置环适用于学习和小型项目。另一类是用成品闭环驱动器比如雷赛DM3E这种一体化产品它把驱动、编码器和控制逻辑集成在一起接线和普通开环驱动器差不多但内部已经完成了闭环运算用户只需要发标准的脉冲/方向信号。雷赛DM3E这类产品特别适合不想折腾底层算法、又想让步进电机具备部分伺服能力的场合。4.2 步进电机FOC控制到底强在哪里FOC磁场定向控制最早主要用在永磁同步电机上后来被移植到两相步进电机上。它的核心思想是实时采样电机相绕组的电流结合转子位置信息把定子电流分解成直轴和交轴两个正交分量分别控制磁通和扭矩让定子电流矢量和转子磁场始终保持最优角度。相比传统整步或细分驱动步进FOC带来的最直观感受是低中速极其安静平滑几乎没有传统步进那种“嗡嗡”声甚至“咯咯”声。而且由于电流是连续变化的电机的发热量也明显降低。另一个好处是FOC天生的电流闭环特性能更好地抵抗负载突变失步概率大幅下降。所以在对噪音和振动要求高的场景里比如医疗设备、精密光学平台、相机云台、实验室仪器步进FOC几乎是理想选择。FOC的难点在于实现复杂度。它需要位置传感器因此电机尾轴要装编码器需要支持高频斩波的驱动芯片以及在微控制器上执行电流环和位置环算法或者用带内置FOC算法的专用驱动芯片。学习板蓝普、DFRobot、MKS等都有一些步进FOC开发板社区资料也越来越多。如果你现在还在用普通开环驱动我建议可以从一个简单的闭环步进项目上手先理解位置环再看电流环最后再碰完整的FOC算法不建议直接上来刷FOC固件那样出了问题很难定位。4.3 板球平衡系统与“张大头步进电机”大家都在折腾什么板球平衡系统是近两年运动控制圈子里很常见的一个综合项目一块平板由两个舵机或者两个步进电机控制两个轴的倾斜角度摄像头识别小球在板上的位置控制算法让小球自动滚到指定目标点。用步进电机的版本尤其考验位置控制的精度和响应速度因为步进电机虽然定位准但它的加减速特性、扭矩波动和机械共振都会被板上小球的运动轨迹呈现出来任何一处参数没过关球就会在中间来回乱抖。“张大头步进电机”这个词其实是最近社区和短视频平台上一个比较有热度的梗用来指那些被玩家拿来折腾各种高级玩法的步进电机。比如有人用普通42步进电机加磁编码器做低成本闭环有人直接给步进电机刷FOC算法测数据还有人用雷赛DM3E这类一体化闭环步进做了一个微型三轴平台。这些视频把同一个核心硬件的不同用法展现得很丰富也带动了很多人重新对步进电机产生兴趣。我从这些社区热点里得到的启发是步进电机虽然本身很成熟但围绕它的应用并没有饱和。开环、闭环、FOC、一体化伺服步进是一条从易到难、从前沿到工程化的完整路径。如果你是学生先用普通42步进电机把开环控制玩熟练再尝试用编码器做位置闭环最后可以去了解FOC电流环的算法原理如果你是工程师直接评估雷赛DM3E这类闭环一体机是否能解决现场的丢步问题即可。两边收获的东西不一样但都值回票价。5. 常见问题与排查技巧实录5.1 电机发热严重如何判断是否正常步进电机发热是正常现象因为在静止保持状态时绕组里仍然有电流外面摸起来五十度到七十度都算常见。但如果烫到不能碰甚至闻到焦糊味就要把驱动电流降下来。优先检查驱动板电流设置是否正确很多人的问题就是把目标电流调到了电机额定电流的1.2倍以上。另外如果是静止时间很长但不需要保持扭矩的场合可以用ENA引脚在合适时机把驱动器输出关掉让电机进入脱机状态这样既降低功耗也减少发热。注意脱机后轴会失去锁定力如果负载可能滑动这个操作要谨慎。5.2 丢步、抖动和共振的排查路径丢步问题排查路径我一般按如下顺序来先看电源是否足够步进电机瞬间启动时的电流峰值很大如果电源容量不足电压会被拉低驱动板上电瞬间就重启表现就是走着走着突然停顿然后重新启动再看驱动电流是否过低负载变大时电流不够的电机特别容易丢步检查加减速是否太急尤其是从停止直接切到高频率脉冲的情况最后考虑共振区间步进电机在几个特定的脉冲频率段会振动剧烈比如42电机整步状态下在每秒几十步到几百步的区间内都容易出现解决办法是避开这些频率或者开启细分、加机械阻尼器。抖动和共振不完全一样。抖动一般伴随明显的“哒哒哒”节奏声多半是STEP信号频率不稳定或者代码里脉冲延时计算有误差。如果用手捏住电机轴能感觉到明显的顿挫感还要检查驱动器设置的是否是合适的细分状态有时候驱动板拨码开关接触不良细分档位没拨到位也会导致运行异常。5.3 电机完全不动、只嗡嗡响怎么查电机上电后完全不动只有嗡嗡声这是最常见的故障。第一步先检查电机线是否接错。两相四线电机有四根线必须要能分辨出哪两根是一相。用万用表电阻档测量四根线之间的通断导通的两根就是同一相分别接到驱动器的A、A-或B、B-。如果有一根线断开或线序混乱电机就会只有“嗡嗡”声但不转。第二步看使能信号如果ENA被意外设为脱机状态电机也不动但这时轴应该很轻。第三步看脉冲是否真的送到了STEP引脚用示波器或者逻辑分析仪测一下STEP引脚有没有脉冲也可以用万用表测频率如果频率太高或者STPEL引脚没有信号问题在主控代码那边。5.4 快速排查速查表现象可能原因处理方式完全不动有嗡嗡声电机线序错误、缺相用万用表测绕组通断重新接A/A-/B/B-完全不动轴非常轻使能信号处于脱机状态检查ENA引脚电平或接线恢复使能转得很慢或没力气驱动电流设置过低或电源电压不足调大Vref换更大功率电源随机丢步信号线受干扰、电源容量不足、加速过快重新布线增加电源余量降低加速度高频区间剧烈振动接近共振频率开启更高细分或调整运行速度区间电机烫到不能碰电流过高或连续全速运行降低电流适当增加散热静止时关断电流只能一个方向转DIR信号电平未切换检查DIR引脚接线和代码逻辑5.5 一个被很多人忽略的小技巧调试前先测相电阻最后分享一个我自己的习惯。新到的步进电机我第一件事不是接驱动器而是先用手转一下轴感受阻尼再用万用表测任意两相之间的电阻。好的两相四线步进电机同一相的两个引脚之间电阻通常在几欧姆到十几欧姆不同相之间应该不导通。这个测试只要花两分钟却能帮你排除掉“电机线被标错”“内部断线”“单极双极混用”这三大类坑。调试步进电机时我还会在总线上放一个几十微法的大电解电容靠近驱动板电源端容量在47到470微法之间都可以。电机的每一拍都伴随着电流突变这个电容能吸收开关噪声、稳定母线电压对降低丢步和重启概率作用很明显。电容耐压要选大于电源电压2倍的比如24V电源就选50V耐压的电容。这套从原理、选型、接线、代码到闭环和FOC的方法陪我做过好几代设备希望也能帮你少走弯路。要是照着调完还是有问题多半出在电源和接线这两个看似不起眼的地方这两处往往是步进电机项目里隐藏最深的坑。
返回列表