设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
基于TwinCAT3的多圈绝对值编码器回零
返回列表
发新帖
[倍福]
基于TwinCAT3的多圈绝对值编码器回零
[复制链接]
60069
|
0
|
2024-9-13 12:54:06
|
显示全部楼层
|
阅读模式
问 题
近日,通过Beckhoff PLC控制ABB Microflex e190伺服,在对多圈绝对值编码器伺服电机回零时,发现了一个问题。执行MC_Home回零后,当前值(fAx1ActPos)可以更改成零。但当重新激活配置或重新上电后,当前值(fAx1ActPos)又恢复到执行MC_Home前的值。即,PLC中只能读取到编码器的绝对计数值。即便对SDO:(1010:01)进行了操作也不行(参见下文)。
试验配置如下:
其中Microflexe 190连接的伺服电机为多圈绝对值编码器。单圈位数17位,多圈位数16位。
多圈绝对值编码器说明
众所周知,多圈绝对值编码器,可以记下伺服电机单圈内的角度以及伺服电机转过的圈数。单圈内角度可通过光电码盘直接读取,圈数由电池保存。由于多圈绝对值编码器可记住很大范围内电机轴的绝对位置,因此,多圈绝对值的伺服电机一般不用每次上电回零。
与之对应,增量式编码器每次上电后读数都为零,因此每次上电后都需要回零。单圈绝对值编码器每次上电后,读数都为-0.5圈到0.5圈内的数值。比如断电前的计数为12.7(单位为圈),再次上电后的读数为-0.3,因此单圈绝对值编码器每次上电也需要回零。
基准零点
多圈编码器伺服电机,读数范围为-232~+232,此读数为编码器的绝对位置读数。首次投入使用时,其绝对位置读数(x0)是随机的,可能是一个很大的数。
实际的机械轴可能只是在一个小范围内运动(红色线段区域)。如使编码器绝对读数,会很不方便。如希望把x0作为编程的基准零点。在伺服轴首次投入使用之前,一般会对执行一次回零,以把x0确定为基准零点。
在驱动器中,有一个参数为POSOFFSET。当需要把x0作为基准零点时,会把POSOFFSET设置为-x0。POSOFFSET通过SDO:(5044)映射到PLC侧。在PLC侧,通过对SDO: (1010:01)的操作,把相关参数(-x0)写入POSOFFSET,即SDO:(5044),并使之生效。
操作说明及解决方法
常规操作应当是:执行MC_Home功能块,把HomingMode设置为MC_Direct。即不执行轴的动作,直接将当前值x0设为0(把-x0赋值给POSOFFSET)。执行完后,把“16#65766173”写入SDO:(1010:01),即可把x0点设置为基准零点。
注:16#65766173对应“EVAS”的ASCII码,即“SAVE”的倒序!
这种方式在ABB PLC或LS PLC中都可把x0修改为基准零点,但在Beckhoff PLC中,始终修改不成功。
反复测试,发现当在BeckhoffPLC中执行完MC_Home后,POSOFFSET(SDO:5044)中的值并未更新,即-X0并未更新到SDO:5044中去。因此,需要通过PLC编程更新SDO:5044。
此时需要用到SDO读写功能块,各个PLC厂家都会提供SDO读写的功能块。TwinCAT3提供了库文件:TC2_EtherCAT。其中包含对SDO读写的功能块。
功能块管脚定义请参考官方说明文件。
POSOFFSET的计算及更新
那么,通过PLC如何更新POSOFFSET呢?首先看一下更新的POSOFFSET的计算。
进一步说明一点,多圈绝对值编码器首次上电时的读数为x0,但x0是随机的,有可能不是理想的基准零点,理想的基准零点有可能是在x0点附近的x1点。因此,下述讲述,都是按需要把x1设为基准零点展开的。
执行MC_Home之前,POSOFFSET中有可能是有数值的。在此POSOFFSET前提下的基准零点为x0。此时,若伺服轴的实际读数为y0。即y0是以x0为基准零点的读数y0:=x1-x0。
如果伺服驱动器恢复了出厂设置,则初始POSOFFSET读数为0,基准零点即编码器的绝对零点。
当前的读数y0可通过当前位置读取功能块读取,如下截图,y0=105。此时,对应编码器的绝对读数为x1。
在当前POSOFFSET对应为x0时,如要把x1设置为基准零点,则:
POSOFFSET(x1) = POSOFFSET(x0)+ y0
POSOFFSET(x0)可通过如下功能块读取,并把POSOFFSET(x0)读入变量“nRealValue”中。如伺服驱动器为出厂设置,则nRealValue=0:
而y0的值保存在变量fAx1ActPos中。可通过如下功能块计算POSOFFSET(x1),并存入nSAVE2中:
因我们默认的用户单位为圈,因此fAx1ActPos要乘以131072,并且要取反。
计算完成以后,要通过SDO写功能块,将nSave2写入SDO:5044:
写完成后,要把nSave的值写入SDO:(1010:01):
写完成后,即可把驱动器中的PosOffset更新为“-x1”。
POSOFFSET更新完成后,执行MC_Home,就可以把当前值设置成MC_Home功能块设置的“Position”,此时默认为0,并且断电上电后,当前值都是基于基准零点(x1)进行计数。
备注:要先更新POSOFFSET(其值为-x1),后执行MC_Home。否则,如先执行MC_Home会提前把y0更改成0。
另:在调用SDO读写及MC_Home功能块时,不要使能伺服轴,这样通过功能块读取的y0值无跳动,读数更准确。
总 结
当把任意一点设为基准零点时,这一点对应的POSOFFSET为其编码器绝对读数取反。并需把此POSOFFSET写到SDO:5044中去。通过给SDO(1010:01)赋值“16#65766173”使刷新的SDO参数生效。
TwinCAT3的SDO读写功能块在TC2_EtherCAT库中。不同品牌PLC都有相应的SDO读写功能块。
Beckhoff的POSOFFSET需通过PLC编程计算刷新(如有其它方法或理解错误的,再另文说明)。有的品牌的PLC如ABB和LS的则不需要!
多圈绝对值编码器伺服电机,只是在首次投入使用时需确定基准零点,不用每次上电都做回零。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
wyb2006
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』