<p>The problem is that, although you have set the offsets correctly, the boundary limits for the probe to "probe the area" have not been adjusted. It is my belief that this is a flaw in ABL of Marlin 2.0.x. If the user has set the probe offsets, the firmware already knows that the probe area is limited!</p>

<p><a href="/a/8154">This answer</a> on question "<a href="/q/8153">How to set Z-probe boundary limits in firmware when using automatic bed leveling?</a>" describes in detail what the boundaries of the probe are for Marlin firmware 1.1.x <strong>and</strong> 2.0.x.</p>

<p>Basically, you need to set the boundaries of the probe using some extra definitions in your Configuration_adv.h file:</p>

<pre>
  constexpr int nozzle_to_probe_offset[] = NOZZLE_TO_PROBE_OFFSET;
  #define PROBE_X_OFFSET_FROM_EXTRUDER nozzle_to_probe_offset[0]
  #define PROBE_Y_OFFSET_FROM_EXTRUDER nozzle_to_probe_offset[1]
</pre>

<p>When including the <code>MIN_PROBE_EDGE</code> this means that the area is defined as:</p>

<pre>
  #define MIN_PROBE_EDGE_LEFT (MIN_PROBE_EDGE)
  #define MIN_PROBE_EDGE_RIGHT (MIN_PROBE_EDGE - PROBE_X_OFFSET_FROM_EXTRUDER)
  #define MIN_PROBE_EDGE_FRONT (MIN_PROBE_EDGE)
  #define MIN_PROBE_EDGE_BACK (MIN_PROBE_EDGE - PROBE_Y_OFFSET_FROM_EXTRUDER)
</pre>

<p><em>(Since the offsets are negative in your probe setup, we need to subtract the values in order to add up the absolute value to the edge...)</em></p>

CC BY-SA 4.0
2020-05-01T12:49:38.357Z
Thanks for the suggestion! I have my MIN_PROBE_EDGE set to 30, so I followed your calculations and added this to Configuration_adv.h:

#define PROBE_X_OFFSET_FROM_EXTRUDER -45
#define PROBE_Y_OFFSET_FROM_EXTRUDE -12
#define MIN_PROBE_EDGE_LEFT 30
#define MIN_PROBE_EDGE_RIGHT 75
#define MIN_PROBE_EDGE_FRONT 30
#define MIN_PROBE_EDGE_BACK 42

However, that sadly did not seem to have any effect at all. The probe still goes to the same location as before and I still get the message: Probe Offset X10.00 Y10.00 Z0.00 (Right-Back & Same Z as Nozzle)
Petahanks
CC BY-SA 4.0
2020-05-01T12:54:14.760Z
Update: Oh, I didn’t realize I had to do M502 + M500 to get the values to kick in! It seems to work now, thanks a lot!
Petahanks
CC BY-SA 4.0
2022-12-24T22:19:19.957Z
I tried to apply the advice to Marlin 2.0.9.1 and I observe the following side effect: the probe is placed just OK at the front, but does not cover the whole area at the back: the table could still be moved further, but it does not. I have `#define PROBING_MARGIN_FRONT (PROBING_MARGIN - PROBE_Y_OFFSET_FROM_EXTRUDER)` and `#define PROBING_MARGIN_BACK 0`. Unfortunately my attempt to set `PROBING_MARGIN_BACK` to negative had failed (there is a compile-time check preventing that). The same issue for left/right margins.
dma_k
CC BY-SA 4.0
2020-05-01T12:01:33.333Z
2020-05-01T12:11:52.170Z
2020-05-01T12:11:52.170Z
0scar
<p>I just changed the motherboard of my CR-10 mini printer to an SKR 1.4 and installed Marlin 2.0.x on it. Everything seems to work except for the automatic bed leveling. I’m using an EZABL probe.</p>

<p>The probe is mounted to the left and slightly in front of the nozzle. Therefore I have set the probe-nozzle offset in Marlin as:</p>

<pre><code>#define NOZZLE_TO_PROBE_OFFSET { -45, -12, 0 }
</code></pre>

<p>When I run automatic bed leveling with G29 the nozzle moves to a position where the sensor is outside of the bed (but the nozzle is inside the bed). And then it crashes down into the bed with the nozzle because the Z endstop is never triggered.</p>

<p>To debug I used the DEBUG_LEVELING_FEATURE in Marlin and ran G29 from Pronterface. This is what I got:</p>

<pre><code>SENDING:G29
  current_position= X140.00 Y90.00 Z5.00 : &gt;&gt;&gt; G29
Machine Type: Cartesian
Probe: FIX_MOUNTED_PROBE
Probe Offset X10.00 Y10.00 Z0.00 (Right-Back &amp; Same Z as Nozzle)
Auto Bed Leveling: BILINEAR (disabled)
  current_position= X140.00 Y90.00 Z5.00 : Probe::set_deployed
deploy: 1
Probe::move_z(5.00)
&gt;&gt;&gt; do_blocking_move_to X140.00 Y90.00 Z5.00
&lt;&lt;&lt; do_blocking_move_to
reset_bed_level
&gt;&gt;&gt; Probe::probe_at_point(30.00, 30.00, raise, 0, probe_relative)
  current_position= X140.00 Y90.00 Z5.00 :
&gt;&gt;&gt; do_blocking_move_to X20.00 Y20.00 Z5.00
&lt;&lt;&lt; do_blocking_move_to
  current_position= X20.00 Y20.00 Z5.00 : Probe::set_deployed
deploy: 1
  current_position= X20.00 Y20.00 Z5.00 : &gt;&gt;&gt; Probe::run_z_probe
  current_position= X20.00 Y20.00 Z5.00 : &gt;&gt;&gt; Probe::probe_down_to_z
&gt;&gt;&gt; do_blocking_move_to X20.00 Y20.00 Z-3.00
&lt;&lt;&lt; do_blocking_move_to
echo:busy: processing
  current_position= X20.00 Y20.00 Z-3.00 : sync_plan_position
  current_position= X20.00 Y20.00 Z-3.00 : &lt;&lt;&lt; Probe::probe_down_to_z
FAST Probe fail!
  current_position= X20.00 Y20.00 Z-3.00 : &lt;&lt;&lt; run_z_probe
  current_position= X20.00 Y20.00 Z-3.00 : Probe::set_deployed
deploy: 0
&gt;&gt;&gt; do_blocking_move_to X20.00 Y20.00 Z-3.00
&lt;&lt;&lt; do_blocking_move_to
Error:Probing Failed
[ERROR] Error:Probing Failed
</code></pre>

<p>What I don’t understand is why it says:</p>

<pre><code>Probe Offset X10.00 Y10.00 Z0.00 (Right-Back &amp; Same Z as Nozzle)
</code></pre>

<p>Because that is not at all the NOZZLE_TO_PROBE_OFFSET I have defined. Is there another setting related to the nozzle/probe offset besides NOZZLE_TO_PROBE_OFFSET that I have missed? Or why does Marlin get the idea that my probe is to the right and back of the probe when in reality its to the front and left?</p>

CC BY-SA 4.0
2020-05-01T11:17:14.353Z
Hi Petahanks, welcome to 3DPrinting.SE! I think that question "[How to set Z-probe boundary limits in firmware when using automatic bed leveling?](/q/8153/)" describes why the auto leveling is not working for you and how you should fix that in Marlin 2.0.
0scar
<marlin><ezabl>
Automatic bed leveling probes outside of bed despite NOZZLE_TO_PROBE_OFFSET
Petahanks
# Automatic bed leveling probes outside of bed despite NOZZLE_TO_PROBE_OFFSET

(Asked by: username_0 on 2020-05-01)

I just changed the motherboard of my CR-10 mini printer to an SKR 1.4 and installed Marlin 2.0.x on it. Everything seems to work except for the automatic bed leveling. I’m using an EZABL probe.

The probe is mounted to the left and slightly in front of the nozzle. Therefore I have set the probe-nozzle offset in Marlin as:

```
#define NOZZLE_TO_PROBE_OFFSET { -45, -12, 0 }

```

When I run automatic bed leveling with G29 the nozzle moves to a position where the sensor is outside of the bed (but the nozzle is inside the bed). And then it crashes down into the bed with the nozzle because the Z endstop is never triggered.

To debug I used the DEBUG\_LEVELING\_FEATURE in Marlin and ran G29 from Pronterface. This is what I got:

```
SENDING:G29
  current_position= X140.00 Y90.00 Z5.00 : >>> G29
Machine Type: Cartesian
Probe: FIX_MOUNTED_PROBE
Probe Offset X10.00 Y10.00 Z0.00 (Right-Back & Same Z as Nozzle)
Auto Bed Leveling: BILINEAR (disabled)
  current_position= X140.00 Y90.00 Z5.00 : Probe::set_deployed
deploy: 1
Probe::move_z(5.00)
>>> do_blocking_move_to X140.00 Y90.00 Z5.00
<<< do_blocking_move_to
reset_bed_level
>>> Probe::probe_at_point(30.00, 30.00, raise, 0, probe_relative)
  current_position= X140.00 Y90.00 Z5.00 :
>>> do_blocking_move_to X20.00 Y20.00 Z5.00
<<< do_blocking_move_to
  current_position= X20.00 Y20.00 Z5.00 : Probe::set_deployed
deploy: 1
  current_position= X20.00 Y20.00 Z5.00 : >>> Probe::run_z_probe
  current_position= X20.00 Y20.00 Z5.00 : >>> Probe::probe_down_to_z
>>> do_blocking_move_to X20.00 Y20.00 Z-3.00
<<< do_blocking_move_to
echo:busy: processing
  current_position= X20.00 Y20.00 Z-3.00 : sync_plan_position
  current_position= X20.00 Y20.00 Z-3.00 : <<< Probe::probe_down_to_z
FAST Probe fail!
  current_position= X20.00 Y20.00 Z-3.00 : <<< run_z_probe
  current_position= X20.00 Y20.00 Z-3.00 : Probe::set_deployed
deploy: 0
>>> do_blocking_move_to X20.00 Y20.00 Z-3.00
<<< do_blocking_move_to
Error:Probing Failed
[ERROR] Error:Probing Failed

```

What I don’t understand is why it says:

```
Probe Offset X10.00 Y10.00 Z0.00 (Right-Back & Same Z as Nozzle)

```

Because that is not at all the NOZZLE\_TO\_PROBE\_OFFSET I have defined. Is there another setting related to the nozzle/probe offset besides NOZZLE\_TO\_PROBE\_OFFSET that I have missed? Or why does Marlin get the idea that my probe is to the right and back of the probe when in reality its to the front and left?

**Tags:** marlin, ezabl

> **Comments:**
> **username_1**: Hi username_0, welcome to 3DPrinting.SE! I think that question "[How to set Z-probe boundary limits in firmware when using automatic bed leveling?](/q/8153/)" describes why the auto leveling is not working for you and how you should fix that in Marlin 2.0.  

---

## 1 answers

### Answer by username_1 on 2020-05-01. Score: 0 | Accepted answer

The problem is that, although you have set the offsets correctly, the boundary limits for the probe to "probe the area" have not been adjusted. It is my belief that this is a flaw in ABL of Marlin 2.0.x. If the user has set the probe offsets, the firmware already knows that the probe area is limited!

[This answer](/a/8154) on question "[How to set Z-probe boundary limits in firmware when using automatic bed leveling?](/q/8153)" describes in detail what the boundaries of the probe are for Marlin firmware 1.1.x **and** 2.0.x.

Basically, you need to set the boundaries of the probe using some extra definitions in your Configuration\_adv.h file:

```

  constexpr int nozzle_to_probe_offset[] = NOZZLE_TO_PROBE_OFFSET;
  #define PROBE_X_OFFSET_FROM_EXTRUDER nozzle_to_probe_offset[0]
  #define PROBE_Y_OFFSET_FROM_EXTRUDER nozzle_to_probe_offset[1]

```

When including the `MIN_PROBE_EDGE` this means that the area is defined as:

```

  #define MIN_PROBE_EDGE_LEFT (MIN_PROBE_EDGE)
  #define MIN_PROBE_EDGE_RIGHT (MIN_PROBE_EDGE - PROBE_X_OFFSET_FROM_EXTRUDER)
  #define MIN_PROBE_EDGE_FRONT (MIN_PROBE_EDGE)
  #define MIN_PROBE_EDGE_BACK (MIN_PROBE_EDGE - PROBE_Y_OFFSET_FROM_EXTRUDER)

```

*(Since the offsets are negative in your probe setup, we need to subtract the values in order to add up the absolute value to the edge...)*

> **Comments:**
> **username_0**: Thanks for the suggestion! I have my MIN_PROBE_EDGE set to 30, so I followed your calculations and added this to Configuration_adv.h:  #define PROBE_X_OFFSET_FROM_EXTRUDER -45 #define PROBE_Y_OFFSET_FROM_EXTRUDE -12 #define MIN_PROBE_EDGE_LEFT 30 #define MIN_PROBE_EDGE_RIGHT 75 #define MIN_PROBE_EDGE_FRONT 30 #define MIN_PROBE_EDGE_BACK 42  However, that sadly did not seem to have any effect at all. The probe still goes to the same location as before and I still get the message: Probe Offset X10.00 Y10.00 Z0.00 (Right-Back & Same Z as Nozzle)  
> **username_0**: Update: Oh, I didn’t realize I had to do M502 + M500 to get the values to kick in! It seems to work now, thanks a lot!  
> **username_2**: I tried to apply the advice to Marlin 2.0.9.1 and I observe the following side effect: the probe is placed just OK at the front, but does not cover the whole area at the back: the table could still be moved further, but it does not. I have `#define PROBING_MARGIN_FRONT (PROBING_MARGIN - PROBE_Y_OFFSET_FROM_EXTRUDER)` and `#define PROBING_MARGIN_BACK 0`. Unfortunately my attempt to set `PROBING_MARGIN_BACK` to negative had failed (there is a compile-time check preventing that). The same issue for left/right margins.  

---

