Jump to content
OMRON Forums

64 bit encoder tables


Recommended Posts

We have an application where we use 4 absolute encoders (32bits) on a rotating stage. The goal is to combine the 4 readings to achieve maximum precision (remove random translation of the rotation axis). We use type 2 ECTs to read the raw data with full 32 bit precision

Acc84E[5].Chan[0].SerialEncCmd=$2114A0	// 32 bit 2bit status and 6bit polynom Biss C encoder
EncTable[19].type=2;        // 24+8 bit read entry;
EncTable[19].pEnc = Acc84E[5].Chan[0].SerialEncDataA.a   // address of lower 24 bit
EncTable[19].pEnc1 = Acc84E[5].Chan[0].SerialEncDataB.a  // address of upper 8 bits
EncTable[19].index2 = 0;
EncTable[19].ScaleFactor = 1.; 
EncTable[19].MaxDelta = 50000 * 256;


This creates a conversion table which is signed 32 bits. Is there a way to make this 64 bit?

When going forward and adding the four tables together using type 8 ETCs and scaling it by 1/4 we have the problem of the table rolling over and creating discontinuities (jump from 2^31-1 to -1*2^32) at an interval of 90 degrees (in units of the rotating stage).

I know that for the ongoing operation only the delta Position value is relevant and I should be fine. However the 90 degree ambiguity creates issues with the absolute power on position. I was thinking of using the high 8 bits of one of the encoders and the lower 24 bits of the ECT where the 4 encoders are combined as my power up position info.

Any thoughts on how to best implement the power on absolute position if the ETCs cannot be used as 64 bit?

Link to comment
Share on other sites

  • Replies 2
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic



if only power on position is the concern, then you should be able to do it in a startup/poweron PLC.

read all 4 encoders and assemble the position through SerialEncDataA and SerialEncDataB registers.

average these 4 readings and put it in a register.

point Motor[x].pAbspos to that register, and make sure you set up Motor[x].AbsPosFormat and Motor[x].AbsPosSf properly.

issue HMZ online command or HOMEZ program command, and the absolute position will be read.

Link to comment
Share on other sites

You can manipulate the data manually and place it in two consecutive user buffers (e.g. Sys.Udata[10] and Sys.Udata[11]) then set up the following accordingly

Motor[].pAbsPos = Sys.Udata[10].a

Motor[].AbsPosFormat = $01003200 // example

Motor[].AbsPosSf = Motor[].PosSf // example


Or you can manually (when the motor is killed) write to the home position. Say you computed the data in Sys.Ddata[1]:

Motor[].HomePos = Motor[].ActPos - Sys.Ddata[1]

Link to comment
Share on other sites

This topic is now closed to further replies.

  • Create New...