# Understanding of the auto bed leveling process (BLTouch)

I just installed my BLTouch clone (Marlin 1.8) on my Anycubic i3 Mega Ultrabase and finding confusing information about the Z_PROBE_OFFSET_FROM_EXTRUDER or the M851 command.

I understand M851 command does the same as Z_PROBE_OFFSET_FROM_EXTRUDER in the Configuration.h. (see marlin docs)

So according to Marlin, this value is the distance of the nozzle to the distance of the triggering point of the sensor.

If I manage to measure that accurately, Marlin could probe the bed, knowing distance of probe to nozzle, add a margin for perfect distance (around paper thickness) and my bed would be forever perfectly measured with every autolevelling process and perfect distances could be calculated.

Instead, I find tutorials around the M851 (e.g here telling to manually level the bed, then take the current Z-value of the extruder and put that into the M851 value. In my understanding it makes little sense, as it has no reference to when the sensor triggers, its distance to the bed.

Sure, maybe this way it can get an understanding of slight derivations in the planarity of the bed, but it would not have automatically "levelled" my bed, just compensated for imperfections.

I am confused by the amount of tutorials that suggest so. Whats the case now? Is Marlin not really able to really level to my bed?

What may be confusing is the use of the naming of the mechanism "Auto Bed Levelling", or short ABL, does not make your build plate to level itself with respect to the frame of the printer1). Hence you are instructed to always tram (level is rather misleading as it doesn't involve bubble levelling, instead it is meant to tram the bed with respect to the X- and Y-axis) the build surface as good as you can.

The ABL process could better be described as "Height adjusting to scanned bed geometry" or something like that, as that is exactly what is being done. The G29 command scans the bed surface and (depending on the firmware options) it generates a mesh or a plane through the measured points. When printing, the nozzle will follow the bed height geometry and fades this out over about 10 milliliters (depends on setting). So, if you do not tram the bed correctly, you will end up with a skew bottom of the print as the fade out will cause the printer to print eventually parallel to the X- and Y-axis.

Note that specifying the Z-offset in the firmware is rather useless, you cannot measure this beforehand. It is far better to do this later using M851.

This answer describes in some more detail how the offset is generated and applied to the scanned surface.

1) It is possible to actually level/tram the bed (e.g. in Marlin firmware), but that are different processes. E.g. a tramming assistant is available when using the G35 G-code. And, automatically, (for specific printers) possible on build plates that are moved up/down by several lead screws (look into NUM_Z_STEPPER_DRIVERS in Marlin's Configuration_adv.h file). But still, this maintains a certain level, it does not scan the complete surface, that can be achieved by the ABL process.

Just thought that BLTouch could automatically measure the nozzle height. If it goes down slowly till nozzle touch the bed and then push down a little more then it will see sensor isn't moving anymore then it means nozzle already pushes the bed down. Beds are usually have springs and shouldn't hurt to push it a little (~1mm) by nozzle. Not sure if such function is implemented. Just an idea. This procedure doesn't need to be used every time. Could be an option after changing the nozzle or other adjustments affecting the nozzle height.

• A BLTouch sensor has a single trigger point, so what you describe is incorrect and will not work. This does not answer the question. This is more a comment explaining a "could be feature" than an answer.
– 0scar
Jan 7 at 21:48