First Layer Inconsistency
This page is tailored to Voron / Klipper printers.
(If your squish seems to vary at different spots on the bed)
-
In my opinion, you should use bed mesh. I personally recommend generating a bed mesh before every print, by adding
BED_MESH_CALIBRATE
to yourPRINT_START
macro. (requires the config section in the link above.)- With a physical Z endstop, make sure not omit the
relative_reference_index
setting described in the link above. Follow the formula. This setting is not needed when using the probe as your Z endstop (virtual endstop), however.-
relative_reference_index
= ((x points * y points) - 1) / 2
-
- Use
algorithm: bicubic
instead ofalgorithm: lagrange
when using a mesh size greater than 3x3. - Some discourage using bed mesh unless absolutely necessary, but I disagree. In my opinion it’s cheap insurance. It’s very rare for larger printers to have a perfect first layer without it.
-
Your heat soaked mesh will be different from your cold mesh. The bed and gantry can warp with heat. It will even vary at different temperatures. This is why I prefer to generate a fresh bed mesh for every print.
-
Bed mesh can’t always save you from mechanical problems.
- Most bed mesh issues are caused by the gantry rather than the bed itself.
- For V2, follow my V2 gantry squaring instructions. A poorly squared gantry can be the root cause of a lot of first layer issues.
- On all CoreXY printers: de-rack.
- For V2, this is part of the gantry squaring instructions above. Please follow those first/instead.
- If you are using dual X rails, make sure they are properly aligned with each other. This can cause left-to-right first layer issues that mesh can’t compensate for.
- Ensure that everything is tight in your toolhead and across your X extrusion, including the hotend and nozzle.
- Most bed mesh issues are caused by the gantry rather than the bed itself.
- Try more mesh points. Usually anything above 5x5 is overkill, but you can try up to 9x9.
- With a physical Z endstop, don’t forget to update your
relative_reference_index
when changing mesh points. This setting is not needed when using the probe as your Z endstop (virtual endstop), however.-
relative_reference_index
= ((x points * y points) - 1) / 2
-
- With a physical Z endstop, don’t forget to update your
- With a physical Z endstop, make sure not omit the
- For V2:
-
Ensure that you place your
BED_MESH_CALIBRATE
after G32, as the stock G32 macro clears bed meshes. -
You may need to play with how tight your bed mounting screws are.
-
I heat soak, fully hot-tighten 3/4 bed screws, and make the 4th screw “snug but not tight”
- It’s commonly advised to mount your bed with only three screws, with “one tight, two loose”. Anecdotally this advice has caused fist layer issues for me.
-
-
Ensure that your Z belts are properly tensioned. They should all be roughly equal tensions.
- I tension mine to 140hz over a 150mm span of belt.
- Apps:
- Android: Gates Carbon Drive (select “motorcyle” option) or Spectroid.
- iPhone: Gates Carbon Drive (select “motorcyle” option) or Sound Spectrum Analysis.
- Apps:
- Your closed loop belts (the short belts loops in the Z drive units) should be quite tight, but not so tight that they are pulling the motors shaft out of parallel.
- The stock tension levers don’t always give enough tension on their own. You may have to loosen the motor mount, stick a flathead screwdriver between the lever tensioner and the Z drive main body to give it a bit more tension, and tighten it back down.
- (It’s not easily possible to measure these with a frequency)
- I tension mine to 140hz over a 150mm span of belt.
-
- For V0:
- Ensure that your bed is solidly mounted. Check that the screws are not coming loose in the MGN7 carriage.
- For inductive probes:
- Make sure your PEI is not bubbling in places. Inductive probes can only sense the subsurface, so cannot correct for PEI bubbles.
- Try leaving the toolhead sitting close to the center of the bed during your heat soak. Inductive probes thermally drift, and this can pre-heat it so that it does not drift during your mesh generation.
- Microswitch-based magprobes (Klicky/Quickdraw) and other physical probes like BLTouch allow for detection of the actual print surface (though I would recommend Klicky/Quickdraw over BLTouch if you take this route)
- Ensure that there is no debris under your spring steel.
-
Disable z lift (z hop) on first layer.
-
Check your Z axis. Make sure everything is tight, especially grub screws.
- Run
PROBE_ACCURACY
to check for issues with your Z axis repeatability.- My personal comfort zone:
- Standard deviation ≤ 0.004.
- Range ≤ 0.0125.
- On V2, run
PROBE_ACCURACY
in each corner of the bed to check all four Z drives.
- My personal comfort zone:
-
Ensure that everything is tight in your toolhead and across your X extrusion, including the hotend, nozzle, and probe.
- See the Thermal Drift page. Ensure that you are heat soaking for long enough on larger enclosed printers.