(Sorry for repost: forgot to add [Emc-developers] in subject.)

I'm building up an X axis for a laser machine, using a linear motor.
Currently, I'm driving the motor with a Pico 3 phase PWM servo amp.
I've been successfully testing it open loop, and am now in the process
of getting it hooked up to EMC to close the loop.

During the open loop testing, I noticed a significant amount of force
ripple (equivalent to torque ripple for a rotating motor). This was
not unexpected, as I'm driving the motor with 6 step commutation. My
hope is that the control loop will be able to compensate for the force
ripple and yield adequate performance. If not then I would switch to
using a sinusoidal drive, e.g. Granite Devices.

Recently, an alternative occurred to me. If the force ripple is too
large, it might be possible to modify the EMC control algorithm to
include a new feedforward term that would compensate (at least
partially) for the force ripple.

The force ripple might be seen as an output non-linearity that can be
derived from the measured position. The control loop knows the
position, and in principle should be able to correct the nonlinearity,
at least to some extent.

To compute this correction, one would take the measured position and
compute the modulo of the number of encoder counts per electrical
cycle of the motor. In my case, the electrical cycle is 2.4 inches
long, and there would be 2400 encoder counts in this space. As the
forcer moved along the track, this term would count from 0 thru 2399
repeatedly. This could be aligned with the motor's electrical cycle by
using a predetermined offset value during homing, or by using a
transition on one of the motor's HED signals.

The next step would be to use this value as an index into a lookup
table which would perform the linearization. The result would be
multiplied by a tuning parameter (it would be another Fx parameter
perhaps) and then added into the output of the control loop. As an
alternative, instead of using a lookup table, it would be possible to
compute the linearization using a math function. Using a lookup table
would theoretically make it possible to get linearization precisely
matched to a particular motor's nonlinearities, somewhat analogous to
leadscrew mapping. It would yield an output correction factor related
to the current position of the axis.

I think this is more likely to work for a linear motor than for a
rotary one, because with a linear motor the frequency of traversing
the electrical cycles would be lower. My machine only goes through 9
electrical cycles over its entire travel (20 inches). Because of this
short distance, the machine will never be able to reach very high
speeds, and so the control loop will have relatively many
opportunities to act, compared to a machine with a BLDC driving a
leadscrew.

If this works, it would make it possible to use a less expensive
6-step drive on some machines where a sinusoidal drive might otherwise
be required.


Neil Baylis

------------------------------------------------------------------------------
_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to