While an axis is in motion, LinuxCNC sends commands for the current position. We call this the commanded position. It is where the axis is supposed to be. Whenever a drive receives a velocity command it takes time for it to get up to that velocity and move to the commanded position. The difference between commanded and actual is following error. Commanded and actual position ought to be the same for an ideal machine. Inertia and such get in the way and add to following error.
LinuxCNC checks to see whether the commanded position is within range of the actual position. If this error is out of range, you get an error message something like:
Joint 0 following error.
When this error pops up you can be pretty certain that there are problems with the way your ini file is set.
The LinuxCNC ini file uses two variables, FERROR and MIN_FERROR to define acceptable following error for each axis. Think of MIN_FERROR as the amount of following error (distance) allowed at very low velocity and FERROR as the distance allowed during rapid moves.
The graph shown below approximates what the following error trip line looks like when FERROR is set to 1 and MIN_FERROR is set to 0.01. MAX_Velocity for this graph has been set to 500. I did not set any units here and that is deliberate. The reason is that the meaning of the trip line will follow the units used for velocity, which follows the units that are defined for the axis in the ini. If that unit is inches, then the velocity is in inches per second and the trip line is related to that unit.
You should think of any following error to the left of the diagonal line as acceptable for that velocity . If you look at 250 units velocity (the green lines) any following error less than half way between FERROR and MIN_FERROR is acceptable and will not trip out axis motion. If you increase the velocity to 400 and draw a similar pair of lines there, it will include all acceptable following errors at that velocity.
The units of Ferror and Min_Ferror are the same as the units of length used for that axis. So if your axis is in inches, and your Ferror is 1, that means an error of 1 inch will cause it to trip. Likewise, if Min_Ferror is 0.01, then an error of 0.01 inches will trip it at low speed.
The point of the following error trip as set up in LinuxCNC is to constrain following error and cause the machine to fail if it's error is greater than some known value. By using both FERROR and MIN_FERROR the integrator is able to define values that are acceptable for their machine.
The concept of a following error is funny when talking about stepper motors. Since they are an open loop system, there is no position feedback to let you know if you actually are out of range.
Following errors usually have two causes on steppers
1. too little ferror or min_ferror
2. the RT pulsing can't keep up with the speed needed
2.a. BASE_PERIOD set incorrectly or (requested step rate is not possible at this BASE_PERIOD)
2.b. max velocity too high
2.c. max acceleration too high