<p>What may be confusing is the use of the naming of the mechanism &quot;Auto Bed Levelling&quot;, or short ABL, does not make your build plate to level itself with respect to the frame of the printer<sup>1)</sup>. 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.</p>
<p>The ABL process could better be described as &quot;Height adjusting to scanned bed geometry&quot; or something like that, as that is exactly what is being done. The <code>G29</code> 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.</p>
<p>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 <code>M851</code>.</p>
<p><a href="https://3dprinting.stackexchange.com/a/5858">This answer</a> describes in some more detail how the offset is generated and applied to the scanned surface.</p>
<hr />
<p><em><sup>1)</sup> 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 <a href="https://marlinfw.org/docs/gcode/G035.html" rel="nofollow noreferrer"><code>G35</code></a> G-code. And, automatically, (for specific printers) possible on build plates that are moved up/down by several lead screws (look into <code>NUM_Z_STEPPER_DRIVERS</code> 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.</em></p>

CC BY-SA 4.0
2021-01-28T22:01:35.193Z
2021-02-28T23:14:55.633Z
2021-02-28T23:14:55.633Z
0scar
<p>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.</p>

CC BY-SA 4.0
2022-01-07T21:48:46.877Z
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
CC BY-SA 4.0
2022-01-07T22:23:11.033Z
As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer).
Community
CC BY-SA 4.0
2022-01-08T15:58:55.323Z
"Just thought", "Not sure", "Could be" - it seems like this answer is pure guesswork. Is it based upon any *actual* experience with a BLTouch?
Greenonline
CC BY-SA 4.0
2022-01-13T07:23:47.777Z
I know how current BLTouch works. Not much advantages over mechanical sensor with button. BLTouch has integrated MCU and hall sensor which is not a trigger but linear value based on position. So with BLtouch firmware update and special command from printer the concept i've described above is possible. I don't see point to measure bed every time while the main variable is nozzle as it regularly need to be changed.
Saar
CC BY-SA 4.0
2022-01-07T20:38:53.483Z
2022-01-07T20:38:53.483Z
Saar
<p>I just installed my BLTouch clone (Marlin 1.8) on my Anycubic i3 Mega Ultrabase and finding confusing information about the <code>Z_PROBE_OFFSET_FROM_EXTRUDER</code> or the <code>M851</code> command.</p>
<p>I understand <code>M851</code> command does the same as <code>Z_PROBE_OFFSET_FROM_EXTRUDER</code> in the Configuration.h. (see <a href="https://marlinfw.org/docs/gcode/M851.html" rel="nofollow noreferrer">marlin docs</a>)</p>
<p>So according to Marlin, this value is the distance of the nozzle to the distance of the triggering point of the sensor.</p>
<p>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.</p>
<p>Instead, I find tutorials around the <code>M851</code> (e.g <a href="https://3dprinting.stackexchange.com/questions/5857/z-offset-on-autoleveling-sensor-setup/5858#5858?newreg=7ba284617c6d4de7834be73f67dd4e6b">here</a> telling to manually level the bed, then take the current Z-value of the extruder and put that into the <code>M851</code> value. In my understanding it makes little sense, as it has no reference to when the sensor triggers, its distance to the bed.</p>
<p>Sure, maybe this way it can get an understanding of slight derivations in the planarity of the bed, but it would not have automatically &quot;levelled&quot; my bed, just compensated for imperfections.</p>
<p>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?</p>

<marlin><bed-leveling><bltouch>
Understanding of the auto bed leveling process (BLTouch)
maytherebelight
# Understanding of the auto bed leveling process (BLTouch)

(Asked by: username_0 on 2021-01-26)

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](https://marlinfw.org/docs/gcode/M851.html))

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](https://3dprinting.stackexchange.com/questions/5857/z-offset-on-autoleveling-sensor-setup/5858#5858?newreg=7ba284617c6d4de7834be73f67dd4e6b) 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?

**Tags:** marlin, bed-leveling, bltouch

---

## 2 answers

### Answer by username_1 on 2021-01-28. Score: 2

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](https://3dprinting.stackexchange.com/a/5858) 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`](https://marlinfw.org/docs/gcode/G035.html) 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.*


---

### Answer by username_2 on 2022-01-07. Score: -2

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.

> **Comments:**
> **username_1**: 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.  
> **username_3**: As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer).  
> **username_4**: "Just thought", "Not sure", "Could be" - it seems like this answer is pure guesswork. Is it based upon any *actual* experience with a BLTouch?  
> **username_2**: I know how current BLTouch works. Not much advantages over mechanical sensor with button. BLTouch has integrated MCU and hall sensor which is not a trigger but linear value based on position. So with BLtouch firmware update and special command from printer the concept i've described above is possible. I don't see point to measure bed every time while the main variable is nozzle as it regularly need to be changed.  

---

