今天,正运动小助手给大家分享一下运动控制器位置锁存功能的应用,以zmc408ce运动控制器为例,介绍多种锁存模式的用法,用户可根据自身需求灵活选择。
01 锁存功能
锁存功能的作用就是当外部io信号触发时,立即响应,锁定当前的电机/编码器的位置,通常用来锁定流水线上碰到光纤传感器时的产品位置、锁定包装材料上色标的位置等。
一、锁存功能的特点:
1.支持编码器轴、总线轴、脉冲轴和虚拟轴锁存(不同型号的控制器支持锁存的轴类型不同);
2.支持单次锁存和高速连续锁存模式;
3.支持4通道同时锁存,分别为r0、r1、r2、r3四个锁存通道,最多支持8个锁存口同时锁存,锁存响应速度快;
4.带编码器反馈时锁存mpos的值,没有带编码器反馈时锁存dpos的值。
不同型号的控制器支持的锁存通道数不同,是否支持锁存功能与锁存对应的输入口参见硬件手册。
本文例子基于zmc408ce控制器测试,此型号支持4个锁存通道,硬件接口为in0-in3。
通讯接口包含rs232、rs485、ethernet以太网、can总线、ethercat总线和u盘接口,板载8路差分脉冲输出接口(包含编码器输入),1个专用手轮接口,还提供了ad/da模拟量接口。
zmc408ce支持ethercat总线连接,支持最快500μs的刷新周期,支持最多达32轴运动控制(8脉冲轴+ethercat轴/编码器轴/虚拟轴),支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等;采用优化的网络通讯协议可以实现实时的运动控制。
zmc408ce还支持8通道pwm输出,支持硬件比较输出、硬件定时器、运动中精准输出等。
二、实现锁存的步骤
1.锁存功能使用方法
(1)确定当前硬件条件是否满足锁存需求,需要确定锁存位置的轴,io信号接入支持锁存的输入口in;
(2)设置锁存输入映射口reg_input,作用是将锁存的通道r0/r1/r2/r3对应到物理输入口in,需要输入口支持锁存功能;
(3)设置锁存模式regist,需根据锁存的轴类型选择;
(4)等待锁存触发mark / markb / markc / markd,锁存触发了变为真;
(5)锁存完成打印锁存位置信息reg_pos / reg_posb / reg_posc / reg_posd;
(6)可读取锁存位置起始坐标和结束坐标,锁存位置可被其他指令调用。
2.锁存相关指令
锁存相关指令一览表:
指 令 说 明 用 法
regist 设置锁存模式 regist(模式值)
reg_inputs 锁存通道映射到输入口 reg_inputs=$输入口编号
mark 判断锁存是否触发 wait until mark
markb 判断第二个锁存是否触发 wait until markb
markc 判断第三个锁存是否触发 wait until markc
markd 判断第四个锁存是否触发 wait until markd
reg_pos 保存锁存的测量反馈位置 读取/打印reg_pos
reg_posb 返回锁存2的测量反馈位置 读取/打印reg_posb
reg_posc 返回锁存3的测量反馈位置 读取/打印reg_posc
reg_posd 返回锁存4的测量反馈位置 读取/打印reg_posd
open_win 锁存触发的开始坐标范围点 open_win=pos
close_win 锁存触发的结束坐标范围点 close_win=pos
reg_inputs映射锁存输入、regist设置锁存的模式、mark / markb / markc / markd判读锁存是否触发、reg_pos / reg_posb / reg_posc / reg_posd成功锁存之后位置存储。
当锁存产生时,对应锁存通道的mark / markb / markc / markd会被设置为on,同时锁存到的位置会被存储在参数reg_pos / reg_posb / reg_posc / reg_posd内。
三、reg_inputs映射说明
reg_inputs映射规则如下,regist锁存模式的设置需配合reg_inputs而设置。
例如:
reg_inputs = $3210,则表示r3,r2,r1,r0分别对应输入口3,2,1,0
reg_inputs = $1023,则表示r3,r2,r1,r0分别对应输入口1,0,2,3
reg_inputs = $1000,则表示r3,r2,r1,r0分别对应输入口1,0,0,0 之所以这样设置是因为regist模式匹配r0、r1、r2、r3信号虽然不是物理的io通道,却能带来最大的灵活性。 输出信号r0实际可以对应设备上的in(0)...in(7)中的任意一个(可选的输入通道必须是硬件手册指定的锁存通道),或者r0和r3都对应同一个输入口。
四、reg_pos锁存位置说明
使用的本地io,可以通过reg_inputs来锁存通道的映射,不同的锁存信号通道锁存的数据存储的位置不同,如下表,详情参见regist指令说明。
r信号 锁存状态 锁存数值
r0 mark reg_pos
r1 markb reg_posb
r2 markc reg_posc
r3 markd reg_posd
z 不定 不定
02 regist锁存模式
regist设置锁存模式,根据要锁存的轴类型选择合适的锁存模式,锁存模式参见下文,有单次锁存和连续锁存两种。
不同的锁存方式,锁存信号的触发标志不同,锁存位置数据存储的位置也不同。
不同轴类型支持的锁存通道:
(1)编码器轴、带反馈的脉冲轴类型一般采用r0,r1,z脉冲这三种锁存;
(2)无反馈的脉冲轴和虚拟轴采用r0,r1锁存;
(3)ethercat或rtex总线轴类型采用r2,r3锁存;
(4)另外ethercat总线可以使用驱动器自身的锁存模式,详情参见驱动器手册说明。
语法一:单次锁存
regist(mode)
mode:锁存方式如下表。
值 描 述
1 当z脉冲上升沿时的绝对位置送到reg_pos
2 当z脉冲下降沿时的绝对位置送到reg_pos
3 当输入信号r0上升沿的绝对位置送到reg_pos
4 当输入信号r0下降沿的绝对位置送到reg_pos
6 输入信号r0上升沿时的绝对位置送到reg_pos,z信号上升沿时的绝对位置送到reg_posb
7 输入信号r0上升沿时的绝对位置送到reg_pos,z信号下降沿时的绝对位置送到reg_posb
8 输入信号r0下降沿时的绝对位置送到reg_pos,z信号上升沿时的绝对位置送到reg_posb
9 输入信号r0下降沿时的绝对位置送到reg_pos,z信号下降沿时的绝对位置送到reg_posb
10 输入信号r0上升沿时的绝对位置送到reg_pos,输入信号r1上升沿时的绝对位置送到reg_posb
11 输入信号r0上升沿时的绝对位置送到reg_pos,输入信号r1下降沿时的绝对位置送到reg_posb
12 输入信号r0下降沿时的绝对位置送到reg_pos,输入信号r1上升沿时的绝对位置送到reg_posb
13 输入信号r0下降沿时的绝对位置送到reg_pos,输入信号r1下降沿时的绝对位置送到reg_posb
14 输入信号r1上升沿时的绝对位置送到reg_posb(14以后150804以后版本支持,每个锁存通道独立,支持4通道锁存)
15 输入信号r1下降沿时的绝对位置送到reg_posb
16 z信号上升沿时的绝对位置送到reg_posb
17 z信号下降沿时的绝对位置送到reg_posb
18 输入信号r2上升沿时的绝对位置送到reg_posc
19 输入信号r2下降沿时的绝对位置送到reg_posc
20 输入信号r3上升沿时的绝对位置送到reg_posd
21 输入信号r3下降沿时的绝对位置送到reg_posd
注意:上升沿和下降沿对应的是控制器内部的硬件状态。对于zmc系列控制器而言,由于off状态有效,故从无信号到有信号是下降沿;对于eci系列控制器而言,由于on状态有效,从无信号到有信号是上升沿。
若仍然容易混淆,建议使用前先使用下文例程简单测试一下锁存边沿,再应用于项目中。
语法二:连续锁存
通过把模式加100来支持连续锁存,锁存结果存储到table里面。
regist(100+mode, tableindex, numes)
mode:锁存方式。
tableindex:连续锁存的内容存储的table位置,第一个table元素存储锁存的个数,后面存储锁存的坐标,最多保存个数= numes-1,溢出时循环写入。
numes:占用的table个数。
连续锁存模式分别对两个通道进行连续锁存,可以实现上下边沿的连续锁存。
(eci20150829以上固件支持,4系列控制器20170523以上固件支持)
100+mode:只能使用单一通道的mode,加100表示使用连续锁存。
值 描述
101 当z脉冲上升沿时的绝对位置送到reg_pos
102 当z脉冲下降沿时的绝对位置送到reg_pos
103 当输入信号r0上升沿的绝对位置送到reg_pos
104 当输入信号r0下降沿的绝对位置送到reg_pos
114 输入信号r1上升沿时的绝对位置送到reg_posb
115 输入信号r1下降沿时的绝对位置送到reg_posb
116 z信号上升沿时的绝对位置送到reg_posb
117 z信号下降沿时的绝对位置送到reg_posb
118 输入信号r2上升沿时的绝对位置送到reg_posc
119 输入信号r2下降沿时的绝对位置送到reg_posc
120 输入信号r3上升沿时的绝对位置送到reg_posd
121 输入信号r3下降沿时的绝对位置送到reg_posd
123 当输入信号r0上升沿的绝对位置送到reg_posb
124 当输入信号r0下降沿的绝对位置送到reg_posb
133 当输入信号r0上升沿的绝对位置送到reg_pos,下一次切换下降沿,轮流切换。
134 当输入信号r0下降沿的绝对位置送到reg_pos,下一次切换上升沿,轮流切换。
135 当输入信号r1上升沿的绝对位置送到reg_posb,下一次切换下降沿,轮流切换。下一次切换下降沿,轮流切换。
136 当输入信号r1下降沿的绝对位置送到reg_posb,下一次切换上升沿,轮流切换。
03 锁存例程
1.脉冲轴(不带反馈)/虚拟轴锁存
可使用r0或r1通道,脉冲轴atype=1/7,虚拟轴atype=0,锁存mpos的值(没有反馈时mpos为假,复制dpos)。
带反馈的情况锁存真实的编码器反馈的mpos值,若支持z信号,则可使用z信号的模式。
配置参考如下图:
例程如下:
base(0)atype=1 '脉冲轴units=100dpos=0speed=10accel=100decel=100reg_inputs=0 '将r0-r3都对应输入口0,信号接入in(0)regist(4) '选择r0锁存模式trigger '触发示波器vmove(1) '轴运动wait until mark '等待锁存触发print reg_pos '打印锁存位置end
从示波器采样的波形可以看出,in(0)有信号触发锁存,regist(4)生效锁存此刻的dpos位置,并存储到reg_pos。
上例其他条件不变,锁存模式改为regist(3),锁存触发的边沿发生变化。
2.脉冲轴(带反馈)/编码器轴锁存
可使用r0、r1或z通道(必须带z信号的设备才支持),脉冲轴atype=4/5,编码器轴atype=3/6,锁存mpos的值。
例程如下:
base(0) atype=4 '脉冲带编码器反馈units=100speed=10accel=100decel=100dpos=0mpos=0reg_inputs=$0 '将r0-r3都对应输入口0 ,信号接入in(0)regist(15) '选择r1锁存模式triggervmove(1) '轴运动wait until markb '等待锁存触发print reg_posb '打印锁存位置end
从示波器采样的波形可以看出,in(0)有信号触发锁存,锁存此刻的mpos位置,并存储到reg_posb。
3.多轴位置锁存
锁存多轴的位置时,需要分别对每个轴设置锁存,下例插补运动中锁存两个轴的位置。
例程如下:
base(0,1)atype=1,1 '脉冲轴units=100,100dpos=0,0speed=10,10accel=100,100decel=100,100reg_inputs=$0 '将r0-r3都对应输入口0,信号接入in(0)regist(4) axis(0) '轴0选择r0锁存模式regist(4) axis(1) '轴1选择r0锁存模式trigger '触发示波器move(1000,800) '轴运动wait until mark(0) and mark(1) '等待锁存触发print reg_pos(0), reg_pos(1) '打印轴0,轴1的锁存位置end
注意:多轴使用同一个锁存硬件输入口时,需采用相同的锁存r通道(如上例,模式3/4均可),需要使用不同r通道时,则需要映射到不同的硬件输入口上。
4.连续锁存模式
持续锁存信号触发后的位置,以上的轴类型均支持连续锁存模式,建议开单独任务执行连续锁存程序,不干扰其他程序的运行,可通过table寄存器随时读取到锁存的次数和位置数据。
例程如下:
base(0)atype=1 '脉冲轴units=100dpos=0speed=10accel=100decel=100reg_inputs=$0 '将r0-r3都对应输入口0,信号接入in(0)trigger '触发示波器vmove(1) '轴运动regist(100+4,0,100) '连续锁存,r0通道,table(0)保存锁存次数,table(1-100)存储每次锁存的数据,超过99次后,table(0)清0,重新从table(1)记录数据wait until mark
示波器捕捉连续锁存的位置数据:不需要while循环就能实现连续锁存。
寄存器窗口读取锁存的次数和位置数据。
5.总线驱动器锁存
可使用r2、r3通道,脉冲轴atype=4/5,ethercat和rtex总线均支持,轴类型atype=65/50,锁存mpos的值。
采用ethercat总线驱动器,可使用控制器提供的锁存模式,配置方法与前文类似;也可以使用ethercat总线驱动器自带的锁存模式(需参考驱动器手册完成配置)。
采用ethercat总线驱动器自带的锁存模式,选择驱动器支持锁存的探针,接入锁存信号;例如下方驱动器,有两个探针信号输入。
注意:驱动器pdo需包含60b8h锁存的数据字典,drive_profile直接选择带锁存的模式测试。
例如:drive_profile=11,pdo配置情况如下,更多模式参见drive_profile指令说明。
锁存模式采用regist提供的模式(需测试哪些模式支持),触发驱动器锁存之后,驱动器自行将锁存位置传到对应的reg_pos / reg_posb / reg_posc / reg_posd,对应mark变为真,用户无需通过驱动器数据字典获知。
例程如下:
'********************************************************************************************'总线初始化使能程序,初始化成功方可运行下方锁存程序'初始化配置驱动器pdo需包含锁存的数据字典,drive_profile选择带锁存的模式测试'********************************************************************************************rapidstopwaitidledim num,axis_max,tempfor num=0 to 7 step 1 base(num) atype(num)=0 axis_address(num)=(-1<<16)+num atype(num)=0nextnum=0slot_scan(0)if return then ?总线扫描成功,设备连接数:node_count(0) 'i为槽位号,位轴数 for i=0 to node_count(0)-1 axis_max=node_axis_count(0,i)'单个设备连接总数 ?axis_max=axis_max if axis_max0 then for j=0 to axis_max-1 axis_address(num)=(i<<16)+num+1 atype(num)=65 '轴映射最后一步 'units(num)=2^23/360 '单轴脉冲当量设置 drive_profile(num)=11 '设置pdo功能 disable_group(num) '每轴单独分组 num=num+1 '当前设备总轴数 next else ?当前设备无轴 end endif next ?轴映射完成!总轴数:num else ?总线扫描失败 endendifdelay(100)slot_start(0)if return then ?总线开启成功 delay(100) datum(0)'清除所有轴错误状态 delay(100) ?开始进行轴使能 for i=0 to num-1 base(i) axis_enable=1'单轴使能 next wdog=1'轴使能总开关开启 ?轴使能完成else ?总线开启失败endif?配置完成adasda() '调用锁存函数end'********************************************************************************************'锁存函数'选择驱动器支持锁存的探针,接入锁存信号锁存模式采用regist提供的模式,触发锁存之后,驱动器将锁存位置传到reg_pos '********************************************************************************************while 1 if op(0) = on then op(0, off) temp=-1 endif temp=0wendglobal sub adasda() dim num, temp num=1 temp=0 base(0) regist(100+3,0,100)axis(0)' 自动循环,不需要再写入到while循环中,table(0)保存锁存次数,table(1-100)存储每次锁存的数据超过99次后,table(0)清0,重新从table(1)记录数据 'regist(3) while 1 ?********************************************************* wa 10 ?reg_pos=reg_pos,锁存值table=table(num),占用table=table(0) '打印 ?驱动器探针模式=node_pdobuff(0,0,$60b8,0,6) ?驱动器探针状态=node_pdobuff(0,0,$60b9,0,6) ?驱动器锁存值=node_pdobuff(0,0,$60ba,0,7) if num=100 then num=1 else num=num+1 endif wa 100 '延时1ms,防抖 wendendsub
采用连续锁存模式regist(100+3,0,100),使用table(0)开始的100个空间保存锁存数据,其中table(0)保存的是连续锁存的次数,table(1)- table(99)保存每次锁存的位置。
Solidscape代理商康硕集团打造中国最大服务性质的3D打印机
极目智能聚焦L1~L2+智能驾驶方案落地,助力汽车智能网联化进程
Surface Studio刚发售不久 Surface Studio2惊艳亮相!
电流传感器在太阳能电池板里的应用
iPhone12 Pro Max拍照无法对焦?
分享一下运动控制器位置锁存功能的应用
魅族Pro7什么时候上市?魅族Pro7双摄虚化样张曝光,双屏+联发科x30稳了,魅族Pro7Plus无缘三星8895处理器
在机器学习领域,数据和模型哪个更重要
隧道二极管/体效应二极管是什么意思
关于盐雾腐蚀试验箱的相关性能介绍
mongoDb入门并整合springboot
华硕ROGSTRIXZ390-IGaming主板高清图赏
数据中心的网络安全策略应以智能为中心
全球半导体设备制造市场规模发展情况
PCB生产节能哪家强?海尔中央空调为工业绿色生产加分!
由iPhoneX Face ID引领的人脸识别效应
在Windows系统上稳定实现EtherCAT主站的两种思路
Tesla大动作挑战能源产业 四大策略环环相扣
Altera FPGA硬核浮点DSP模块解决方案提高运算性能
Maxim发布新一代多协议收发器芯片组