Hello, I have solved a similar problem using 10MHz+ AB encoder counts feeding into a microcontroller. The microcontroller is a 20 MIPS little thing that has limitations on the interrupt rate and/or its counter-timer section. I think 4MHz was the max input frequency.
My solution used a CPLD to track the actual position and give the microcontroller a prescaled count to use at higher speeds and also provide the lower un-prescaled count bits for position feedback when working at lower speeds. The prescaler divided the encoder position by 32 so the maximum count the microcontroller would see was 10MHz/32 = 312kHz. The counter section I/O was capable of reading this. When not at top velocity the microcontroller would sense the scaled speed was below a certain threshold and begin to use the lower 5-bits of the un-prescaled CPLD count for position feedback. You may do something similar by prescaling your encoder count and using that for EMC2. I'm guessing with that high of a resolution the lower bits can simply be thrown away. Dividing by 16 in your case would get below the threshold required for your EMC2 setup. Dennis ----- Original Message ----- From: "Marc van Doornik" <[EMAIL PROTECTED]> To: <emc-users@lists.sourceforge.net> Sent: Friday, November 23, 2007 2:06 AM Subject: [Emc-users] Paging doctor P.I.D. Guru > 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 > ------------------------------------------------------------------------- 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