MarlinFirmware / Marlin

Marlin is an optimized firmware for RepRap 3D printers based on the Arduino platform. Many commercial 3D printers come with Marlin installed. Check with your vendor if you need source code for your specific machine.
https://marlinfw.org
GNU General Public License v3.0
16.17k stars 19.21k forks source link

[BUG] Auto Home - Inconsistent + Silent Fail #25826

Closed lukasradek closed 10 months ago

lukasradek commented 1 year ago

Did you test the latest bugfix-2.1.x code?

Yes, and the problem still exists.

Bug Description

I have a stock (electronics-wise) TronXY X5SA-500 Pro on which I decided to change the bed leveling probe. It uses the probe for homing Z. Original TronXY blue probe. New TronXY black TR probe.

The original probe worked flawlessly as expected.

After switching to the new one (no firmware change), I have noticed quite inconsistent and failing behaviour.

Basically there are 4 ways to trigger the homing procedure (on COLOR_UI). Group A: Send G28 via Pronterface Info screen -> Menu -> Motion -> Auto Home

Group B: Info screen -> Motion GUI -> Home (house icon) Info screen -> Menu -> Motion -> Tramming Wizard (homing is done on wizard startup)

With the new probe, I can perform any number (I have tried 5) of consecutive homings that are initiated via Group A and it works just fine.

The first use of Group B trigger ends up in the following: X, Y homes fine Z homing first lowers the bed away from probe as expected. But then instead of starting to move the bed towards the probe to find home, the next move (there is a visible split second stop) is another bed lowering away from the probe. And that is it. The printer then behaves as if the homing was successful even though there wasn't any move towards the probe and the probe was never triggered (there is a trigger LED on the probe).

Any subsequent use of Group A or Group B triggers end up in the following: X, Y homes fine Z homing first lowers the bed away from probe as expected. Starts to move the bed towards the probe to find home, as expected. Probe triggers, bed starts moving away from probe to prepare for re-bump, as expected. But it never starts moving towards the probe again (for the re-bump). It just stops after the pre-re-bump back off move. The printer again behaves as if the homing was successful.

Simply put... after printer boot up I can successfully home using the Group A triggers "unlimited" number of times (I have tried 5). Once I use Group B trigger, it stops working for any trigger (with the first fail behaviour being different from the subsequent ones). Printer reboot puts me back on the beginning again.

I also include debug data from Pronterface terminal, but except 2 "busy processing" entries, they are the same for all cases. I have included logs from successful Group A homing, logs from the first Group B fail and logs from the subsequent fail.

I have heard some "rumors" that I haven't confirmed yet, that the new probe has a different trigger voltage (not inverted state) but since Marlin can use it successfully, I presume it is not the issue here.

Bug Timeline

I discovered it on 2.1.2.

Expected behavior

Successful and consistent homing.

Actual behavior

Inconsistent a failing homing described above.

Steps to Reproduce

No response

Version of Marlin Firmware

2.1.2

Printer model

Tronxy X5SA-500 Pro

Electronics

Chitu V6 board (stock)

Add-ons

Tronxy TR Black sensor (see description)

Bed Leveling

ABL Bilinear mesh

Your Slicer

Prusa Slicer

Host Software

Pronterface

Don't forget to include

Additional information & file uploads

evidence.zip

thinkyhead commented 1 year ago

You reported that the problem exists in 2.1.2 and also that you tested the latest bugfix-2.1.x, but there are some big changes in bugfix-2.1.x and you didn't mention if there were any changes in behavior. It would be helpful to know what if any differences you observed.

Meanwhile, I'll have a look at the log you posted and see about recruiting the contributor who assisted with the latest probing changes.

lukasradek commented 1 year ago

I have discovered it on my 2.1.2 build and further tested in on bugfix to satisfy the bug report policy and it all seemed the same.

jerrygrey commented 1 year ago

I also ran into this bug yesterday with bugfix-2.1.x on Ender 3 and SKR-MINI-V3. It disappeared when downgrading to 2.0.x

lukasradek commented 1 year ago

I have done some measurements and I can confirm, that those probes use different voltages on the signal wire.

Both probes were wired into the same "Level", which supplied them with 24V.

TronXY Blue probe (capacitive or inductive). Idle state - 12V on signal wire Triggered state - 0V on signal wire

TronXY Black probe (optical). Idle state - 4.2V on signal wire Triggered state - 0V on signal wire

lukasradek commented 1 year ago

Edit:

I tried my old 2.0.9.5 build and on that, the new probe behaves badly for all the homing triggers - every trigger (except TramWiz, that I haven't tried) behaves as Group B.

I tried the 2.0.x branch (Auto Build Marlin showing 2.0.9.6) and bugfix-2.0.x branch and it behaves the same as bugfix 2.1.x.

lukasradek commented 1 year ago

We have something!!

These are 2 serial logs from the same machine with the SAME HARDWARE (including the Z probe).

This homing was initiated from G28 command using Pronterface:

```prolog >>> g28 SENDING:G28 echo:G28 >>> G28 X-9.00 Y-6.00 Z0.00 Machine Type: CoreCartesian Probe: FIX_MOUNTED_PROBE Probe Offset X-40.00 Y0.00 Z0.00 (Left-Center & Same Z as Nozzle) Auto Bed Leveling: BILINEAR (disabled) >>> set_bed_leveling_enabled X-9.00 Y-6.00 Z0.00 <<< set_bed_leveling_enabled X-9.00 Y-6.00 Z0.00 remember_feedrate_scaling_off: fr=66.67 100% Raise Z before homing: do_z_clearance(5.00 [0.00 to 5.00], 0) do_blocking_move_to_z(5.00, 8.00) >>> do_blocking_move_to X-9.00 Y-6.00 Z0.00 > X-9.00 Y-6.00 Z5.00 <<< do_blocking_move_to X-9.00 Y-6.00 Z5.00 >>> homeaxis(X) Homing bump is planned0Length mm-5.00 Home Fast: -778.50mm >>> do_homing_move X-9.00 Y-6.00 Z5.00 ...(X, -778.50, [50.00]) is_home_dir 1 echo:busy: processing echo:busy: processing echo:busy: processing ENDSTOP TRIGGERED planner fn <<< do_homing_move X-9.00 Y-6.00 Z5.00 Move Away: 5.00mm >>> do_homing_move X-9.00 Y-6.00 Z5.00 ...(X, 5.00, [50.00]) is_home_dir 0 <<< do_homing_move X-9.00 Y-6.00 Z5.00 Re-bump: -10.00mm >>> do_homing_move X-9.00 Y-6.00 Z5.00 ...(X, -10.00, 25.00) is_home_dir 1 ENDSTOP TRIGGERED planner fn <<< do_homing_move X-9.00 Y-6.00 Z5.00 >>> set_axis_is_at_home(X) Axis X home_offset = 0.00 position_shift = 0.00 > home_offset[X] = 0.00 current_position= X-9.00 Y-6.00 Z5.00 : <<< set_axis_is_at_home(X) current_position= X-9.00 Y-6.00 Z5.00 : sync_plan_position current_position= X-9.00 Y-6.00 Z5.00 : > AFTER set_axis_is_at_home <<< homeaxis(X) >>> homeaxis(Y) Homing bump is planned0Length mm-5.00 Home Fast: -759.00mm >>> do_homing_move X-9.00 Y-6.00 Z5.00 ...(Y, -759.00, [50.00]) is_home_dir 1 echo:busy: processing echo:busy: processing echo:busy: processing ENDSTOP TRIGGERED planner fn <<< do_homing_move X-9.00 Y-6.00 Z5.00 Move Away: 5.00mm >>> do_homing_move X-9.00 Y-6.00 Z5.00 ...(Y, 5.00, [50.00]) is_home_dir 0 <<< do_homing_move X-9.00 Y-6.00 Z5.00 Re-bump: -10.00mm >>> do_homing_move X-9.00 Y-6.00 Z5.00 ...(Y, -10.00, 25.00) is_home_dir 1 ENDSTOP TRIGGERED planner fn <<< do_homing_move X-9.00 Y-6.00 Z5.00 >>> set_axis_is_at_home(Y) Axis Y home_offset = 0.00 position_shift = 0.00 > home_offset[Y] = 0.00 current_position= X-9.00 Y-6.00 Z5.00 : <<< set_axis_is_at_home(Y) current_position= X-9.00 Y-6.00 Z5.00 : sync_plan_position current_position= X-9.00 Y-6.00 Z5.00 : > AFTER set_axis_is_at_home <<< homeaxis(Y) >>> home_z_safely X-9.00 Y-6.00 Z5.00 Home Z Safely fn start current_position= X-9.00 Y-6.00 Z5.00 : sync_plan_position Point reachable1 destination= X290.00 Y250.00 Z5.00 : home_z_safely CALL: Blocking move to XY dest. do_blocking_move_to_xy(290.00, 250.00, 0.00) >>> do_blocking_move_to X-9.00 Y-6.00 Z5.00 > X290.00 Y250.00 Z5.00 echo:busy: processing echo:busy: processing <<< do_blocking_move_to X290.00 Y250.00 Z5.00 CALL: HomeAxis Z >>> homeaxis(Z) current_position= X290.00 Y250.00 Z5.00 : Probe::set_deployed deploy=1 no_return=0 Raise Z to 10.00 do_z_clearance(10.00 [5.00 to 10.00], 0) do_blocking_move_to_z(10.00, 8.00) >>> do_blocking_move_to X290.00 Y250.00 Z5.00 > X290.00 Y250.00 Z10.00 <<< do_blocking_move_to X290.00 Y250.00 Z10.00 >>> Probe::probe_specific_action X290.00 Y250.00 Z10.00 <<< Probe::probe_specific_action X290.00 Y250.00 Z10.00 >>> do_blocking_move_to X290.00 Y250.00 Z10.00 > X290.00 Y250.00 Z10.00 <<< do_blocking_move_to X290.00 Y250.00 Z10.00 Homing bump is planned1Length mm-5.00 Home Fast: -900.00mm >>> do_homing_move X290.00 Y250.00 Z10.00 ...(Z, -900.00, [4.00]) is_home_dir 1 echo:busy: processing echo:busy: processing ENDSTOP TRIGGERED planner fn <<< do_homing_move X290.00 Y250.00 Z10.00 Move Away: 5.00mm >>> do_homing_move X290.00 Y250.00 Z10.00 ...(Z, 5.00, 8.00) is_home_dir 0 echo:busy: processing <<< do_homing_move X290.00 Y250.00 Z10.00 Re-bump: -10.00mm >>> do_homing_move X290.00 Y250.00 Z10.00 ...(Z, -10.00, 2.00) is_home_dir 1 echo:busy: processing ENDSTOP TRIGGERED planner fn <<< do_homing_move X290.00 Y250.00 Z10.00 >>> set_axis_is_at_home(Z) *** Z homed with PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) *** > (M851 Z0.00) Axis Z home_offset = 0.00 position_shift = 0.00 > home_offset[Z] = 0.00 current_position= X290.00 Y250.00 Z0.00 : <<< set_axis_is_at_home(Z) current_position= X290.00 Y250.00 Z0.00 : sync_plan_position current_position= X290.00 Y250.00 Z0.00 : > AFTER set_axis_is_at_home current_position= X290.00 Y250.00 Z0.00 : Probe::set_deployed deploy=0 no_return=0 >>> Probe::probe_specific_action X290.00 Y250.00 Z0.00 <<< Probe::probe_specific_action X290.00 Y250.00 Z0.00 >>> do_blocking_move_to X290.00 Y250.00 Z0.00 > X290.00 Y250.00 Z0.00 <<< do_blocking_move_to X290.00 Y250.00 Z0.00 <<< homeaxis(Z) <<< home_z_safely X290.00 Y250.00 Z0.00 current_position= X290.00 Y250.00 Z0.00 : sync_plan_position >>> do_move_after_z_homing X290.00 Y250.00 Z0.00 <<< do_move_after_z_homing X290.00 Y250.00 Z0.00 restore_feedrate_and_scaling: fr=66.67 100% <<< G28 X290.00 Y250.00 Z0.00 ```

And this is the faulty homing that was initiated from motion GUI menu:

```prolog >>> G28 X290.00 Y250.00 Z0.00 Machine Type: CoreCartesian Probe: FIX_MOUNTED_PROBE Probe Offset X-40.00 Y0.00 Z0.00 (Left-Center & Same Z as Nozzle) Auto Bed Leveling: BILINEAR (disabled) >>> set_bed_leveling_enabled X290.00 Y250.00 Z0.00 <<< set_bed_leveling_enabled X290.00 Y250.00 Z0.00 remember_feedrate_scaling_off: fr=66.67 100% Raise Z before homing: do_z_clearance(5.00 [0.00 to 5.00], 0) do_blocking_move_to_z(5.00, 8.00) >>> do_blocking_move_to X290.00 Y250.00 Z0.00 > X290.00 Y250.00 Z5.00 <<< do_blocking_move_to X290.00 Y250.00 Z5.00 >>> homeaxis(X) Homing bump is planned0Length mm-5.00 Home Fast: -778.50mm >>> do_homing_move X290.00 Y250.00 Z5.00 ...(X, -778.50, [50.00]) is_home_dir 1 echo:busy: processing echo:busy: processing echo:busy: processing ENDSTOP TRIGGERED planner fn <<< do_homing_move X290.00 Y250.00 Z5.00 Move Away: 5.00mm >>> do_homing_move X290.00 Y250.00 Z5.00 ...(X, 5.00, [50.00]) is_home_dir 0 <<< do_homing_move X290.00 Y250.00 Z5.00 Re-bump: -10.00mm >>> do_homing_move X290.00 Y250.00 Z5.00 ...(X, -10.00, 25.00) is_home_dir 1 ENDSTOP TRIGGERED planner fn <<< do_homing_move X290.00 Y250.00 Z5.00 >>> set_axis_is_at_home(X) Axis X home_offset = 0.00 position_shift = 0.00 > home_offset[X] = 0.00 current_position= X-9.00 Y250.00 Z5.00 : <<< set_axis_is_at_home(X) current_position= X-9.00 Y250.00 Z5.00 : sync_plan_position current_position= X-9.00 Y250.00 Z5.00 : > AFTER set_axis_is_at_home <<< homeaxis(X) >>> homeaxis(Y) Homing bump is planned0Length mm-5.00 Home Fast: -759.00mm >>> do_homing_move X-9.00 Y250.00 Z5.00 ...(Y, -759.00, [50.00]) is_home_dir 1 echo:busy: processing echo:busy: processing echo:busy: processing ENDSTOP TRIGGERED planner fn <<< do_homing_move X-9.00 Y250.00 Z5.00 Move Away: 5.00mm >>> do_homing_move X-9.00 Y250.00 Z5.00 ...(Y, 5.00, [50.00]) is_home_dir 0 <<< do_homing_move X-9.00 Y250.00 Z5.00 Re-bump: -10.00mm >>> do_homing_move X-9.00 Y250.00 Z5.00 ...(Y, -10.00, 25.00) is_home_dir 1 ENDSTOP TRIGGERED planner fn <<< do_homing_move X-9.00 Y250.00 Z5.00 >>> set_axis_is_at_home(Y) Axis Y home_offset = 0.00 position_shift = 0.00 > home_offset[Y] = 0.00 current_position= X-9.00 Y-6.00 Z5.00 : <<< set_axis_is_at_home(Y) current_position= X-9.00 Y-6.00 Z5.00 : sync_plan_position current_position= X-9.00 Y-6.00 Z5.00 : > AFTER set_axis_is_at_home <<< homeaxis(Y) >>> home_z_safely X-9.00 Y-6.00 Z5.00 Home Z Safely fn start current_position= X-9.00 Y-6.00 Z5.00 : sync_plan_position Point reachable1 destination= X290.00 Y250.00 Z5.00 : home_z_safely CALL: Blocking move to XY dest. do_blocking_move_to_xy(290.00, 250.00, 0.00) >>> do_blocking_move_to X-9.00 Y-6.00 Z5.00 > X290.00 Y250.00 Z5.00 echo:busy: processing echo:busy: processing <<< do_blocking_move_to X290.00 Y250.00 Z5.00 CALL: HomeAxis Z >>> homeaxis(Z) current_position= X290.00 Y250.00 Z5.00 : Probe::set_deployed deploy=1 no_return=0 Raise Z to 10.00 do_z_clearance(10.00 [5.00 to 10.00], 0) do_blocking_move_to_z(10.00, 8.00) >>> do_blocking_move_to X290.00 Y250.00 Z5.00 > X290.00 Y250.00 Z10.00 <<< do_blocking_move_to X290.00 Y250.00 Z10.00 >>> Probe::probe_specific_action X290.00 Y250.00 Z10.00 <<< Probe::probe_specific_action X290.00 Y250.00 Z10.00 >>> do_blocking_move_to X290.00 Y250.00 Z10.00 > X290.00 Y250.00 Z10.00 <<< do_blocking_move_to X290.00 Y250.00 Z10.00 Homing bump is planned1Length mm-5.00 Home Fast: -900.00mm >>> do_homing_move X290.00 Y250.00 Z10.00 ...(Z, -900.00, [4.00]) is_home_dir 1 ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn <<< do_homing_move X290.00 Y250.00 Z10.00 Move Away: 5.00mm >>> do_homing_move X290.00 Y250.00 Z10.00 ...(Z, 5.00, 8.00) is_home_dir 0 echo:busy: processing <<< do_homing_move X290.00 Y250.00 Z10.00 Re-bump: -10.00mm >>> do_homing_move X290.00 Y250.00 Z10.00 ...(Z, -10.00, 2.00) is_home_dir 1 ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn ENDSTOP TRIGGERED planner fn <<< do_homing_move X290.00 Y250.00 Z10.00 >>> set_axis_is_at_home(Z) *** Z homed with PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) *** > (M851 Z0.00) Axis Z home_offset = 0.00 position_shift = 0.00 > home_offset[Z] = 0.00 current_position= X290.00 Y250.00 Z0.00 : <<< set_axis_is_at_home(Z) current_position= X290.00 Y250.00 Z0.00 : sync_plan_position current_position= X290.00 Y250.00 Z0.00 : > AFTER set_axis_is_at_home current_position= X290.00 Y250.00 Z0.00 : Probe::set_deployed deploy=0 no_return=0 >>> Probe::probe_specific_action X290.00 Y250.00 Z0.00 <<< Probe::probe_specific_action X290.00 Y250.00 Z0.00 >>> do_blocking_move_to X290.00 Y250.00 Z0.00 > X290.00 Y250.00 Z0.00 <<< do_blocking_move_to X290.00 Y250.00 Z0.00 <<< homeaxis(Z) <<< home_z_safely X290.00 Y250.00 Z0.00 current_position= X290.00 Y250.00 Z0.00 : sync_plan_position >>> do_move_after_z_homing X290.00 Y250.00 Z0.00 <<< do_move_after_z_homing X290.00 Y250.00 Z0.00 restore_feedrate_and_scaling: fr=66.67 100% <<< G28 X290.00 Y250.00 Z0.00 ```

The difference are the extra "ENDSTOP TRIGGERED planner fn" logs that I have added into the void Planner::endstop_triggered(const AxisEnum axis) function.

Meaning the issue is caused by the fact that the "re-bump" logic recieves endstop triggered immediately (as if they were buffered??). The probe itself is not triggered though, judging by its LED and checking the signal wire with multimeter.

@thinkyhead , @thisiskeithb , @ellensp I am afraid I cannot do much more here. I have tried to look into the endstop code but I don't have enough time to try to understand it in enough detail. Somebody who implemented it would be very appretiated.

github-actions[bot] commented 1 year ago

This issue has had no activity in the last 60 days. Please add a reply if you want to keep this issue active, otherwise it will be automatically closed within 10 days.

lukasradek commented 1 year ago

Still a problem.

github-actions[bot] commented 10 months ago

This issue has had no activity in the last 60 days. Please add a reply if you want to keep this issue active, otherwise it will be automatically closed within 10 days.

github-actions[bot] commented 8 months ago

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.