[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周期中的具体位置。
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,这两个命令的格式分别是:
其中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,会分多次发送。读也一样。
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,电机型号不同,报警内容可能会有不同)。但不影响本功能的执行。