前阵子整理项目资料翻到去年做的一套分度台程序正好是S7-200SMART控制步进电机的完整案例。前面几篇我把硬件接线、脉冲输出指令、正反转控制这些基础框架都梳理过了这一篇继续往深处写加减速曲线怎么做、回原点怎么回、手动点动怎么实现再加上现场调试时最容易踩的几个坑。如果你手头正有类似项目或者刚把S7-200SMART的定位控制玩到一半这篇应该能帮你省不少事。内容偏进阶一些默认你已经会用运动控制向导建轴、能写出最基本的GOTO定位程序。如果这些还不熟建议先把前三篇翻一遍再回来看。1. 系列回顾与本篇定位1.1 前面几篇解决了什么整个系列的逻辑是从硬到软、从跑到快的顺序。最开始是选型与接线讲步进驱动器的脉冲口、方向口、使能口怎么和PLC的晶体管输出点对接以及为什么必须用晶体管输出的ST系列CPU继电器输出的SR系列根本发不了高速脉冲。第二篇讲的是脉冲输出指令PTO和PWM的区别、PLS指令怎么用、运动控制向导怎么建轴。第三篇进入定位控制用AXIS0_GOTO实现了几个基本的点位运动讲了绝对定位和相对定位的差别。到这里一台步进电机已经能按照你的指令走起来了指哪打哪。但实际设备跑起来之后问题就来了启停瞬间电机会抖速度一快就丢步回原点每次都差那么一两个脉冲。这些问题靠前面那点基础解决不了必须往运动控制的细节里钻。1.2 本篇要啃的硬骨头这一篇集中在三个点上。加减速控制。为什么电机一快就丢步为什么启停会有冲击怎么用查表法实现平滑的速度过渡。这是步进电机项目从“能跑”到“跑得稳”的关键一步。回原点控制。绝对定位的前提是有一个可靠的机械零点回零方式选错了后面的定位精度全白搭。我会对比几种常用的回零方案并给出我实际验证过的配置流程。手动点动与完整控制段。设备调试时最喜欢用的就是手动正反转点动这部分的程序写法跟自动定位完全不一样需要考虑暂停、停止、急停的信号优先级。最后一部分是问题排查我把这几年现场遇到过的丢步、失步、发烫、振动、干扰问题集中整理成一套排查思路比单讲指令用法实用得多。2. 加减速控制为什么我用查表而不是默认斜坡2.1 步进电机为什么必须加减速先说原理越简单越好。步进电机的输出扭矩随着转速升高是下降的转速越高扭矩越小而启停瞬间需要克服的惯性又是最大的。如果你一上来就给电机一个很高的脉冲频率电机转子跟不上定子磁场的变化就叫丢步轻则定位不准重则直接堵转报警。反过来到位时如果突然停掉脉冲电机带着负载惯性冲过头同样会过冲。所以从低速到高速、再从高速到低速必须有一个过渡过程这就是加减速存在的意义。拿生活里的事打比方你开手动挡车起步挂一档慢慢走速度起来了再逐级升档停车时先松油门踩刹车减速不会直接挂倒挡往后拽。步进电机的加减速就是这个逻辑。2.2 运动向导内置加减速的局限S7-200SMART运动控制向导里确实有加减速时间的设置可以设定加速时间和减速时间。但我用了几次之后发现它做的是线性加减速也就是速度随时间均匀变化加速度恒定。线性加减速在低速小惯量的场合够用可一旦负载惯量偏大、运行速度偏高启停瞬间的冲击还是很明显。现场表现就是电机啸叫、机身抖动严重的时候丢步咕咕响。这时候就需要S形加减速。所谓的S形就是速度变化率本身也是渐变的加速初期加速度从零慢慢变大快到目标速度时加速度再慢慢归零。整个速度曲线看起来像字母S冲击小、噪音低、定位更稳。工业伺服电机普遍内置S形加减速但S7-200SMART的运动向导没给你这个选项。想实现S形就得自己动手用查表法来做。2.3 查表法怎么建表查表法的核心思路很直接把加减速过程中的每一个速度段对应的时间间隔预先算好存到一个数组里PLC运行时按顺序查表改变脉冲频率。这里的“脉冲频率”其实可以用“脉冲间隔时间”来表示。假设目标速度对应的脉冲周期是T加速起点对应的脉冲周期是T0我们把加速过程分成N段每一段的脉冲周期都按S形曲线的规律算出来存成一张表。运行时先按T0发若干个脉冲再按T1发若干个脉冲依次递增减速时从表尾往回走。表是怎么算出来的我一般用Excel生成关键公式如下。先确定加速时间t_acc、起始频率f0、终止频率f1把加速段分成N步。第i步的时间节点为ti t_acc × i / N用余弦插值来近似S形第i步对应的脉冲频率为fi f0 (f1 - f0) × (1 - cos(π × ti / t_acc)) / 2频率确定了脉冲周期自然就是Pi 1 / fi这张表就是运行时的核心数据。减速表跟加速表是对称的不用另算从表尾倒着用就行。需要说明的是这是我的常用做法不代表唯一答案。你也可以直接用五次多项式或者查标准数据手册里的曲线思路完全相同就是把每段的速度值预处理好。2.4 PLC端的执行方式表建好之后PLC端怎么跑是重点。S7-200SMART产生高速脉冲靠的是硬件PTO输出你不可能用普通定时器去翻转Q点速度一高根本来不及。我的做法是用PLS指令逐步修改PTO输出的频率。程序里维护两个关键变量一个是当前查表索引一个是当前表项需要维持的脉冲数。每隔若干毫秒触发一次查表更新把新的频率值写进去。大致的逻辑如下启动时设置起始频率f0对应的周期值。一个低频定时中断比如10ms里做一次查表索引加1。每次更新时把脉冲周期转换成频率值修改PTO对应的特殊寄存器。走到表尾后直接切到匀速段由高速计数器或者位置变量来判断是否进入减速段。减速开始后索引反向递减最终停在目标位置。有几个细节要注意。第一PTO运行中写频率寄存器是允许的S7-200SMART会按新频率继续发脉冲但过于频繁的改写可能导致波形毛刺所以查表更新的间隔不要太短实测10ms到20ms比较稳。第二表项之间的频率差不要太大不然又变成了阶梯加速失去S形平滑的意义。一般步数取100到200段就够用了。这种查表方式比运动向导自带斜坡复杂一些但换来的是可控性。你想改成S形、指数形还是自定义曲线只需换一张表程序主体完全不用动。3. 回原点控制方案选型与实操3.1 三种回零方式怎么选绝对定位用的坐标值必须建立在已知原点的前提上。每次上电后PLC不知道当前机械位置在哪必须先找一个物理参考点回零。工程上常见的回零方式有三种。第一种靠限位开关回零。机构朝一个方向运动碰到限位开关后停止把这个位置当作零点。成本最低但重复精度一般因为机械触点的重复响应位置会有偏差开关本身的安装位置也决定了原点精度。第二种原点开关加高速计数回零。机构先以较快的速度找原点开关碰到后减速再利用高速计数器对编码器或光栅信号计数找第一个Z相脉冲或者等间隔的索引信号把精确位置锁存为原点。这种方式精度很高但要求电机带编码器反馈成本高一些通常用于闭环步进或伺服。第三种原点开关加软件补偿。用原点开关确定大致零点然后在程序里做一个固定的偏移量把这个偏移补偿掉。简单说物理上回零到开关位置后再自动移动一个预设的距离最终停靠点才是真正的原点。这种方式适用于开关位置不容易精确调整的场合。对S7-200SMART控制普通开环步进电机的项目来说我强烈建议第三种方式。理由很简单步进电机没有编码器反馈Z相脉冲无从谈起硬要用第一种方式回零精度完全看开关的重复性和安装手艺做不出稳定的设备。3.2 硬件接线与输入点分配回原点方案确定后接线就跟着确定了。原点开关一般用NPN型接近开关或者机械限位开关接到运动控制向导里指定的输入点。这里要注意S7-200SMART的运动控制向导里有专门的停止输入、限位输入配置。建轴的时候向导会问你是否使用STP停止输入和LIM限位输入。我建议把原点开关信号接到STP输入上同时把限位开关接到LIM输入上这样硬件上就有了双重保护。我自己常用的分配是原点开关接近开关NPN常开接STP输入点。正限位机械开关常闭接正方向LIM输入。负限位机械开关常闭接负方向LIM输入。为什么原点开关用常开、限位开关用常闭这里有个逻辑在。限位开关用常闭断线了系统会报限位触发不会继续运动造成撞机这是安全设计里很重要的原则。原点开关用常开则更直观有效感应到铁块才导通程序判断上升沿即可。3.3 向导配置与AXISx_HOME使用要点在运动控制向导里配置好STP输入后回原点程序就有了硬件基础。运行时调用的指令块是AXIS0_HOME。AXIS0_HOME的触发逻辑要简单得多START给一个脉冲上升沿指令块会自动执行找原点序列。但找原点序列具体怎么走取决于向导里的配置和程序里设定的速度。向导里需要设置两个关键速度找原点开关的速度一般中速比如最大频率的30%和离开原点开关后的定位速度低速寻Z相或找停止点。如果用的是我说的第三种方式还需要在程序中额外计算偏移距离在回零完成后自动执行一次相对定位。实际调试时我习惯把回零过程分成两段来观察。第一段看电机是否朝正确方向寻找开关方向反了会直接撞限位必须在程序里设置好回零方向。第二段看回零完成后是否停在我们期望的原点位置如果每次都差一段固定的距离那问题多半出在偏移值上补上这个偏移即可。回零完成信号用AXIS0_HOME的Done输出程序里要等这个Done置位之后再允许自动定位否则坐标基准没建立后续的绝对定位都是错的。还有一个我踩过的坑运动轴向导里配置了STP停止输入后找一个急停程序也会用到这个输入点两者会冲突。后来我在向导里把STP的使用方式改成仅作为原点开关急停信号单独接普通输入点通过程序控制运动使能问题才彻底解决。4. 手动点动与相对定位的完整控制段4.1 用AXIS0_RUN实现连续运行设备的调试阶段手动点动是最常用的功能。操作员按着正转按钮电机连续正转松开停止或者用旋钮控制低速运行观察机械动作。这个功能用AXIS0_GOTO做并不合适因为GOTO是一次性定位指令你没法让它“一直走”。S7-200SMART的运动控制指令里AXIS0_RUN可以解决这个问题。AXIS0_RUN有两种模式一种是连续运行一种是单段运行。点动用的就是连续运行模式。程序逻辑不复杂正转按钮按下时给AXIS0_RUN的RUN端子置位同时把速度设成点动速度。按钮松开时RUN端子复位指令块内部会执行减速停止。这里有一个细节必须注意RUN端子是电平触发的不是边沿触发的。这意味着你只要保持置位电机就会一直运行不会像GOTO那样跑完一段就自己停。按钮松开之后要记得把RUN端子复位同时要等AXIS0_RUN的Done信号出现才能进行下一次运动指令。我见过有人在这个地方犯过迷糊Done信号没复位就发下一条指令结果轴卡在那里不动。4.2 相对定位与绝对定位的选择点动之外自动过程中最常用的是绝对定位和相对定位。绝对定位的目标位置是相对于原点的坐标值例如回到零点、走到第10号工位这种场景用AXIS0_GOTO的Mode为0。相对定位的目标位置是相对于当前坐标的增量比如当前位置往前走200个脉冲用Mode为1。好多初学的朋友搞不清什么时候用哪个。我总结的经验是你的目标位置是否依赖当前环境。如果工位位置是固定的、坐标系是从零点开始建立的用绝对定位。如果只是要“再往前走一小段”比如排料机构每次推一个料用相对定位。两种方式混着用也常见。设备上电回原点后坐标系从零点开始自动流程里用绝对定位走到各个工位工位完成后用相对定位走一个小距离的补偿推进。做程序架构时要把这两种运动指令分开封装方便维护。4.3 启停逻辑与急停处理手动和自动模式的切换必须在程序里做严格的互锁。我的做法是加一个运行模式标志位手动模式下自动定位指令的启动条件不成立自动模式下点动按钮失效。急停处理比模式切换更重要。急停按钮按下后电机必须立即停止不受加减速过程影响。这时有两个方案一是把急停信号接进运动向导的STP输入由硬件直接中断脉冲输出二是在程序里调用AXIS0_STOP指令执行减速停止。我的建议是硬件急停和软件停止都用起来。紧急停止时PLC通过硬件STP输入立即停止脉冲而不是等软件扫描周期反应过来这一步能避免高速运行时的撞机。等急停复位后还需要一个重新建立坐标原点的流程因为急停瞬间机械位置和PLC记录的坐标可能已经不一致了。如果设备做的是单轴步进控制整个启停逻辑的控制程序我通常控制在60行梯形图以内就能完成。模式切换、点动、定位、急停、报警复位这些功能不要堆在一条指令上拆成独立的网络调试时每条指令单独使能排错效率高很多。5. 常见问题与排查技巧实录5.1 丢步失步的排查思路丢步是步进电机项目里最烦人的问题现象就是定位位置一次比一次偏或者运行过程中电机咔咔响。排查顺序我一般按下面几步走。第一看频率。步进电机的启动频率是有限制的如果你直接以高频启动丢步几乎是必然。解决办法就是加减速把启动频率降到电机能可靠启动的范围再逐步加速。第二看扭矩。选型时电机扭矩一定留够余量负载惯性大了电机瞬间输出扭矩不够一样丢步。排查时用手转一下负载感受阻力和转动惯量觉得明显偏重就得换大一号电机或驱动器。第三看驱动电流。驱动器上的拨码开关设定电流如果低于电机额定电流输出扭矩不够。把电流调到电机额定值附近实测一下很多丢步问题其实出在驱动电流设置上。第四看脉冲信号质量。干扰是高频丢步的常见原因。脉冲线要双绞最好是屏蔽线屏蔽层单端接地。走线要远离动力线驱动器和PLC共地不能浮空。5.2 干扰与接线问题S7-200SMART和步进驱动器在同一个控制柜里干扰问题最容易出现在脉冲线上。脉冲频率越高线长越长越容易被变频器、接触器这些设备干扰。具体表现就是偶发性丢步、偶尔多走一段、位置偏差没有规律。收拾这种问题我有一套固定操作脉冲线、方向线用双绞屏蔽线屏蔽层在PLC侧单端接地。脉冲线尽量短超过两米就要考虑加分线器或转成差分信号。驱动器电源加滤波器PLC和驱动器分开供电避免DC24V共用产生压降和纹波。接触器线圈并联RC吸收或压敏电阻防止拉弧干扰。做完这几步大部分干扰问题都能解决。如果还有问题就要怀疑是不是驱动器没接地或者接地电阻太大重新打一根接地线试试。5.3 温度与噪音问题步进电机的温度高是正常现象但太高就不正常了。驱动器输出的是恒流电机静止时电流一直在绕组里发热如果控制不住会影响力矩和寿命。解决思路有两个。一是降低驱动电流在满足力矩的前提下电流调到偏小一档发热明显下降。二是启用驱动器的自动半流功能电机静止超过设定时间后驱动器自动把电流降到一半这个功能在多数驱动器上都默认有只是很多人没注意。噪音问题通常和电机运行频率有关系某个速度区间会有一个共振点表现为电机嗡嗡响、震动大。解决办法是调整加减速曲线的速度段或者把工作速度避开共振区间。偶尔也会遇到驱动器内部斩波频率产生的电磁噪音换一个静音模式的驱动器能改善不少。5.4 经验小技巧最后分享几个我自己的习惯做法不算什么高深技术但能省不少事。第一程序的坐标单位最好统一成实际物理单位。比如丝杆导程是5mm电机转一圈需要200个整步或者更细的细分那就把每个脉冲对应的移动距离算清楚程序里直接用mm不要一直用脉冲数。这样操作界面显示直观调试时不用脑内换算。第二回原点之前不要进入自动模式。我在设备上电初始化逻辑里会强制要求先执行回原点否则自动模式无法启动。这能避免找不到坐标系就开始干活导致的撞机。第三运动控制向导建轴之后把生成的指令块封装成自己定义的子程序接口统一用速度、位置、启动、完成状态。以后换设备、换电机只要改向导配置就行了主程序不用动。第四现场调试时高频脉冲能不能稳定输出可以用S7-200SMART的高速计数器接一个脉冲输出口回测验证硬件链路是否正常。这招排查硬件问题特别快。实际做下来S7-200SMART控制步进电机的水准完全够用只要把接线、加减速、回原点这几个环节处理妥当稳定性和精度都不输给大牌专用运动控制器。调试遇到问题时按照我上面这套排查顺序走一遍十有八九能定位到源头。