IDEX - How to Set Z Offsets?
-
I have my IDEX RatRig Vcore 3.1 where i recently made minor changes to the print carriages. My Toolhead 1 right carriage is about 0.5mm higher than the Toolhead 0 left carriage. For the last few months i had set the X, Y, Z offsets correctly so that each nozzle tip aligned properly. but now that i made this hardware change i am unable to set things correctly.
when i set Z of the 2nd toolhead as a negative 0.74mm, the physical nozzle is restricted from going lower than +0.74mm, and when i set the Z to positive 0.74mm, the physical nozzle goes even further away from the bed in the wrong direction. it is restricted from ever going low enough to the same plane as the left primary toolhead nozzle.
what is the intended method or setting to align IDEX toolheads in the Z axis? is it related to the G10 line using mode L20 instead of L2?
config.g
; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"V-Core3" ; set printer name M669 K11 Y1:-1:0:-1 ; Dual Markforged Kinematics https://forum.duet3d.com/topic/7796/haq-xy/125 https://forum.duet3d.com/topic/21021/dual-markforged-kinematics?_=1672244913067 ;M669 K1 X1:0:0:0 Y1:-1:0:-1 Z0:0:1:0 U0:0:0:1; Matrix mapping for Axis - X:Y:Z:U G21 ; Set Units to Millimeters ; Network ;M552 S2 ; enable network ;M586 P0 S1 ; enable HTTP ;M586 P1 S0 ; disable FTP ;M586 P2 S0 ; disable Telnet ; Network M552 S2 ; enable network, note P0.0.0.0 sets auto DHCP M553 P255.255.255.0 ; set subnet mask M554 P192.168.1.20 ; set gateway M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet G4 S2 ; wait for expansion boards to start ; Drives M569 P0.0 S0 D2 ; Left Z physical drive 0.0 goes forwards M569 P0.1 S0 D2 ; Rear Z physical drive 0.1 goes forwards M569 P0.2 S0 D2 ; Right Z physical drive 0.2 goes forwards M569 P0.3 S1 D2 ; Right U toolhead drive 0.3 goes forwards M569 P0.4 S1 D2 ; Left X toolhead drive 0.4 goes forwards M569 P0.5 S0 D2 ; Left Y drive 0.5 goes forwards M569 P0.6 S1 D2 ; Right Y drive 0.6 goes reverse M569 P20.0 S1 D2 ; Extruder physical drive 20.0 goes forwards Toolboard 1LC M569 P21.0 S1 D2 ; Extruder physical drive 21.0 goes forwards Toolboard 1LC M569 P1.0 S0 D2 ; Extruder physical drive 1.0 goes forwards Expansion 3HC M569 P1.1 S0 D2 ; Extruder physical drive 1.1 goes forwards Expansion 3HC M569 P1.2 S1 D2 ; Extruder physical drive 1.2 goes forwards Expansion 3HC M584 Z0.0:0.1:0.2 Y0.5:0.6 X0.4 U0.3 E20.0:21.0:1.0:1.1 ; set drive mapping M350 U16 X16 Y16 Z16 E16:16:16:16 I1 ; configure microstepping with interpolation M92 U80.0 X80.00 Y80.00 Z800.00 E690:690:690:690 ; set steps per mm M906 U2000 X2000 Y2000 Z1800 E1000:1000:1000:1000 I30 ; set motor currents (mA) and motor idle factor in per cent -- safe for Duet 3 mini 5+ M84 S30 ; Set idle timeout ;M98 P"0:/sys/setspeeds.g" ; Set speed and acceleration M566 U500.00 X500.00 Y500.00 Z60.00 E300:300:300:300 P1 ;E300:300 P1 ;X1500.00 Y1500.00 Z6.00 E300 P1 ;E120.00 P1 ; set maximum instantaneous speed changes (mm/min) M203 U30000.00 X30000.00 Y30000.00 Z1000.00 E7200:7200:7200:7200 ;E7200:3600 ;E3600.00 ; set maximum speeds (mm/min) M201 U10000.00 X10000.00 Y10000.00 Z100.00 E3000:3000:3000:3000 ;E10000:3600 ;E3600.00 ; set accelerations (mm/s^2) M207 S0.6 F7200 Z0.2 ; firmware retraction orbiter 2.0 ; Axis Limits M208 X-70 U0 Y0 Z0 S1 ; set axis minima M208 X300 U380 Y306 Z300 S0 ; X310 ; set axis maxima ;M208 X-70:310 Y0:308 U0:308 Z0:300 ; Endstops M574 X1 S1 P"20.io2.in" ; configure active high endstops Toolhead 1 X low end M574 U2 S1 P"21.io2.in" ; configure active high endstops Toolhead 2 U high end M574 Y2 S1 P"io2.in" ; configure active high endstops Y. IO0 and IO1 also are UART, so do not put endstops on them, use them elsewhere to free up UART. M574 Z1 S2 M671 X-4.5:155:304.5 Y-4.5:305:-4.5 S5 ; define positions of Z leadscrews or bed levelling screws ;M557 X30:280 Y20:300 P5 ; define 5x5 mesh grid M557 X30:280 Y20:270 P5 ; Heaters M308 S0 P"temp0" Y"thermistor" T100000 B3950 A"Keenevo 600W Bed" ; configure sensor 0 as thermistor on pin temp0 M950 H0 C"out0" T0 Q10 ; Define Heater0 as the heated bed, bind to Sensor0 M140 H0 P0 ; Define Heated Bed M307 H0 R0.602 K0.401:0.000 D2.44 E1.35 S1.00 B0 ; PID Tuning for Heater0, Heated Bed (100C) M143 H0 S140 T0 A0 ; Set temperature limit for Heater0 to 120C M308 S1 P"20.temp0" Y"thermistor" T100000 B4725 C7.060000e-8 A"Slice Hotend 0" ;Slice Engineering 300C thermistor, settings are online M950 H1 C"20.out0" T1 Q100 ; Define Heater1 as Extruder0 heater, bind to Sensor1 M307 H1 R2.808 K0.368:0.000 D4.56 E1.35 S1.00 B0 V23.8 ; PID Tuning for Heater1, Extruder0 (240C) M143 H1 S325 T1 A0 ; Set temperature limit for heater 1 to 285C M308 S2 P"temp1" Y"thermistor" T100000 B3950 C7.060000e-8 A"Chamber" ; configure sensor 2 as thermistor on pin temp1 M950 H2 C"out1" T2 ;Q10 ; create chamber heater output on out1 and map it to sensor 2 M307 H2 R0.01 K0.200:0.000 D60 E1.35 S1.00 B1 ; enable bang-bang mode for the chamber heater and set PWM limit M141 H2 ; map chamber to heater 2 M143 H2 S120 T2 A0 ; set temperature limit for heater 2 to 60C M308 S3 P"21.temp0" Y"pt1000" A"Slice Hotend 1" ;Slice Engineering RTD PT1000 450C, settings are online M950 H3 C"21.out0" T3 Q100 ; Define Heater1 as Extruder0 heater, bind to Sensor1 M307 H3 R2.808 K0.368:0.000 D4.56 E1.35 S1.00 B0 V23.8 ; PID Tuning for Heater1, Extruder0 (240C) M143 H3 S425 T3 A0 ; S325 ; Set temperature limit for heater 1 to 285C M308 S4 P"20.temp1" Y"thermistor" A"Cooling Block" T100000 B3950 C7.060000e-8 ; Define Sensor as Chamber temperature M308 S5 Y"drivers" A"4028 Power" ; 4028 power using spare heater M308 S6 Y"mcu-temp" A"Mini 5+ MCU" ; Define Sensor3 as the integrated MCU temperature sensor M308 S7 Y"drivers" A"Mini 5+ TMC Drivers" ; Define Sensor4 as the TMC overheat sensor M308 S8 Y"mcu-temp" P"20.dummy" A"Toolboard0 MCU" M308 S9 Y"drivers" P"20.dummy" A"1LC0 Stepper" M308 S10 Y"mcu-temp" P"21.dummy" A"Toolboard1 MCU" M308 S11 Y"drivers" P"21.dummy" A"1LC1 Stepper" M308 S12 Y"mcu-temp" P"1.dummy" A"3HC MCU" M308 S13 Y"drivers" P"1.dummy" A"3HC TMC Drivers" M308 S14 P"temp2" Y"thermistor" T100000 B3950 C7.060000e-8 A"Orbiter Motor" ; configure sensor 9 as thermistor on pin temp2 M308 S15 P"spi.cs1" Y"thermocouple-max31856" K"K" A"TC0 Chamber Heater"; define temperature sensor number 10 as a K Type thermocouple on the first port of a temperature daughter board plugged into the expansion board with CAN bus address 3. M308 S16 P"spi.cs2" Y"thermocouple-max31856" K"K" A"TC1 Chamber Fins"; define temperature sensor number11 as a T Type thermocouple on the first port of a temperature daughter board plugged into the expansion board with CAN bus address 3. ;M308 S17 P"21.temp1" Y"thermistor" T4500000 B5315 C3.219245e-9 A"BLUE MELLOW" ; blue Mellow high temp thermistor (toolboard)https://duet3d.dozuki.com/Wiki/Connecting_thermistors_or_PT1000_temperature_sensors#Section_RepRapFirmware_3_x ;M308 S17 P"21.temp1" Y"pt1000" T500000 B4666 C1.117125e-7 A"WHITE MELLOW" ; white Mellow high temp pt1000 (toolboard)https://duet3d.dozuki.com/Wiki/Connecting_thermistors_or_PT1000_temperature_sensors#Section_RepRapFirmware_3_x ; Fans M950 H4 C"!out2" T2 Q10 ;H2 ; Define Heater2 as the 4028 fan power, bind to Sensor3 M143 H4 P2 S200 A0 ; Needed M143 to set max temp so the graph scaled correctly M950 F0 C"!20.out1+out1.tach" Q25000 ;Q500 ; create fan 0 on pin out4 and set its frequency M106 P0 C"T0 Layer Fan" L0.0 X1.0 S0 H-1 B0.1 ; set fan 0 name and value. Thermostatic control is turned off M950 F1 C"20.out2+out2.tach" Q500 ; Fan 1 uses out3, and using out3.tach as a tacho input M106 P1 C"T0 Hotend Fan" S0 H1 T45 ; For M106 the H is sensor # and NOT heater #. set fan 1 name and value. Thermostatic control turned on for Hotend M950 F2 C"out5" Q500 ; create fan 1 on pin out5 and set its frequency M106 P2 C"Mini 5+ Board Fan" S0 H5:6:7 T45 ; set fan 1 name and value. Thermostatic control turned on for Hotend M950 F3 C"!out3+out3.tach" Q500 ; Chamber Heater Fan Noctua NF-F12 Industrial M106 P3 C"Chamber Heater Fan" H15 T30 ; S0.3 L0.3 X0.6 B0.1 T30:40 ; set fan 1 name and value. Thermostatic control turned on for Hotend. M950 F4 C"out6" Q500 ; create fan 4 for Water Cooling 12V Fan 4 on pin out4 and set its frequency M106 P4 C"Radiator Cooling Fan" S0 H4 T35 ; set fan 1 name and value. Thermostatic control turned on for liquid cooling hotend M950 F5 C"out4+out4.tach" Q25000 ;Q500 ; create fan 4 for Water Cooling 12V Fan 4 on pin out4 and set its frequency M106 P5 C"Liquid Cooling Pump" L0.0 X1.0 S0 H4 T15 ;T20 ; set fan 1 name and value. Thermostatic control turned on for liquid cooling hotend ;M106 P5 C"Liquid Cooling Pump" S0 H4 T20 ; set fan 1 name and value. Thermostatic control turned on for liquid cooling hotend M950 F6 C"!21.out1+out1.tach" Q25000 ;Q500 ; create fan 6 on pin out4 and set its frequency M106 P6 C"T1 Layer Fan" L0.0 X1.0 S0 H-1 B0.1 ; set fan 6 name and value. Thermostatic control is turned off M950 F7 C"21.out2+out2.tach" Q500 ; Fan 7 uses out3, and using out3.tach as a tacho input M106 P7 C"T1 Hotend Fan" S0 H3 T45 ; set fan 7 name and value. Thermostatic control turned on for Hotend M950 F8 C"1.out6" Q500 ; create fan 1 on pin out5 and set its frequency M106 P8 C"3HC Board Fan" S0 H12:13 T45 ; set fan 1 name and value. Thermostatic control turned on for Hotend ; Tool 0 X Axis M563 P0 D0 H1 X0 F0 S"Mosquito Mag Liquid" ; define tool 0 G10 P0 X0 Y0 Z0 S210 R175 ; set tool 0 axis offsets, set initial tool 0 active 60C and standby temperatures to 0C ; Tool 1 U Axis M563 P1 D1 H3 X3 F6 S"Mosquito Mag Air" ; define tool 0 G10 L1 P1 U-2.14 X0 Y2.64 Z+0.74 S210 R175 ; set tool 1 axis offsets, set initial tool 1 active 60C and standby temperatures to 0C ; Tool 2-- Toolhead 2 with ROME 1 M563 P2 D1:2 H3 X3 F6 S"ROME 1" ; tool 2 uses both extruders and hot end heaters, maps X to both X and U, and uses both print cooling fans G10 L1 P2 U-2.14 X0 Y2.64 Z+0.74 S210 R175 ; set tool 0 axis offsets, set initial tool 0 active 60C and standby temperatures to 0C M567 P2 E1:1 ; set mix ratio 100% on both extruders for copy mode ; Tool 3-- Toolhead 2 with ROME 2 M563 P3 D1:3 H3 X3 F6 S"ROME 2" ; tool 2 uses both extruders and hot end heaters, maps X to both X and U, and uses both print cooling fans G10 L1 P3 U-2.14 X0 Y2.64 Z+0.74 S210 R175 ; set tool 0 axis offsets, set initial tool 0 active 60C and standby temperatures to 0C M567 P3 E1:1 ; set mix ratio 100% on both extruders for copy mode ; Tool 4-- copy mode ;M563 P4 D0:1 H1:3 X0:3 F0:6 S"copy mode" ; tool 2 uses both extruders and hot end heaters, maps X to both X and U, and uses both print cooling fans ;G10 P4 U-77.5 X77.5 Y0 S210 R175 ; set tool offsets and temperatures for tool 2 ;M567 P4 E1:1 ; set mix ratio 100% on both extruders for copy mode ; Tool 5-- mirror mode ;M563 P5 D0:1 H1:3 X0:3 F0:6 S"mirror mode" ; tool for mirror mode ;G10 P5 U-77.5 X77.5 Y0 S210 R175 ; tool offset for mirror mode (flipped X offset) ;M567 P5 E1:1 ; set mix ratio 100% on both extruders for mirror mode ; Z-Probe Euclid Probe ;M558 P5 C"20.io0.in" H5 F400 T5000 ; set Z probe type to unmodulated and the dive height + speeds M558 P8 C"^20.io0.in" H8 F400 T9000 A1 ; S0.01 ; set Z probe type to unmodulated and the dive height + speeds G31 P1000 X-28 Y-20 Z9.21 ; Z8.86 ; K0 ; set Z probe trigger value, offset and trigger height, more Z means closer to the bed ;; BLTouch ; M950 S0 C"io7.out" ; Create a servo pin on io7 ; M558 P9 C"io7.in" H5 F240 T10800 A5 ; set Z probe type to unmodulated and the dive height + speeds ; G31 P25 X-28.00 Y-13.00 Z0.78 ; set Z probe trigger value, offset and trigger height, more Z means closer to the bed ;Accelerometer M955 P20.0 I14 ;Input Shaper M593 P"zvdd" F31 ; for 10k acceleration ;M593 P"mzv" F42.5 ; for 15k acceleration ;Filament Sensor0 ;M591 D0 P3 C"20.io1.in" S1 ;M591 D0 L27 R10:190 ;ROME Filament Sensor0 ;M591 D2 P1 C"21.io0.in" S1 ;M591 D2 L27 R10:190 ;M574 U2 S1 P"21.io0.in" ; configure active high endstops Toolhead 2 ROME toolhead filament sensor ;M577 wait until endstop is triggered. Does equivalent exist for a general IO sensor? M950 J0 C"^!21.io0.in" ;PanelDue 5i M575 P1 S1 B57600 ;NeoPixels x3 M150 X3 Q4000000 ;R128 U128 B128 P128 S2 F0 M150 X3 R255 U255 B255 W255 P255 S2 F0 ; display led ; Custom settings G29 S1 M572 D0:1 S0.065 ; set Pressure Advance K-factor M501 M376 H3 ;M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss global daemonLoop = true ; init filament sensor error global variables if !exists(global.filamentTimestamp) global filamentCounter = 0 global filamentTimestamp = state.Uptime ; init print time logging if !exists(global.runtime) M98 P"runtime.g" ; init LED variables if !exists(global.warmUp) global warmUp = false ; Select default tool M404 N1.75 ; Define filament diameter for print monitor T0
-
@RogerPodacter to clarify, basically it appears that my G10 offset values are completely ignored for the U carriage right 2nd Toolhead. whether i set positive Z , negative Z, small or large value, it is always ignored and the U carriage is 0.5mm higher than the X carriage. i tried searching the forum but all similar posts dont seem to actually help make a difference when i attempt solutions.
-
@RogerPodacter this sounds like the same issue as in this thread https://forum.duet3d.com/topic/32245/idex-right-head-z-adjustment-using-g10
By measuring off the shorter tool, you’re trying to go below Z0 with the second longer tool. I’ll check with @dc42 if there’s any other reason Z offsets are not being applied.Ian
-
@droftarts ok yes this is exactly what is going on, and after reading so many threads on this topic, i think i finally understand. it appears for toolchangers or IDEX machines, there is a limitation of which Head Reference Point HRP point you chose, and you should always select the "shortest" tool as your zero point. Unless i am misunderstanding, but this could be added to the documentation and would make an enormous improvement for the offset parameters. or at least add it as a footnote? apologies if its already stated and i just missed it.
EDIT: i am attempting these different methods:
-
set my Euclid Klicky probe G31 X0 Y0 Z0 as the HRP, then set T0 and T1 offsets accordingly.
G31 X0 Y0 Z0
G10 P0 X28 Y20 Z-9.21
G10 P1 X28 Y20 Z-8.81 -
Set my Z probe with its true offsets:
G31 X-28 Y-20 Z9.21
G10 P0 X0 Y0 Z-0.4
G10 P1 X0 Y0 Z0 -
Compensate my true Z offset by 1mm to encompass both nozzle heights
G31 X-28 Y-20 Z8.21
G10 P0 X0 Y0 Z-1.40
G10 P1 X0 Y0 Z-1.00
none of these cases seem to work correctly for me, and i'm always stuck with the 2nd carriage Z offset being "ignored" in the negative direction. the shorter nozzle just can never go low enough to the bed.
-
-
@RogerPodacter That's odd, I would expect the second one of those to work. What firmware version are you running, on what hardware? Or just M115 output.
Ian
-
@droftarts i just modified my post to add a 3rd condition i attempted, but it still didnt work. what is happening is that once the software registers the Z trigger during probing, in all cases it simply ignores any offset going below that physical actual probe point it registered. so even if i select my HRP as the shortest nozzle, it is still ignored and restricted from going in the negative direction as an offset.
the only method i havent yet tried is making the U axis have a -0.44mm offset using the M208 command. but this feels so wrong to me for some reason.
here are my outputs:
5/12/2023, 7:52:49 AM M115 FIRMWARE_NAME: RepRapFirmware for Duet 3 Mini 5+ FIRMWARE_VERSION: 3.4.2 ELECTRONICS: Duet 3 Mini5plus WiFi FIRMWARE_DATE: 2022-09-13 15:14:33
I have 2 toolboards 1LC and an expansion board 3HC but i dont think those have any impact on this issue.
-
@RogerPodacter said in IDEX - How to Set Z Offsets?:
set my Euclid Klicky probe G31 X0 Y0 Z0 as the HRP, then set T0 and T1 offsets accordingly.
G31 X0 Y0 Z0
G10 P0 X28 Y20 Z-9.21
G10 P1 X28 Y20 Z-8.81If the Z offsets are negative, that means the nozzles are lower than the klicky probe. Is that right? If so, how do you probe without the nozzles hitting the bed before the probe?
-
PS - a possible source of confusion is that for historical reasons the G31 Z parameter is the trigger height of the probe, i.e the height of the HRP when the probe triggers. This means that the G31 Z parameter is in effect the negative of the Z offset of the probe; whereas the G31 X and Y parameters are positive offsets.
-
@dc42
UPDATED
i actually already tried both positive and negative versions of those offsets with no success. so i dunno what to think anymore.EDIT: to confirm, after trying both positive and negative numbers, the behior remains unchanged. what is happening is that phyiscally the shorter toolhead 2 simply will not go lower, and any offset applied from G10 either positive or negative, it simply zeros the Z height displayed in DWC to be that tool's offset value, but physically the nozzle never can go lower and reach the bed. unless i'm doing something wrong.
-
@RogerPodacter i ultimately fixed my issue by using method 3. The G31 must be manually compensated to artificially add height to the Z offset. Since i have the Z probe on the left carriage, but the right carriage is the shortest, i had to artifically add that difference to the G31 command.
G31 Z9.21 plus 0.5mm = G31 Z9.71
Once this is done, now i get success with the following:
Compensate my true Z offset by 0.5mm to encompass both nozzle heights
G31 X-28 Y-20 Z8.71
G10 P0 X0 Y0 Z-0.40
G10 P1 X0 Y0 Z0.00I think updating the documentation with a footnote of some type might greatly help people with Z offset issues.
Another way to think of this is the HRP should always be set to the shortest toolhead nozzle, even if the Z probe is on a different toolhead, because the firmware limits negative direction offsets, even if you set it in the G10 command.
Also one risk with this method is that when manually moving the left carriage you have the ability to run the nozzle into the bed by 0.4mm (or whatever your difference height is for your setup). so just need to be mindful of this.
-
@RogerPodacter thanks for replying with your working setup. I was going to try and test this on Monday. I’ll add a section on Z offsets to the documentation
Ian