Download as pdf or txt
Download as pdf or txt
You are on page 1of 1

MarlinFirmware/Marlin

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 or G29 S0 Print mesh info


G29 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.

You might also like