Tool Length Switch
-
I have added a tool length switch to my core xy much like voron 2.4 machines. I did this as I have never managed to get reliable and accurate first layers with induction probes alone (I print multi materials with heated chamber). Even with pinda v2 with temp compensation.
My question: I understood that with the tool length sensor I can eliminate the thermal drift problem I've been plagued with as the TLS is mechanical and fixed to the bed. In other words I thought that I could combine the induction probe bed mesh with the superior TLS based Z offset. Is this possible? Is this just a Klipper/Voron feature?
-
It is possible to do this and there are several different ways as well. For instance on my Voron 2.4 running RRF I use the tool height sensor as my Z end stop and my inductive probe is defined as the probe. You can also use multiple probes with the newer firmware. I believe 3.2.2 and newer you can use the "K" parameter in G31 and M558 commands to set up multiple probes.
-
@alex-cr Hmm... I do currently use the tool length sensor as endstop but perhaps I have implemented it wrong? Still seem to get variable first layers when operating at different temps eg abs to pla. I am suspecting firmware is still regarding the G28 Z probe home at the start of my bed.g. even though I do a G1 H1 Z home via switch afterwards. Here's my code...
; bed.g
; called to perform automatic bed compensation via G32
;
; generated by RepRapFirmware Configuration Tool v3.2.3 on Tue Jul 20 2021 13:11:51 GMT+0100 (British Summer Time)
;M561 ; clear any bed transform
;G28 ; home all axes;3 Pass auto X levelling
G28 XY ; home XY
G28 Z ;centre bed probe home Z;First pass
M558 H9
G30 P0 X80 Y150 Z-99999 ; probe near left leadscrew
G30 P1 X220 Y150 Z-99999 S2 ; probe near right leadscrew and calibrate 2 motors
;Second Pass
M558 H10
G30 P0 X10 Y150 Z-99999 ; probe near a leadscrew, half way along Y axis
G30 P1 X290 Y150 Z-99999 S2 ; probe near a leadscrew and calibrate 2 motors
;Third Pass
M558 H2
G30 P0 X290 Y150 Z-99999 ; probe near a leadscrew, half way along Y axis
G30 P1 X10 Y150 Z-99999 S2 ; probe near a leadscrew and calibrate 2 motorsG29 ; mesh probe the bed and enable compensation
M98 P"homez-switch.g" ;home z via switch againHere's my homez-switch.g.....
; homez-switch.g
; called to home the Z axis according to bed switch (only run after bed.g)G91 ; relative positioning
G1 H2 Z10 F6000 ; lift Z relative to current position
G90 ; absolute positioning
G1 X285.2 Y296.4 ; move to switch position
G1 H1 Z-450 F300 ; move Z until the endstop is triggered
G92 Z1.05 ; set Z position to axis minimum (higher number closer to bed)
G1 Z5 F2000
G1 X150 Y150 F20000 -
@bubblevisor said in Tool Length Switch:
I am suspecting firmware is still regarding the G28 Z probe home at the start of my bed.g. even though I do a G1 H1 Z home via switch afterwards. Here's my code...
You should be using the probe to set the Z position before the print unless you have the exact height set perfectly via the switch.
-
@phaedrux said in Tool Length Switch:
ou should be using the probe to set the Z position
I'm a little confused. I am trying to achieve a setup that ignores the induction probe z offset entirely and relies only on the tool length switch. Indeed the voron guys don't even bother accurately setting the induction probe trigger height in the config as they don't use it. The probe is just used to create the contour (delta z) map and the switch to set the global height. My goal is to avoid the heat drift problem with probes.
-
@phaedrux said in Tool Length Switch:
unless you have the exact height set perfectly via the switch.
-
So there is very little you can do to comp for different temperatures without having different code in some regard. For instance you could use variables to pick different offsets(or in your case, G92 values) based upon current temp.
Or you can have a temperature compensated probe in some way. These exist but can be pricey.
Are you actually using your other probe to build a mesh compensation? Is this probe height set perfectly?
-
@alex-cr Yes my tool length switch has an offset that perfectly sets the nozzle height hence the reason why I want the firmware to ignore any PINDA probe readings for Z offset.
I have now changed the way I home Z using only the tool switch. I am also defining the two sensors via M558 K command. Seems to be working....
; Configuration file for Duet WiFi (firmware version 2.03)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.2.3 on Tue Jul 20 2021 13:11:51 GMT+0100 (British Summer Time); General preferences
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"Saphire" ; set printer name
M669 K1 ; select CoreXY mode; Network
M552 S1 ; enable network
M586 P0 S1 ; enable HTTP
M586 P1 S0 ; disable FTP
M586 P2 S0 ; disable Telnet; Drives
M569 P0 S1 ; physical drive 0 goes forwards
M569 P4 S1 ; physical drive 4 goes forwards
M569 P2 S0 ; physical drive 2 goes forwards
M569 P3 S0 ; physical drive 3 goes forwards
M569 P1 S0
M584 X0 Y4 Z1:2 E3 ; set drive mappingM350 X128 Y128 Z128 E16 I0 ; configure microstepping without interpolation
M92 X640.00 Y640.00 Z3200.00:3200.00 E679.00 ; set steps per mm
M566 X1500.00 Y1500.00 Z1200.00:1200 E520.00 ; set maximum instantaneous speed changes (mm/min)
M203 X20000.00 Y20000.00 Z800.00:800.00 E70000.00 ; set maximum speeds (mm/min)
M201 X7000.00 Y7000.00 Z100.00:100.00 E4000.00 ; set accelerations (mm/s^2)
M906 X1100 Y1100 Z1100 E900 I30 ; set motor currents (mA) and motor idle factor in per cent
M84 S30 ; Set idle timeout; Axis Limits
M208 X0 Y0 Z0 S1 ; set axis minima
M208 X300 Y298 Z340 S0 ; set axis maxima
;M556 S100 X0 Y0 Z0:0:0 ; set skew x.xxmm on 100mm square x-y obtuse; Endstops
M574 X1 S1 P"xstop" ; configure active-high endstop for low end on X via pin !xstop
M574 Y1 S1 P"!ystop" ; configure active-high endstop for low end on Y via pin !ystop
M574 Z0 P"nil" ; No Z endstop; Z-Probe PINDA
M558 K0 P8 C"^zprobe.in" I1 H2 F1000 T6000 A20 S0.005 ; set Z probe type to effector and the dive height + speeds, max number of probes per point, tolerance(MM)
M308 S2 P"e1temp" A"PINDA" Y"thermistor" T100000 B3950 ; configure sensor 2 as thermistor on pin e1temp
G31 K0 P1000 X0 Y-30 Z0.28 H2 S27 T0.020 ; set Z probe trigger value, xy offset, z trigger height(higher=closer to bed)don't care, temp sensor number, reference temp, compensation coefficient mm/degree(higher more close when hot);Bed Levelling
M671 X-21:170 Y314:170 S25 ;leadscrew locations and max allowable deviation
M557 X10:300 Y1:290 S56 ; define mesh grid; Z Tool Length probe
M558 K1 P8 C"^zstop" T8000 F600 H2 A10 S0.005 R0.2 ;set second (K1) Z probe: pin in, travel speed to probe, probing speed, dive height, max number of probes, tolerance(MM), rest time
G31 K1 P500 X0 Y0 Z1.6 ;set second (K1) Z probe: trigger value (higher value = closer nozzle); Heaters
M308 S0 P"bedtemp" Y"thermistor" T100000 B3950 ; configure sensor 0 as thermistor on pin bedtemp
M950 H0 C"bedheat" T0 ; create bed heater output on bedheat and map it to sensor 0
M307 H0 B0 R1.028 C177.2 D6.82 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit
M140 H0 ; map heated bed to heater 0
M143 H0 S120 ; set temperature limit for heater 0 to 120C
M308 S1 P"e0temp" Y"thermistor" T100000 B3950 ; configure sensor 1 as thermistor on pin e0temp
M950 H1 C"e0heat" T1 ; create nozzle heater output on e0heat and map it to sensor 1
M307 H1 B0 R3.001 C201.0 D8.90 S1.00 V24.2 ; disable bang-bang mode for heater and set PWM limit
M143 H1 S280 ; set temperature limit for heater 1 to 280CM308 S3 A"Chamber" P"exp.thermistor3" Y"thermistor" T100000 B3950 ; configure sensor 3 as "thermistor" type on pin "thermistor3" (Henry added for chamber monitoring)
; Fans
M950 F0 C"fan0" Q500 ; create fan 0 on pin fan0 and set its frequency
M106 P0 S0 H-1 ; set fan 0 value. Thermostatic control is turned off
M950 F1 C"fan1" Q500 ; create fan 1 on pin fan1 and set its frequency
M106 P1 S0 H1 T45 ; set fan 1 value. Thermostatic control is turned on
M950 F2 C"fan2" Q500 ; create fan 2 on pin fan2 and set its frequency (Henry add chamber fan)
M106 P2 S0 H-1 C"Chamber fan" ; set fan 0 value. Thermostatic control is turned off;LED Lights
M950 P0 C"e1heat"
M42 P0 C"LEDs"; Tools
M563 P0 S"Dragon" D0 H1 F0:1 ; define tool 0
G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets
G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C; Custom settings are not defined
; Miscellaneous
M575 P1 S1 B57600 ; enable support for PanelDue
M911 S21 R22 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss
T0 ; select first tool -
@bubblevisor said in Tool Length Switch:
I want the firmware to ignore any PINDA probe readings for Z offset.
Well the heightmap is created with the probe, so it's a list of values showing the relative difference in height compared to the z0 point established by that probe. As long as your probe Z0 point and the switch Z0 point agree, you don't have an issue. Does that make sense?
@bubblevisor said in Tool Length Switch:
I have now changed the way I home Z using only the tool switch. I am also defining the two sensors via M558 K command. Seems to be working....
If it's working, that's the important thing. Can you also share your homing files?