Table of Contents
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This feature consists of two components:
- A Manual step-by-step technique to perform Bed Leveling without the use of a probe, and
- A Mesh-based algorithm to compensate for any irregularities in the bed.
Background
I happened to buy an unfinished RigidBot BIG which was in not-too-great condition from the shipping and being mishandled by its previous owner. The structure was solid though and I have rebuilt most of it using a RAMPS 1.4 board + 128x64 LCD board. But the bed wasn't flat. I even tried to use a sheet of glass to compensate for that, but it didn't help.
I've experimented in the past (on a smaller Huxley) with a menu option to do Bed Leveling without any probes, servos, etc. So I implemented this feature in Marlin and began experimenting with GRID auto bed leveling.
After a while it began to bug me that the existing Bed Leveling solutions in Marlin are based on a single plane, so they still assume you have a flat bed – not good enough for a BIG non-flat bed like mine.
The GRID wasn't using a mesh. So I implemented mesh based bed leveling. One obstacle I realized was long lines need to be split on mesh boundaries. I wrote most code in a "simulator" to get the logic right and have tested it all day. The mesh calculations are basically a bi-linear calculation from the mesh edges, maybe not perfect.
Using Manual and Mesh Bed Leveling
To get started with these features, edit your Configuration.h
and enable both MANUAL_BED_LEVELING
and MESH_BED_LEVELING
. (These are separate options so in the future Manual Bed Leveling could by applied to other methods, and Mesh Bed Leveling could be automated.)
On your LCD controller you'll find the "Bed Leveling" option at the end of the "Prepare" menu. As soon as you select this option, the printer will begin to move the nozzle from point to point collecting measurements. At each point, use the encoder to adjust the nozzle's Z position until the tip is just at paper-thickness from the bed, then press the encoder button to move to the next point.
This procedure may take a few minutes, depending on how many points you measure and how carefully you measure each one. Fortunately, once you've created the mesh, you can save it to EEPROM. You can do a G28
to see if the mesh is active or not. If, after homing, the nozzle travels to the first measure point (to sync the position with the mesh), you know the mesh is active.
This is what I get when measuring my bed (using 5x5 points). Pretty bad bed huh?
2.00 2.10 2.10 2.05 2.00
2.25 2.25 2.24 2.20 2.15
2.35 2.34 2.40 2.35 2.35
2.05 2.15 2.25 2.25 2.25
1.75 1.95 2.15 2.15 2.15
Thanks to this feature I've been able to print pretty much all over the bed. And did I mention, this is a BIG bed? The print area is at least 360mm x 290mm with room to spare. The width of the "reptiles" print shown here is over 200mm. Without this bed leveling technique it would have been impossible to get such nice results.
This image explain the bi-linear calculation pretty good. (from http://www.dspguide.com/ch23/7.htm)
On your LCD controller you'll find the "Bed Leveling" option at the end of the "Prepare" menu. As soon as you select this option, the printer will begin to move the nozzle from point to point collecting measurements. At each point, use the encoder to adjust the nozzle's Z position until the tip is just at paper-thickness from the bed, then press the encoder button to move to the next point. If G28
does an extra move (to sync with the mesh position) then you know mesh leveling is active.
https://github.com/MarlinFirmware/Marlin/pull/1619
Later I also extended to G29
so that Manual Bed Leveling can be performed without a controller.
G29
orG29 S0
Print mesh infoG29 S1
Initiate probing, will do a homing + travel to first probe point. Now use Printrun or what you use to slowly lower the hotend until it touches the bed, i.e. with a paper between to feel when it's close enough.G29 S2
Save current height for the current point, then travel to next probe point. Repeat the manual lowering until touches. Do this until all points has been probed.
I use a paper and do the goto next point when the paper feel loose, which gets the compensation a little too loose so I compensate that in Slic3r with "Z offset" (in Printer Settings) set to -0.05
.
When probing and MESH_HOME_SEARCH_Z
set at 4 the Z endstop is considered being at 4 mm and it is possible to search downward (yes, this will press on the Z endstop unless it is an opto) to 0. It might be possible to have the endstop below the bed, but I think the traveling between the points need to change as it will travel on the endstop level between the probe points, so an extra lift might be needed.
Welcome to Marlin
Installing Marlin
Marlin Features
Configuring Marlin
Reference
Join the Marlin Project
Contributing to Marlin