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

    Bed levelling with 3x independent Z motors issues

    Scheduled Pinned Locked Moved Solved
    Firmware installation
    5
    12
    1.2k
    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.
    • Javajoeukundefined
      Javajoeuk
      last edited by

      Hi you don't mention which board or firmware you have?
      have you seen this guide bed levelling.

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

        @exerqtor you are running true bed levelling in a loop. Before you do that, you need to establish that true bed levelling is working; so that if you run is several times, the corrections it makes reduce with successive runs, or at least don't increase.

        If you find that the corrections increase with subsequent runs, the usual reason is that the order in which you listed the Z motor drivers in your M584 command does not match the order in which you list the coordinates in the M671 command.

        The order in which you probe the points using G30 does not matter.

        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

        Exerqtorundefined 2 Replies Last reply Reply Quote 1
        • Exerqtorundefined
          Exerqtor @dc42
          last edited by

          @javajoeuk

          Forgot to mention it, updated first post now. But yeah I've read everything i can find about the subject in the dozuki and as far as i can see i everything should be up to snuff =/

          @dc42

          Yeah i know, i ran the same printer with 2x independent Z motors and that same loop without an issue. So i just adjusted the config.g, bed_probe_points.g to reflect the new setup thinking it wouldn't generate any new problems.

          I'll slap together a new routine for testing purposes without the loop after work and see what that yelds.

          1 Reply Last reply Reply Quote 0
          • Exerqtorundefined Exerqtor marked this topic as a question
          • Exerqtorundefined
            Exerqtor @dc42
            last edited by

            @dc42

            Same issue with this bed.g, it picks up the klicky. And then when it comes to the G30 the Z steppers (and XY) starts to do a faint humming and stuff goes slowly everywhere and i have to cut the power.

            ; called to perform automatic bed compensation via G32
            ;
            ; --- prepare to level bed ---
            ;M291 S3 R"Leveling bed" P"Do you want to level the bed?" S3			; want to probe or not
            M291 R"Leveling bed" P"Please wait..." T0					; leveling bed
            M561										; clear any bed transform
            
            if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed		; axles homed ?
            	;M291 P"Axles not homed! Perform homing?" R"LevelAssist" S3
            	G28									; home all axes
            
            M98 P"/macros/System/Home/get_klicky.g"						; pick up the klicky probe 
            M98 P"/macros/System/Speed/speed_probing.g"					; set low speed & accel
            M98 P"/macros/System/Current/z_current_low.g"					; set low z currents
            M98 P"/macros/System/Current/xy_current_low.g"					; set low xy currents
            
            G30 P0 X175 Y325 Z-99999							; probe near center rear leadscrew
            G30 P1 X325 Y5 Z-99999								; probe near front right leadscrew
            G30 P2 X25 Y5 Z-99999 S0							; probe near front left leadscrew and calibrate 3 motors
             
            M98 P"/macros/System/Home/move_over_microswitch.g"				; move above the Z endstop switch
            G30 K1 Z-99999									; home Z by probing the bed
            G90										; absolute positioning
            G1 Z10 F1500									; lower Z(bed) 10mm from Nozzle
            
            M98 P"/macros/System/Speed/speed_printing.g"					; restore normal speed & accel
            M98 P"/macros/System/Current/z_current_high.g"					; restore normal z currents
            M98 P"/macros/System/Current/xy_current_high.g"					; restore normal xy currents
            M98 P"/macros/System/Home/leave_klicky.g"					; put the klicky probe back in the dock
            M291 R"Leveling bed" P"Done" T5							; done
            engikeneerundefined 1 Reply Last reply Reply Quote 0
            • peirofundefined
              peirof
              last edited by

              I am very interested in this post, since my future printer will also have 3 Z motors, and I guess you can also configure the bed leveling with 3 Z motors.

              I have been looking at the 3 files a bit, and the truth is that there are things in the bed.g that I do not understand.

              Since I am VERY "green", before asking nonsensical questions.

              Where can I find information on how to configure a CoreXy printer to stop leveling the bed with 3 independent Z motors?

              Thanks

              Exerqtorundefined 1 Reply Last reply Reply Quote 0
              • Exerqtorundefined
                Exerqtor @peirof
                last edited by

                @peirof

                "Everything" is mostly covered in the dozuki, in this instance some under G30, some in M671 and here.

                peirofundefined 1 Reply Last reply Reply Quote 0
                • peirofundefined
                  peirof @Exerqtor
                  last edited by

                  @exerqtor thx

                  1 Reply Last reply Reply Quote 0
                  • engikeneerundefined
                    engikeneer @Exerqtor
                    last edited by engikeneer

                    @exerqtor I notice that you are running a bunch of macros I'm there to reduce the motor currents etc. Could it be that you're reducing the motor currents too much so that one of the motors can't actually turn? Might be one of them has a little more friction now there's three of them in your system.

                    To try and test it and narrow down your issue, I would go for as simple a script as possible. Maybe even manually send the commands and see what happens?

                    @peirof I think OP's bed.g is much more complex than most because he has to pick up his 'klicky' probe and is doing a few other things. It can be as simple as 3 lines to probe the bed in three places 🙂 Read the docs link that the others have posted and you should be okay

                    E3D TC with D3Mini and Toolboards.
                    Home-built CoreXY, Duet Wifi, Chimera direct drive, 2x BMG, 300x300x300 build volume
                    i3 clone with a bunch of mods

                    peirofundefined 1 Reply Last reply Reply Quote 2
                    • peirofundefined
                      peirof @engikeneer
                      last edited by

                      @engikeneer

                      Well ... you reassure me, when I saw the @Exerqtor bed.g, I almost felt sick to die ....

                      I got scared, I thought: "Thank goodness the printer still took a long time to come. I have a LOT to study ... "

                      Exerqtorundefined 1 Reply Last reply Reply Quote 0
                      • Exerqtorundefined
                        Exerqtor @peirof
                        last edited by Exerqtor

                        @engikeneer said in Bed levelling with 3x independent Z motors issues:

                        @exerqtor I notice that you are running a bunch of macros I'm there to reduce the motor currents etc. Could it be that you're reducing the motor currents too much so that one of the motors can't actually turn? Might be one of them has a little more friction now there's three of them in your system.

                        To try and test it and narrow down your issue, I would go for as simple a script as possible. Maybe even manually send the commands and see what happens?

                        @peirof I think OP's bed.g is much more complex than most because he has to pick up his 'klicky' probe and is doing a few other things. It can be as simple as 3 lines to probe the bed in three places 🙂 Read the docs link that the others have posted and you should be okay

                        @engikeneer
                        Yeah i was running the same motor current etc. macros before before the 3x Z motor conversion too, so i figured they wouldnt cause any issues now either, but apparently they did.
                        Turns out the issue was that i dropped the XY currents to 30% of1400mA, DESPITE that workring without an hitch when running homeall.g that moves the same number of axis. Bumped it up to 45% of 1400mA and it fixed the issue.

                        Thankfully it works now, now on to the next step/potential issue 😅

                        @peirof said in Bed levelling with 3x independent Z motors issues:

                        @engikeneer

                        Well ... you reassure me, when I saw the @Exerqtor bed.g, I almost felt sick to die ....

                        I got scared, I thought: "Thank goodness the printer still took a long time to come. I have a LOT to study ... "

                        Yeah i'm doing alot more than what's needed to get started, my first build was ALOT simpler than this. More or less what the RRF configurator spews out with only a couple tiny changes done to it 😃 Take it step by step and learn as you go, and don't give up (even tho it feels like the only sane thing to do at times 😂 )

                        _ _

                        And for those who might end up searching or refering to this post to solve their problem this is what everything ended up looking like(when it comes to this specific issue, everything else is intently left out)

                        config.g

                        ; General setup
                        M669 K1	X-1:-1:0 Y1:-1:0 Z0:0:1					; select CoreXY mode and set kinematics matrix
                        
                        ; --- Z drive map ---
                        ;    _______
                        ;   |   0   |
                        ;   | ----- |
                        ;   | 2 | 1 |
                        ;    -------
                        ;     front
                        
                        ; Drives for Z 
                        M569 P0 S0							; Z1 (physical drive 0) goes backwards
                        M569 P1 S0							; Z2 (physical drive 1) goes backwards
                        M569 P2 S0							; Z3 (physical drive 2) goes backwards
                        
                        ; Drives for XY
                        M569 P3 S0							; X (physical drive 3) goes backwards
                        M569 P4 S0							; Y (physical drive 4) goes backwards
                        
                        
                        ; Motor mapping and steps per mm
                        M584 X4 Y3 Z0:1:2						; set drive mapping
                        M350 X16 Y16 Z16:16 I1						; configure microstepping with interpolation
                        M92 X80.00 Y80.00 Z400.00:400.00:400.00				; set XYZ steps per mm (1.8deg motors)
                        
                        ; Drive currents
                        M906 X1400 Y1400 Z1200:1200:1200				; set XYZ motor currents (mA)
                        M906 I30							; set ide current percentage
                        M84 S30								; set idle timeout
                        
                        ; Accelerations and speed
                        M98 P"/macros/System/Speed/speed_printing.g"			; set normal speed & accel
                        
                        ; Axis Limits
                        M208 X0 Y0 Z0 S1						; set axis minima
                        M208 X347.5 Y358 Z300 S0					; set axis maxima
                        
                        ; Endstops
                        M574 X2 S1 P"xstop"						; configure active-low endstop for low end on X via pin xstop
                        M574 Y2 S1 P"ystop"						; configure active-low endstop for low end on Y via pin ystop
                        M574 Z0 P"nil"							; no endstop
                        
                        ; Z microswitch (nozzle probe)
                        M558 K1 P8 C"zstop" I1 H2 F350:60 T18000 A10 S0.01 R0.2		; set Z probe type to switch and the dive height + speeds
                        G31 K1 P500 X0 Y0 Z-0.17					; set Z probe trigger value, offset and trigger height -0.8 (higher Z value = nozzle closer to bed)
                        
                        ; Z-probe (klicky probe)
                        M558 K0 P8 C"^zprobe.in" H5 F350:120 T10000 A5 S0.03 R0.2	; set Z probe type to switch and the dive height + speeds
                        G31 K0 P500 X0 Y21 Z6.42					; set Z probe trigger value, offset and trigger height (higher Z value = nozzle closer to bed)
                        
                        ; Bed leveling
                        M671 X175:388:-38 Y416.6:1.5:1.5 S10				; leadscrew locations (Rear, Right, Left)
                        M557 X25:315 Y25:325 P5:5					; define mesh grid ( positions include the Z offset!)
                        

                        bed.g

                        ; bed.g
                        ; called to perform automatic bed compensation via G32
                        ;
                        ; --- prepare to level bed ---
                        ;M291 S3 R"Leveling bed" P"Do you want to level the bed?" S3		; want to probe or not
                        M291 R"Leveling bed" P"Please wait..." T0				; leveling bed
                        M561									; clear any bed transform
                        
                        if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed	; axles homed ?
                        	;M291 P"Axles not homed! Perform homing?" R"LevelAssist" S3
                        	G28								; home all axes
                        
                        M98 P"/macros/System/Home/get_klicky.g"					; pick up the klicky probe 
                        M98 P"/macros/System/Speed/speed_probing.g"				; set low speed & accel
                        M98 P"/macros/System/Current/z_current_low.g"				; set low z currents
                        M98 P"/macros/System/Current/xy_current_low.g"				; set low xy currents
                        
                        ; --- leveling bed ---
                        while true
                          ; run leveling pass
                         
                          ; --- probe near lead screws -
                         
                          M98 P"/sys/bed_probe_points.g"					; probe the bed
                         
                          ; check results - exit loop if results are good
                         
                          if move.calibration.initial.deviation < 0.02
                            break
                         
                          ; check pass limit - abort if pass limit reached
                         
                          if iterations = 5
                            M291 P"Bed Leveling Aborted" R"Pass Limit Reached"
                            abort "Bed Leveling Aborted - Pass Limit Reached"
                         
                        ; --- finish up ---
                        M98 P"/macros/System/Home/leave_klicky.g"				; put the klicky probe back in the dock 
                        
                        ; --- set Z=0 datum which can be affected by leveling ---
                        M98 P"/macros/System/Home/move_over_microswitch.g"			; move above the Z endstop switch
                        G30 K1 Z-99999								; home Z by probing the bed
                        G90									; absolute positioning
                        G1 Z10 F1500								; lower Z(bed) 10mm from Nozzle
                        
                        M98 P"/macros/System/Speed/speed_printing.g"				; restore normal speed & accel
                        M98 P"/macros/System/Current/z_current_high.g"				; restore normal z currents
                        M98 P"/macros/System/Current/xy_current_high.g"				; restore normal xy currents
                        M291 R"Leveling bed" P"Done" T5						; bed leveling done
                        

                        bed_probe_points.g

                        ; bed_probe_points.g
                        ; called to define probing points when traming the bed
                        ;
                        G1 X175 F6000								; move to X center
                        G30 P0 X175 Y315 Z-99999						; probe near center rear leadscrew
                        G30 P1 X325 Y25 Z-99999							; probe near front right leadscrew
                        G30 P2 X25 Y25 Z-99999 S0						; probe near front left leadscrew  and calibrate all motors
                        

                        get_klicky.g

                        ; get_klicky.g
                        ; Called before Z probing
                        ; Used to pick up the klicky probe
                        ;
                        G1 X36.0 Y338 F6000							; move up in front of the klicky dock
                        G1 X36.0 Y358 F1500							; pick up the klicky probe
                        G1 X36.0 Y338 F1500							; move out of the dock with klicky attached
                        

                        ; leave_klicky.g

                        ; leave_klicky.g
                        ; Called after Z probing
                        ; Used to put the klicky probe back in the dock
                        ;
                        G1 X36.0 Y338 F6000							; move up in front of the klicky dock
                        G1 X36.0 Y358 F1500							; dock the klicky probe
                        G1 X76.0 Y358 F1500							; move out of the dock without klicky attached
                        G1 X76.0 Y338 F6000							; move towards the buildplate
                        

                        The move_over_microswitch.g, current and speed macro's are quite self explanatory so i won't bother putting them in here.

                        And again, thanks again to everyone for the input and pointers with the troubleshooting ❤

                        Exerqtorundefined 1 Reply Last reply Reply Quote 1
                        • Exerqtorundefined Exerqtor has marked this topic as solved
                        • Exerqtorundefined
                          Exerqtor @Exerqtor
                          last edited by

                          This post is deleted!
                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post
                          Unless otherwise noted, all forum content is licensed under CC-BY-SA