On Friday, March 30, 2012 06:05:34 AM Viesturs Lācis did opine: > 2012/3/30 Jeshua Lacock <jes...@3dtopo.com>: > > I am familiar with the latency test, that is exactly what I was > > referring to. It reports two Max Jitters there and I did not know for > > certain that one was for servos and the other for steppers. Thank > > you. > > No, no, no!!! Based on the second sentence, You could not be any more > wrong about those threads than You are now! > > Base-thread and servo-thread are not "stepper-thread" and > "servomotor-thread"! > > That "servo-thread" name also got me confused at the beginning, I do > not know, why does it have exactly such a name... IMHO for easier > understanding, they might be called "dumb-thread" and "smart-thread" > or something similar. > Here is short description, what the "thread" is: > http://www.linuxcnc.org/docs/devel/html/man/man9/threads.9.html > > I will try to explain. > The main difference between base and servo thread is that base thread > cannot do floating point calculations. All the motion tasks, which > calculate joint positions and basically all the HAL functions that > require some logics and calculations, cannot be done in base-thread. > In simple words, base thread can only do very primitive things, like > checking, if input pin has changed its state or it can change the > state of output pin. For example, it can do software counting of > encoder signals and it can do software step signal generation. But > bear in mind, that they are just watching for input signal and giving > output signal, base-thread functions do not know, why are they doing > that particular task, both of these processes still require functions > in servo-thread to do all the "thinking part" - for encoder counting > it will need a function that counts those pulses and represent it as a > some kind of position and for step generation there has to be a > function, which calculates, how many steps and how fast (at what > frequency) need to be issued to reach the commanded position at > required velocity. > > All LinuxCNC machines I have set up except plasma table retrofit are > running only servo-thread, although only one of them actually has > servo motors and all of them have stepper motors (also the one with > servos - it is a mix). In those machines actual step generation is > done be external hardware, which has 3 benefits: > 1) step pulses can change their frequency much smoother; in software > step generation the time distance between steps is an integer multiple > of base thread length - pulse cannot be issued in a middle of the > thread execution. For example, with 25 us base thread, which is > running at 40 kHz, max step frequency can be 20 kHz (one period is > step pulse, next period is step space). So next slowest speed possible > is one period is step pulse, next two periods step space... > Machine can work just fine with software pulse generation, but for > fast accelerations/decelerations hardware stepping is more gentle > 2) taking off the step generation load from PC improves its real-time > performance > 3) it is safer and less affected by any interrupts in realtime. Have > You ever tried to switch on or off the control PC, when stepper power > is turned on? It is one those "do not try this at home" things - I > have seen motors starting to move, oscillate. > > What I am trying to say - it is easy to set up any kind of machine to > run only servo-thread, but there is no way (I cannot think of one) to > run a machine without a servo-thread. > > > Does anyone know of some known settings to try disabling in CMOS to > > possibly get lower numbers? My 1.0ms Max Jitter is under 9300, but if > > possible I would like to get it even lower. > > IMHO it is very good number already. You have max jitter of 9,3 us in > a 1000 us thread, so the max deviance is less than 1%, LinuxCNC will > perfectly handle that. > At the moment I can remember of 2 things to do, if You want to try: > 1) for Intel processors, hyperthreading might be disabled; > 2) for multi-core processors, one or more processors can be isolated > exclusively for real-time tasks with isolcpus parameter; > > http://wiki.linuxcnc.org/cgi-bin/wiki.pl?RealTime One mistake in the above Viesturs, in your 40 kilohertz base_thread loop description, linuxcnc has been able to issue a complete step pulse per loop iteration for something like 3, maybe 4 years now. It does this by timing a 2 or 3 microsecond pulse out and clearing the output bit(s) that need to be cleared while in that particular instance, not by waiting to clear it in the next iteration of the base_thread. That means its accelerations at the higher speeds are smoother now than was possible back in 2.1. days. This doubled the _usable_ speeds of a software driven stepper machine in 1 swell foop when it was introduced.
Cheers, Gene -- "There are four boxes to be used in defense of liberty: soap, ballot, jury, and ammo. Please use in that order." -Ed Howdershelt (Author) My web page: <http://coyoteden.dyndns-free.com:85/gene> "Text processing has made it possible to right-justify any idea, even one which cannot be justified on any other grounds." -- J. Finnegan, USC. ------------------------------------------------------------------------------ This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure _______________________________________________ Emc-users mailing list Emc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-users