Z_MIN endstops interfere with Z-probing
April 07, 2019 06:13AM
Hello everyone,

I have a hotend mounted piezo disc installed and want to use it as a Z-Probe. The probe has been tested thoroughly and functions flawlessly. Additionally my printer (Anycubic i3 Mega) possesses dual Z_MIN endstops for leveling the X-axis and homing Z. Naturally, the build plate is a fraction of a millimeter below Z=0, as is normally the case. Probing with this set up causes one issue:

When probing via G29 or G30, the triggering of the Z_MIN endstops prior to the probe cause and error and thereby a probing failure.

Attempted methods to solve the issue:

Changing Z-offset to varying values - no effect
disabling software endstops - no effect
disabling Z_MIN endstop pullups - permanently triggered Z_MIN inhibiting downwards movement, fail
lowering Z_PROBE_LOW_POINT - no effect

Artificially raising the build plate by laying a thin metal sheet onto it to take the Z_MIN endstops out of the game resulted in flawless behavior of G29 and G30, confirming that the triggering of the Z_MIN endstops causes the issue and that all other things are set up correctly.
I failed to find an option in Marlin's config files that disables Z_MIN endstops during probing. Find my config files here

The detailed leveling debugging report looks like this:

Send: G30
Recv: >>> probe_pt(95.00, 10.00, stow, 1, probe_relative)
Recv: current_position=(95.00, 10.00, 10.77) :
Recv: >>> do_blocking_move_to(95.00, 10.00, 10.77)
Recv: <<< do_blocking_move_to
Recv: current_position=(95.00, 10.00, 10.77) : set_probe_deployed
Recv: deploy: 1
Recv: do_probe_raise(10.00)
Recv: >>> do_blocking_move_to(95.00, 10.00, 10.77)
Recv: <<< do_blocking_move_to
Recv: current_position=(95.00, 10.00, 10.77) : >>> run_z_probe
Recv: current_position=(95.00, 10.00, 10.77) : >>> do_probe_move
Recv: >>> do_blocking_move_to(95.00, 10.00, -10.00)
Recv: <<< do_blocking_move_to
[...]
Recv: echo:busy: processing
Recv: current_position=(95.00, 10.00, -0.04) : sync_plan_position
Recv: current_position=(95.00, 10.00, -0.04) : <<< do_probe_move
Recv: SLOW Probe fail!
Recv: current_position=(95.00, 10.00, -0.04) : <<< run_z_probe
Recv: current_position=(95.00, 10.00, -0.04) : set_probe_deployed
Recv: deploy: 0
Recv: >>> do_blocking_move_to(95.00, 10.00, -0.04)
Recv: <<< do_blocking_move_to
Recv: current_position=(95.00, 10.00, -0.04) : set_probe_deployed
Recv: deploy: 0
Recv: Error: Probing failed
Changing monitoring state from "Operational" to "Error: Probing failed"
Changing monitoring state from "Error: Probing failed" to "Offline (Error: Probing failed)"
Connection closed, closing down monitor

I'm incredibly thankful for every bit of help I can get here as I am entirely out of ideas.

Edited 1 time(s). Last edit at 04/07/2019 06:28AM by kulfuerst.
Re: Z_MIN endstops interfere with Z-probing
April 07, 2019 06:35AM
Could maybe comment out (preceed the line with double forward slash // ..

from

#define USE_ZMIN_PLUG
#define USE_ZMAX_PLUG

to

//#define USE_ZMIN_PLUG
//#define USE_ZMAX_PLUG

in your Configuration.h file.

Then recompile and upload the firmware.
Re: Z_MIN endstops interfere with Z-probing
April 07, 2019 07:22AM
My ZMIN_PLUG are my Z endstops which I want to continue using, ZMAX is my probe. Commenting them out would disable all of my z endstops, I don't believe that would work smiling smiley

CORRECTION: ZMIN is my Z-endstop1, XMAX is my Z-endstop2, ZMAX is my Z-probe

Edited 1 time(s). Last edit at 04/07/2019 08:55AM by kulfuerst.
Re: Z_MIN endstops interfere with Z-probing
April 09, 2019 04:37PM
I successfully solved the issue by implementing the code found here in endstops.cpp. Everything now functions exactly as intended!
Re: Z_MIN endstops interfere with Z-probing
April 10, 2019 03:01AM
oh good smiling smiley

Have they added the fix permanently to the Marlin code I wonder ?

Had a look in 2.0 and they have ..

      #if HAS_Z_MIN
        #if ENABLED(Z_TRIPLE_ENDSTOPS)
          PROCESS_TRIPLE_ENDSTOP(Z, Z2, Z3, MIN);
        #elif ENABLED(Z_DUAL_ENDSTOPS)
          PROCESS_DUAL_ENDSTOP(Z, Z2, MIN);
        #else
          #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
            if (z_probe_enabled) PROCESS_ENDSTOP(Z, MIN);
          #elif USES_Z_MIN_PROBE_ENDSTOP
            if (!z_probe_enabled) PROCESS_ENDSTOP(Z, MIN);
          #else
            PROCESS_ENDSTOP(Z, MIN);
          #endif
        #endif
      #endif

2.0 is better than 1.1.9, you might like it.

Edited 1 time(s). Last edit at 04/10/2019 03:12AM by Pippy.
Sorry, only registered users may post in this forum.

Click here to login