西门子PLC控制步进电机,接线和编程是新手最容易踩坑的两个环节。最早我接触步进电机时也犯过迷糊:明明程序写了脉冲输出,电机却纹丝不动;调了半天发现是输出极性接错;换了一台驱动器,又出现电机锁死的情况。后来在几台小设备上跑通了,才把整套链路摸清楚。这篇文章就把西门子PLC控制步进电机从选型、接线、驱动器参数设置到编程调试的完整流程拆开讲,重点回答三个问题:脉冲怎么发、线怎么接、参数怎么算。适合刚入门想做小型自动化设备的朋友,也适合在现场遇到问题不知道从哪排查的人。
你只要有一台西门子S7-200 SMART或S7-1200 PLC、一台带脉冲/方向接口的步进驱动器、一台两相步进电机,就可以按下面的步骤复现。先把原理讲透,再给接线实例,然后是编程和调试,最后是高频故障排查。整个项目最关键的一句话放在前面:步进电机控制从来不是程序难,而是接线和参数匹配最容易出错。
1. 控制方式与选型怎么定
1.1 步进电机到底需要什么信号
步进电机本身不能直接接220V转起来,它需要驱动器把脉冲信号转换成定子绕组的电流序列。驱动器每接收一个脉冲,就控制电机转过一个固定的角度,也就是步距角。常见两相步进电机的步距角是1.8°,也就是200个脉冲转一圈;如果驱动器把细分设为8,那么一个脉冲对应1.8°除以8,等于0.225°,转一圈需要1600个脉冲。这就是PLC控制步进电机最基本的关系。
所以PLC的任务不是给电机供电,而是按需求输出一定数量的高速脉冲,同时给出一个方向电平。脉冲个数决定位置,脉冲频率决定速度,脉冲方向决定正反转。这听起来很简单,但很多项目恰恰是这里出了问题:普通数字输出点不能输出高频脉冲,或者频率不够,导致电机要么不转、要么咔哒咔哒抖动。
还需要说清楚一件事:步进电机和伺服电机不一样,它没有编码器反馈,属于开环控制。PLC发出1600个脉冲,驱动器就认为电机转了一圈,但如果负载过大、加速太猛或者脉冲被干扰,电机丢步了,PLC并不知道。所以设计时不能把精度完全寄托在脉冲数量上,机械结构、加减速时间和负载余量都要留够。
1.2 为什么必须是晶体管输出
选PLC第一件事看输出类型。继电器输出只能做开关,响应速度是毫秒级,根本不能输出高频脉冲;晶体管输出才支持高速脉冲输出。西门子这条路线相对明确:S7-200 SMART的ST系列,或者S7-1200标准CPU的晶体管输出版本,才可以用运动控制功能。如果你手里是一台继电器输出的CPU,比如S7-200 SMART的SR系列,那不管程序怎么写,都没有真正的高速脉冲输出通道,这是很多新手一开始就选错的地方。
具体来说,S7-200 SMART的ST20、ST30、ST40、ST60这些型号,Q0.0和Q0.1两个点可以输出高速脉冲,硬件上最高到100kHz左右;S7-1200 CPU本体也有高速输出点,同样能达到100kHz以上,具体看CPU型号。100kHz对步进电机意味着什么呢?以细分8、步距角1.8°的电机为例,它转一圈需要1600个脉冲,100kHz对应的理论转速是62.5转/秒,也就是3750转/分钟。这个数字早就超过步进电机的实际可用转速,实际带负载跑到300到600转/分钟就不错了。所以100kHz在绝大多数步进应用里是够用的,瓶颈通常不在PLC,而在电机高速时的转矩下降。
另外要注意,高速脉冲输出和普通输出在物理上是同一个端子,但底层由PLC内部硬件电路直接产生,不占扫描周期。这一点和你用普通输出点在程序里反复置位复位完全是两码事,千万别用普通输出点的思路去做定位控制。
1.3 PLC型号怎么选:S7-200 SMART还是S7-1200
小型单机设备用S7-200 SMART就够,性价比高,运动控制向导做点位控制非常方便,适合2轴以内的步进电机控制。如果你只是控制一两台步进电机,配合触摸屏、气缸、传感器做一台小型专机,S7-200 SMART完全能胜任。它最大的好处是调试工具简单,项目树里直接有“运动”向导,生成代码后调用子程序就行。
S7-1200则适合需要多轴联动、复杂运动控制、大量IO和通讯的场合。比如一台设备上既有步进电机,又要和变频器走Modbus通讯,还要接以太网和上位机交互,S7-1200的资源更充裕,TIA Portal里的Motion Control指令也更灵活。再往上还有S7-1500,能力更强,但对于普通步进电机项目有点杀鸡用牛刀,成本也高。
选型时还要留好输出点。一个步进电机轴至少需要一个高速脉冲输出点、一个方向输出点,如果还需要使能控制,就再加一个点。再加上限位、原点、报警等信号,一个轴通常会占掉3到4个输入点、2到3个输出点。4个轴就是10多个点,选CPU时不要只看总数够不够,还要确认Q0.0和Q0.1这两个高速通道有没有被占用。
2. 接线前必须搞懂的三个匹配关系
2.1 共阳极还是共阴极:西门子和三菱恰好相反
步进驱动器的脉冲输入端子通常是光耦隔离,标着PUL+和PUL-。光耦两端有了正向压差就会导通,驱动器就认为来了一个脉冲。方向信号同理,DIR+和DIR-。所以接线最关键的是搞清公共端的接法。
驱动器说明书里通常会给出两种接法:共阳极和共阴极。共阳极是PUL+接公共正极、PUL-接PLC输出点;共阴极是PUL-接公共负极、PUL+接PLC输出点。日系PLC,比如三菱FX3U,晶体管输出是漏型,输出导通时输出点接近0V,所以用共阳极接法:PUL+接24V正,PUL-接PLC输出点。西门子的晶体管输出则不一样,S7-200 SMART和S7-1200大部分输出通道是源型,输出导通时输出点输出+24V,所以要用共阴极接法:PUL-接0V,PUL+接PLC输出点。
这里就是很多人照抄三菱图纸后电机完全没反应的原因。如果你把西门子的Q0.0接在PUL-上,而PUL+接了24V,那么PLC输出导通时Q0.0变成高电平,光耦两端没有压差,脉冲根本进不到驱动器里。调试时必须确认PLC输出类型和驱动器输入电路是否匹配,不要被“别人这样接能转”的经验误导。
2.2 一张接线实例:S7-200 SMART + DM542
以常见的两相步进驱动器DM542和S7-200 SMART ST20为例。DM542的端子一般标PUL+、PUL-、DIR+、DIR-、ENA+、ENA-,以及电机绕组A+、A-、B+、B-。如果要用PLC控制脉冲、方向和使能,共阴极接法如下:
- PLC Q0.0 接驱动器 PUL+,形成脉冲通道。
- PLC Q0.2 接驱动器 DIR+,形成方向通道。
- PLC Q0.3 接驱动器 ENA+,形成使能通道。
- 驱动器 PUL-、DIR-、ENA- 并在一起,接 PLC 的 0V。
- 步进电机 A+、A- 接驱动器 A+、A-;B+、B- 接驱动器 B+、B-。
这样连接后,当PLC某一路输出导通,输出点为高电平,电流从PLC输出点流入驱动器光耦,再从驱动器公共端回到0V,光耦正常导通。方向信号和使能信号也都是24V驱动。如果驱动器输入接口是5V规格,直接接24V可能烧限流电阻,需要串入2k到4.7k的电阻,或者按照驱动器手册换接法。
使能信号ENA是很多新手栽跟头的地方。不同驱动器的使能逻辑不统一,有些悬空是使能,有些悬空是禁能,有些要接低电平才让电机锁轴。如果PLC控制使能,必须先看驱动器说明书里的有效电平,再把PLC输出逻辑写成一致。如果不用PLC控制使能,最安全的做法是把ENA+和ENA-都悬空,或者按说明书设成默认使能。很多电机上电不转,查下来就是ENA信号接反,驱动器被禁能了,电机完全不受脉冲控制。
2.3 电源、地线与抗干扰的细节
步进驱动器电源一般有DC24-48V或AC20-80V几种规格,具体看驱动器型号。供电电流建议按电机相电流的1.2到1.5倍留余量,比如驱动器输出电流3A,配一个48V/5A的开关电源比较稳。千万不要为了省钱选刚刚够的电源,电机加速、堵转瞬间电流会明显上升,电源电压跌落会让驱动器欠压报警,甚至导致丢步。
PLC和驱动器的0V最好共地。如果不共地,PLC输出高电平和驱动器0V之间可能存在电位差,导致光耦导通不可靠。但注意,驱动器大电流回路不要串到PLC的0V线上。正确做法是驱动器电源负、PLC的0V在同一个接地点汇合,而不是让电机电流经过PLC的0V线。地线处理不好,轻则电机抖动,重则PLC死机或通讯异常。
脉冲信号线要用双绞屏蔽线,屏蔽层单端接地,通常接在控制柜的PE地或PLC侧接地。不要两端都接,否则屏蔽层会成为地环路,反而更容易引入干扰。脉冲线、方向线要和电机线、动力线分开走,不要穿同一根金属管。现场变频器多、干扰大的时候,给PLC电源加个滤波器,或者在脉冲线上套磁环,都能减少干扰导致的丢步。
3. 驱动器参数与脉冲当量计算
3.1 拨码开关:电流、细分、半流一个都不能错
步进驱动器上通常有一排拨码开关,不同品牌略有差异,但功能基本是电流、细分、半流和脉冲模式。电流档位一定要和电机额定电流一致。设置小了,电机力矩不足,稍微带点负载就丢步或堵转;设置大了,电机发热严重,长时间运行还可能损坏绕组。判断电流有没有设对,最直接的办法就是摸电机温度,运行半小时后如果电机烫到不能长时间手摸,通常就是电流偏大。
细分档位决定电机转一圈需要多少个脉冲。常见设置是8细分或16细分,我一般建议先设8细分。细分太高,同样的机械速度需要更高脉冲频率,对PLC高速输出上限和驱动器响应能力都提出要求;细分太低,电机低速振动大,运行不平稳。细分不是越高越好,步进电机的定位精度主要靠机械传动和电机本身,细分更多是改善振动和噪声。
半流功能是电机静止时自动把电流降下来,减少发热。如果设备在一个位置保持不动的时间比较长,打开半流能明显改善电机和驱动器温度。但在垂直负载或者需要大力矩锁轴的场合,半流会导致保持力矩下降,外部力可能把轴推动,这时不要打开半流,或者配合机械抱闸使用。
3.2 算清脉冲当量:一个脉冲走多少毫米
脉冲当量是PLC运动控制里最基础也最容易算错的参数。它表示一个脉冲让机械末端移动多少毫米。计算分两步:先算电机转一圈需要多少脉冲,再算机械末端移动多少距离。
以两相步进电机步距角1.8°为例,电机每转需要360/1.8=200个脉冲;如果驱动器细分设为8,则电机转一圈需要200×8=1600个脉冲。假设丝杆导程是5mm,电机转一圈,工作台移动5mm,那一个脉冲对应的位移就是5/1600=0.003125mm。这个值就是脉冲当量。
如果电机和丝杆之间有减速机构,还要把减速比乘进去。比如电机和丝杆之间是1比2减速,也就是电机转2圈丝杆才转1圈,那么电机转2圈工作台才移动5mm,一个脉冲对应位移是5/(1600×2)=0.0015625mm。这个值会明显影响定位精度,不要漏掉减速比。
在S7-200 SMART的运动控制向导里,可以选择把单位设成mm,并填入脉冲当量。这样程序里写目标位置100,实际就是100mm,调试的时候非常直观。如果直接按脉冲数编程,也能跑,但可读性差,换维护人员后很难理解目标值到底是位置还是脉冲数。
3.3 脉冲模式、限流、供电电压的调整
很多驱动器支持单脉冲和双脉冲两种模式。单脉冲就是脉冲加方向,PUL发脉冲,DIR控制方向,这是PLC运动控制最常用的方式。双脉冲也叫CW/CCW模式,正转走PUL,反转走DIR,两个端子都需要发脉冲。如果拨码设成了双脉冲,PLC又只发一路脉冲和一路固定方向,电机要么不转,要么只能单方向转。调试时先确认这一项。
驱动器的供电电压对高速性能影响很明显。同样是步进电机,48V供电的驱动器在高速时的转矩保持能力通常比24V好。因为步进电机绕组的电流建立速度受母线电压影响,电压越高,高速时电流爬升越快,力矩下降越平缓。如果你的设备需要在较高速度下运行,尽量选支持更高供电电压的驱动器。
还要注意驱动器输入接口的限流电阻。有些微型驱动器是5V接口,接24V时容易烧,需要串电阻或改用低电平输入。接线前先看驱动器型号对应的规格书,不能只看端子标号就动手。
4. PLC编程实操
4.1 S7-200 SMART运动控制向导配置流程
S7-200 SMART用的是STEP 7-MicroWIN SMART软件。在项目树里找到“运动”功能,双击启用轴0。向导会依次让你配置脉冲输出点、方向输出点、测量单位、脉冲当量、最大速度、启动停止速度、JOG速度、回原点方式等参数。
轴0默认使用Q0.0作为脉冲输出,方向信号可以选择Q0.2或其他输出点。这里有一点很重要:方向信号不一定要用Q0.0旁边的点,向导里可以自由指定任意数字量输出。但脉冲输出点Q0.0和Q0.1是固定的,不能改到普通输出点上。配置完向导后,点击生成,软件会自动生成AXIS0_CTRL、AXIS0_GOTO、AXIS0_MANUAL、AXIS0_RSEEK、AXIS0_STOP等子程序。
在主程序中,第一步要调用AXIS0_CTRL,把它放在SM0.0常通条件上,让运动轴使能。这个调用是基础,不调用它,轴不会工作。之后需要点动时调用AXIS0_MANUAL,需要定位时调用AXIS0_GOTO,需要回原点时调用AXIS0_RSEEK。这些子程序的输入输出接口在软件里都有对应说明,生成之后可以在“调用子程序”的管脚上看到注释。
4.2 主程序调用指令的思路
举个例子。假设你有一个启动按钮接在I0.0,按下后要让工作台走到100mm位置。可以在I0.0的上升沿置位一个内部位M0.0,然后用M0.0去调用AXIS0_GOTO。AXIS0_GOTO的输入管脚有使能、位置、速度、模式方式。位置填100.0,速度填50.0,模式选绝对定位。当运动轴到位后,Done输出会给一个脉冲信号,用它来复位M0.0,这样一次启动动作就完成。
这个过程没有用到复杂指令,本质就是把向导生成的子程序当作功能块来调用。要注意的是运动轴指令是异步执行的,你调用AXIS0_GOTO只是把命令下发给轴,不是PLC扫描完这一周期就到位了。所以判断动作完成一定要看Done位或Error位,不要在启动后立刻去执行下一个需要“已经到位”的动作。
急停逻辑也要单独做。遇到紧急情况,直接调用AXIS0_STOP让轴停止,同时输出一个指示灯。S7-200 SMART的运动轴自身有停止指令,但急停按钮的硬接线最好还是直接切断使能或通过安全回路控制,不要只依赖程序,这样才能保证断电或PLC故障时也能停下来。
4.3 S7-1200/S7-1500运动控制指令简介
S7-1200和S7-1500在TIA Portal里用统一的Motion Control指令,结构比S7-200 SMART更规范。先在PLC项目中新建一个“轴”工艺对象,分配硬件输出点:脉冲通道选Q0.0或Q0.1,方向输出选一个普通DO;然后在工艺对象里组态机械机构,填入脉冲当量、最大速度、加速度等参数。
编程时主要调用这几个指令块:
- MC_Power:轴使能,Enable端必须一直为TRUE。
- MC_Home:回原点,确定零位。
- MC_MoveAbsolute:绝对定位。
- MC_MoveRelative:相对定位。
- MC_MoveVelocity:速度运行。
- MC_Stop:停止。
MC_Power是基础,轴在组态结束后不会自动使能,必须在程序中调用MC_Power。MC_MoveAbsolute和MC_MoveRelative的Execute端是边沿触发,通常用R_TRIG把它和启动信号连起来,确保命令只下发一次。轴的Error信息可以接到报警画面,方便现场快速定位问题。
4.4 一个相对定位程序示例
我用S7-1200的风格写一个简化的调用思路。假设轴工艺对象名称叫Axis_1,启动信号来自HMI上的M100.0。在主程序里先调用MC_Power,将Axis_1连接到MC_Power的Axis管脚,Enable输入接TRUE。然后定义一个R_TRIG实例,检测M100.0的上升沿,上升沿到来时调用MC_MoveRelative,Distance填100.0,Velocity填50.0,表示相对当前位置正向移动100个用户单位,速度50单位每秒。
用户单位取决于你在工艺对象里设置的分辨率。如果你在组态时填了脉冲当量0.003125mm/脉冲,并把单位设为mm,那Distance填100就是100mm。程序里不需要关心到底发了多少个脉冲,PLC会根据脉冲当量自动换算。但你要清楚这个换算关系,否则别人改机械机构后,只改程序不换脉冲当量,定位距离就会全部偏掉。
这一段虽然写的是S7-1200,但S7-1500的用法几乎一样,只是工艺对象功能更强。如果你只需要做简单定位,S7-1200完全够用。
5. 调试、避坑和常见问题排查
5.1 上电第一件事:先手动发脉冲测试
我调试步进电机的习惯是:先不写自动程序,先用手动JOG功能发低速脉冲让电机转起来。S7-200 SMART的运动控制向导里带有手动测试画面,可以设速度、点正转或反转按钮。S7-1200可以用MC_MoveVelocity给定一个速度,或者用TIA里的轴调试面板。手动能转,说明接线、使能、脉冲通道基本正常,后面再写自动程序心里就有底了。
手动测试时速度从很低的频率开始,比如50到100Hz。如果电机不转但发出嗡嗡声,说明脉冲到了但力矩不够或者相序不对;如果完全没声音,先查脉冲线、方向线和使能线。用万用表量PLC输出点有没有电压变化,或者看驱动器的脉冲指示灯有没有闪烁,这一步能快速把问题缩小到PLC输出、接线、驱动器设置三段中的某一段。
5.2 高频故障速查表
下面这些是我在实际项目里遇到最多的故障,整理成表格方便对照排查。
| 故障现象 | 可能原因 | 处理方法 |
|---|---|---|
| 电机完全不动,无声音 | PLC输出类型不对,没脉冲输出 | 换成晶体管输出CPU或确认高速通道 |
| 电机完全不动,无声音 | 使能信号把电机禁能了 | 查ENA接法,悬空或按说明书设置 |
| 电机完全不动,无声音 | 脉冲线接反或断线 | 检查PUL+、PUL-接线,看驱动器脉冲灯 |
| 电机只抖动不转 | A/B相序接错 | 互换A+ A-或B+ B-其中一组 |
| 电机只抖动不转 | 脉冲频率太低,处于低频共振区 | 提高速度,避开低频共振点 |
| 电机只抖动不转 | 电流档位设太小 | 按电机额定电流重新设置 |
| 运行中丢步 | 加速时间太短 | 增大加减速时间,降低最大速度 |
| 运行中丢步 | 负载过大或机械卡顿 | 检查机械,换更大电机或驱动器 |
| 方向反了 | DIR信号极性反 | 交换DIR+和DIR-,或程序中方向取反 |
| 上电锁不住轴 | ENA默认禁能 | 确认使能逻辑,不接使能时保持悬空或接无效电平 |
| 速度上限上不去 | 细分太高或PLC脉冲频率上限不够 | 降低细分,检查算出的最大速度 |
| 高速丢步严重 | 干扰导致脉冲丢失 | 用双绞屏蔽线,单端接地,加磁环 |
这些故障大部分不是程序问题,而是接线和参数设置问题。程序再复杂,只要脉冲链路不通,电机就是不动。
5.3 调试顺序和几个容易忽略的细节
我的调试顺序是:先空载,把电机从丝杆上拆下来,让电机不带负载空转;确认空转正常后,再连丝杆;先低速后高速,先点动后自动,先单轴后联动。每一步都用万用表确认电源电压和信号状态,不跳步。这样一旦出错,范围非常小,几分钟就能定位。
还有几个细节值得单独提醒。第一,驱动器拨码开关修改后,通常需要重新上电才生效,不是改完立即生效。第二,方向信号和脉冲信号同时变化时,有些驱动器会对第一个脉冲的方向判断错误。一般要求方向信号先于脉冲信号建立几微秒到十几微秒,PLC的运动控制向导会自动处理这个时序,但用第三方脉冲发生装置时要特别注意。第三,回原点时如果原点开关是常闭接法,回零方向一定要匹配,否则轴一出发就撞上限位。
PLC和驱动器的供电要合理。驱动器的电源正极和负极最好直接接到开关电源上,不要和PLC的24V传感器电源混用。PLC输出给步进驱动器的是信号,不是功率电,不要把电机大电流拉到PLC输出点的公共端上。否则轻则输出点发热,重则把PLC内部电路烧掉。
5.4 关于Modbus通讯同时控步进的一个补充
我这里额外提一个很多人混淆的点:有人问,一个西门子PLC又要带32台变频器走Modbus通讯,又要控制步进电机,能不能行?答案是能行,但要分清资源。Modbus通讯占用的是PLC的串口或以太网口,步进电机控制占用的是硬件高速输出点,两者不是同一个资源。只要PLC的程序扫描周期能承受通讯轮询的负荷,运动控制指令没有被通讯任务拖得太慢,通常可以同时做。
但要注意,Modbus通讯一多,通信周期就会变长,可能数百毫秒才轮询完一轮。这种情况下,不要用通讯指令去给运动轴实时下发位置,因为实时性不够。正确的做法是让PLC执行既定位置程序,通讯指令只做状态监控和参数修改。急停、回零、限位这些和安全、精度相关的逻辑,必须放在PLC硬件扫描程序里,不能依赖通讯去驱动。
写到最后说点自己的体会
西门子PLC控制步进电机这套东西,主线就那么长:选型、接线、设置驱动器、用运动指令发脉冲、调试。我在实际项目里最大的体会是,这种小系统80%的问题出在接线和参数设置上,程序反而是最简单的一部分。遇到电机不转,先别急着改程序,按“电源—使能—脉冲—方向—相序”这个顺序查一圈,往往几分钟就能找到原因。
最后再分享一个小技巧:第一次跑通后,把脉冲当量、细分、加减速时间、方向逻辑这些参数记录在程序注释和电气图纸里。别嫌麻烦,过两个月设备出问题,或者同事接手维护,这份记录能帮你省下大量排查时间。项目做得多了就会发现,真正影响设备长期稳定性的,不只是一段能跑的程序,而是这些看似不起眼的细节有没有被认真对待。