Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Voron 2.4 Klicky Mesh Leveling and Z Offset

    Scheduled Pinned Locked Moved Solved
    Tuning and tweaking
    3
    11
    710
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Chaos3dundefined
      Chaos3d
      last edited by Chaos3d

      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 Probe

      mains 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.5

      So 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 z0

      My 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 🙂

      Phaedruxundefined dc42undefined 2 Replies Last reply Reply Quote 0
      • Phaedruxundefined
        Phaedrux Moderator @Chaos3d
        last edited by

        @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.5

        First 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.

        Z-Bot CoreXY Build | Thingiverse Profile

        1 Reply Last reply Reply Quote 0
        • Chaos3dundefined
          Chaos3d
          last edited by

          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

          1 Reply Last reply Reply Quote 0
          • Phaedruxundefined
            Phaedrux Moderator
            last edited by

            I'd need to see the content of the macros to determine what you're actually doing.

            Z-Bot CoreXY Build | Thingiverse Profile

            1 Reply Last reply Reply Quote 0
            • Chaos3dundefined
              Chaos3d
              last edited by

              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)
              
              
              1 Reply Last reply Reply Quote 0
              • dc42undefined
                dc42 administrators @Chaos3d
                last edited by dc42

                @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.

                Duet WiFi hardware designer and firmware engineer
                Please do not ask me for Duet support via PM or email, use the forum
                http://www.escher3d.com, https://miscsolutions.wordpress.com

                Chaos3dundefined 1 Reply Last reply Reply Quote 0
                • Chaos3dundefined
                  Chaos3d @dc42
                  last edited by Chaos3d

                  @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

                  dc42undefined 1 Reply Last reply Reply Quote 0
                  • dc42undefined
                    dc42 administrators @Chaos3d
                    last edited by

                    @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.

                    Duet WiFi hardware designer and firmware engineer
                    Please do not ask me for Duet support via PM or email, use the forum
                    http://www.escher3d.com, https://miscsolutions.wordpress.com

                    Chaos3dundefined 1 Reply Last reply Reply Quote 0
                    • Chaos3dundefined
                      Chaos3d @dc42
                      last edited by

                      @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

                      dc42undefined 1 Reply Last reply Reply Quote 0
                      • dc42undefined
                        dc42 administrators @Chaos3d
                        last edited by dc42

                        @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.

                        Duet WiFi hardware designer and firmware engineer
                        Please do not ask me for Duet support via PM or email, use the forum
                        http://www.escher3d.com, https://miscsolutions.wordpress.com

                        1 Reply Last reply Reply Quote 0
                        • Chaos3dundefined
                          Chaos3d
                          last edited by Chaos3d

                          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

                          1 Reply Last reply Reply Quote 3
                          • Phaedruxundefined Phaedrux marked this topic as a question
                          • Phaedruxundefined Phaedrux has marked this topic as solved
                          • First post
                            Last post
                          Unless otherwise noted, all forum content is licensed under CC-BY-SA