一直想写一篇全面的关于回零的文档,但是发现很难再超越3年前沈工写的这两篇。原文发布在作者本人的QQ空间,征得作者同意,转载于此。希望可以帮助更多的TwinCAT用户。声明原创只是为了开启打赏功能,验证此文的有用程度。
同时,这也是本公众号收集发布高价值技术文档的一次尝试。山不在高,有仙则灵,文不在多,有用就行。服务一线的工程师,From Engineer, For Engineer,To Engineer.
TwinCAT运动控制中的回零问题(上)
深圳海生自动化 沈强 2015-09-09
内容简介:
回零是运动机构在启动后的找到自己正确位置的一个过程,表达这一含义的英语单词有:Homing,Referencing和Calibration等,中文常用回参,找零等。回零的信号一般指referencesignal,高级的回零会用到encoder zero track,回零信号触发的位置称作reference position。
本文仅探讨在Beckhoff的TwinCAT中回零的软硬件问题,以及涉及到的参数配置和PLC程序等等。
原文链接:
TwinCAT运动控制中的回零问题(上)
https://user.qzone.qq.com/2708910716/blog/1441730249
TwinCAT运动控制中的回零问题(下)
https://user.qzone.qq.com/2708910716/blog/1452369060
一、 编码器的类型
在谈回零问题之前,首先要明确编码器系统,或者叫测量系统,可以分为两个大的类别:绝对式和增量式,增量式中又包含部分绝对(单圈绝对)和纯增量型:
1)绝对式: 一般指多圈绝对值,有Biss,EnDat,Hiperface,SSI等
2)增量式:也可叫相对式,
部分绝对型 :一般是单圈绝对,有Biss,EnDat,Hiperface,Resolver,MES(beckhoff)等
纯增量型: 如sin/cos (sine1 Vss) ,TTL,HTL等
由于多圈绝对值编码器使用时只需第一次设置好偏置位置(NC中的bias值)即可一劳永逸,而且不需要回零,NC的编码器中也没有回零菜单 ,不需要在PLC中写回零程序,使用简单方便,本文不再详述。下面先谈一般的回零过程,再重点谈回零的PLC程序和NC参数。
二、 一般回零过程
这里的回零过程在TwinCAT系统中可以理解为启动了PLC的MC_Home功能块之后的过程 :

① 轴停在某随机位置,启动回零;(一般要先让轴运动到原点信号的固定一侧,因为在②中回零方向是提前确定的)
② 轴开始向一个方向运动,这个方向是正还是负是在NC中设置,必须设置成朝原点信号的方向;
③ 一个上升沿信号被检测到,轴开始减速停下;(注意这个信号持续时间太短会报错)
④ 轴完全停下后开始向另一个方向运动,这个方向也是在NC中设置,推荐设置成与第一个方向相反的方向;如果使用的PLC CAM模式(默认方式),轴在反向运动回来的时候检测到原点开环信号的下降沿,在下降沿处开始减速停下;并将下降沿的位置设置为reference position;最后一般会停在0附近的位置,此时回零结束;(倘若在上一步轴运动的方向和第一次运动的方向一至,那么轴会继续朝负向运动,去碰原点开关的最右位置的下降沿,并将该下降沿设置为0点,这样设置很容易导致碰到负限位!)
如果不是PLC CAM模式的话(需要在NC中修改):
⑤ 轴在④位置会继续运行,等待同步脉冲信号或者触发事件;
⑥ 当同步脉冲或者同步事件触发后,会将触发点的位置设置为reference position;
⑦ 触发后开始减速停止,最后还是会停在0点附件的位置,而不会是刚好0的位置;
说明:
1)一定要注意两个回零方向和回零速度的设置,默认回零方向一般不适合!回零速度也需要修改,特别是原点开关和负限位很近的时候,速度不宜过大,否则刹车距离不够;
2)使用原点开关回零,设置恰当的两次回零方向,再加上来回两个速度值,共4个参数即可;
3)使用同步脉冲或者事件触发方式,需要设置交较多参数,将在第四部分详述。
三、 PLC程序
在Beckhoff的回零功能中,都是通过MC_Home这个功能块来触发的,没有例外。至于MC_Home中有HomingMode可供选择,但是事实也还是。。。。还是来看看:
TYPE MC_HomingMode :
(MC_DefaultHoming,(* default homingas defined in the SystemManager encoder parameters *)
MC_AbsSwitch, (*not implemented - Absolute Switch homing plus Limit switches *)
MC_LimitSwitch, (* notimplemented - Homing against Limit switches *)
MC_RefPulse, (* not implemented- Homing using encoder Reference Pulse "Zero Mark" *)
MC_Direct, (* Static Homingforcing position from user reference *)
MC_Absolute, (* notimplemented - Static Homing forcing position from absolute encoder *)
MC_Block, (* not implemented -Homing against hardware parts blocking movement *)
MC_ForceCalibration, (* set thecalibration flag without performing any motion or changing the position *)
MC_ResetCalibration (* resetsthe calibration flag without performing any motion or changing the position *)
);
END_TYPE
该枚举类型中灰色的都是不能使用的,所以不要再问我MC_RefPulse要怎么使了,楼主真心不会啊
MC_DefaultHoming是使用NC中的配置,这个选项用的最多,也是默认选项(空白不填默认就是这个);
MC_Direct 轴不动作,直接将当前位置作为reference position,直接回零完成,可用于虚轴和实轴一起控制时的虚轴回参选项;
MC_ForceCalibration 是什么都不变,直接给轴一个已经回过参的标志,在Axis.Status.Homed可以查看到;
MC_ResetCalibration 直接清除掉轴的回参标志,可以在步进电机等开环控制运动出错后的跟进动作;
可以看到,用的最多的还是第一个,也就是默认使用NC的配置。顺便提一句,MC_Home的bCalibrationCam信号都是指的原点开关传感器信号,把其他的什么脉冲信号千方百计的送到这里非但没有提高精度的效果,反而还会引发功能块运行故障。
四、 NC参数的设置
使用原点开关回零:
在第二节已经谈到,使用PLCCAM回零只需设置4个参数,2个速度参数在Axis的Parameter(轴参数)的页面,如下图所示,注意在TwinCAT3中该参数的位置有所变化,但是参数名称不变,此处为TwinCAT2.11截图;

回零方向参数在Enc的Parameter里面,别问我怎么找到。。。。下面这两个方向,第一个是回参考点找上升沿的方向,第二个是找下降沿的方向;所以这两个方向一般是相反的。注意,下面的方向前面有Invert,默认都是正向的,所以为false是正向,Ture是负向,一般下面两个都要修改。

使用同步脉冲方式回零,

a) 对于单圈绝对值编码器可以使用SoftwareSync,且不需要驱动器提供额外的软硬件和额外的设置;
b)对于 纯增量的编码器可以使用HardwareSync,需要驱动器提供提供零脉冲,这个零脉冲被编码器处理为位置告知NC;
c) 至于Hardware Latch1(pos.edge)和Hardware Latch1(neg.edge)是使用beckhoff的驱动器上的IO或者EL51xx等带Latch锁存功能的编码器模块。
先说c),一般Latch功能是通过一个高速IO读取输入信号的上升沿或者下降沿,此IO不由PLC刷新,而是由硬件控制,当上升沿(或下降沿)触发后,由硬件把当前编码器的位置存下来,并等到PLC周期到来时,再将此位置值传给PLC,因而此位置是非常精确的。如果拿来做回零用,那就是把原点开关传感器接到这个Latch口,由硬件锁存住传感器触发的精确位置,然后把该位置设置为reference position。
如此配置的话,先要在硬件中配置Latch功能:对于驱动器需要配置IO,添加startup参数和ProcessData,然后会出来Probe value值;对于EL51xx模块,自动就有Latch value。NC链接完成后,这个Latch位置值会送到NC的到nInData2中(nInData1是编码器的实时位置);
再说b),楼主还没有怎么试过,求有会用的筒子指教一二!楼主比较怀疑是要配合PLC的MC_RefPulse,仅仅是怀疑……
最后说a),a)的关键是要设置Encoder Sub Mask (absolute range maximum value),这个值会在轴跑一圈的时候溢出一次,利用这个溢出事件作为轴的软同步脉冲,其精度和硬件脉冲是相当的。

如上图所示,对于倍福的驱动而言,编码器为20位,2^20-1=FFFFF(10进制为1048576-1),因此编码器转一圈,会自动溢出一次,而且由于是部分绝对值编码器(单圈绝对或者旋变或MES),溢出的时候是可以反馈当前圈位置的。注意纯增量型的不能使用,如TTL,这个值溢出和当前圈位置没关系(启动时是0),所以每次溢出的时机不同,回零位置反而每次都会有差别!
对于各种EtherCAT驱动器
对于Beckhoff的AX5000驱动器,一般应用使用原点开关即可,需要考虑精度的选择SoftwareSync方式,倍福的增量型编码器一般都是单圈绝对值或者旋变,满足SoftwareSync的要求;也可以原点开关加Latch功能来锁存原点位置提高精度;此种方式最为灵活。
对于Beckhoff的EL72xx驱动器,是属于DS402类型,但是仍然可以使用 SoftwareSync方式提高精度;
对于Beckhoff的EL5101或者EL5151,传感器送到Latch功能来锁存原点位置;
对于第三方的EtherCAT驱动器,目前多是DS402的(CoE),首先考虑用普通原点开关回零;需要提高精度的,首先推荐用DS402自带的回零模式,将CoE6060号参数选择模式的参数选到回零模式(一般是6),然后给使能信号启动回零。一般来说大致如此,用这种回零方式能够比较好的利用自带编码器的零脉冲,特别是在纯增量反馈系统的情况下。此外,如果是单圈绝对值的反馈,可以考虑使用SoftwareSync提高回零精度,但是需要提前测试一下可行性,毕竟两个厂家的产品配合使用还是要多试验试验。
有不对和不足的地方,欢迎批评指正!
有不清楚的地方欢迎来探讨!
TwinCAT运动控制中的回零问题(下)
深圳海生自动化 沈强 2016-01-10
原文链接:
TwinCAT运动控制中的回零问题(上)
https://user.qzone.qq.com/2708910716/blog/1441730249
TwinCAT运动控制中的回零问题(下)
https://user.qzone.qq.com/2708910716/blog/1452369060
内容简介
上篇讲解过TwinCAT运动控制回零的基本概念和基本方法,本篇主要介绍:使用编码器Z相脉冲回参的问题(硬件回参)。
大致分为3个小节来讲解:先界定使用硬件回参问题的讨论范围;再简要介绍硬件脉冲回零的基本原理;然后讲解使用AX5000驱动器(SoE)使用硬件回参的设置方法,最后简单提一下CoE驱动器硬件回参的方法。
五、 硬件回参的适用范围
EtherCAT驱动器,这点是必须的,走其他总线的,或者模拟量和脉冲方式的,在倍福系统中,目前还是直接使用开关传感器较为方便,使用TwinCAT主站也能够轻松配置。EtherCAT驱动器的话,主要又是以下两种类型:
SoE驱动器,本篇仅介绍倍福AX5000的配置方法,其他SoE型驱动器(科尔摩根)配置方法类似;
CoE驱动器,必须是支持探针功能的标准CoE驱动器,不一定每个厂商都支持,因为现在CoE的驱动器种类是越来越多了。
六、 硬件回参的基本思路
首先我们回顾一下倍福TwinCAT运动控制的4层结构:

在回参过程中,在PLC程序中调用MC_HOME功能还都是一样的;那么问题就是怎么把编码器的Z脉冲信号传上去。由于NC和物理层之间是周期扫描,PLC和NC之间也是扫描的方式,而编码器Z脉冲信号转瞬即逝,经过两个扫描周期一延长,Z脉冲的位置就已经不准了,使用Z相脉冲回零以提高精度的想法也就泡汤了(拒绝回答为什么使用Z脉冲能够提高回零精度)。
如此,只有驱动器硬件支持锁存(Probe)功能,在Z相脉冲发生的边沿(选择上升沿或者下降沿)记录下当前轴的位置,存在驱动器自身硬件中,然后NC周期到来时通过ProcessData上传给NC,SoE和CoE型的驱动器都是这个原理,于是乎,问题关键就是把位置锁存值送到驱动器的PDO中去,以供NC回参使用。
七、 AX5000驱动器采用硬件回参的配置
《TwinCAT 运动控制中的回零问题》一文介绍过,编码器的类型和回参方式紧密相关:绝对值不用回参;单圈绝对使用software sync精度较高且配置简单;所以硬件回参一般适用于纯增量型编码器,最常见的也就是1Vpp和TTL类型,而倍福出厂并无这两种类型的编码器反馈,但这两种反馈由于价格便宜使用简单,反而市面上使用较多,故本文基本是为AX5000配置第三方电机或编码器而作。
前言讲的太长了,下面进入正题,讲解配置步骤,主要是两个部分,驱动器侧的配置和NC侧的配置:
1,先在AX5000中配置Probe,步骤如下:
1)Reference信号来源(P-0-0154):默认是0:No Source 点选为1 Zero index 即可,这个选项激活才能生效;

2)Probe信号的选择,是来自编码器还是驱动器IO(P-0-0250)

3)Probe逻辑的配置,可以单独选择一路或进行与运算等(P-0-0251)

4)Probe的激活指令(S-0-0170),需要激活生效;还需将此参数在startup中添加,并赋值3;

5)配置Probe的参数(S-0-0169)
a. 是否开启上升沿;
b. 是否开启下降沿;
c. 选择Probe的模式 ,是单个模式还是连续模式,一般选单个(0)即可;
d. 选择Probe的激活方式,0为使用S-0-0170来激活,也就是上一步的方式;或者每次运行时自动开启;此处推荐使用自动开启,这 样上一个参数S-0-0170是不用去手动启用或者程序触发的,S-0-0170不设置都可以
上面4个参数构成S-0-0169的最低4位,因此也可以在startup中直接赋值;
6)使能Probe1(S-0-0405);也可以在startup中直接添加并赋值;
7)检查Startup List中的参数是否更新,另外检查S-0303和S-0307是否已经变更为405和409;改变为上述值说明之前修改正确;以上各个参数都给出了相关的参数号,因此直接在startup list中手动一次性添加完也是可以的。

2,将锁存位置值添加到PDO中,并且传给NC
1)添加PDO,上升沿或下降沿和之前的设置保持一致:

2)添加完成后,可以发现在AT中增加了Probe value 1 positive edge,不过这个变量并没有链接到NC中去:
3)此时,将NC轴和驱动器通道重新链接一次即可;

3,告知PLC是使用了硬件寻参的方式,此时在system manager的NC轴的Enc参数中设置Home的方式,选到hardware sync即可;

4,上述配置完成后,激活生效,在PLC程序中使用普通的MC_Home就可以实现使用Z脉冲回参了,和之前文章提到的,仍然要注意回零的方向问题!
如此,就完成了AX5000使用Z脉冲回零的步骤,总体上看,难点还是在于驱动器参数的配置上。
八、 CoE驱动的Z脉冲回参方法
CoE的驱动器想使用NC的Hardware Sync需满足两个条件:
1,驱动器得能将脉冲触发时的位置值在硬件里存住;
2,驱动器能够把这个位置值送出来;
不少驱动器都有捕获Z脉冲的功能,BUT,有些驱动器并不将其转化为位置值;有些转化为位置值了只给驱动器内部用,并不送出来,如此只能使用驱动的回零模式来开启硬件脉冲回零;
如果两个条件都满足,那么需要将CoE参数的0x60B9 (TouchProbe Status)添加到PDO中,然后和上面的方式一致,将参数链接到NC轴,在NC中设置Hardware Sync,然后使用MC_Home功能块即可实现了;之前所讲的快速判断方法,也就是看驱动器支不支持将Probe值添加到PDO中传给NC,有些也可能不再0x60B9这个位置,因为各个厂家自定义参数的范围还是相当大的。
补充:乍一看,好像SoE比CoE的驱动器配置要复杂很多,其实是由于SoE讲的是倍福和第三方产品配置,倘若使用倍福全套,自然是不用这么麻烦的;另外CoE的驱动器如果驱动器和电机(含编码器)不是一套,那么配置起来工作量也应该会很大。
有不对的地方,有劳各位看官批评指正,在此先谢过!
作者简介:
深圳海生自动化沈强,2013到2016年在倍福中国深圳分公司从事技术工作。
本文的PDF版、示例程序和配套文档放在本公众号的云服务器,按日期查找即可:
FTP下载工具访问:ftp://baclizzy.com.cn:21
IE浏览器访问:http://www.baclizzy.com.cn




