My Z offset is consistently too high by about 0.1 mm on every first layer. No matter how many times I calibrate, the nozzle always sits just a bit above where it should be.
Troubleshooting so far:
Verified with GET_POSITION that no hidden gcode offset was active. Console showed gcode base Z: 0.000.
Ran PROBE_CALIBRATE + SAVE_CONFIG multiple times the value updates, but the nozzle still ends up 0.1 mm too high.
Looked at [z_offset_calibration] with internal_endstop_offset: -0.25 → tested with it set to 0. No effect on the 0.1 mm error.
Noticed that the main probe config had #z_offset commented out, so the actual active value was coming from the auto-generated SAVE_CONFIG block at the bottom of the file.
Tried hardcoding the z_offset in the probe section and deleted the probe z_offset part of the SAVE_CONFIG block while keeping input shaper and other auto-saved settings intact.
I’m totally lost and have no idea what else to do. I’ve had this issue since day one of getting the printer. I haven’t changed any of the default settings
I’m having the same issue, I think it’s to do with the printer using the same point twice to calibrate the Z offset, and the second time there is a tiny blob on the plate at that position.
I did some testing today and changed the internal_endstop_offset to -0.10 (in the printer.cfg file under [z_offset_calibration]) instead of the -0.25 that was there by default, and it seems like it worked!
Isn’t that backwards? internal_endstop_offset doesn’t seem to be a standard Klipper setting, but usually to lower by 0.1 you would change a setting like that to -0.35, right?
So for anyone else, the way I am handling this is similar to the filament change, but for the whole machine profile.
Under the Printer settings, and Machine G-code tab, I added this to the end of Machine start G-code:
; Added to lower Z by 0.1 G90 ; Absolute G21 ; Use metric M83 ; Use relative distances for extrusion SET_GCODE_OFFSET Z=-0.1 MOVE=0
I added the extra items above the offset change since they were always included in generated GCODE first. I’m guessing G21 is the only one that matters, but better safe than sorry.