Delta Tau Forums

Full Version: 'Stepper Method' Phasing w/ Absolute Serial Encoder
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,
We're using the 'Stepper Method' for finding phase on a Power PMAC with an ACC84E talking to an absolute serial encoder. The phasing has not been very reliable, failing to find phase maybe 1-5% of the time. When it is found, things behave as expected with no discrepancies.

When we execute phasing using this method, I'm finding that the position returned in Motor[1].New[0].Pos is consistently around 350 commutation units (rather than the 512 'ideal' or even > 400 recommended). I've increased the PhaseFindingTime to a large number in order to make sure that the motor is 'locked on' to the 0 and 90 degree commutation positions when energized - it is. It appears that the found phase is actually 2/3 of what it should be for our 3-phase, 14 pole motor.

I've sanity checked the basics; the position in Acc84E[1].Chan[0].SerialEncDataA is correct (full rotations cycle back to the same value as expected), likewise the motor position is correct (full rotations cycle back to the correct value modulo # of motor units), and it works well if it phases.

Regardless, I've been unable to find the source of this discrepancy - the only think I can think of at this point is that the 'Stepper Method' in our case doesn't use 0 and 90 degree positions but rather 0 and 60 degree positions (and probably because of some erroneous configuration on my part?). So I'm at a loss to explain this and any insights here would be greatly appreciated.
Thanks,
~Andy
When you have an absolute encoder, the only purpose for the stepper-motor phasing search is to establish the difference between the sensor zero position and the commutation cycle zero position. This difference is put in Motor[x].AbsPhasePosOffset, and then in subsequent startups, PMAC just reads the absolute encoder position and adds this offset -- no need for a search.

So you only need to do this successfully once. I would definitely do this on an unloaded motor so things like friction and gravity loads can't screw it up.

The purpose of the "stepper method" is to try to drive the motor to the zero position in the commutation cycle by forcing current in a phase as you do for a stepper motor. You can do this manually with a command like:

#x out0 Motor[x].IbBias=3000

(Remember to return IbBias to (at least near) 0 when you are done.)

What is your value for Motor[x].PhaseFindingDac? Does increasing it help?

The built-in search function first forces it to 90 degrees so it cannot possibly be stuck at 180 degrees. It can also confirm that reasonable motion occurred between the two steps before it declares success and allows the loop to be closed.

I did just confirm on my test system that the two steps are 90 degrees apart, not 60. I got about 500 commutation units between steps each time I tried this search.

You claim a motor with 7 commutation cycles per revolution. How many encoder LSBs do you have per revolution and what are your settings for AbsPhasePosSf and PhasePosSf?
(12-19-2018, 05:13 PM)curtwilson Wrote: [ -> ]When you have an absolute encoder, the only purpose for the stepper-motor phasing search is to establish the difference between the sensor zero position and the commutation cycle zero position. This difference is put in Motor[x].AbsPhasePosOffset, and then in subsequent startups... -- no need for a search.

We understand this and this came up as part of my work to switch to an absolute reference based search (which is working fine). At this point I'm just curious why our stepper based search was consistently converging on 350 commutation units. For what it's worth, the absolute phasing method is working well.

(12-19-2018, 05:13 PM)curtwilson Wrote: [ -> ]I did just confirm on my test system that the two steps are 90 degrees apart, not 60. I got about 500 commutation units between steps each time I tried this search.

You claim a motor with 7 commutation cycles per revolution. How many encoder LSBs do you have per revolution and what are your settings for AbsPhasePosSf and PhasePosSf?

We're using the same value for AbsPhasePosSF and PhasePosSF which is 7 * 2048 / 2^18 which can also be written as 7 / 2^7. Our encoder has 18 bits of resolution per revolution. Our PhaseFindingDAC was ~3000 with a very large PhaseFindingTime of 12000 in order to 'lock' in to the phase positions. The motor being used is an Aerotech S-76-149.