做设备控制的同行,大概率都在“高速脉冲”上栽过跟头。我第一次用FX3U控制伺服滑台,以为脉冲输出就是普通DO点快速一通一断,随手把信号接到了Y005上,结果电机纹丝不动。查了半天手册,才发现FX3U的高速脉冲输出只固定在Y000、Y001、Y002这三个特殊口上,普通输出点根本没有这个能力。把线挪到Y000、频率写到10kHz之后,电机才总算转得又稳又准。那段经历让我彻底明白一个道理:FX3U的定位控制能力,核心就压在“高速脉冲输出”这六个字上,选对通道、写对指令、算对参数,伺服和步进电机才会真正听你的。
这篇文章我会围绕硬件选型、五条核心指令、脉冲当量换算、完整项目案例、调试坑位排查这几个角度,把FX3U高速脉冲这件事讲透。不管你是电气工程师、设备调试人员,还是刚接触三菱PLC定位控制的学习者,按这条线走一遍,基本能避开绝大多数新手期的弯路。
1. 为什么定位控制绕不开高速脉冲输出
1.1 普通DO点与高速脉冲的本质区别
很多人刚接触定位控制时,脑子里只有一个朴素的疑问:电机要转起来,给驱动器不断的开关信号不就行了?理论上没错,但问题出在“频率”上。步进驱动器或伺服驱动器接收的脉冲信号,频率通常在几千赫兹到几十千赫兹之间。FX3U的普通晶体管输出口,靠程序扫描周期去翻转,一个扫描周期可能就要几毫秒,算下来输出频率顶多几百赫兹。这个频率驱动慢速送料勉强能看,但放在丝杆滑台、转台这类需要匀速、精停的设备上,电机要么抖得跟筛糠一样,要么直接丢步报警。
高速脉冲输出口不一样。它是PLC硬件层面的专用通道,由CPU内部的高速硬件直接产生脉冲串,不占用程序扫描周期,频率可以做到稳定且可控。FX3U的Y000和Y001最高能输出100kHz,Y002也能到32kHz。100kHz放到丝杆导程10mm、脉冲当量0.005mm的滑台上,对应的移动速度是500mm/s,绝大多数中小型设备已经绰绰有余。
1.2 高速脉冲口能干什么,不能干什么
搞清楚这个边界特别重要。高速脉冲口本质上只负责两件事:输出指定频率的脉冲串、输出方向信号。它本身不判断电机实际转没转,也不反馈位置,所以它擅长的是“开环定位”——PLC发多少个脉冲、驱动器就转多少角度、机械就移动多少距离。这套逻辑主要用在步进电机控制,以及不带全闭环位置反馈的伺服控制场景。
如果设备上装了编码器、光栅尺,需要PLC实时读取实际位置来做闭环修正,那就要动用FX3U的高速计数器功能,让脉冲反馈信号从X0、X1等高速输入口进来,再配合程序做比较和修正。很多初学者把高速脉冲输出和高速计数器混为一谈,这俩其实是两条技术路线:一个往外出脉冲,一个往内读脉冲。搞混了,程序怎么写都会觉得逻辑别扭。
2. 硬件选型与接线:先确认你的PLC带不带高速脉冲能力
2.1 继电器输出型FX3U的硬伤
这是所有坑里最致命的一个。FX3U分为继电器输出型和晶体管输出型,型号上的区别就在最后一个字母:FX3U-32MR/ES是继电器输出,FX3U-32MT/ES是晶体管输出。如果你手上是R结尾的PLC,那很遗憾,不管怎么改程序,都没办法输出高速脉冲。继电器输出口的物理结构决定了一切:继电器触点吸合断开有机械延迟,频率稍微拉高,触点根本反应不过来,而且频繁通断会严重缩短继电器寿命。
所以选型阶段就要定死:准备用FX3U控制伺服或步进电机,必须选晶体管输出型。如果是已经买了继电器型的设备,也别急着退货,FX3U本体上通常可以扩展高速脉冲输出模块,例如FX3U-2HSY-ADP这类适配器,插在PLC左侧就能扩展出高速脉冲通道。不过加扩展模块涉及额外的接线、参数配置,成本也不低,预算允许的情况下还是一步到位选晶体管型省心。
2.2 晶体管输出的源型与漏型,接线别接反
晶体管输出还分源型和漏型。FX3U最常见的漏型输出(NPN),公共端接24V正极,每个输出口输出低电平时电流从外部流入PLC。源型输出(PNP)反过来,公共端接0V,输出高电平时电流从PLC流出。国内市面上流通的FX3U-32MT/ES绝大多数是漏型,但ESS结尾的源型也有,接线前务必翻一下PLC上的铭牌。
接伺服驱动器时,驱动器的脉冲输入端一般会有24V公共端和信号端。漏型PLC接法通常是:把24V接到驱动器脉冲输入的公共端,把Y000接到驱动器脉冲信号输入端。整个回路是24V正极从驱动器公共端进、通过内部光耦、再流回PLC的Y000口。源型PLC则要把公共端接法反过来。这里我不会给你死记硬背的结论,因为不同品牌、不同系列的驱动器端子定义都不完全一样,但核心原则不会变——保证PLC输出导通时,驱动器内部的光耦能形成完整电流回路。用万用表量一下导通电压和电流,比对着手册猜要稳得多。
2.3 接线防抖:不要在脉冲线上串继电器
调试现场最常见的骚操作,是有人觉得PLC输出电流不够,或者想保护PLC端口,在脉冲输出线上串一个中间继电器。低速逻辑信号这么干问题不大,但高速脉冲这么干,十有八九会丢步。继电器触点本身有抖动,接触电阻也不稳定,在几kHz到几十kHz的脉冲频率下,抖动会被直接当成有效脉冲发给驱动器,要么电机多走一段,要么驱动器直接报错。
如果实在需要隔离,建议选专门的高速光耦隔离模块,或者直接改用带差分输出的定位模块,别在信号完整性上贪便宜。脉冲信号、方向信号都要跟动力线分开走线,至少保持10厘米以上的间距,实在避不开就加屏蔽层并单端接地。这些细节看起来不起眼,但在高频脉冲下,现场变频器和电机线产生的干扰随时可能让你的位置乱跳。
3. 五条核心指令逐个拆解:发多少、发多快、去哪里
3.1 PLSY与DPLSY:无加减速的连续脉冲输出
PLSY是三菱PLC里最基础的脉冲输出指令,格式长这样:
PLSY D0 D1 Y000D0存脉冲数,D1存频率,Y000是脉冲输出口。如果把脉冲数设成常数K0,指令会连续输出脉冲,直到条件断开才停止。DPLSY是32位版本,D0和D1组成32位数据,适合脉冲数超过32767的场合。
这个指令的特点是简单、直接、没有加减速过程。启动瞬间频率直接跳到设定值,停止瞬间频率直接掉到0。用在匀速送料、间歇进给这类对启停平缓性要求不高的场景,效率很高。但用在定位滑台上就有个隐患:启动瞬间冲击大,电机会有轻微的过冲;停止时没有任何减速过程,拖着负载高速冲过去再急停,滑台容易因为惯性滑出目标位置。
我第一次做步进滑台项目时就用了PLSY,前几次定位看着还行,等速度提到20kHz以上,每次停止位置都差那么零点几毫米,后来换成PLSR才算解决。定位精度要求高的项目,别贪图指令简单。
3.2 PLSR:带加减速的定位脉冲,防丢步的关键
PLSR指令在PLSY的基础上,强制加入了加减速时间。格式:
PLSR D0 D1 D2 Y000D0是最高频率,D1是总脉冲数,D2是从0Hz加速到最高频率所需的时间(单位毫秒),Y000是输出口。32位版本写作DPLSR。
执行时,电机从静止开始,在D2设定的时间内线性加速到D0频率,保持匀速走一段,脉冲数剩得差不多时再按同样的时间减速到0,最终停在目标位置。加减速的存在,让电机和负载不会在瞬间承受过大的力矩突变,步进电机在高频段丢失风险也大幅下降。
加减速时间怎么定?我给一个保守的经验值:小型滑台和轻负载,一般设80到200ms;负载稍重或导程较大,可以放宽到300到500ms。加减速时间太长,整个定位周期会明显拉长;太短,加速段过于陡峭,步进电机会在高频区失步。先按200ms起步,实测如果启停平稳、定位准确,再逐步缩短,直到临界值,最后留20%余量设进去。
3.3 DDRVI与DDRVA:真正的相对与绝对定位指令
PLSR解决了加减速问题,但它本质上还是只负责“发多少个脉冲”和“发多快”,完全不关心当前位置。真正让FX3U具备完整定位能力的是DDRVI和DDRVA这两条32位定位指令。
DDRVI是相对定位指令,格式:
DDRVI D0 D2 Y000 Y001D0和D1组成32位的输出脉冲数,正值朝一个方向走,负值朝反方向走;D2和D3组成速度;Y000输出脉冲,Y001输出方向信号。每次执行时,它从当前位置开始,相对地移动指定的脉冲数。同一个起点、执行两次同样的DDRVI,会走到两个不同的绝对位置。
DDRVA是绝对定位指令,格式:
DDRVA D0 D2 Y000 Y001D0和D1组成目标绝对位置,D2和D3组成速度。执行时,PLC会对比当前位置和目标位置,自动算出需要走的脉冲数和方向。不管从哪个位置出发,只要目标坐标相同,最终都会停在同一个物理位置。
两者分工非常明确:设备启动后的第一动作,通常用DDRVA回原点坐标;正常加工过程中,如果你关心“走到同一个工位”,用DDRVA更可靠;如果你只是“从这里再往前推一段”,DDRVI更直接。很多项目两种指令会混用,但核心逻辑一定要理清,不然位置基准会乱。
3.4 PLSV:运行中实时变速的特殊脉冲指令
PLSV是三菱FX3U里比较冷门但很有用的指令,它允许在执行过程中通过改变寄存器里的频率值来实时调整电机速度,格式:
PLSV D0 Y000 Y001D0存频率,Y000输出脉冲,Y001输出方向。与PLSY不同,PLSV的频率值在指令执行期间可以根据程序随时改变,不必断开指令重新触发。这个特性特别适合追剪、飞锯、定长送料这类需要动态同步的场景。
不过要提醒一句:PLSV没有内置加减速处理。如果程序里直接把频率从5000改成50000,电机会瞬间加速上去,冲击和失步风险非常高。正确做法是把频率值按一定步进量逐步改写,人为模拟一个斜坡。可以用定时中断,每隔几个扫描周期给频率寄存器加一个固定增量,实际调试时再根据电机响应微调增量值。
3.5 五条指令怎么选,一张表说清楚
| 指令 | 是否带加减速 | 是否支持绝对位置 | 运行中调速度 | 典型场景 |
|---|---|---|---|---|
| PLSY | 否 | 否 | 否 | 匀速送料、连续脉冲输出 |
| PLSR | 是 | 否 | 否 | 一般定位、步进电机控制 |
| DDRVI | 是 | 否(相对定位) | 否 | 固定增量进给、相对移动 |
| DDRVA | 是 | 是(绝对定位) | 否 | 多工位定长定位、回原点 |
| PLSV | 否 | 否 | 是 | 飞剪、追速同步、动态调频 |
这个表每次做项目前都值得翻一遍。我见过不少人用PLSY做定位,定位精度上不去;也有不少人想用PLSV做定长定位,结果被缺少加减速搞得焦头烂额。需求分析阶段先定场景,再选指令,能省一半调试时间。
4. 脉冲当量与电子齿轮:让数字真正变成毫米
4.1 脉冲当量的概念:一个脉冲代表多少距离
程序里写“发5000个脉冲”,机器到底走多远?这取决于脉冲当量。脉冲当量的定义非常直白:一个脉冲使负载移动的距离。它把电气世界的脉冲数和机械世界的毫米、度、圈连接起来。
对步进电机系统,公式是:
脉冲当量 = 机械传动每转移动量 / 电机每转所需脉冲数举例:丝杆导程是10mm,步进驱动器细分设为2000脉冲/圈,那么电机转一圈滑台走10mm,每转需要2000个脉冲,脉冲当量就是10 ÷ 2000 = 0.005mm。也就是说,每发1个脉冲,滑台精确移动5微米。要移动100mm,需要的脉冲数是100 ÷ 0.005 = 20000个。
对伺服电机系统,公式里要引入电子齿轮比:
脉冲当量 = 丝杆导程 ÷(编码器反馈脉冲 ÷ 电子齿轮比)一般伺服电机编码器分辨率常见的是2500线,经过4倍频后每转反馈10000个脉冲。如果电子齿轮比设为1:1,那么每发给驱动器1个脉冲,电机转1/10000圈。还是配10mm导程的丝杆,脉冲当量就是10 ÷ 10000 = 0.001mm。如果想改大脉冲当量,就调整电子齿轮比的分母或分子,让更少的指令脉冲对应电机一圈。
4.2 伺服电子齿轮比的计算思路
电子齿轮比是伺服驱动器上最容易让人迷惑的参数,因为不同品牌的代号不一样,有的叫PA05/PA06,有的叫Pr0.06/Pr0.07,但计算思路完全一致:
电子齿轮比 = 电机每转反馈脉冲数 ÷ 我们希望电机每转对应的指令脉冲数假设电机每转反馈10000脉冲,机械上要求1个指令脉冲对应0.002mm,配合10mm导程丝杆,那么电机每转应对应10 ÷ 0.002 = 5000个指令脉冲。电子齿轮比就是10000 ÷ 5000 = 2:1,在驱动器里通常设成分子2、分母1。
反过来,如果要求1个指令脉冲对应0.005mm,电机每转需2000个指令脉冲,电子齿轮比就是10000 ÷ 2000 = 5:1,分子5、分母1。只要抓住“电机转一圈,负载走多远、需要多少个脉冲”这个逻辑,不管哪个牌子的驱动器都不会算错。设置完电子齿轮比,务必做一道最基础的验证:在手动模式下发一个已知数量的脉冲,用千分表量一下实际移动距离,跟理论值对不上就直接查电子齿轮比和细分参数。
4.3 速度、频率与进给量的换算
发出脉冲的频率决定电机的转速,也就是设备的进给速度。核心公式还是跟脉冲当量挂钩:
进给速度(mm/s)= 脉冲频率(Hz)× 脉冲当量(mm/脉冲)所以反过来,想要某个进给速度,需要的脉冲频率是:
频率(Hz)= 速度(mm/s)÷ 脉冲当量(mm/脉冲)以前面那个滑台为例,脉冲当量0.005mm,要求100mm/s的进给速度,那么频率=100 ÷ 0.005 = 20000Hz = 20kHz。这个值远低于Y000的100kHz上限,放心用。但如果要求500mm/s,频率就到了100kHz,刚好压着上限。工程上我不会把频率顶满,长时间满频运行,发热和可靠性都堪忧,一般建议最高频率不超过上限的80%。
如果速度需求超过了这个安全区间,有三个破局方向:换更大导程的丝杆、提高电子齿轮比或调整细分、改用更高输出的脉冲模块。先算清楚需求,再回头选择机构方案,比在程序里硬扛要靠谱得多。
5. 一个丝杆滑台定位案例:从需求分析到梯形图落地
5.1 项目需求与基本参数
说一个我前阵子帮朋友调试的小设备,拿来当完整案例正合适。需求很简单:一个压装定位滑台,步进电机驱动,丝杆导程10mm,要求从原点前进到100mm位置,停顿1秒,再退回原点,往复循环,前进速度不低于80mm/s。
步进驱动器细分设置成2000脉冲/圈,那脉冲当量就是10 ÷ 2000 = 0.005mm。100mm对应的脉冲数是20000。80mm/s对应的频率是80 ÷ 0.005 = 16000Hz,也就是16kHz,离上限很安全。加减速时间我按250ms起步,留足余量。
选型上,PLC用FX3U-32MT/ESS晶体管输出型,脉冲口Y000,方向口Y001。步进驱动器公共端接24V正极,Y000接驱动器脉冲输入,Y001接方向输入。启动按钮用X0,暂停按钮用X1。
5.2 梯形图核心段设计
整个程序不需要多复杂,核心就是两条DDRVA指令配合M8029完成标志做状态切换:
第一段:启动与前进定位
LD X0 SET M0 LD M0 DDRVA K20000 D10 Y000 Y001 LD M8029 SET M1 RST M0M0导通触发DDRVA,目标位置20000,速度在D10里改成16000Hz的数值。指令执行完成后M8029会通断一个扫描周期,用它置位M1、复位M0,进入等待延时阶段。
第二段:停1秒后回原点
LD M1 OUT T0 K10 LD T0 DDRVA K0 D10 Y000 Y001 LD M8029 SET M0 RST M1T0延时1秒后触发回原点的DDRVA,目标位置K0,回到原点后M8029再次动作,把M0置位,重新开始下一轮前进。这就是一个干净利落的往复定位循环。
5.3 为什么用DDRVA而不是DDRVI
这个案例里有个细节值得展开:前进到位、停顿、回原点,我用的是DDRVA绝对定位而不是DDRVI相对定位。区别在哪?DDRVI是从当前位置相对移动指定脉冲数,如果设备因为某些原因没有停准,再来一次DDRVI会在这个错误的基准上继续积累误差。DDRVA则不管当前在哪个位置,每次都以上次设定的坐标原点为基准,直接奔向同一个绝对位置,不会累积偏差。
刚上电时,PLC内部的位置当前值寄存器默认是0,如果机械原点确实在丝杆起点,直接给DDRVA一个K20000让滑台往前走到100mm位置是没有问题的。但如果机械可能存在未回原点的情况,稳妥起见先做一次原点回归,或者把上电时的当前值清零,再执行绝对定位。
5.4 驱动器端的关键设置
这个项目里步进驱动器的设置只有三个重点:细分设为2000脉冲/圈,跟程序里的脉冲当量对应;电流按电机额定电流设定,别为了“力气大点”盲目调高,电机发热会明显恶化;停机时电流可以设成半流保持,降低发热。如果是伺服电机,还要确认电子齿轮比和脉冲输入模式,通常选择“脉冲+方向”模式,也就是我们常说的Pulse/Direction模式,对应驱动器端子一般标为PULSE和DIR。
6. 调试阶段的高频坑位与排查经验
6.1 频率上不去,先查输出形式和负载电容
有次现场调试,程序里写20kHz,用示波器看Y000的输出波形,频率却只有十几kHz,而且脉冲边沿明显变圆。排查到最后,发现脉冲线很长,而且和动力线扎在同一个线槽里,分布电容把脉冲信号拖垮了。后来把脉冲线单独走线,用过屏蔽双绞线,波形就干净了。脉冲输出口是集电极开路结构,驱动能力有限,长距离传输或者负载电容偏大时波形畸变是常见问题。Y000、Y001的输出能力不是无限的,拉长线、并电容这类操作都要尽量避免。
6.2 方向不受控,优先查方向信号时序
另一个高频问题:电机能转,但方向不受程序控制,或者方向偶尔错乱。这种情况下,先别急着怀疑指令,用示波器同时看脉冲口和方向口的波形。DDRVA要换向时,方向口和脉冲口之间是有严格时序要求的:方向信号必须比脉冲信号先建立一段时间(通常至少几微秒,驱动器手册里有明确数值),否则驱动器来不及判断方向就收到了第一个脉冲,方向自然不对。FX3U高速脉冲口在硬件上已经做了这个时序处理,一般不用额外担心,但如果你用普通DO口单独模拟方向切换,或者加了外部继电器改变方向信号,这个问题就会冒出来。更换方向控制方式之后,务必用示波器确认时序满足驱动器要求。
6.3 脉冲数超过32767就“精度变差”
很多人第一次用DDRVA写目标位置,K30000、K50000,看着程序没问题,实际跑起来位置就是不对。原因很简单:普通16位数据范围上限是32767,超出这个值,数值会溢出,定位自然全乱。FX3U的定位指令既然带32位位置数据,就必须用32位指令助记符DDRVA、DDRVI、DPLSR、DPLSY,写脉冲数时也要保证数据落在32位范围内。用GX Works2编程时,输入DDRVA会自动带出D0、D1这种相邻寄存器组合,数据位宽的坑就从源头上避开了。经验是:只要脉冲数可能超过几千,就默认用32位指令,别去赌“够不够用”。
6.4 仿真器验证不了高速脉冲,逻辑对不等于硬件对
GX Works2的仿真功能可以模拟梯形图逻辑,M8029、继电器、定时器这些都能仿真,但高速脉冲输出在仿真环境里是不能真正产生指定频率的,也没有实际波形可看。我在早期项目里吃过这个亏:程序在仿真器里跑得“天衣无缝”,实物一启动,电机就是不转,后来才发现输出端子和驱动器的接线松了。从那以后,我的习惯是:仿真只用来查逻辑分支、定时器衔接,凡是涉及脉冲频率、加减速时间、方向时序的验证,一律上实物。这个提醒尤其送给刚入门的朋友,别被仿真的“绿色高亮”误导了。
6.5 上电先回原点,是所有绝对定位的铁律
最后一条,也是最容易忽略的一条:使用DDRVA做绝对定位前,一定要确保PLC内部的位置当前值跟机械的物理原点是对齐的。FX3U的Y000通道当前值寄存器是D8140(32位),断电再上电后,这个值默认恢复成0,但机械位置不一定在原点。如果没做回原点操作就直接下发绝对定位指令,PLC会认为机械已经在“0”位置,从当前位置硬走过去,轻则定位偏差,重则撞机。
所以正式程序里,我通常会在初始化阶段强制要求执行一次原点回归。用FX3U的ZRN指令,或者用近点开关配合DDRVA清零当前值寄存器,把机械位置和软件坐标校准一致。有些设备出于效率考虑不想每次上电都回原点,也可以把断电前的位置保存到断电保持寄存器里,上电后做一次“软校零”。但这个方法依赖于机械没有外力移动,安全性和可靠性与硬回原点没法比。做定位控制,原点永远是坐标系的地基,地基歪了,后面的所有绝对位置都是空中楼阁。
最后再分享一个调试习惯:每次改完加减速时间、电子齿轮比或脉冲当量参数,我都会拿千分表实测一次定位精度,用记号笔在滑台上画一个原点标记,跑20次往返,记录每次停靠位置偏差。高速脉冲这套东西,看着是写程序,实际上验证的是机械、驱动器和程序三者的一致性。把每一次偏差都量化出来,你才能知道到底是丢步、齿轮比不对、还是机械本身有间隙。这个习惯帮我排掉过无数个“看起来像程序问题,其实是机械问题”的疑难杂症,建议你从下一个项目就开始用。