Hello,

I had some odd problems with following error settings this 
weekend.  I am setting up a machine in pure mm user units, and 
got the tuning working pretty well, so I then wanted to tighten 
up the following error limits.  So, I set both FERROR and 
MIN_FERROR to 0.01 (mm) and found that I would get the following 
error trip about 150 ms after motion started.  The jerk at the 
start of the linear acceleration ramp caused the worst error of 
about .003mm, the error then decreased a lot, and was about 
.001mm when the following error was declared!  So, the error 
never reached the limit.  I then raised both FERROR and 
MIN_FERROR to 0.05, and everything was fine.  If a put enough 
drag on the motors to cause a following error, it ocurred at 
around 0.05mm, as expected, and was very prompt, within a couple 
ms.  I have looked at the code, and can't see what could make 
this happen.  Are there some defaults for these parameters that 
may override what is in the ini file?

Another problem that I discussed a bit with Stephen Padnos was 
the sensitivity of the D term.  When I look at the velocity 
derived from the ppmc encoder, it is conveniently in raw encoder 
counts, and looks beautiful, ie. it is a noisy band between 
consecutive integers, so it jumps between 2 and 3, then as speed 
picks up it jumps between 3 and 4, etc.  This is as good as you 
can get due to the double quantizing, first by the encoder, and 
second by the servo sampling interval.  But, of course, this 
forces the following error to suffer the same quantization, so 
there is a lot of noise at 1/2 the servo sampling frequency. 
The D term of the PID is totally swamped by this noise, that is 
maybe 2-5 times greater than the real velocity fluctuations. 
The lower the encoder resolution, the worse it gets.  I am using 
128,000 counts/inch on my minimill, this user's machine is set 
up for 40,000 counts/inch (or in mm units it comes to 1574.803)
And, worst of all, on his A axis it is 400 counts/degree.  That 
axis is really growly at low speeds.  Anyway, the range of D 
settings that produce stability is narrow, and has to be set 
very low to prevent the quantizing from being greatly amplified
and swamping the actual velocity signal coming out of 
pid.x.output.  When I look at that pin, I see a very small 
signal, punctuated with huge noise bursts that are about 3 times 
larger than the P-P magnitude of the velocity ramp hidden under 
the noise.  That sure isn't the way to make a well-behaved servo.

Steve and I discussed some digital filtering of the 
instantaneous error signal before feeding it into the D term.
After looking at the signals with a very expanded time scale, it 
became clear that a lot of the energy was at 1/2 the servo rate 
(no surprise there), so the filter could actually be really 
simple.  I'm not an expert on control system theory so I could 
be chasing the wrong problem.  Hey, John, how about an FFT 
function in HalScope?  That would be really cool!  Otherwise, is 
there a data dump function that would hardcopy the screen 
samples to a file?

I couldn't find too many people on IRC yeaterday.

Any comments?

Jon

-------------------------------------------------------------------------
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-developers mailing list
Emc-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to