运动控制如何位置同步输出

Posted 苏州程序大白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运动控制如何位置同步输出相关的知识,希望对你有一定的参考价值。

运动控制如何位置同步输出

✨博主介绍

💂 个人主页:苏州程序大白

💂 个人社区:CSDN全国各地程序猿

🤟作者介绍:中国DBA联盟(ACDU)成员,CSDN全国各地程序猿(媛)聚集地管理员。目前从事工业自动化软件开发工作。擅长C#、Java、机器视觉、底层算法等语言。2019年成立柒月软件工作室,2021年注册苏州凯捷智能科技有限公司

💅 有任何问题欢迎私信,看到会及时回复

👤 微信号:stbsl6,微信公众号:苏州程序大白

💬如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)

🎯 想加入技术交流群的可以加我好友,群里会分享学习资料

前言

本文举例讲解最近项目合作用到运动控制的使用方案,不是唯一的方法。希望对大家后面做项目又帮助。

硬件选型讲解

本例以ZMC406总线运动控制器和ZMC460N双总线运动控制器为例展开介绍,PSO所用的指令名也被称为硬件比较输出,故下文也会用硬件比较输出代替PSO。

  • ZMC406总线控制器

ZMC406总线控制器是正运动技术推出的新一代网络6轴运动控制器(可通过扩展模块来扩展轴,支持多达32轴),自带六个脉冲轴接口包含差分脉冲输出和差分编码器输入),支持脉冲驱动器和EtherCAT总线驱动器混合使用。

脉冲输出频率最大可达10MHZ,EtherCAT总线的通讯周期最快可达250微秒。

支持4路PSO输出,输出口非独立,不能四路同时输出,每个系统周期比较输出一次,即每个系统周期只能输出一路比较信号。

  • ZMC460N双总线控制器

ZMC460N双总线控制器相比ZMC406所带的资源更多,是正运动技术推出的新一代网络60轴运动控制器(支持EtherCAT总线轴+RTEX总线轴+脉冲轴混合使用),自带六个脉冲轴接口(包含差分脉冲输出和差分编码器输入),通用输出口支持配置为单端脉冲输出,通用输入口支持配置成单端编码器输入。
脉冲输出频率最大可达10MHZ,EtherCAT总线的通讯周期最快可达250微秒。

支持12路PSO输出,输出口独立,支持12路同时输出,每个系统周期可比较输出多次,应用场景更为丰富。

这两款控制器同属高系列,功能强大,能满足多种场合的需求,支持直线插补、连续插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、位置锁存、同步跟随、虚拟轴设置、硬件比较输出、硬件定时器、运动中精准输出等功能;采用优化的网络通讯协议可以实现实时的运动控制。

应用程序可以使用正运动自主研发的ZDevelop软件开发,或VC、VB、VS、C++Builder、C#等上位机软件来开发。上位机开发调试时可以把ZDevelop软件同时连接到控制器,程序运行时需要动态库“zmotion.dll”。

  • 控制器的基本参数说明如下表:


⊙PSO硬件比较输出功能使用的是高速IO口,响应频率为1MHz, 响应速度可以精确到微秒级别。
用户可以使用ZDevelop软件连接控制器,在ZDevelop软件的在线命令栏发送“?*max”打印查看更多控制器规格参数,“?*set”查看打印指令参数值,?*port打印通讯通道。

1、下图为ZMC406总线控制器的参考架构:

2、下图为ZMC460N双总线控制器的参考架构:

ZMC460N双总线控制器的常用接口说明如下表:

运动控制技术介绍

PSO(position synchronized output)即位置同步输出,本质是通过采集实时的编码器反馈位置(无编码器可使用输出的脉冲位置)与比较模式设定的位置进行比较,控制OP高速同步输出信号,PSO示意图如下。

PSO一般与激光器(或点胶喷射阀等设备)同步输出信号进行相位同步,在运动轨迹的所有阶段以恒定的空间(或者恒定时间)间隔触发输出开关,包括加速、减速和匀速段,从而实现脉冲能量均匀地作用在被加工物体上。

⊙PSO功能的特点就是能高速且稳定的输出信号,因为输出精度足够高,所以能够在整个运动轨迹中以固定的距离触发输出信号而不用考虑总体速度。

即在直线部分以很快的速度运动,而在圆角部分减速的同时也能保证输出间距恒定,通常圆角加工部分在整个加工过程中占有比较小的部分,这样在保证加工效果的同时,就可以最大限度地提高产能。

运动控制相关指令介绍

实现PSO功能(即硬件比较输出)功能使用的命令主要有“HW_PSWITCH2”、“MOVE_HWPSWITCH2”、“HW_TIMER”等,前两个指令主要用于设定触发比较输出的距离,最后的命令是硬件定时,可配合前者使用精准控制输出脉冲的宽度。

1、HW_PSWITCH2 -- 硬件位置比较输出

1、指令说明

通过设置比较条件,控制OP口连续高速输出信号,控制器必须使用支持硬件比较输出的输出口,例如ZMC406可以使用OUT0/1/2/3口,ZMC460的OUT0-11均可使用。

支持比较脉冲轴的位置、编码器的反馈位置和总线轴的位置。选用何种位置信息比较,与设置的ATYPE轴类型有关,比较的主轴带编码器输入时,自动使用编码器位置来触发,不带编码器的场合便比较脉冲输出。

可以使用“MOVEOP_DELAY”参数来调整输出准确时刻。

2、注意事项

一般控制器每个系统周期内只能比较一次,系统周期通过“SERVO_PERIOD”查询,此时当系统周期过大时,而比较输出脉冲宽度小于系统周期时将会导致输出异常。部分控制器如ZMC460N、ZMC504SCAN等,每个系统周期支持比较多次,即支持多个比较输出口在同一周期输出比较信号。

⊙“HW_PSWITCH2”与“MOVE_OP”精准使用同样的硬件资源,不建议在同一个通道同时使用,可以在不同的通道同时使用。
调用TABLE位置数据时,在所有比较点完成前不要修改TABLE。

使用脉冲型电机时只有ATYPE为4时才是比较反馈位置(MPOS),默认出厂的ATYPE为1或7比较的是命令位置(DPOS)。

3、指令语法

HW_PSWITCH2(mode, [...])

mode模式不同,后面需要填写的参数也不同,详情需参考手册的语法说明。

举两个简单且典型的模式展开描述。

A.Mode=1:单轴比较


HW_PSWITCH2(mode,opnum,opstate,tablestart,tableend[,direction])

mode:1-启动比较器

opnum:对应的输出口

opstate:第一个比较点的输出状态

tablestart:第一个比较点绝对坐标所在TABLE编号

tableend:最后一个比较点绝对坐标所在TABLE编号

direction:第一个点判断方向,0坐标负向,1坐标正向,-1不使用方向

此模式较为简单,需要借助TABLE寄存器,把需要比较输出的位置坐标先存储到TABLE寄存器,然后PSO控制OP口每到达一个比较点的位置便反转一次,直到全部坐标点比较完成。示意图如下,P表示比较点,展示六个比较点的OP输出情况。


B.Mode=2:清除比较点

HW_PSWITCH2(2)

mode:2-停止并删除没完成的比较点

⊙使用前需要调用此模式,清除可能没有比较完成的数据。使用过程中也可以发送此命令,停止比较。 
Mode=6:矢量比较方式,周期模式,与HW_TIMER一起使用

HW_PSWITCH2(mode, opnum, opstate, vectstart, repes, cycledis)

mode:6-启动比较器

opnum:对应的输出口

opstate:第一个比较点的输出状态

vectstart:比较点VECTOR_MOVED当前运动距离

repes:重复周期,一个周期只比较一次

cycledis:周期距离,每隔这个距离输出一次

此模式相对复杂一些,比较输出的数据不参考TABLE,只需指定第一个触发点的“VECTOR_MOVED”,比较周期的次数,每次输出触发的距离,“HW_TIMER”控制每到达一个周期触发位置输出的脉冲宽度和次数,参数设置可参考下方示意图,红色参数为HW_PSWITCH2指令的参数,橙色参数为HW_TIMER指令的参数。

此模式涉及的距离坐标均为矢量坐标,可用于单轴运动或插补运动模式下比较输出。

例一:mode=1,单轴模式,比较TABLE的位置点。


BASE(0)
ATYPE=0
UNITS=10000/10
SPEED=100
ACCEL=1000
DECEL=1000
SRAMP=100
DPOS=0
MPOS=0
OP(0,OFF)
TABLE(0,50,100,150,200)   '比较点坐标设置
HW_PSWITCH2(2)  '停止并删除没有完成的比较点
HW_PSWITCH2(1, 0, 1, 0, 3,1)   '比较4个点,操作输出口0
TRIGGER    '触发示波器
MOVE(300)
END

示波器采样波形如下:到达TABLE的四个坐标点50,100,150,200,OP反转。

例二:mode=6,周期模式,结合HW_TIMER使用。

RAPIDSTOP(2)
WAIT IDLE(0) 
BASE(0)
ATYPE=1
UNITS=10000/10
SPEED=100
ACCEL=1000
DECEL=1000
SRAMP=100
DPOS=0
MPOS=0
OP(0,OFF)
TRIGGER 
VECTOR_MOVED=0   '设置矢量起始位置为0,方便观察
HW_PSWITCH2(2)  '停止并删除没有完成的比较点
HW_PSWITCH2(6,0,1,100,4,50)  '位置100开始比较,比较4次周期距离50,输出有效时间由HW_TIMER指令确定
HW_TIMER(2,100000,50000,2,off,0)  '输出变为on后50ms变为off
MOVE(400)
END

示波器波形如下:

输出口为OP(0),第一次比较输出的状态为ON,第一个输出点的矢量坐标为100,比较4次,间隔50的距离触发一次。

每次触发之后输出OP的时间由HW_TIMER指令设置,HW_TIMER参数确定每次输出脉冲的周期为100ms,有效宽度为50ms,每个比较位置连续触发2次。


YT模式下波形:

其他条件不变,将单轴运动改为MOVE(200,300)两轴插补,波形如下,根据两轴的合成矢量位置VECTOR_MOVED进行比较。


RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=10000/10
SPEED=100
ACCEL=1000
DECEL=1000
SRAMP=100
DPOS=0
MPOS=0
OP(0,OFF)
TRIGGER
VECTOR_MOVED=0   '设置矢量起始位置为0,方便观察
HW_PSWITCH2(2)  '停止并删除没有完成的比较点
HW_PSWITCH2(6,0,1,100,4,50)  '位置100开始比较,比较4次周期距离50,输出有效时间由HW_TIMER指令确定
HW_TIMER(2,100000,50000,2,off,0)  '输出变为on后50ms变为off
MOVE(200,300)  '两轴直线插补
END


XYZ模式下输出波形如下:


2、HW_TIMER – 硬件定时

1、指令说明

硬件定时器,用于硬件比较输出后一段时间后还原电平。“HW_TIMER”只有1个,每次调用会强制停止之前的调用。

OP和MOVE_OP操作会关闭正在进行的HW_TIMER脉冲,这样可以使用HW_TIMER来实现类似PWM的功能,OP输出打开脉冲输出,下一个OP输出关闭脉冲输出,当使用MOVE_OP精准输出时,可以实现精准的PWM输出无限脉冲功能。

使用“?*HW_TIMER”可以看到还有多少脉冲剩余。

2、注意事项

每个周期输出一次信号,指令的周期时间的设置一定要大于系统周期,否则输出异常。输出口需要指定支持PSO功能的OP口。

3、指令语法

HW_TIMER(mode, cyclonetime, optime, reptimes, opstate, opnum )

mode:0停止,2-启动

cyclonetime:周期时间,us单位

optime:有效时间,us单位

reptimes:重复次数,启动模式,reptimes =0时,软关闭HW_TIMER,原来的脉冲没有完成的,会继续输出完成

opstate:输出缺省状态,输出口变为非此状态后开始计时

opnum:输出口编号,必须能硬件比较输出的口

参数设置可参考下方示意图,此指令的效果是固定时间周期输出。


RAPIDSTOP(2)
WAIT IDLE(0)
BASE(0)
ATYPE=1
UNITS=100
SPEED=100
ACCEL=100
DECEL=100
DPOS=0
TRIGGER
DELAY(100)
OP(0, OFF)
HW_TIMER(2, 10000, 5000, 30, OFF, 0)  '输出口0变为ON后,硬件定时器触发开始计时,周期为10ms,5ms 后切换为OFF,重复30次结束
OP(0, ON)         '触发定时
END

示波器采样OP(0)波形如下:采样周期设置为1ms,表示横轴时间的单位为1ms,延时100ms之后开始触发OP高速输出,指令作用的总时间为“10000us*30”。第三个参数调整输出脉冲的宽度。

3、MOVE_ HWPSWITCH2–缓冲硬件比较输出

此命令功能和用法同“HW_PSWITCH2”,区别是此命令会进运动缓冲区,在缓冲中执行比较。

等间距输出脉冲的例子

采用“HW_PSWITCH2”指令的模式6,结合“HW_TIMER”控制单个轴高速等距输出。


RAPIDSTOP(3)
WAIT  IDLE(0)
GLOBAL CONST Axis_X = 0   '物理轴轴号定义
GLOBAL CONST Out_Pso0 = 0  'Pso硬件输出口编号

BASE(Axis_X)        '轴参数初始化
UNITS=1000    '脉冲当量 1MM对应的脉冲个数
ATYPE=4      '轴类型   脉冲输出+编码器输入轴
DPOS=0
MPOS=0
SPEED=100
ACCEL=2000
DECEL=0
MERGE=1
OP(Out_Pso0,OFF)

GLOBAL g_cmd
g_cmd = 0
WHILE 1
   IF g_cmd =  1 THEN
      g_cmd = 0
      TRIGGER
      Function_Test1()  
   ENDIF
WEND
'********************************************************************************************
'等距离距离模式生成一个PWM脉冲,脉冲输出时间可调。
'lv_WidthTime  脉冲宽度时间us
'lv_Interval   2个脉冲间隔 mm
'lv_StrartPos  触发起始位置 mm
'lv_EndPos  结束位置
'********************************************************************************************
GLOBAL SUB Function_Test1()   '在20-120范围内每间隔1mm输出一个持续2ms的脉冲
   LOCAL lv_WidthTime,lv_Interval,lv_StrartPos,lv_EndPos  '定义局部变量
   lv_WidthTime = 2000    '脉冲宽度2000us  
   lv_Interval = 1     '脉冲间隔 1mm
   lv_StrartPos = 20     '触发起始位置 20mm位置
   lv_EndPos = 120     '结束位置 120MM
   
   OP(Out_Pso0,OFF)  '关闭输出口
   BASE(Axis_X)  '选定X轴
   ATYPE = 4  '轴类型,比较轴类型带编码轴特性时默认按编码器位置比较
   SPEED = 100  '速度100mm/s
   FORCE_SPEED=60 'SP速度60mm/s
   MOVEABS(0)  '运动到0位
   WAIT IDLE
   VECTOR_MOVED = 0 '插补矢量距离清0
   
   LOCAL iTime
   iTime =ABS(lv_EndPos - lv_StrartPos) \\ lv_Interval  '计算比较次数
   TRACE lv_StrartPos,iTime,lv_Interval,lv_WidthTime
   
   HW_PSWITCH2(2)  '清空HW比较缓冲区
   HW_PSWITCH2(6,Out_Pso0,ON,lv_StrartPos,iTime,lv_Interval)  '从lv_StrartPos触发比较间隔lv_Interval比较iTime次
   HW_TIMER(2,lv_WidthTime+100,lv_WidthTime,1,OFF,Out_Pso0)  'Out_Pso触发变成ON后,打开lv_Width us后关闭输出
   
   MOVEABS(50)   '单轴运动,速度100
   MOVEABSSP(100)   'SP单轴运动,速度60
   MOVEABS(150)   '单轴运动,速度100
   WAIT IDLE   '等待运动停止
   HW_PSWITCH2(2)  '清空HW比较缓冲区
END SUB

ZDevelop查看曲线

1、示波器采样上例波形如下:

三段单轴直线运动,比较范围为位置20-120,每隔一个单位距离比较一次,共比较100次,中间段由于是等距比较,运动速度较小,故OP反转的速度变慢。OP保持高电平的时间是2ms。

2、XY模式下OP随运动距离变化的波形如下。

可看出等距比较模式下,比较输出不受运动速度的影响,输出始终是均匀的。

以上是关于运动控制如何位置同步输出的主要内容,如果未能解决你的问题,请参考以下文章

手轮脉冲发生器与PLC连接,PLC控制伺服,如何用手轮脉冲发生器及时控制伺服马达

STC单片机3路PWM波形输出并串口打印当前脉冲值

PID输出信号有物理意义吗

DSP/ARM+FPGA运动控制器定制 精雕机数据机床

伺服电机的曲线运动

Proteus仿真 51单片机利用定时器制作简易SPWM波形输出