Any PID tuning gurus are welcomed to shed their thoughts on a bit of a 
controlling issue I'm having.

Recently, we have upgraded a functioning EMC2-controlled laser cutter 
with a new motion stage. Initially, we used stepper motors, connected 
via Geckodrive G201 drivers. Now, the X/Y-stage is a state-of-the-art 
linear motor-driven job. Some relevant info:

* Linear motors, peak force around 700 N
* Max. velocity 2 m/s or about 79 inches per second
* Max. acceleration 3 g
* Matching PWM amplifier with direct commutation input and three-phase 
output
* Optical encoders with 100 nm (~0.000004 inch) resolution and 
differential output
* Precision linear guides (no air bearing due to contamination issues), 
so there is a bit of friction involved
* 300 mm (~12 inch) stroke length
* Motenc-lite servo card

You can probably imagine my nervousness and reluctance to try and tune 
such a monster by feeding it a stepped input for getting a nice PID 
response. You really don't want this thing to go instable on you, trust 
me. From one end of the stage to the other takes it around 150 ms. 
Seriously scary stuff, especially with the forces involved.

So far, connecting everything up has been easy as pie. Sort of, anyway. 
I've written a HAL component to generate the proper phases for direct 
commutation from a velocity input. When controlling the motors in an 
open loop, the velocity does match the input fairly well and the 
encoders give the correct position. In that respect, all is well.

Now for my actual question: what would be the best control and tuning 
strategy? I suppose I'll have to cascade a velocity loop and a position 
loop to get sufficient stiffness (given the spring-like behaviour of a 
linear motor), but I'm not sure how to do this, especially as far as 
tuning is concerned. My idea is as follows:

1. Create an expanded version of the three-phase component with an 
acceleration input (internally integrated to get the velocity signal). 
Feed back the encoder data to generate a position signal and a velocity 
signal. This way, the output of the velocity PID controls the 
acceleration (like it should, am I correct?), the velocity signal from 
the encoder being fed back into the velocity PID.

2. Tune the velocity loop - but how?

3. Add another PID before the velocity input to control the position and 
feed it the position data of the encoder.

4. Tune position loop.

One problem that springs to mind is the spring-like behaviour of the 
motor. This manifests itself as a hysteresis in the output position due 
to the friction of the roller guides (about 15 N). Obviously, this 
hysteresis should be compensated for as fast as possible, preferably 
with the maximum velocity of the stage (i.e. 2 m/s). However, the 
maximum velocity the servo card can keep up with (because of encoder 
resolution) is 200 mm/s. Should I try to circumvent this by applying 
feed forward of some sorts? Maybe I'm better off adding a rough backlash 
compensation in the three phase component itself?

Any insights on this matter are greatly appreciated.

TIA,

Marc.


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to