Quote Originally Posted by Roxy View Post
Two comments. First, you might want to check out your

#define PROBE_SERVO_DEACTIVATION_DELAY 500

If you don't have a value specified, it will stay on all the time. Probably, you don't want that.

The other point is you might want to make some type of stop at the right position so the servo can only travel so far. Then you can tell the servo to go slightly past that stop and it will be pressing hard and not twitching. I also made my probe such that when it is pressing on the bed, the probe gets pressed a little bit against the stop. That way the repeatability of the measurements is better.
Second that.

The other thing you can do is use a Z probe design that has the button (or tip of the lever) is directly in line below the servo shaft. This way, the error is the cosine of the absolute servo arm position error, which is pretty much nil in this situation. If it isn't in line below the pivot, the error can be significant.

I think the reason the servo twitches is because the Arduino isn't able to schedule the interrupts for the servo pulses reliably. As load on the MCU changes, it has a hard time maintaining the pulse width, exactly. This is particularly the case when the mechanics are moving. Marlin (correctly) prioritizes the stepper motors at the expense of servo precision.