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