Voron Bed Mesh Types Guide — Automatic vs Manual, Probing Patterns, and Strategies
Calibration Klipper Guide
A properly calibrated bed mesh is essential for first-layer reliability on any Voron printer. Even with perfectly trammed gantries, no build plate is perfectly flat across its entire surface. Bed mesh compensation tells your printer to adjust Z height during the first few layers to account for plate deviations. Without it, you will have inconsistent first-layer squish — too tight in some areas, too loose in others. Last updated: May 2025.
This guide covers every aspect of bed mesh calibration for Voron printers running Klipper: automatic vs manual probing, probing patterns (Lagrange vs bicubic), probe count selection, adaptive mesh strategies, mesh profiles for different build surfaces, and maintenance best practices. We cover Voron-specific considerations for the V2.4 (4-point Z adjustment + bed mesh), Trident (3-point Z tilt + bed mesh), V0.2, and Switchwire.
Automatic vs Manual Probing
Automatic probing uses a probe (inductive, hall effect, or the Voron TAP system) to measure the bed surface at defined grid points. Klipper then generates a mesh of Z offsets that it applies during printing. This is faster, more repeatable, and recommended for nearly all situations.
- Inductive probes (PL-08N, TL-Q5MC): The classic Voron setup. These sensors detect metal and measure distance to the bed via inductive eddy currents. They are reliable, inexpensive, and work with spring steel or PEI sheets on a magnetic bed. Accuracy is ~0.02-0.05mm. Calibration drift can occur with temperature changes because the probe's sensing characteristics shift as it heats up.
- Hall effect probes (Omron, Panasonic): More temperature-stable than inductive probes. The Voron TAP system uses hall effect sensing for precision. Accuracy ~0.005-0.01mm. More expensive but recommended for high-precision Voron builds.
- TAP (Touch and Probe): Voron's own mechanical probe design using a hall effect sensor and a pivoting nozzle-touch mechanism. TAP provides the highest accuracy (~0.002-0.005mm) and works on any bed surface (glass, PEI, G10, etc.) because it touches the nozzle directly. TAP also compensates for nozzle changes automatically.
Manual probing uses the paper feeler method at each grid point via the PROBE_CALIBRATE or Z_ENDSTOP_CALIBRATE commands. This is slow (3-5 minutes for a 5x5 grid), tedious, and less accurate than automatic probing (typical human error of ~0.05-0.1mm). It is only recommended for initial setup when you have not yet installed a probe or as a diagnostic tool to verify probe readings.
Verdict: Use automatic probing. Install a TAP probe if you want the best possible results for all bed surfaces. Use an inductive probe if you are on a budget and print only on spring steel PEI sheets.
Probing Patterns: Lagrange vs Bicubic Interpolation
Klipper supports two interpolation algorithms for converting the probed grid points into a continuous Z height map:
Lagrange Interpolation
- How it works: Fits a polynomial that passes exactly through every probed point. Between points, it interpolates using a weighted polynomial function.
- Best for: Low probe counts (3x3, 4x4). The polynomial nature of Lagrange means fewer points are needed to model smooth bed surfaces.
- Caveat: Lagrange can overshoot (produce "ringing" artifacts) if bed surfaces have sharp dips or bumps. The polynomial tries to fit the curve exactly and can create wavy artifacts between points.
- Recommended for: Voron V0.2 (small bed, naturally flatter) and Switchwire (bed is usually fairly flat if trammed well).
Bicubic Interpolation
- How it works: Uses cubic splines between probed points, creating a smoother, more natural surface. The spline does not pass exactly through every point — it minimizes curvature instead, producing a more realistic bed model for physical surfaces.
- Best for: Higher probe counts (5x5, 7x7, 9x9) where the extra data captures real bed topography without overfitting. The bicubic method handles local surface imperfections (dents, high spots) more accurately.
- Caveat: Requires more probed points to produce accurate results. A 3x3 bicubic mesh is less accurate than a 3x3 Lagrange mesh because bicubic needs more data to constrain the spline.
- Recommended for: Voron V2.4 and Trident (large beds, 300mm-350mm, where bed surface is rarely perfectly flat).
Configuration in printer.cfg:
# V2.4 or Trident (350mm) — Bicubic with 7x7 grid [bed_mesh] speed: 120 horizontal_move_z: 5 mesh_min: 30, 30 mesh_max: 320, 320 probe_count: 7, 7 algorithm: bicubic bicubic_tension: 0.5 fade_start: 1 fade_end: 10 fade_target: 0 # V0.2 (120mm) — Lagrange with 3x3 or 4x4 grid # [bed_mesh] # speed: 80 # horizontal_move_z: 5 # mesh_min: 15, 15 # mesh_max: 105, 105 # probe_count: 4, 4 # algorithm: lagrange # fade_start: 1 # fade_end: 10 # fade_target: 0
Recommendation: Use bicubic with 5x5 for 250mm beds and 7x7 for 300-350mm beds. Use Lagrange for 3x3-4x4 grids on smaller machines. The bicubic_tension parameter (0.3-0.7 range) controls how tightly the spline follows the data — 0.5 is a safe starting point.
Probe Count Selection
| Probe Grid | Probe Points | Time (at 120mm/s) | Best For |
|---|---|---|---|
| 3x3 | 9 | ~15 seconds | Very small beds (V0.2), quick verification, or very flat beds |
| 4x4 | 16 | ~25 seconds | Small beds, good balance of speed and accuracy |
| 5x5 | 25 | ~40 seconds | 250mm beds (V2.4 250, Trident 250) — recommended default |
| 7x7 | 49 | ~80 seconds | 300-350mm beds with bicubic — recommended default |
| 9x9 | 81 | ~130 seconds | Damaged or known-warped beds, diagnostic use only |
| Adaptive mesh | Varies | Same as grid size | All bed sizes — probes only the print area, not the whole bed |
Rule of thumb: Use the minimum number of probe points that gives you a reliable first layer. More points = more time = more chance for thermal drift during probing. A 7x7 mesh with bicubic is overkill for a 250mm bed and can actually cause issues if your bed has small localized imperfections that the spline tries to follow exactly.
Adaptive Mesh
Klipper's adaptive mesh feature (available in Klipper v0.11.0+) probes only the area that will actually be printed, not the entire bed. This is useful when:
- You print a small part on a large bed — probing the full 350mm bed adds unnecessary time and temperature drift.
- You print multiple parts across the bed — the mesh adapts to cover all parts with a margin.
- You have a localized bed imperfection (e.g., a dent in the center) — the adaptive mesh focuses resolution on the print area.
Configuration: Add the following to your slicer's start G-code (after G28 but before printing):
; Adaptive mesh macro (add to your printer.cfg)
[gcode_macro ADAPTIVE_MESH]
gcode:
BED_MESH_CLEAR
BED_MESH_CALIBRATE ADAPTIVE=1
ADAPTIVE_MARGIN=10 ; 10mm margin around print area
{% if printer.bed_mesh %}
BED_MESH_PROFILE LOAD="default"
{% endif %}
; In your slicer start G-code:
; ADAPTIVE_MESH
Adaptive margin: 10-20mm is standard. Too low (5mm) risks probing outside the actual print area if your model origin is slightly off. Too high (30mm+) defeats the purpose of adaptive probing.
Compatibility note: Adaptive mesh requires the virtual_sdcard.py feature to know the print area from the G-code file. It works with OrcaSlicer, SuperSlicer, and PrusaSlicer. Ensure your Klipper is on the latest stable version.
Mesh Profiles for Different Build Surfaces
If you switch between different build surfaces (e.g., smooth PEI, textured PEI, G10/FR4, magnetic sheet + spring steel), you can save separate mesh profiles for each surface. This avoids re-probing every time you swap surfaces.
# Calibrate and save profiles for each surface
BED_MESH_CALIBRATE # Run mesh calibration
SAVE_CONFIG # Saves as "default" profile
# Save additional profiles
BED_MESH_PROFILE SAVE=textured_pei
BED_MESH_PROFILE SAVE=smooth_pei
BED_MESH_PROFILE SAVE=g10_fr4
# Load a specific profile
BED_MESH_PROFILE LOAD=textured_pei
# In your START_PRINT macro, add a parameter:
# [gcode_macro START_PRINT]
# {% set SURFACE = params.SURFACE|default("smooth_pei") %}
# BED_MESH_PROFILE LOAD={SURFACE}
Important: Mesh profiles are only valid for the bed at the same temperature they were probed at. If you probe at 100°C but print at 60°C, the mesh will be inaccurate because the bed expands differently at different temperatures. Always probe at your printing temperature.
Voron-Specific Mesh Strategies
V2.4 — Four Corner Z Adjustment + Bed Mesh
The V2.4 uses four independent Z motors. The Z_TILT_ADJUST command levels the gantry to the bed using four points (one above each Z lead screw). This corrects for gross bed-to-gantry misalignment. After Z_TILT_ADJUST, the bed mesh corrects for local variations in bed flatness. The two work together:
- Z_TILT_ADJUST: Corrects Z-axis tilt. Run this once at the start of each print (or once per build if you have a repeatable home position).
- BED_MESH_CALIBRATE: Corrects local bed surface variations. Run this periodically (weekly or after any bed surface change).
- Order: G28 (home) → Z_TILT_ADJUST → BED_MESH_CALIBRATE → print.
Trident — Three Point Z Tilt + Bed Mesh
The Trident uses three Z motors (one bed-screw driven by three motors). The Z_TILT_ADJUST uses three probe points to level the bed to the gantry. The procedure is the same as V2.4 but with three adjustment points instead of four.
- The Trident's three-point leveling is inherently more stable than four-point, as three points define a plane without over-constraint.
- With a well-trammed Trident, you can often run Z_TILT_ADJUST once and then only BED_MESH_CALIBRATE for subsequent prints.
V0.2 — Single Z with Bed Screws + Bed Mesh
The V0.2 has a single Z motor. Bed leveling is done with the four bed adjustment screws (manual or with SCREWS_TILT_CALCULATE). After mechanical leveling, the bed mesh compensates for remaining imperfections. The small bed (120mm) means a 4x4 Lagrange mesh is usually sufficient.
Switchwire — Single Z with Bed Mesh
The Switchwire also uses a single Z motor (converted Ender 3 bed). After manual bed leveling with the adjustment knobs, run a 5x5 bicubic mesh for the 235mm bed.
Mesh Maintenance and Verification
- Re-probe frequency: Mesh the bed once a week under normal use. Re-probe if you change nozzles, remove the bed, or notice first-layer quality degrading. Temperature changes (seasonal) can also affect the bed profile.
- Visual verification: After probing, visualize the mesh in Klipper's web interface (Fluidd or Mainsail). Look for unrealistic spikes or dips — a mesh that changes by more than 0.2mm between adjacent points (on a 5x5 grid) suggests a probing error or a physical bed issue.
- Probe accuracy test: Run
PROBE_ACCURACYto check your probe's repeatability. TAP probes should show 0.002-0.005mm standard deviation. Inductive probes should show 0.01-0.03mm. If standard deviation exceeds 0.05mm, check for loose probe mounting, electrical noise, or bed surface contamination. - Fade height: The
fade_endparameter in [bed_mesh] sets the Z height at which mesh compensation fades to zero (typically 5-15mm). Above this height, the mesh is no longer applied. This prevents over-correction on tall prints. Standard value: 10mm. - Fade target: Set to 0 (fade to uncorrected Z height). The mesh compensation gradually disappears over the fade range, so the top of the print is perfectly flat rather than following the bed profile.
Troubleshooting Bed Mesh Issues
| Symptom | Likely Cause | Solution |
|---|---|---|
| First layer uneven despite mesh | Z_TILT_ADJUST not run, or gantry racking | Run Z_TILT_ADJUST first, then mesh. Check gantry alignment. |
| Mesh shows unrealistic spikes | Dirty probe tip, debris on bed, electrical noise | Clean probe and bed, check wiring, run PROBE_ACCURACY |
| Mesh changes between prints | Temperature variation, loose bed screws | Always probe at printing temperature. Tighten bed mounting screws. |
| Mesh compensates in wrong direction | Inverted probe direction in config | Check probe reverse direction in printer.cfg |
| Probe triggers before touching bed | Probe z-offset is too low (nozzle too far), or probe defective | Recalibrate probe z-offset with paper test |