protoloft / klipper_z_calibration

Klipper plugin for self-calibrating z-offset
GNU General Public License v3.0
1.03k stars 149 forks source link

[FR] Support for BLTouch #17

Open hawkeyexp opened 3 years ago

hawkeyexp commented 3 years ago

Hi, i tried your extra in knowledge of not tested with bltouch - all seems to work well but bltouch won't release pin to touch surface of endstop. Would it be possible to support the bltouch?

bmkahl commented 2 years ago

Is there any more information if a BLTouch will be supported by this plugin?

hawkeyexp commented 2 years ago

It would be great if a support is possible - i know the voron guys does net really like the BLTouch by thermal reasons, but my voron 2.4 is running since july 2021 without any thermal caused problems :-)

electroleon commented 2 years ago

I am not really sure how the BL Touch will work for this.

  1. The pin is not really rigid when retracted so nozzle probing will not be accurate
  2. The pin retracts higher than the nozzle, so you will effectively have a nozzle crash happen when you try to probe the BLTouch itself. So you would need a massive clearance around the nozzle probe to be able to have it work properly
hawkeyexp commented 2 years ago

In general it should work with a bltouch but the offset for the z-endstop needs to be replaced with the bltouch one an the calculations

TitusLabs commented 2 years ago

No, I'm sorry! A BLTouch would not work. It is impossible to measure the trigger point of the BLTouch to get everything in relations. For some use cases it might be sufficient to use a fixed offset for the BLTouch - but this would not be generally valid or even rock solid.

The BLTouch is a really nice idea to probe the bed - but only for open printers. In closed printers you get in trouble with higher temperatures. And this is not only because of the plastic pin on a hot print bed. There is also a metal clone out there with an IR trigger. But this would be much worse. You have the thermal expansion of the metal pin and changing trigger speeds of the electronics while getting hotter. This is why the simple dump switch is so unbeatable - believe it or not!!

TitusLabs commented 2 years ago

Ok, I thought about it again. So, it might be possible...

The difference in such a system is, that the nozzle is lower as the BLTouch.

But don't know how this would perform... And I cannot give any support on this. Is there someone who wants to try it?

hawkeyexp commented 2 years ago

I have solved the problem myselve and created and simple but perfect working solution which is now running since weeks on more than my single printer.

https://github.com/hawkeyexp/auto_offset_z

For calculation it is "easy" - probing endstop surface and bed surface and the diff is the general offset - additional the way the endstop switch needs for moving until triggering the switch (datasheet ~ 0.5mm) - for the last adjust until the switch really triggers i added a manual offset in the config section. On first print the nozzle is a bit higher than needed which can be adjusted by babystepping and this value which was needed must be written to the config as manual adjust - that's it!

ps: if interested we can talk about :-) i'm available in the voron/youprint/mainsail discord.

TitusLabs commented 2 years ago

Uh, I like it! So, you basically do it the other way around and define a switch_offset for the z endstop :open_mouth: I will have a look how I could integrate such a use case..

LeandroScovino commented 2 years ago

This would be amazing. I have a previously closed source firmware 3D printer from Sethi 3D here in Brazil. This has a piezo button switch outside the bed, comparable to Voron's Z Endstop and a IR/Mechanical touch (like BLTouch) on the extruder.

The original firmware first home on the piezo button, than hit the nozzle on the piezo, calculating the difference offset disregarding the bed.

A year ago, I've retrofitted this printer with a new MCU to use klipper, as it has 4 Z motors... and this week I started working on writing a plugin to calculate the offset. I believe @hawkeyexp got this working.

Congrats you both!

image

cpfarhood commented 2 years ago

I have a CR Touch which isn't the huge disaster in heated enclosures that the BL Touch is. Also already have a separate z-endstop (sexbolt) wired up and working.

TitusLabs commented 2 years ago

I know how the CR Touch works. The problem of all these solutions is that the electronics will also drift with increasing temperatures. So, the dump switch is still the best solution I can think of. But, I have to admit that not every printer is closed and reaches such high temperatures at the tool head.

Currently, I have no time for this topic..

AfroPsycho commented 1 year ago

What about this if you connect the alligator to the nozzle When nozzle touches to the metal surface it is going to act as a probe and clipper will know what is the zero point for nozzle And then bl touch might probe on the metal surface and somehow if we can calculate the difference That difference should be the z offset

TitusLabs commented 1 year ago

The question is, what do you want to do with it? This is certainly a good method to measure the offset of the BLTouch. Go for it!

The BLTouch has its limits. If the printer is enclosed and the print bed is over 100 degrees and the X-axis is a good 90 degrees, then a lot changes. The resistances and capacitances in the electronics change... and the offset shifts.

For most printers the BLTouch is great! The offset should not change much once it is calibrated. Only if you change the nozzle, you have to repeat the offset procedure...

I don't see something I can do here with this plugin regarding the BLTouch :thinking:

grigi commented 1 year ago

I have a custom cartesian IDEX with a single bltouch on the primary head. I just added a voron-style switch that the bltouch and both nozzles can reach.

The bltouch is very easy to actuate, so the microswitch will essentially be a static surface.

What I was hoping to do, is to only have to calibrate the voron-style nozzle switch actuation offset, and then use that to calculate the difference between the bed and each nozzle.

Because with multiple toolheads and FDM, you are significantly more sensitive to Z-offset errors than X/Y ones.

This should also take care of the drift on a BLTouch as the offset will be constant at the conditions of the time of measurement. (I have observed a drift of about 0.05mm, which isn't catastrophic, but enough to notice)

Is there any work I can do to help add this as a supported use case?

ameswarb commented 3 days ago

I was able to get this to work with my CR Touch with these modifications.

I am experiencing an issue however, and I'm not sure if it's caused by my changes.

With the script enabled, at around ~2 - 2.35mm (10 - 12 layers) of print height it stops properly lifting the Z-axis, causing excessive blobbing / zits for the next ~4.5 - 8mm. My 30mm calibration cubes where this issue is present are ~26.44mm tall.

Here's my potentially relevant blocks of printer config.

[stepper_z]
step_pin: PB0
dir_pin: PC5
enable_pin: !PB1
microsteps: 16
rotation_distance: 8
position_min: -3
position_max: 240
endstop_pin: PC2
position_endstop: 4.996

[tmc2209 stepper_z]
uart_pin: PC11
tx_pin: PC10
uart_address: 1
run_current: 0.580
hold_current: 0.500
stealthchop_threshold: 999999

[z_calibration]
nozzle_xy_position: 253, 117.5
switch_xy_position: 253,117.5
bed_xy_position: 117.5,117.5
switch_offset: 6.186
speed: 50.0
offset_margins: -6.0,6.0

[bltouch]
sensor_pin: ^PC14
control_pin: PA1
x_offset: -31.8
y_offset: -40.5
pin_up_reports_not_triggered: false

[bed_mesh]
speed: 120
horizontal_move_z: 15
mesh_min: 30, 20
mesh_max: 200, 195
probe_count: 9, 9
mesh_pps: 2, 3
algorithm: bicubic
bicubic_tension: 0.2
fade_start: 1
fade_end: 10
fade_target: 0

IMG_5355