BLTouch with Multiple Z Endstop

Basic Information:

Printer Model: Modified X-CF Pro
MCU / Printerboard: Manta M8P
Host / SBC: CB1
klippy_EZ.log (49.3 KB)

Describe your issue:

I have a BLTouch on my print head. My printhead is at the top of the machine. I have two Z-axis lead screws with one endstop switch installed on each. The switches are at the bottom of the machine. I have saved a bed mesh that was collected at heat soaked temperature, I perform Z_Tilt_Adjust at temperature, and applied the Z-offset at temperature.

I currently home against the switches and then raise ~300mm to start a print. My PRINT_START script includes clearing the prior bed mesh, performing a Z-tilt, loading a bed mesh, and then re-homing. I notice that traversing down 300 mm and then raising back up 300 mm is causing me first layer consistency problems, despite both Z-motors being energized the entire time and no obvious skipped steps.

My BLTouch probe range is 0.00622 mm, the standard deviation is 0.00186 mm. So I modified my config file to home against the BLTouch. This would work fine but for the existence of my two Z-axis endstop switches. Since I can have only one endstop_pin defined and a [safe_z_home] includes a 10mm z-hop I end up crashing mechanically against the switches when I power up my machine since the bed rests at the bottom when the motors are de-energized.

I’ve attempted a few hacks of the multi-pin functionality to get Klipper to recognize my Z switches to no avail.

I’d like to kindly request functionality for multiple endstop pins per axis. Then I could home against the switches, Z-tilt against the BLTouch, and start my print based on a Z-offset defined by my BLTouch as well.

My config files are located here: GitHub - erikzweigle/qidi_X_CF_Pro: Automated Klipper back ups

Hello @erikzweigle !

Either you home againt the endswitches or the BLtouch.

When you home to the first, and they are aligned properly, you usually do not need Z_Tilt_Adjust.

When you home with the BLtouch, safe home usually goes to the middle of the bed.

I think Z_Tilt_Adjust exists exactly because people have multiple Z-axis lead screws. So I do not agree that I do not need Z_Tilt_Adjust. I think it is accepted also that longer distances accumulate more tolerances. Since I need to travel 300mm down then 300mm up that 600mm travel distance is spoiling the Z-offset by even a single 0.10 mm that doesn’t need to occur. It makes a lot of sense to allow the BLTouch to define the Z-offset to start a print while retaining separate Z endstop switches at a far away distance from the printhead.

I have two independent z axes and I have two endstops.
They are exactly in the same height.
I’ve tried Z_Tilt with no further improvement.
So I leave it away.

BTW: The bed size with that printer is 400mm x 400mm

Ok. I will try disabling Z_Tilt_Adjust.

The problem persists. With Z_Tilt_Adjust disabled my z-offset still varies across prints. I need to babysit the first layer and restart manually tuning my printer.cfg file by +/- 0.1 mm each job.

What is the Z-axis height?

Also 400mm.

The lead screws used in 3d printers are generally low quality. The longer they are the bigger the issues can become. In CNC mills and lathes even average quality ball screws may see a change in the amount of movement depending where the nut is on the screw, the software used for machining usually has a screw mapping feature to adjust for that. It comes down to manufacturing choices IE: machining vs precision grinding (expensive).

With two screws on same axis the above issue can be compounded. You can test the amount the 2 screws move at various heights to see if they are moving the same amount using an indicator. I test in 50mm height increments. I always check this on builds.

I have dual Z lead screws on my printer and had the above screw issue with the first pair I received so I replaced them. I don’t use the Z_Tilt_Adjust feature and just use probe for z end stop. The key was I made simple adjustable stops at the bottom for when motors are powered down to keep it level. This has worked very well for me.

Sounds like you mechanically shim one Z-axis to make it identical gap to the other.

Z_Tilt_Adjust does this dynamically at each print to a resolution of 0.005 mm.

I found my problem. After commenting out Z_hop:10 the bed did not attempt to move down and crash with my switches. The bed immediately started moving up towards the BLTouch. And after contacting the BLTouch the bed did move down a few mm before moving to next probe XY position so the BLTouch probe did not get damaged. This resolved my Z Offset variability.

Now the accumulated error is only across the very short 2.2mm distance between BLTouch & nozzle. Instead of the 600mm distance between nozzle & bed when homing against the microswitches.

I still think a Min & Max endstop position makes sense for the Z-axis. For instance, in a power loss recovery scenario I cannot rely on my BLTouch to set the correct Z-height. I’d have to scrap the print and start over again.

Glad you found a solution. Yes the mechanical stops use fine pitch screws to set resting point when motors power off. My END_PRINT macro moves it close to them. I agree a min and max end stop for Z would be a useful.

I have same issue with print recovery since I use the probe as z end stop. I don’t do crazy long prints so really hasn’t been a big issue for me. One day I will mess around with finding a solution.