Voron 2.4 Klicky Mesh Leveling and Z Offset
-
Hi All, another problem with the large scale voron
First off here is the machine spec
Heavily modified Voron 2.4 CoreXY design to increase build volume to approx 450mm Cubed (and a few other things)
20mm Linear rails all round (yes I know thats overkill)
Duet2 Wifi & Duex5 expansion board
Paneldue 7i
4 x Nema 23 Z motors
2 x Nema 17 for A/B Drive
1 x E3D Hermes bowden extruder (now known as Hemera)
E3D V6 hotend with modified Stealthburner
Klicky Probemains powered 1000w Silicone bed heater and SSR with cast aluminium 8mm plate bed and 6mm glass
I am running :
Board: Duet 2 WiFi (2WiFi)
Firmware: RepRapFirmware for Duet 2 WiFi/Ethernet 3.4.6-rc.1 (2023-07-13)
Duet WiFi Server Version: 1.27
Duet Web Control 3.4.5So my problem is probably down to understanding, Ive read a lot of posts here covering klicky and probing / mesh bed compensation but im still at a loss so here goes:
the printer homes correctly (and all four z switches level the gantry) I have probing working, the print head deploys and collects the klicky probe and runs a mesh scan correctly and generates a hightmap.csv that has the correct values in it (at least they are not all zero's anyway) so all the core functions are working as expected.
What I am trying to understand is how to apply the z offset to the tool head that in turn has the required compensation applied to it from the bed mesh scan. I have read that the compensation is applied to the offset but no matter what I do the head is always about 3mm off the printing surface when it starts to print. running a M851 shows the correct z probe offset is applied (after the initial probe)
The klicky probe is about 4mm lower than the actual print nozzle so I need to set that difference somewhere but for the life of me I cannot work out where - everywhere I have tried seems to make no difference
the G10 P0 X0 Y0 Z3 ; tool offset line below seems to have no effect and was set to z0My Config.g looks like this:
;; system and network -------------------------------------- M111 S0 ; Debug off M550 PChaos3DFDM ; Machine name and Netbios name (can be anything you like) M551 Preprap ; Machine password (used for FTP) M552 S1 ; start network module (must have been configured first with M587) M586 P2 S1 T0 ; enable telnet M586 P1 S1 T0 ; enable ftp M555 P2 ; Set output to look like Marlin G21 ; Work in millimetres G90 ; Send absolute coordinates... M83 ; ...but relative extruder moves ;; geometry ------------------------------------------------ M669 K1 ; corexy mode M208 X0 Y0 Z0 S1. ; S1 = set axes minima M208 X460 Y400 Z420 S0 ; S0 = set axes maxima ;; velocity, acceleration, and current settings are in these macros M98 P"/macros/drive/xy_fullcurrent.g" M98 P"/macros/drive/z_fullcurrent.g" M98 P"/macros/drive/e_fullcurrent.g" ;; firmware retraction ------------------------------------- ;; Choose one as your default: ;M98 P"/macros/retraction/quiet_nozhop.g ;M98 P"/macros/retraction/quiet_zhop.g M98 P"/macros/retraction/pa_nozhop.g" ;M98 P"/macros/retraction/pa_zhop.g" ; drive --------------------------------------------------- ; ----+---- Z-Drives ; | 6 | 7 | ; ----+---- ; | 5 | 8 | ; ----+---- ; Front M584 X0 Y1 Z5:6:7:8 E3 ; motor bindings M569 P0 S0 ; X motor direction M569 P1 S0 ; Y motor direction M569 P3 S1 ; E0 motor direction M569 P5 S0 ; Z0 motor direction M569 P6 S1 ; Z1 motor direction M569 P7 S0 ; Z2 motor direction M569 P8 S1 ; Z3 motor direction ; endstops M574 X2 S1 P"!xstop" ; X max active high endstop switch M574 Y2 S1 P"!ystop" ; Y max active high endstop switch M574 Z2 S1 P"!duex.e2stop+!duex.e3stop+!duex.e4stop+!duex.e5stop" ; Z max active high endstop switch per z motor ; Motor steps per mm M350 X16 Y16 Z16 E16 I1 ; Use 1/16 microstepping with interpolation everywhere M92 X160 Y160 Z400 ; Set XYZ steps per mm (1.8deg motors & 0.9 for x/y) ;M92 X80 Y80 Z400 ; Set XYZ steps per mm (1.8deg motors) ;M92 X160 Y160 Z800 ; Set XYZ steps per mm (0.9deg motors) M92 E390 ; Set Extruder steps per mm (Hermes) M350 Z16 I0 ; disable Z interpolation ; Drive currents M906 X1200 Y1200 Z2800 E1000 ; XYZ and E current M906 I30 ; Idle current percentage M84 S120 ; Idle timeout ; Accelerations and speed M566 X900 Y900 Z60 E8000 ; Set maximum instantaneous speed changes (mm/min) M203 X18000 Y18000 Z3000 E15000 ; Set maximum speeds (mm/min) M201 X2000 Y2000 Z250 E1800 ; Set maximum accelerations (mm/s^2) M204 P1500 T2000 ; Set printing acceleration and travel accelerations ;M84 S3600 ; motor idle timeout ; Bed leveling params M671 X-46:-46:345:345 Y9:368:368:9 S20 ; Z leadscrews positions M557 X50:410 Y50:350 P4;S50 ; Bed mesh grid ; thermal section ---------------------------------------------- M308 S3 Y"mcu-temp" A"Board" ; Board thermal sensor M912 P0 S-8 ; MCU tempurature sensor correction (subtract 8°K) M308 S11 Y"drivers" A"Duet stepper drivers" ; defines sensor 11 as stepper driver temperature sensor M308 S12 Y"drivers-duex" A"Duex stepper drivers" ; for Duet 2 WiFi/Ethernet with DueX2/5, defines sensor 12 as DueX2/5 stepper driver temps ;Bed heater single thermistor setup M308 S0 P"bedtemp" Y"thermistor" T100000 B3950 A"Bed" ; configure sensor 0 as thermistor on pin temp0 ;M308 S0 P"bedtemp" Y"thermistor" A"Bed Pad" ; configure sensor 0 as thermistor on pin temp0 M950 H0 C"bedheat" T0 ; create bed heater output on out0 and map it to sensor 0 M140 P0 H0 ; Mark heater h0 as bed heater (for DWC) M143 H0 S120 ; set temperature limit for heater 0 to 120C M307 H0 B0 S0.6 ; disable bang-bang mode for the bed heater and set PWM limit ;Bed heater dual thermistor setup ;M308 S0 P"bedtemp" Y"thermistor" T100000 B3950 A"Bed Pad" ; configure sensor 0 as thermistor on pin bedtemp (pad sensor) ;M308 S2 P"e1temp" Y"thermistor" T100000 B3950 A"Bed Plate" ; configure sensor 2 as thermistor on pin e1temp (plate sensor) ;M950 H0 C"bedheat" T2 Q10 ; create bed heater output on out0 and map it to sensor 2 (plate sensor). Set PWM frequency to 10Hz ;M140 P0 H0 ; Mark heater H0 as bed heater (for DWC) ;M143 H0 P1 T0 A2 S115 C0 ; Regulate (A2) bed heater (H0) to have pad sensor (T0) below 110°C. Use Heater monitor 1 for it ;M143 H0 P2 T0 A1 S125 C0 ; Shut off (A1) bed heater (H0) if pad sensor (T0) exceeds 120°C. Use Heater monitor 2 for it;M143 H0 S120 ; Set bed heater max temperature to 120°C, use implict monitor 0 which is implicitly configured for heater fault ;M307 H0 B1 S0.6 ; Enable Bang Bang mode and set PWM to 60% to avoid warping ;HotEnd M308 S1 P"e0temp" Y"thermistor" T100000 B4725 C7.060000e-8 A"Hotend" ; configure sensor 1 as thermistor (E3D V6 standard) M950 H1 C"e0heat" T1 ; create nozzle heater output on e0heat and map it to sensor 1 ;M307 H1 B0 S1.00 ; disable bang-bang mode for the nozzle heater and set PWM limit M143 H1 S300 ; set temperature limit for heater 1 to 300°C ;Chamber sensor (DHT22) ;M308 S7 P"spi.cs6" Y"dht22" A"Chamber Temp" ; define DHT22 temperature sensor ;M308 S8 P"S7.1" Y"dhthumidity" A"Chamber Hum[%]" ; Attach DHT22 humidity sensor to secondary output of temperature senso ; fans ---------------------------------------------------- ; part cooler M950 F0 C"fan0" Q20 ; part cooler, set to 20Hz PWM M106 P0 C"PartCooler" ; Name it "PartCooler" ;Hot End M950 F1 C"fan1" ; hotend fan, set to 20Hz PWM M106 P1 T60 H1 C"ToolFan" ; attach hotend fan to heater 1 and set activation temperature to 60°C ; controller / electronics fan M950 F2 C"duex.fan8" Q20 ; electronics compartment fan on duex, set to 20Hz PWM M106 P2 H3 T35:50 C"ElectronicsFan1" ; fan is activated when MCU reports 35°C; runs on full speed from 50°C on M950 F3 C"duex.fan7" Q20 ; electronics compartment fan on duex, set to 20Hz PWM M106 P3 H3 T35:50 C"ElectronicsFan2" ; fan is activated when MCU reports 35°C; runs on full speed from 50°C on M950 F4 C"duex.fan6" Q20 ; electronics compartment fan on duex, set to 20Hz PWM M106 P4 H3 T35:50 C"ElectronicsFan3" ; fan is activated when MCU reports 35°C; runs on full speed from 50°C on M950 F5 C"duex.fan5" Q20 ; electronics compartment fan on duex, set to 20Hz PWM M106 P5 H3 T35:50 C"ElectronicsFan4" ; fan is activated when MCU reports 35°C; runs on full speed from 50°C on ; chamber Fan ;M950 F3 C"duex.fan4" Q20 ; chamber fan on duex, set to 20Hz PWM ;M106 P3 T40:45 H7 C"ChamberFan" ; Chamberfan is activated when chamber thermistor reached 40°C; runs on full speed from 45°C on ; tools --------------------------------------------------- M563 P0 S"E3Dv6" D0 H1 ; bind tool 0 to drive and heater G10 P0 X0 Y0 Z3 ; tool offset G10 P0 S0 R0 ; tool active and standby temp T0 ; activate tool 0 ; paneldue -------------------------- M575 P1 S1 B57600 ; activate paneldue ; define the z-probe, unsure, might not been needed ;M558 P5 C"e1stop" H5 F120 T3000 ; Z probe connected to Duet 2 E0 endstop input ;M558 P5 C"e1stop" A5 H1.45 R0.1 F65 T7000 A5 S0.01 B1 M558 P5 C"e1stop" A5 H1.45 R0.1 F65 T7000 A5 S0.01 ; Z probe connected to Duet 2 E0 endstop input ;M558 P5 C"e1stop" A5 H1.45 R0.1 F65 T7000 A5 S0.01 ;Servo config --------------------------------------------- M950 S6 C"duex.pwm5" ;Q1000 ; assign GPIO port 6 to heater5/pwm5 on expansion connector, servo mode M280 P6 S165 ; Servo to 165deg (arm vertical) ;LED Strip control via heater channels ---------------------------- ; M42 Px S0 to S1 controls brightness (Voltage 1 = Max 0.1 min) ; mix strip colours to build diffrent colours M950 P10 C"duex.e2heat" Q500 ;assign to P6 WHITE M950 P11 C"duex.e3heat" Q500 ;assign to P7 BLUE M950 P12 C"duex.e4heat" Q500 ;assign to P8 RED M950 P13 C"duex.e5heat" Q500 ;assign to P9 GREEN M42 P10 S0 ;Turn WHITE LED strip off M42 P11 S0 ;Turn BLUE LED strip off M42 P12 S0 ;Turn RED LED strip off M42 P13 S0 ;Turn GREEN LED strip off ; read config-override.g M501
and my bed mesh file looks like this
;; This script will perform a repeatable G29 scan, allow DWC to display the results, ;; and then remove the mapping and reset leveling to the mechanical zero. ;; ;; ;; The resultant heightmap should be displayed by DWC automatically. ;; If it is not, you can view it by selecting "Show Mesh Grid Heightmap" ;; under the dropdown by "Auto Bed Compensation". M98 P"/macros/sb_leds/sb_blue.g" ; Switch the SB led on and set to blue G29 S2 ; remove any bed mesh compensation currently in play M98 P"/macros/homing/scripts/zhop_up.g" G1 X230 Y200 Z5 ; Now move to middle of the bed, for initial probing M558 P5 C"e1stop" A5 H1.45 R0.1 F65 T7000 A5 S0.01 ; define probe with slow parameters G31 P1000 X0 Y25 Z0 ; define probe offset G30 S-3 ; probe and set the offset of the probe to trigger height (S-3) G29 ; perform mesh scan as configured, saving to heightmap.csv ;G29 S2 ; and deactivate compensation, because we don't want to print with it M98 P"/macros/moveto/center_xyz.g" ; move to center pos M98 P"/macros/sb_leds/sb_off.g" ; Switch the SB led off
Any ideas / help greatly appreciated
-
@Chaos3d said in Voron 2.4 Klicky Mesh Leveling and Z Offset:
Firmware: RepRapFirmware for Duet 2 WiFi/Ethernet 3.4.6-rc.1 (2023-07-13)
Duet WiFi Server Version: 1.27
Duet Web Control 3.4.5First stop would be to update to the 3.4.6 final release.
https://github.com/Duet3D/RepRapFirmware/releases/download/3.4.6/Duet2and3Firmware-3.4.6.zip
Upload this zip file as is.
@Chaos3d said in Voron 2.4 Klicky Mesh Leveling and Z Offset:
I have read that the compensation is applied to the offset but no matter what I do the head is always about 3mm off the printing surface when it starts to print.
How exactly are you setting Z0? Share your homing files as well.
-
My Homing for Z is done via homezm.g which is just this:
M98 P"/macros/homing/scripts/zhop_up.g" M98 P"/macros/homing/scripts/probe_zm.g" ;M98 P"/macros/moveto/center_xyz.g"
the zhop just lifts the head up by 5mm and the probe_zm.g looks like this:
code_t; For homing Z, perform a double-tap using the mechanical switch. ;M98 P"/macros/moveto/mswitch_xy.g" ;M98 P"/macros/drive/z_downcurrent.g" ;M98 P"/macros/zprobe/use_mfast.g" ; activate endstop switch as z-probe for fast probing ;G30 ; z-probe as configured ;M98 P"/macros/drive/z_fullcurrent.g" ;M98 P"/macros/zprobe/use_mslow.g" ; activate endstop switch as z-probe for slow probing ;G30 ; z-probe as configured ;M98 P"/macros/zprobe/use_ifast.g" ; restore default probe (inductive probe) settings ;; For homing Z, perform a double-tap to locate the endstop. ;; First move fast to save time, then move slow for precision. ;; ;; *ADJUST* based on your Z size as indicated below G91 ; relative positioning M98 P"/macros/drive/z_downcurrent.g" G1 H1 Z430 F6000 ; +Z probe move, fast. (*ADJUST* to 10mm larger than your Z size) M98 P"/macros/drive/z_fullcurrent.g" G1 H2 Z-2 F6000 ; back off from the endstop G1 H1 Z3 F60 ; +Z probe move, slow G1 H2 Z-5 F6000 ; back off from the endstop
I have also uploaded the full version of the firmware
-
I'd need to see the content of the macros to determine what you're actually doing.
-
The two macros used are z_downcurrent.g
code_;; In order to consolidate motor current and physics settings, ;; and to enable switching between full- and low-current profiles, ;; these motor settings live in this related set of macros. ;; ;; The "downcurrent" files specify slower, gentler values ;; used for some parts of homing. ;; This can help to reduce damage in the case of a crash ;; due to misalignment, misconfiguration, ;; or sensors otherwise not triggering. ;; ;; Note that if current is too low or acceleration/jerk is too high, ;; steps can be dropped when doing a z-home, which can cause the gantry to come out of level. ;; On the other hand, if max speed is too high or acceleration is too low, ;; the gantry can fail to stop in time before crashing into the plate. ;; ;; *ADJUST* all values, or disable as descibed ;; To disable downcurrent Z moves, uncomment these lines. ;M98 P"/macros/drive/z_fullcurrent.g" ;M99 ; exit macro without changing anything else ;; Choose either an M913 percentage or an M906 absolute current value. ;M913 Z50 ; set operating current percentage M906 Z600 ; set absolute motor drive current ;; Set reduced physics parameters to help prevent missed steps. M203 Z3000 ; maximum speed (mm/min) M201 Z400 ; maximum acceleration (mm/min/s) M566 Z0 ; instantaneous speed change (mm/min) text
And z_fullcurrent.g
;; In order to consolidate motor current and physics settings, ;; and to enable switching between full- and low-current profiles, ;; these motor settings live in this related set of macros. ;; ;; The "fullcurrent" files specify normal operating values. ;; ;; *ADJUST* all values M913 Z100 ; restore motor current percentage to 100% M906 Z900 ; motor drive current M203 Z8000 ; maximum speed (mm/min) M201 Z500 ; maximum acceleration (mm^2/s) M566 Z120 ; instantaneous speed change (mm/min)
-
@Chaos3d after the M558 command in config.g you should have a G31 command to specify the trigger height and the probe XY offsets if any.
-
@dc42 thanks for that - I have a g31 command in the bed mesh file
G31 P1000 X0 Y25 Z0
Could I ask a stupid question here - the trigger height is the height at which the probe triggers above the bed yes? i get the trigger height when the probe does its initial probe and reports it is this what i should be setting it to (normally its something like 1.4) i have a g30 command in the bed mesh set to 3
Or have I got the wrong end of the stick?
Once I have that set where would i set the diffrence between the klicky probe trigger height and the actual print head position in the z axis?
Cheers
-
@Chaos3d yes, trigger height is the height at which the probe triggers. For nozzle-contact probes it is usually negative, because the nozzle has to descend below the usual Z=0 point in order to trigger the probe. To find the offset, lower the nozzle until it just touches the bed, send G92 Z0, then step the nozzle down in tiny Z steps until DWC shows that the probe has triggered. The Z reading should then be the trigger height.
-
@dc42 OK so the probe is considerably lower than the nozzle (with klicky attached) so when it triggers lets say at 1.4 mm above the bed, I set z to 0 using g92 - at that point it puts the klicky away on its deployment arm, and that leaves the nozzle roughly 2mm above the bed (which is the new zero)
so how do I handle that offset? - sorry for being thick im just confused as to how i can tell the print head it needs to be lower and use the compensation from the bed mesh
-
@Chaos3d said in Voron 2.4 Klicky Mesh Leveling and Z Offset:
Chaos3d
@dc42
9 Apr 2024, 17:44@dc42 OK so the probe is considerably lower than the nozzle (with klicky attached) so when it triggers lets say at 1.4 mm above the bed
If you mean that the klicky triggers when the nozzle is 1.4mm above the bed, then set the trigger height to 1.4 using G31. The G31 command must be later in your config.g fie than the M558 command that creates the Z probe.
-
Hi All, apologies for the late response with this, but I discovered several issues with the klicky setup and in the end I ditched the whole configuration and went with a BLTouch sensor, everything you guys posted on this thread helped me sort it out and I have now got a fully functioning Voron XL!! - I want to do some additional tweaks around load and unload and some panels to enclose the whole unit but it prints beautifully now and the bed compensation is spot on.
So many thanks everyone I would not of got it sorted without your input on this issues and the other control related posts
Rich
-
-