 OMRON Forums

# How can I setup D-PWM on ACC-84E, UMAC

## Recommended Posts

I will setup customer machine.

I have to use UMAC with ACC-84E(\$78C00), ACC-24E2.

Encoder is Heidainhain Endat 2.2 (resolution : 1nm)

But I don't now Ixx83 address.

Ixx01 = 1 or 3?

Ixx83 = \$78C00? or Position data A ECT result address?

Linear motor pole pitch is 36mm.

Ixx70 = 1

Ixx71 = 36 * 1000000 = 36000000

Is it right? but Ixx71 range is 0-16777215.

what's Ixx70 and Ixx71 value?

• Replies 1
• Created

#### Popular Days

Naguiman,

This is what we have seen with high resolution encoders, and the best way to mitigate the problem is to use encoder conversion table to read at least the upper 12 bits of resolution which are necessary in commutation. Notice that only 12 bit of information is necessary since Turbo PMAC commutation is based upon a 12-bit sine table and any lower bits gets truncated.

NOTE: The following solution holds true for all high resolution encoders, including EnDat2.2, Biss-C, etc.

Now that we covered the theory, lets look at your example and explain in detail what you need to do:

Your encoder has 1nm resolution and your electrical length is 36mm which means your commutation cycle is 36,000,000 LSB of encoder position. If you calculate the LOG2(36,000,000) = 25.101493 which means the encoder will transmit 26 (25.101493 rounded up) bits of data resembling the change in position.

In ACC-84E the feedback data is available on Serial Encoder Data register A (a.e. Y:\$78C00 for first card, first channel) and the over flow of the data (beyond 24-bits) is placed in Serial Encoder Data Register B (a.e. Y:\$78C01 for first card, first channel).

Since we have a linear motor Ix70=1. In order to make the math calculation for Ixx71 easier, we choose a power of 2 divisor for 36,000,000. Lets say 2^8=256, which means that we can set Ixx71=36,000,000/256=140625. So the the smallest bit that defines a phase position change as far as Ix71 and Ix70 define is bit 8 of encoder data. So our encoder conversion table reading should point to Serial Encoder Data Register A, starting at bit 8 and wide enough to cover bit 26 of data which is in next register. Since the data is in Y-memory register, conversion type \$2 (Parallel Y-memory read) will be used. This is a two line entry:

1st line: I8000=\$2F8C00

2nd line: I8000=\$018008

A few notes on this ECT entry:

0. Note that this entry is different from the ECT entry which is used for on going servo position which has full resolution of the encoder.

1. Bit 19 is set to 1, meaning the data is not shifted and bit 8 of encoder position will be the LSB of encoder conversion table processed data.

2. The address in 1st line is an example for first card, first channel \$78C00.

3. Second line tells the entry that reading of data starts at bit 8 of 1st register and width of data is 24 bits (\$18). If the encoder doesn't have at least 32 bits or resolution (24+8=32), then the width of data should be lowered to prevent a jump in phase position and let encoder conversion table take care of roll over properly.

Now point Ix83 to second line of encoder conversion table which holds the processed data.

Ix83=\$3502

And since the processed data is in X-memory location, set Ix01 to 1.

Please notice that using this solution, your phase position is only getting updated at servo rate where ECT is updated. Since the commutation happens at phase rate, it is suggested that phase and servo clocks are either set at the same rate or very close which results in better commutation and servo performance eventually.

I hope this explains everything.

##### Share on other sites This topic is now closed to further replies.

×
• Forums

• Events
• #### Browse

×
• Create New...