Setting the Z offset is a a key step in the process of configuring and tuning any FDM printer. Because of how the V2 is designed, this process may be slightly different than most other printers. The Z endstop sensor is a mechanical switch that is located at the back / top edge of the base plate. The switch activation is extended to an approximate level of the bed by an extension made of 5mm rod. This physical switch is used instead of the inductive probe for consistency regardless of temperature or variances in nozzle length.
- Piece of paper or 0.1 mm feeler gauge
- Digital calipers (recommended)
The Z endstop position value is defined in the printer.cfg file that Klipper reads. It is labeled as
position_endstop and can be found in the
[stepper_z] section of the configuration file.
The default for the value for the endstop position is -0.5 as a safety factor to prevent crashing the nozzle into the print surface during initial operations. This value should be set to the exact distance that the Z endstop triggers relative to the print surface.
The Z endstop position must already be set in Klipper. The endstop much be functioning and trigger appropriately during all homing operations.
The Z endstop calibration process can be performed with the printer (both hot end and build surface) either hot or cold. Klipper is written with the assumption that the Z endstop calibration is performed cold. While it is calibrated using a 0.1 mm gap, it expects movement from thermal expansion to take up that space.
- Decide if the calibration will be performed hot or cold. If you are performing the calibration cold, then ensure that the nozzle is completely clean of filament. If you are performing the calibration hot, then ensure that the build surface has heat soaked and come up to a stable temperature and ceased thermal expansion using the
- Run a
G28to wake up the motion systems.
- Run a
BED_MESH_CLEARto clear out any bed mesh calibrations that may be loaded. Any offset in the bed mesh will affect the Z positioning.
- Run a
QUAD_GANTRY_LEVELto level the gantry.
- Run a
G28again to home and center the nozzle, and establish a new known Z value. The nozzle should be at the center of the bed or at whatever point is used for reference for the bed mesh.
- Enter the calibration mode by running
Z_ENDSTOP_CALIBRATE. The nozzle will to go to an estimated 20mm above the print surface based on the previous value of
- To move the head, run
TESTZ Z=(value in mm). A negative value (-) will move the nozzle closer to the print surface and a positive value (+) will move the nozzle away from the print surface.
- Move the nozzle down until there is noticeable drag on the paper or feeler gauge but is not difficult to move. Adjustments of +/- 0.01mm are not unusual and are noticeable. Adjust until satisfied.
- If calibrating hot: Remove the paper or feeler gauge and move the
TESTZdown (-) an additional 0.1mm to compensate for the thickness of the paper or feeler gauge.
- Complete the routine by running
Fine-tuning the endstop calibration
- The MCUs will reset after a
SAVE_CONFIG. Once the MCUs are online, run a
G28to re-home. If the process is being done hot, be sure to re-enable the heaters, otherwise turn on the bed heat to cause the thermal expansion and allow the bed to heat up sufficiently.
QUAD_GANTRY_LEVELagain in case your gantry slid down during the reset, and re-home again (
G90to switch to absolute mode.
G0 Z1to move to 1 mm above the print surface. Visually verify that the distance is close to 1mm.
G0 Z10, then
G0 Z0.2to move the nozzle to 0.2 mm above the print surface. The paper or feeler gauge should move underneath with no resistance. If not, go back and check and/or re-run the calibration.
G0 Z10, then
G0 Z0.1to move the nozzle to 0.1 mm above the surface. The paper or feeler gauge should have the same drag as before. If not, go back and check and/or re-run the calibration.
G0 Z10, then
G0 Z0to move the nozzle to touch the surface. The paper or feeler gauge should not be able to go under. If not, go back and check and/or re-run the calibration.
- Preheat the bed as normal.
- Load up and begin printing a Voron Cube, preferably with at least 2-3 rounds of a skirt.
- Just before the first layer completes, cancel the print.
- After sufficient cooling, remove the skirt and first layer.
- Measure the thickness of the first layer with both the part and the skirt.
- Compare the measured thickness to the intended thickness of the first layer in the slicer.
Be sure that the nozzle is clean when starting prints. If there is filament stuck to the nozzle during the G28 process, it will cause the Z height to be set incorrectly. A common procedure is to add code to the startup process to run the nozzle across a brush once the nozzle is hot to ensure it is clean, if you have equipped your printer with such things.
If desired, the
position_endstop can be manually changed in the Klipper printer.cfg. During the
SAVE_CONFIG, the new value will be written at the bottom of the file on a line starting with
#*#. If the value is changed manually, be sure to follow the process in the ‘Sanity Check’ to avoid crashing the nozzle. A larger (or less negative) value of
position_endstop will increase the calculated height of the endstop and make the nozzle closer to the bed. A smaller (or more negative) number will decrease the calculated height of the endstop and make the nozzle farther away. Change this value in very small increments.
The initial Z offset can also be set using gcode or be adjusted using the front panel, typically during the skirt passes, to fine tune the first layer.
position_endstop value larger / more positive will move the nozzle closer to the print surface.
Making the position_endstop value smaller / more negative will move the nozzle further from the print surface.