Live-Z Calibration and Mesh Bed Leveling on the Prusa i3 Mk3¶
Getting the proper first layer height – the initial spacing between the nozzle and print bed – is critical for a successful print. A good first layer is, literally, the foundation for the rest of your print. If the foundation is poor, you’re going to have problems later on. Unfortunately, the process can be a bit difficult to master when starting out. I’ve captured some of the lessons learned about this process below.
These notes are based on my experiences with the Prusa i3 Mk3 and Artillery/Evnovo Sidewinder X1 printers. If you are using a different printer, please verify the hardware details are similar.
When you adjust Live-Z, you’re increasing or decreasing small amounts of distance of the initial gap between the nozzle and the print surface at the start of a print. Live-Z is essentially a correction for the nozzle 0 Z (vertical) position.
Negative adjustment lowers the nozzle closer to the bed.
Positive raises it.
This was reversed on the Mk2 and earlier Prusa printers, which sometimes causes confusion .
Layer heights are all relative to the 0 position established by the PINDA sensor when doing automatic mesh bed leveling (more below). Live-Z calibration sets an offset to this position.
Too low and the filament has to be squeezed out between the nozzle and print surface. Extrusions may be distorted and jagged. Adjacent lines will be crooked. Filament may be pushed so deeply into the print surface that it’s difficult if not impossible to remove.
Too high and the filament is not squished onto the print surface. The extruded filament has a circular cross section with minimal contact with the print surface, leading to parts warping or coming loose mid-print. This can result in the frustrating “spaghetti monster” of filament extruded in air, or the potentially damaging “blog of doom” formed when loose heated filament latches onto and begins building up on the nozzle and hotend.
The goal of Live-Z is to find that “just right” Goldilocks height where filament will adhere solidly but not distort, providing a solid foundation for our prints. To understand the importance of the Live-Z adjustment, consider what happens at the start of every print:
Startup g-code homes the printer to establish the X=0, Y=0 & Z=0 position of the extruder. The Z0 position is determined by the PINDA probe during Automatic Mesh Bed Leveling (see below).
G-code that your slicer generated moves the extruder up to the layer height you specify for your 1st layer and starts extruding.
The Z=0 position detected by the PINDA probe may be sub-optimal for a number of reasons:
We want a bit more or less squish with some filaments for adhesion purposes.
Your print surface may not be perfectly flat.
We may have mis-calibrated thanks to the simplistic on-board Live-Z adjustment routine.
Live-Z lets us add or subtract a small increment from that 0 position to correct for these problems.
The on-board Live-Z calibration routine¶
Unfortunately, the on-board 1st layer calibration routine is difficult to use and understand. It works and can be helpful for the practiced eye to make quick adjustments, but for anybody starting out, it’s difficult to identify good results.
It is important to complete the on-board Live-Z calibration at least once to set a flag in non-volatile storage indicating Live-Z is set. Failure to do so can result in a floating Live-Z height between prints.
Understanding Automatic Mesh Bed leveling¶
In theory, once you’ve got your print surface clean and Live-Z adjustment calibrated, printing should be straightforward. Unfortunately, physics come into play on the relatively large surface of our print bed:
The surface is large enough that physical warping can occur due to repeated heat and cooling cycles.
Removal and replacement of the spring steel sheet may result in surface variations between prints.
A warped print bed is the bane of 3D printing, causing 1st layer variations that can result in inconsistencies and adhesion problems on larger prints. Fortunately, the Prusa Mk3 provides an automated mesh bed leveling feature that can measure small variations over the entire print surface and compensate for these at print time. This is another of the top “quality of life” features that distinguishes Prusa printers from low-cost competitors.
To do this, the printer moves to the Z=0 position, then successively moves over the entire print surface probing the actual distance to the bed at each position using the PINDA probe attached to the extruder mechanism. You can select between 3x3 and 7x7 (recommended) mesh bed leveling and the number of times to probe at each position in your printer settings menu. This procedure has been optimized to the point that there’s very little difference in the time it takes for a basic 3x3 level with 3 probes and 7x7 level with 5 probes (roughly 45 seconds), so using the maximum resolution is recommended.
Once mesh bed leveling is completed at the start of a print, the Mk3 will vary the nozzle height during the print to compensate for small print surface variations. Unless your bed is severely warped, this should provide a consistent first layer over the entire surface.
Mastering Live-Z calibration¶
I find adjustments of 0.02mm to be the smallest that makes a difference in my Live-Z settings. With just a bit of practice, I’ve gotten to the point that I can make a call on adjusting Live-Z based on a quick visual inspection.
A gap between extrusions means I need to lower it 0.04-0.06mm.
A rough top surface means I need to raise it a similar amount.
Then I adjust with +/- 0.02mm bumps up or down as needed. The same values work equally well on my Sidewinder printer.
Don’t worry too much about the “true zero” position. I wasted a lot of time following online discussions about carefully adjusting the nozzle so it touches the bed at the 0 position, then adjusting up from there. I finally realized the Mk3 won’t let you go below 0.15mm anyhow. When my 0.2mm 1st layer prints evenly, it is “correct”. If I ever need very accurate 1st layer heights (I usually don’t), I can make minor adjustments to Live-Z. Otherwise, I only care if the 1st layer adheres and provides a good foundation for the rest of the print.
First layer, Live-Z, and print startup sequence¶
Here’s a detailed breakdown on what happens at the start of a print:
Startup gcode inserted into the print gcode file by the slicer contains the command to home the printer. Until homed, the printer does not know where the nozzle is located. The printer homes each axis by moving the nozzle until it hits the limits of movement to establish the 0 position for each axis. On inexpensive printers, these limits are found when the axis hits a physical limit switch, or endstop. On the Mk3, “soft” endstops identify the limit of motion based on motor feedback. Once the axis limits are found, this position is set as the the X=0, Y=0 & Z=0, or “home” position for the nozzle.
After the nozzle is homed and nozzle and bed temperatures are reached, a prime line will normally be printed before the actual print. This prime line is printed independently of the slicer settings, and is usually done at the lowest nozzle position to ensure filament is flowing evenly. On the Mk3, the firmware will now allow moving the nozzle below 0.15mm above the 0 position.
After the startup gcode is complete, the slicer-generated code takes over. A slicer generated command moves the extruder up to the layer height you specify for your 1st layer 1 and starts extruding.
The Z=0 position may be a problem for a number of reasons, including:
We want a bit more or less squish for some filaments for adhesion purposes. It’s common to raise the nozzle slightly for sticky filaments like PETG that tend to cling to the nozzle.
We have a hard time gauging the thickness.
Your print surface may not be perfectly flat.
The Live-Z feature lets us add or subtract a small increment from that 0 position to make these adjustments. On other printers you may be doing a manual 1st layer adjustment that does something similar, only using a manual and much more tedious process.
Homing the printer moves the nozzle to the XYZ 0 position.
The Mk3 uses 0.15mm above 0 as the lowest nozzle position.
The prime line is normally printed at the lowest nozzle position unless changed in your startup gcode.
Slicer-generated gcode will use the 1st height slicer setting and will try to generate gcode to produce layers of that height.
Live-Z adjusts the 0 position up or down slightly and independently of your slicer.
Ideally, setting a 0.2mm 1st layer height in your slicer will result in a 0.2mm layer height being printed, but actual results can vary. This usually doesn’t matter.
Automatic Mesh Bed Leveling¶
When we adjust Live-Z, we’re making a correction based on a small part of our print area. Automatic mesh bed leveling makes yet further adjustments based on a grid of test points at various spots across the bed to compensate for an uneven print surface. Normally, this will produce an initial 1st layer gap that is consistent with our Live-Z adjustment without user intervention.
When to calibrate the Live-Z setting¶
I suggest recalibration any time the distance between the nozzle and bed may have changed.
When swapping between spring steel print sheets (unless you’ve verified sheets are the same thickness).
When replacing the nozzle.
After printer movement or hardware maintenance that might affect the Z position.
It may also be necessary under other circumstances.
When updating firmware. I’ve noticed distances seem to vary between firmware versions.
When switching to PETG or other materials that don’t need as much “squish” as PLA for good adhesion. Backing off (making less negative) Live-Z between 0.2 and 0.02mm may help with filament that sticks to the nozzle. Otherwise, I don’t find it necessary to re-calibrate when swapping filament.
Before you begin, be sure you have properly and thoroughly cleaned the PEI print surface. A poorly cleaned surface will throw your results off, resulting in much wasted time and frustration.
Live-Z calibration using the on-board Prusa routine¶
Prusa provides a Live-Z calibration option as an on-board menu selection. This procedure prints a series of parallel lines with a small square at the end to allow adjustment of the Live-Z adjustment mid-print.
The Live-Z menu option is only available on the top-level menu during actual printing. If you want to adjust it between prints, scroll down to the Settings menu and you’ll find it there.
First, here’s an overview of the completed print. Note that the thin lines are square and adhere to the bed well.
If adjusted correctly, adhesion should be sufficient to allow gentle poking at the extrusions without them coming lose.
Finally, the small square printed at the end of the run should be solid and adhere completely.
Note that the Live-Z adjustment is automatically associated with the current print sheet selection and saved on the Mk3. If you have multiple print sheets set on your printer, the Live-Z setting is maintained separately and automatically for each one.
While this procedure works, it can be a bit difficult to interpret the results, particularly for newcomers.
Jeff Jordan’s “Life Adjust” alternate Live-Z calibration procedure¶
Jeff Jordan’s “life-adjust” procedure has reached legendary status over on the Prusa support forums, with well over 40 pages of posts. The brilliance of Jeff’s approach is in it’s simplicity. Rather than printing thin lines and trying to extrapolate what they mean for an entire print, he uses an actual print with lines printed adjacent to each other. A simple 75x75x0.20mm single-layer print is large enough to see how lines interact, yet simple enough to print and adjust quickly.
Here’s a quick look at Jeff’s procedure mid-print.
Notice the gaps between lines at the lower-right, indicating the nozzle is too high (not negative enough). I’ve made gradual adjustments to lower (make more negative) the nozzle as the print progresses to the left. Notice the gaps between lines and holes at the edges closing up as the interior lines move to the upper left.
Here’s a result showing both extremes, printed from lower-right to top-left.
The gaps between lines and holes between the interior and perimeter lines at the bottom-right indicate the nozzle is too high (not negative enough).
I lowered the nozzle in large-ish increments (-0.04-0.06mm) until results start to even out just before the center of the print, then slow to +/- 0.02mm increments as it starts looking good.
For this example, I continued lowering (making more negative) the nozzle until lines began to appear ragged and distort adjacent lines past the center mark, eventually getting so low that the filament is scraped away. Note that while this might also show gaps between lines, the extrusions are ragged and inconsistent. Compare this to the uniform lines created with the nozzle too high and you’ll quickly be able to judge which way to move the nozzle.
Finally, I returned the nozzle to the “good” height with most consistent results at the top-left corner before the print completed.
When you peel the square off the build surface, it should come up as one piece and hold together with a bit of tugging. Lines should be even and surfaces smooth.
As you get familiar with this procedure, you’ll be able to make adjustments in a few minutes. Mastering Live-Z adjustment will provide the best foundation for the rest of your print.
Variations on the Live-Z calibration print¶
When you start experimenting with new materials and nozzle sizes, or if you’re using another printer type, you may find that Jeff Jordan’s gcode doesn’t quite fit your needs.
If your print area is larger or smaller than the Mk3 you’ll want to move the position of the test square.
If you’re using 7x7 or 5x5 mesh bed leveling, a grid of small test prints across the width and depth of the bed can help quickly identify issues at specific test points without the need for a full-bed print.
Test print variants for Live-Z calibration¶
I’ve created a set of STLs suitable for first layer testing on the Prusa i3 Mk3, Prusa Mini, and Artillery Sidewinder X1. These sets include the following patterns:
A 75x75x0.2mm square duplicating Jeff Jordan’s print, suitable for printing with different filaments and nozzle sizes.
A grid of 25mm squares in a 3x3 pattern across the entire bed.
A grid of 5 50mm squares or circles in the corners and center of the bed.
A grid of 25mm squares or circles in a 5x5 pattern across the entire bed. Suitable for testing 5x5 mesh bed leveling.
A grid of 15mm squares or circles in a 7x7 pattern across the entire bed. Suitable for testing 7x7 mesh bed leveling.
I’ve provided pre-generated sets for the following printers:
Prusa i3 Mk3
Artillery/Evnovo Sidewinder X1
I’ve included the OpenSCAD source code to generate the STL patterns so you can tweak the layout and features to suit your needs.
Just slice the appropriate pattern for your printer and print. The prints won’t have the tones and pauses of Jeff Jordan’s prints, but work well once you’ve mastered the procedure.
You can find this collection of test patterns at the following links:
I’m also fond of these calibration prints:
Stoempie’s complex 1st layer test also at 0.20mm single layer. If I can print this without problems, I know I’ve got my Live-Z and 1st layer down.
Dezign’s Cali Cat as an overall test that prints much more quickly than the ubiquitous Benchy. This isn’t’ really a good 1st layer print, but everybody seems to print Benchy first. Calicat is much faster.
Here are my first layer calibration prints as pre-generated gcode for a variety of common nozzle sizes:
It’s worth spending some time to get familiar with this process and mastering the adjustments. You won’t need to re-calibrate frequently, but it is recommended when switching nozzles or making other hardware adjustments.
Over on the Prusa forums, user jbinfl had a great suggestion to mark each sheet with a bit of blue tape designating the current Live-Z offset to facilitate quick changes between prints.
The Prusa blog and video on PEI print surface preparation
Matteeee’s bed adhesion test print
Jeff Jordan’s “life-adjust” procedure.
Stoempie’s First Layer Calibration print on Thingiverse.
Dezign’s Cali Cat on Thingiverse.
The actual height of your first layer is subject to a 0.15mm minimum based on the “software endstop” feature of the Prusa firmware. This setting is intended to prevent inadvertently driving the nozzle into the PEI print surface and to provide some distance betwen the nozzle and PEI surface during heating.
Contact and feedback
You can find me on the Prusa support forums or Reddit where I lurk in many of the 3D printing-related subreddits. I occasionally drop into the Official Prusa 3D discord server where I can be reached as bobstro (bobstro#9830). You can email me directly at email@example.com.
Last modified Apr 2, 2021. Last build on Apr 02, 2021.