Quote Originally Posted by DarkAlchemist View Post
Well, here is something I have been wondering about for a while now but what is the purpose behind raising and lowering the arm between each probing? I see absolutely no reason for it and on a delta printer it doesn't do that. Makes very little sense to me to keep raising and lowering the arm/switch between probings when you can just lower the arm (before probing the first point), keep everything else the same, and after the last point is measured raise the arm.
I couldn't find it in this post but did come across this on: http://forums.reprap.org/read.php?151,246132,page=11

Regpye: Find this code block in the G29 command. If you replace it with the slightly modified version, the probe will only kick down at the start and then retract at the very end. That is better from a repeatability perspective because you only get the probe positioning error once, not once per probed point.



for (double yProbe=FRONT_PROBE_BED_POSITION; yProbe <= BACK_PROBE_BED_POSITION+.001 /* incase of round off errors */ ; yProbe += yGridSpacing)
{
double xProbe, xInc;
if (zig)
{
xProbe = LEFT_PROBE_BED_POSITION;
//xEnd = RIGHT_PROBE_BED_POSITION;
xInc = xGridSpacing;
zig = false;
} else // zag
{
xProbe = RIGHT_PROBE_BED_POSITION;
//xEnd = LEFT_PROBE_BED_POSITION;
xInc = -xGridSpacing;
zig = true;
}

for (int xCount=0; xCount < ACCURATE_BED_LEVELING_POINTS; xCount++)
{
if (probePointCounter == 0)
{
// raise before probing
do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], Z_RAISE_BEFORE_PROBING);
engage_z_probe(); // EDN wants the probe to only kick down once, so we do it
// before we start the probe loop.
} else
{
// raise extruder
do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
}

do_blocking_move_to(xProbe - X_PROBE_OFFSET_FROM_EXTRUDER, yProbe - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);

// engage_z_probe(); // Engage Z Servo endstop if available
run_z_probe();
eqnBVector[probePointCounter] = current_position[Z_AXIS];
// retract_z_probe();

eqnAMatrix[probePointCounter + 0*ACCURATE_BED_LEVELING_POINTS*ACCURATE_BED_LEVELI NG_POINTS] = xProbe;
eqnAMatrix[probePointCounter + 1*ACCURATE_BED_LEVELING_POINTS*ACCURATE_BED_LEVELI NG_POINTS] = yProbe;
eqnAMatrix[probePointCounter + 2*ACCURATE_BED_LEVELING_POINTS*ACCURATE_BED_LEVELI NG_POINTS] = 1;
probePointCounter++;
xProbe += xInc;
}
}
retract_z_probe(); // EDN moved this to end so we only kick down the probe once
// and only bring it back up once. This helps the repeatability
// of the Z-Probe in many implementations.

clean_up_after_endstop_move();