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

Reply via email to