Disclaimer: This is an independent resource site. Not affiliated with the Voron project or its development team.

Voron Bed Leveling Guide — Perfect First Layers Every Time

Troubleshooting Calibration Bed Leveling

A perfect first layer is the foundation of every successful 3D print. On Voron printers, bed leveling involves multiple systems working together: mechanical adjustment, probe-based leveling, bed mesh compensation, and Z offset tuning. This guide covers every method for every Voron model — from the single-Z V0.2 to the quad-gantry V2.4. Last updated: May 2025.

Before you start: heat your printer to printing temperature (bed at 100°C, hotend at 245°C for ABS/ASA). Thermal expansion changes clearances by 0.05-0.15mm — enough to make a cold-leveled bed print poorly. Always level at temperature.

Bed Leveling Systems by Voron Model

Each Voron variant uses a different bed leveling approach. Understanding your specific system is the first step.

Model Z System Leveling Method Key Commands
V0.2 Single Z + manual Manual bed screws + Z offset PROBE_CALIBRATE
Trident Triple-Z + auto-level Z_TILT_ADJUST + screw tilt adjust Z_TILT_ADJUST, SCREWS_TILT_CALCULATE
V2.4 Quad-Z + auto-level QUAD_GANTRY_LEVEL + screw tilt adjust QUAD_GANTRY_LEVEL, SCREWS_TILT_CALCULATE

Step 1: Z Offset Calibration

Z offset is the distance between the nozzle and the bed when the probe triggers. Getting this right is essential before any other bed leveling step.

Paper Method — Getting in the Ballpark

  1. Heat the bed to 100°C and hotend to 245°C
  2. Home the printer: G28
  3. Move the toolhead to the center of the bed: G1 X150 Y150 F3000 (adjust coordinates for your bed size)
  4. Run PROBE_CALIBRATE — Klipper will probe the bed and move the nozzle to the probe Z height
  5. Place a standard piece of printer paper (0.08-0.1mm) between the nozzle and bed
  6. Use the TESTZ Z=-0.1 and TESTZ Z=0.1 commands to micro-adjust the nozzle position
  7. When the nozzle grips the paper with slight resistance — you can pull the paper but it drags — the Z offset is close
  8. Run ACCEPT and then SAVE_CONFIG to store the value

The paper method gets you within 0.05-0.1mm. For final tuning, use a live first-layer test.

Live Z Adjustment — Fine Tuning

Print a 100x100mm single-layer square at your normal printing temperature. Observe the extrusion:

Adjust in 0.01-0.02mm increments. Voron printers are sensitive enough that 0.01mm makes a visible difference. Once the first layer looks perfect, note the Z_ADJUST value and add it to your PROBE_CALIBRATE Z offset, or save it in your PRINT_START macro.

Pro tip: Always do Z offset adjustment at the same bed temperature. A cold vs. hot Z offset can differ by 0.1mm due to thermal expansion of the bed, frame, and nozzle.

Step 2: Bed Mesh Calibration

Bed mesh creates a 3D map of your bed surface and compensates for warping, tilt, and local deviations. Every Voron model uses this step.

Running Bed Mesh

  1. Heat the bed to printing temperature (100°C for ABS) — the bed warps as it heats, so calibrate at temperature
  2. Run BED_MESH_CALIBRATE
  3. Recommended grid sizes: 5x5 for V0.2, 7x7 for V2.4/Trident 250, 9x9 for V2.4 350 (larger beds need more probe points)
  4. After calibration, visualize the mesh: BED_MESH_OUTPUT PGP=1
  5. If deviations are under 0.2mm, save the profile: BED_MESH_PROFILE SAVE=default
  6. Add BED_MESH_PROFILE LOAD=default to your PRINT_START macro

Interpreting Your Bed Mesh

The PGP output shows your bed visualized as a contour map. Here's what to look for:

A common mistake: running bed mesh without running gantry leveling first. If your gantry is tilted, the bed mesh will show a false slope that the mesh can compensate for — but it's better to fix the tilt and run a flatter mesh. Always do gantry leveling before bed mesh.

Step 3: Screw Tilt Adjust — Trident and V2.4

Screw tilt adjust uses your probe to measure the bed's tilt relative to the nozzle and tells you exactly how much to turn each bed leveling screw. This automates the tedious manual leveling process.

Configuration

Add a [screws_tilt_adjust] section to your printer.cfg with the screw positions for your build plate. Example for a V2.4 350:

[screws_tilt_adjust]
screw1: 30, 30
screw2: 320, 30
screw3: 320, 320
screw4: 30, 320
screw_thread: CW-M5

The coordinates are the X,Y positions of each bed screw. Use CW-M5 for clockwise M5 screws (standard Voron bed screws).

Procedure

  1. Run G28 to home the printer
  2. Run SCREWS_TILT_CALCULATE — Klipper will probe each screw position and report the required adjustment
  3. Klipper output example: "screw1: 0.10 turns CW, screw2: -0.05 turns CCW, screw3: 0.00, screw4: 0.02 turns CW"
  4. Turn each screw by the specified amount. One full "turn" is 360° of a standard M5 screw, which changes height by ~0.8mm.
  5. Re-run SCREWS_TILT_CALCULATE and repeat until all screws show < 0.05 turns (i.e., the bed is level within ~0.04mm)

Pro tip: Use a screwdriver with a marked handle or a digital angle gauge to count partial turns accurately. Mark the starting position of each screw with a piece of tape so you can track how much you've turned them.

Step 4: Gantry Leveling — Trident (Z_TILT_ADJUST)

Trident's triple Z system uses three independent Z motors. The gantry can tilt in any direction, and Z_TILT_ADJUST corrects this automatically.

Prerequisites

Procedure

  1. Run G28 to home the printer
  2. Run Z_TILT_ADJUST — Klipper will probe at the defined points and adjust each Z motor independently
  3. Check the output: the gantry should now be parallel to the bed within 0.02-0.05mm
  4. Run Z_TILT_ADJUST again to verify — the adjustments should be very small (< 0.02mm) on the second pass
  5. Run SAVE_CONFIG to store the Z motor position offsets

Important: Z_TILT_ADJUST only works if the mechanical gantry is reasonably close to level. If one side is significantly higher than the other (more than 2-3mm), level the gantry manually first using paper feeler gauges under each corner, then run the auto-adjust.

Step 5: Quad Gantry Leveling — V2.4

The V2.4 has four independent Z motors, one at each corner. Quad Gantry Leveling (QGL) is the process of making the gantry parallel to the frame top.

Prerequisites

Procedure

  1. Run G28 to home all axes
  2. Run QUAD_GANTRY_LEVEL — Klipper will probe at all four gantry points and adjust each Z motor
  3. The output shows the adjustment applied to each Z motor (in steps or mm)
  4. Re-run QUAD_GANTRY_LEVEL to verify — the adjustment on the second run should be near zero
  5. If the second run shows significant adjustment (> 0.1mm), there's a mechanical issue: check belt tension, Z motor mount tightness, and gantry squareness
  6. Once stable, run SAVE_CONFIG to save the Z offset values

Common QGL Issues

Complete Leveling Sequence (Recommended Order)

For the best results, follow this sequence in order. Each step assumes the previous one is complete.

  1. Mechanical check: Frame square, gantry racking, belt tension (see our calibration guide)
  2. Gantry leveling: Z_TILT_ADJUST (Trident) or QUAD_GANTRY_LEVEL (V2.4) — skip for V0.2
  3. Screw tilt adjust: SCREWS_TILT_CALCULATE — manual bed leveling for V0.2
  4. Z offset: PROBE_CALIBRATE + paper method + live adjustment
  5. Bed mesh: BED_MESH_CALIBRATE + save profile
  6. First layer test: Print a single-layer square and verify quality

Troubleshooting Flowchart

First layer too squished (translucent lines, nozzle scraping)

→ Increase Z offset by +0.02mm using SET_GCODE_OFFSET Z_ADJUST=0.02
→ Re-test with a first-layer square
→ If still too squished, try +0.04mm
→ If overshoots (gaps appear), dial back to +0.02mm refinement

First layer too high (round lines with gaps, poor adhesion)

→ Decrease Z offset by -0.02mm using SET_GCODE_OFFSET Z_ADJUST=-0.02
→ Re-test with a first-layer square
→ Continue in -0.02mm steps until lines are slightly squished together
→ If you overshoot and get scraping, increase by +0.01mm

First layer uneven across the bed (good in center, bad at edges)

→ Run BED_MESH_CALIBRATE — your mesh may be outdated
→ Run SCREWS_TILT_CALCULATE — the bed may be tilted relative to the gantry
→ If on V2.4, run QUAD_GANTRY_LEVEL — the gantry may not be parallel to the frame
→ Check that the build plate is clean and free of debris under the spring steel sheet

Mesh shows a consistent slope (one corner always high)

→ The gantry is tilted. Run gantry leveling (Z_TILT_ADJUST or QUAD_GANTRY_LEVEL)
→ If leveling doesn't fix it, check that all Z motors are moving the correct direction
→ Verify Z belt tension is even on all sides

Mesh shows a saddle shape (center lower than edges, or vice versa)

→ The build plate is warped. This is normal for cast aluminum tooling plates — they often have a slight bow
→ The bed mesh will compensate for up to 0.3-0.4mm easily
→ If the warp is > 0.5mm, consider replacing the build plate or using a cast aluminum plate (MIC6) instead of a stamped steel one

QGL fails repeatedly on the same motor

→ Check that Z motor connection is secure
→ Check that Z belt isn't slipping on the pulley — tighten the pulley set screw
→ Verify motor driver current is adequate (0.8-1.2A for typical NEMA17 Z motors)
→ Mechanical binding: move the gantry up and down by hand at that corner and feel for resistance

Advanced Tips

Bed Mesh at Temperature vs. Cold

Always run bed mesh at printing temperature. The aluminum build plate expands and can change shape by 0.1-0.2mm from room temperature to 100°C. A mesh created at room temperature will be inaccurate for hot printing. Some builders create two mesh profiles — one for ABS (100°C) and one for PLA (60°C) — and switch between them in their slicer's start G-code.

Adaptive Bed Mesh

Klipper supports adaptive bed meshing, which only probes the area where your print will be. This is faster and more accurate because it focuses probe points on the print area. Add ADAPTIVE=1 to your BED_MESH_CALIBRATE command within your PRINT_START macro after you know the print's bounding box. This gives you finer resolution where it matters.

Virtual Endstop vs. Hardware Endstop

Voron printers typically use a hardware Z endstop on the V0.2 (a microswitch on the bed) and probe-based virtual endstops on Trident and V2.4 (using the nozzle probe or inductive probe as the Z reference). If you're using a virtual endstop, make sure [safe_z_home] is configured correctly in your printer.cfg, or the printer will home Z at an undefined position.

Need Help With Your First Layer?

Struggling with bed leveling or Z offset? Our mini-program connects you with experienced Voron builders who can help diagnose your specific issue. We also offer pre-validated build plates and probe kits at factory-direct prices.

Get Help Now