Voron 2.4 Heated Build Platform, Part 1A: Z Limit Switch Repeatability

I have quite some difficulty with first layers on my Voron 2.4, so let’s take a foray into investigating the build platform and related components and configurations, shall we?

Voron 2.4 probing Z limit switch

My generation of Voron 2.4, configured as recommended at the time, finds mechanical position Z=0 (nozzle exactly touching build surface) by pushing the tip of the nozzle down onto a (heat-resistant) stainless-steel pin [the lonely white dot below the toolhead], triggering the Zmin limit switch, and then applying the recorded offset between the trigger position and the build surface.

This is brilliant in that it automatically compensates for different nozzle lengths and even compensates for nozzle thermal expansion, and the evil opposite of brilliant in that you have to make a new Klipper printer.cfg file for each different build surface and they tell you in the Klipper forums that you’re doing it wrong if you ask for a better way to maintain different offsets for different surfaces. And then the Voron team invents the Voron Tap, which is a better way but which I haven’t implemented yet on this printer because reasons.

Oh dear me, I seem to have meandered a bit. I think I was about to say that the first step of figuring out inconsistent first-layer behavior would be to check the repeatability of the Z limit switch. Yes, that was it.

To do this, I used the procedure from the Voron documentation, which is all done from Octoprint’s Terminal tab and which goes like this:

bed_mesh_clear
g28
quad_gantry_level
g28

Clear any stored mesh bed leveling so that the coordinates used aren’t being translated in any way. Home all axes as a baseline, then level the X-Y gantry, then home the axes again to avoid potentially nontrivial sine errors if the gantry did have to be leveled.

g0 x175 y175
z_endstop_calibrate
testz z=-9
testz z=-.1
...
testz z=-.01
...

Move to the center of the build platform and run Klipper’s built-in Z endstop calibration macro. On my printer, that starts about 10 mm above the surface, so make a large relative move to get close to the surface, then a series of smaller relative moves while probing with a 0.1-mm feeler gauge. When that no longer passes between the nozzle and build surface, switch to even smaller relative moves and a 0.02-mm feeler gauge until the first step at which that no longer passes.

Voron 2.4 z_endstop_calibrate

testz z=-.01
accept
Recv: // stepper_z: position_endstop: -0.543
g0 z10

At the first step when the 0.02-mm feeler gauge no longer passes, the previous step (0.01 mm higher) was the last point at which the feeler gauge did fit, so move 0.01 mm lower to have the nozzle exactly touching the build surface. Terminate the macro, read out the resulting probe offset, and raise the nozzle away from the build surface.

Normally this would be done with the nozzle and build platform preheated to the desired printing temperature so they’ve undergone any thermal expansion; but for checking limit switch repeatability, I left everything at room temperature to reduce one variable.

Here are the results of multiple calibrations, each time homing all axes, leveling the gantry, homing all axes, and calibrating with the feeler gauges:

-0.543
-0.543
-0.533
-0.552
-0.533
-0.533
-0.523
-0.533
0.157
-0.433
-0.433
-0.443
-0.433
-0.423
-0.433

As you can see, my Z limit switch delivers very repeatable results, varying mainly by at which iteration I decided the feeler gauge no longer fit under the … excwhat???

Something happened there, which changed the trigger position by over half a millimeter, then returned it almost to where it was but still a tenth of a millimeter different. I don’t know about y’all, but a twentieth of a millimeter makes a substantial difference in my first-layer behavior; so if this switch’s trigger position is going to vary that much, it can never be part of a reliable calibration procedure.

It would be nice to know what happened. Sneak preview: It doesn’t seem to be an issue with the inductive Z probe.

Leave a Reply