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:

  current_position= X140.00 Y90.00 Z5.00 : >>> G29
Machine Type: Cartesian
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
>>> do_blocking_move_to X140.00 Y90.00 Z5.00
<<< do_blocking_move_to
>>> 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?


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 on question "How to set Z-probe boundary limits in firmware when using automatic bed leveling?" 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:


(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...)

  • $\begingroup$ 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) $\endgroup$
    – Petahanks
    May 1 '20 at 12:49
  • 1
    $\begingroup$ 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! $\endgroup$
    – Petahanks
    May 1 '20 at 12:54

Not the answer you're looking for? Browse other questions tagged or ask your own question.