02.HIPERFACE编码零位设置

<< 点击显示目录 >>

主页  轴控开发使用手册 > 轴控功能块 >

02.HIPERFACE编码零位设置

[Hiperface编码零位设置] [简单]

1. 功能块功能介绍

由于在编码器安装后,编码器的零点位置和电机磁场的换向位置不在同一个位置,有个角度差(磁偏角),导致无法控制。此时就需要执行Phasing(寻磁偏角)操作,得到具体的磁偏角后再进行控制。为了方便使用,也可以在编码器安装后,执行一次Phasing,然后将得到的磁偏角写入到编码器内存中,或者将这一偏差加到编码器绝对位置中,以改变编码器零位,使得磁偏角为0,以方便用户使用。对于使用Hiperface编码器的电机,可以使用后一种方法。

本功能块通过设置Hiperface编码器的绝对位置,来设置编码器的零位,使电机磁场和编码器零位的磁偏角为0,以方便使用。

 

2. 功能块软件配置信息

AS版本

AS3.0

操作系统版本

 

伺服操作系统版本

需要库

 

编写人

穆珊珊

测试人

 

审核人

 

项目名称

Hiperface编码器零位设置-简单

任务说明

用于操作Hiperface编码器:设置零位。

 

3. 版本信息

软件版本

修改内容

修改人

V1.000

创建

穆珊珊

V1.10

修改位置计算的错误,删除轴报警处理

穆珊珊

V1.20

添加编码器参数:编码器圈数、每圈正余弦数量、每个正余弦的精度

邱兆军

V1.30

替换为AsBrStr库,Visu标准化(字体、页面号等)

穆珊珊

 

4. 数据交换

 

接口说明

I/O

名称

类型

描述

IN

gHiperfaceOffsetCtrl.Cmd.SetOffset

BOOL

命令:设置编码器位置

IN

gHiperfaceOffsetCtrl.Cmd.ErrorAck

BOOL

命令:报警确认

IN

gHiperfaceOffsetCtrl.Cmd.ReadPos

BOOL

命令:读取编码器内部的绝对位置

IN

gHiperfaceOffsetCtrl.Monitor.PolePairs

USINT

电机极对数

OUT

gHiperfaceOffsetCtrl.Monitor.Step

USINT

当前程序运行步

OUT

gHiperfaceOffsetCtrl.Monitor.PhaseAngle

REAL

Phase得到的磁偏角

OUT

gHiperfaceOffsetCtrl.Monitor.Done

BOOL

设置编码器位置完成

IN

gHiperfaceOffsetCtrl.Monitor.SinRev

UDINT

编码器一圈对应的正余弦信号数量

IN

gHiperfaceOffsetCtrl.Monitor.Resolution

UDINT

编码器的一个正余弦信号对应的编码器本身位置精度

IN

gHiperfaceOffsetCtrl.Monitor.MultiTurns

UDINT

编码器能够记忆的编码器多圈圈数,如果是单圈编码器,则该数值为1

OUT

gHiperfaceOffsetCtrl.Alarm.ErrorID

UINT

错误号

OUT

gHiperfaceOffsetCtrl.Alarm.ErrorStep

USINT

出现错误的步骤

OUT

gHiperfaceOffsetCtrl.Alarm.ErrorTransferStep

USINT

出现错误的通讯步骤

 

 

5.程序工作原理

 

5.1 编码器位置格式

Hiperface编码器是绝对值编码器,编码器中存储了当前的绝对位置,通过通讯的方式可以读到这个位置。这个位置值包括圈数(多圈)和一圈当中的具体位置。其中,在一圈中的具体位置又由两部分组成:sin/cos周期和周期中的具体位置。Hiperface编码器给出的是sin/cos信号,例如SEK/SEL37型号,它的一圈可以产生16个周期的sin/cos信号,而每一个周期又有32的分辨率。

所以,Hiperface编码器使用4个字节来描述位置值(多圈编码器有效位数为21位,单圈编码器有效位数为9位)。其中,12bit用于表示圈数(多圈),4bit用于表示16个周期,5bit用于表示一个sin/cos周期中的具体位置。

 

clip0317

 

 

5.2 调整零位原理

 

假设编码器安装后,电机的磁场换向位置在角度a1,而编码器零位在角度a2,这样磁偏角delta_a = a1 – a2。通过Phase我们可以测量到这个磁偏角。在不重新安装编码器的前提下,为了使磁偏角delta_a = 0,我们就需要人为去调整编码器零位,由a2变成a1。可以通过强制改变编码器中存储的绝对位置来实现,也就是给编码器的位置增加一个偏移量offset,那么零位相应的也会增加这个偏移量。

在任意位置读编码器的位置值p1,不转动电机的情况下,将这个位置的位置值修改为p2,使p2 = p1 + delat_a,即offset = delta_a,则编码器原来的零点就由a2变成了a2 + delta_a = a2 + a1 – a2 = a1,实现了两个零位的重合。

由于delta_a是弧度单位,而编码器位置值是一个4字节数据,所以中间需要转换。考虑电机极对数为n,则转换公式为:

offset = (delta_a / (2*pi))*(Rev/n)*Ros.

pi是圆周率,Rev是编码器每圈的正余弦数量,Ros是每个正余弦信号的精度。

 

5.3 读写位置命令

读写位置的命令是42h和43h,这两个命令的格式分别是:

clip0318

clip0319

其中address是编码器地址,默认为40h,code0是访问码,默认值55h,checksum是自动添加的校验码。

 

5.4 AS中实现

 

AS中通过MC_BR_ReadParID和MC_BR_WriteParID两个功能块实现往编码器发送命令和读取反馈值。

具体请参考AS help:Motion -> Reference manual -> ACOPOS drive functions -> Encoder Interface -> Hiperface

需要注意的是,发送时需要先设置需要发送的数据块长度,即写ENCOD_SERIAL_DATA参数,然后在发送数据块,如果数据块长度大于6,会分多次发送。读也一样。

clip0320

 

5.5 所需硬件

如果编码器配合使用ACOPOS,那么选择8AC121.60-1插卡;

如果配合使用AcoposMulti,那么选择8BAC0121.000-1插卡;

使用Hiperface专用编码器接线。

6.功能块使用说明(如何在新的项目中使用step by step)

步骤

说明

操作方法

1

加入任务,编译

 如果编译报警memset,请添加asstring库

2

程序中轴名字是gAxis01,根据具体项目修改

 

3

添加伺服驱动和电机,并在伺服参数表中将109号参数设置为:16384*(一圈的正余弦数)

 

4

将电机固定,并且空载,在Test中执行Phase,得到磁偏角

 

5

在watch中,相应变量处,填入磁偏角、极对数和编码器各参数

 

6

将watch的SetOffset命令置1,开始执行

 

7

Done为1时,表示成功执行

 

8

如果伺服产生报警(如39001),在test中确认后,继续执行下一步

 

9

将ParID 63置0,测试电机是否能正常运行

 

10

如电机不能正常运行,请重新执行4-9步

 

 

7.注意事项

寻磁偏角时,使用test模式下的“SETUP MOTOR PHASING”,将模式设置为“STEPPER”方式,将店口设置为电机额定电流。使用STEPPER模式,可以得到更加稳定的磁偏角数值。

寻磁偏角时将电机固定,这样可以防止接线或者参数设置异常时电机抖动,以及增加寻磁偏角的精确性。

带Hiperface编码器的电机,必须设置速度环的滤波时间,否则会导致电机声音异常,一般设置为0.001。

需要正确填入磁偏角,极对数,编码器正余弦数量、正余弦精度、圈数等参数。

完成后需要测试电机是否能正常运行。

为验证磁偏角设置是否合适,可以将电机分别在额定转速的正向和反向运转,检查214参数和219参数在两种状态时,电流数值是否相近。

由于该编码器含有模拟量信号,一定要检查编码器线是否连接牢固以及屏蔽,否则会导致异常报警。

执行完该功能后,电机的63号参数必须设置为0。

V1.10版本中删除了轴报警处理,如果有轴报警,请在test中处理。由于改变编码器的位置,使得伺服得到的位置值发生跳变,会生成报警信息(如39001,电机型号不同,报警内容可能会有不同)。但不影响本功能的执行。