Hello Mark,
I suspect that the behavior you are experiencing has today
with the resolution difference between your encoder and your
microstepping.
Let me illustrate with an
example:
Example Setup
- Stepper
Motor
- NI
Motion Controller
- 10
steps per encoder pulse (Every 10 steps the controller gets an encoder
pulse, therefore positions 0-9 all appear to be 0 to the controller)
- The
system has a maximum of 3 pull in moves set
Open Loop Scenario
- The
system is commanded to go to position 9.
- The
controller sends out 9 pulses.
- The
motor moves to position 9.
Closed Loop Scenario
- The
system is commanded to go to position 9.
- The
controller sends out 9 pulses.
- The
motor moves to position 9.
- The
controller checks its position and sees that it is still at position 0
because it has not received an encoder pulse.
- Because
the controller thinks it is still at position 0, it sends another 9 pulses
as its first pull in move.
- The
motor moves to position 18.
- The
controller checks its position and sees that it is at position 10 because
it has only received one encoder pulse.
- Because
the controller thinks it is still at position 10, it sends1 reverse pulse
as its second pull in move.
- The
motor moves to position 17.
- The
controller checks its position and sees that it is at position 10 because
it has only received one encoder pulse.
- Because
the controller thinks it is still at position 10, it sends and additional
single reverse pulse as its third pull in move.
- The
motor moves to its final position of 16.
I believe something similar is happening with your
application as it looks for the index pulse.
Because the controller does not compensate for what it perceives as
position error in open loop mode, the motor always goes to the same commanded
position.
In closed loop mode, the motor
is bouncing around inside the single index encoder pulse trying to find a
certain position.
There are several recommendations I can make towards
correcting this behavior.
These
recommendations are in order of effectiveness:
- Setup
your system so that there are more encoder counts per revolution than
steps per revolution.
- Turn
off pull-in moves by setting them to 0 in MAX.
- Use an
open loop configuration.
- Play
around with the pull in window in MAX.
Regards,
Luke H