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

    3 independent Z motors issue

    Scheduled Pinned Locked Moved
    Duet Hardware and wiring
    4
    12
    479
    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.
    • DIY-O-Sphereundefined
      DIY-O-Sphere
      last edited by

      Haven't you found that guide?
      https://duet3d.dozuki.com/Wiki/Bed_levelling_using_multiple_independent_Z_motors#Section_Example_for_3_motors

      (UTC+1)

      1 Reply Last reply Reply Quote 0
      • cugetareundefined
        cugetare
        last edited by

        Cheers for the reply. Of course I've seen it... But it doesn't necessarily fix the issue... if i would apply this guide I would lose the ability to jog Z, well i could but it would just move the motors assigned to Z... and what still eludes me.. how would this behave in a print... would i have to do some settings in my slicer?

        I believe normally i could just declare 3 motors to the Z is they would be the same and have the same kind of lead screws, but if i declare a new axis for the third motor, this would mean that whenever Z is mentioned U must follow... and I wounder if it would be a simpler solution to this, like U just follows any Z movement. It would have been a lot easier if Z would allow for different steps/mm like E does.

        Here is a rough sketch of my configuration:

        0c9391ab-a90c-4c4a-9a0d-157e15f5a55a-image.png

        Z1 and Z2 have an 4mm/rev screw, motor is 1,8 deg which results in 800 steps/mm
        Z3 is a 2mm/rev on 1.8deg which leads to 1600 steps/mm

        And this is a snippet form my config.g

        ; Drives
        M569 P0 S1                                         ; Drive 0 goes fwd
        M569 P1 S1                                         ; Drive 1 goes backwards
        M569 P2 S0                                         ; Drive 2 goes backwards
        M569 P3 S1                                         ; Drive 3 goes backwards
        M569 P4 S0                                         ; Drive 4 goes backwards
        M569 P5 R1 T2.5:2.5:5:0 S0                        ; External Drive 5 goes backwards
        M584 X0 Y1 Z2:4 U3 E5 				   ; two Z motors connected to driver outputs Z and E1 and two E motors E0 and E2
        M350 X16 Y16 Z16 U16 E16 I1                            ; Configure microstepping with interpolation
        M92 X160.00 Y160.00 Z798.8 U1600		   	   ; Set steps per mm for XYZ
        M92 E396	               			   ; Set steps per mm for extruders
        M566 X800.00 Y800.00 Z12 U12 E300 		           ; Set maximum instantaneous speed changes (mm/min)
        M203 X12000.00 Y12000.00 Z600 U600 E2400 	           ; Set maximum speeds (mm/min)
        M201 X1500.00 Y1500.00 Z20 U20 E1500 	           ; Set accelerations (mm/s^2)
        M906 X1200.00 Y1200.00 Z1200 U1200 E800 I30     	   ; Set motor currents (mA) and motor idle factor in per cent
        M84 S30                                            ; Set idle timeout
        

        With this I get the possibility to jog U axis in the main screen (which i can suppress with P3 in M584 ) but Z movements are not reflected in Z3 motor (which is mapped to U)

        DIY-O-Sphereundefined 1 Reply Last reply Reply Quote 0
        • Vetiundefined
          Veti
          last edited by Veti

          @cugetare said in 3 independent Z motors issue:

          Z1 and Z2 have an 4mm/rev screw, motor is 1,8 deg which results in 800 steps/mm
          Z3 is a 2mm/rev on 1.8deg which leads to 1600 steps/mm

          they have to have the same number of steps /mm, try reducing the microstepping on the external motor by a factor of 2

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

            RRF doesn't directly support multiple motors on an axis with different steps per mm. But I think you could make it work by defining the additional motor as a U axis and then using the M669 command Z parameter to adjust the matrix to make the U motor move by the correct amount when you move Z. You can hide the U axis in normal use.

            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

            cugetareundefined 1 Reply Last reply Reply Quote 0
            • DIY-O-Sphereundefined
              DIY-O-Sphere @cugetare
              last edited by

              @cugetare said in 3 independent Z motors issue:

              Cheers for the reply.

              As I’m planning the modification of my Z-axis, I have just looked in this thread.
              Standard seems to be realy easy, but I had not realized that M92 is related to the axis and not to the drives.
              No hard feelings.

              (UTC+1)

              1 Reply Last reply Reply Quote 0
              • cugetareundefined
                cugetare @dc42
                last edited by

                @dc42 said in 3 independent Z motors issue:

                RRF doesn't directly support multiple motors on an axis with different steps per mm. But I think you could make it work by defining the additional motor as a U axis and then using the M669 command Z parameter to adjust the matrix to make the U motor move by the correct amount when you move Z. You can hide the U axis in normal use.

                Thanks for the hint DC.
                I assume i should define M669 K5 (CoreXYU) X1:0:0 Y0:1:0 Z0:0:1 U0:0:0.5
                Right?

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

                  @cugetare said in 3 independent Z motors issue:

                  Thanks for the hint DC.
                  I assume i should define M669 K5 (CoreXYU) X1:0:0 Y0:1:0 Z0:0:1 U0:0:0.5
                  Right?

                  If it's a Cartesian machine and you set up Z and U with the correct steps/mm in both cases, then I think you want X1:0:0:0 Y0:1:0:0 Z0:0:1:1 U0:0:0:1. Then use M584 P3 to hide the U axis.

                  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

                  cugetareundefined 1 Reply Last reply Reply Quote 0
                  • cugetareundefined
                    cugetare @dc42
                    last edited by

                    @dc42 said in 3 independent Z motors issue:

                    @cugetare said in 3 independent Z motors issue:

                    Thanks for the hint DC.
                    I assume i should define M669 K5 (CoreXYU) X1:0:0 Y0:1:0 Z0:0:1 U0:0:0.5
                    Right?

                    If it's a Cartesian machine and you set up Z and U with the correct steps/mm in both cases, then I think you want X1:0:0:0 Y0:1:0:0 Z0:0:1:1 U0:0:0:1. Then use M584 P3 to hide the U axis.

                    Hi DC

                    I tried your advice and the movement looks better (did some changes though i have a coreXY). Sorry for the delay, i ran into some issues with the bed probing, looks like EMF in the cable is not appreciated by BLTouch. some rewiring and some ferrites later i could make a foolish attempt at homing the thing... which kind of fails... i will paste my config and my homing files hoping someone can point me to the mistake i overlooked.

                    I can explain a little about the behavior. My setup was configured with senseless homing for X and Y so the machine would first home X then Y then go in the middle of the bed and home Z.
                    NOW.... after XY homing head is positioning in the middle of the deploying the probe waiting for the bed to touch it, Z(with 2 motors) and U(with 1 motor) are moving in sync until BLTouch is triggered, but sometimes U continues to move... I know i'm making a mistake... i just don't see where....

                    This is my config.g as of now

                    ; General preferences
                    G90                                                ; Send absolute coordinates...
                    M83                                                ; ...but relative extruder moves
                    
                    ;M667 S1                                            ; Select CoreXY mode
                    M669 K5  X1:1:0:0 Y1:-1:0:0 Z0:0:1:1 U0:0:0:1		; custom axes
                    
                    ; Network
                    ; left out
                    
                    ; Drives
                    M569 P0 S1                                         ; Drive 0 goes fwd
                    M569 P1 S1                                         ; Drive 1 goes backwards
                    M569 P2 S0                                         ; Drive 2 goes backwards
                    M569 P3 S1                                         ; Drive 3 goes backwards
                    M569 P4 S0                                         ; Drive 4 goes backwards
                    M569 P5 R1 T2.5:2.5:5:0 S0                        ; External Drive 5 goes backwards
                    M584 X0 Y1 Z2:4 U3 E5 P3			   ; two Z motors connected to driver outputs Z and E1 and two E motors E0 and E2
                    M350 X32 Y32 Z16 U16 E16 I1                            ; Configure microstepping with interpolation
                    M92 X320.00 Y320.00 Z798.8 U1600		   	   ; Set steps per mm for XYZ
                    M92 E396	               			   ; Set steps per mm for extruders
                    M566 X800.00 Y800.00 Z12 U12 E300 		           ; Set maximum instantaneous speed changes (mm/min)
                    M203 X12000.00 Y12000.00 Z600 U600 E2400 	           ; Set maximum speeds (mm/min)
                    M201 X1500.00 Y1500.00 Z20 U20 E1500 	           ; Set accelerations (mm/s^2)
                    M906 X1200.00 Y1200.00 Z1200 U1200 E800 I30     	   ; Set motor currents (mA) and motor idle factor in per cent
                    M84 S30                                            ; Set idle timeout
                    
                    ; Axis Limits
                    M671 X-50:150:340 Y140:320:140 S3        ; leadscrews at left and right of X axis
                    M208 X-28:280 Y0:300 Z0:250 U0:250	 ; axis min and max
                    
                    
                    ; Endstops
                    M574 X1 Y1 S3                                      ; Set active low endstops
                    M915 P0 P1 S3 F0   				   ; configure stall detection
                    
                    
                    ; Z-Probe
                    M307 H3 A-1 C-1 D-1 				             ; Disable the 3rd Heater
                    M574 Z1 U1 S2                                                  ; Set endstops controlled by probe
                    M558 P9 H5 F1000 T12000		             ; Set Z probe type/mode 5. H=Dive Height. F=Speed the bed moves
                    G31 X0 Y25 Z2.1 U2.1 P25	                             ;  Set Z probe trigger value, offset and trigger height
                    M557 X27.5:286 Y5:285 S80                            ; Define mesh grid
                    
                    ; Heaters
                    M307 H0 B0 S1.00 F50                                   ; Disable bang-bang mode for the bed heater and set PWM limit
                    M143 H0 S140                                                 ; Set temperature limit for heater 0 to 120C
                    M143 H1 S280                                                 ; Set temperature limit for heater 1 to 280C
                    
                    ; My Fans
                    M106 P0 S0.3 I0 F200 H0 T45                          ; Set fan 0 value, PWM signal inversion and frequency. TC -> ON
                    M106 P1 S0.5 I0 F200 H1 T85                          ; Set fan 1 value, PWM signal inversion and frequency. TC -> ON
                    M106 P2 S0.3 I0 F200 H0 T45                          ; Set fan 2 value, PWM signal inversion and frequency. TC -> ON
                    
                    ; Tools
                    M563 P0 D0 H1 F0:2                                ; Define tool 0
                    G10 P0 X0 Y-20 Z0                                   ; Set tool 0 axis offsets
                    G10 P0 R0 S0                                      ; Set initial tool 0 active and standby temperatures to 0C
                    
                    
                    ; Automatic power saving
                    M911 S20 R22 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; Set voltage thresholds and actions to run on power loss
                    
                    ; Custom settings are not configured
                    
                    ; Miscellaneous
                    M501                                            ; Load saved parameters from non-volatile memory
                    T0                                                 ; Select first tool
                    M280 P3 S120 I1                        ; BLTouch force self test
                    G4 S2                                           ; for 2 secs
                    M280 P3 S90 I1                          ; then retract
                    

                    This is my homeall.g as of now

                    G91            		; relative positioning
                    G1 S2 Z5 F200 		; lower Z relative to current position
                    G90            		; absolute positioning
                    M98 P/sys/homex.g  
                    M98 P/sys/homey.g   
                    G1 X150 Y150 F6000          		; go to first bed probe point and home Z
                    G30 S-1                    		; home Z by probing the bed
                    G92 Z2.1  ;U2.1
                    G1 H2 Z5 U5 F100 
                    G1 X0 Y0 F6000         	; go back home XY
                    

                    Homex.g (home y is the same but for y homing)

                    M400					; make sure everything has stopped before we make changes
                    M915 P0:1 S3 F0 R0			; configure stall detection
                    M574 X1 Y1 S3				; set endstops to use motor stall
                    M913 X50 Y50				; reduce motor current to 50% to prevent belts slipping
                    M201 X500				; reduce acceleration to avoid false triggering
                    G91					; use relative positioning
                    G1 S1 X-325 F4000		      	; move towards axis minimum 
                    G1 X5                      		; move away from home
                    M400                  			; make sure everything has stopped before we reset the motor currents
                    M913 X100 Y100 				; motor currents back to 100%
                    G90                   			; back to absolute positioning
                    M574 X1 Y1 S1
                    

                    homez.g

                    G91            				; relative positioning
                    G1 S2 Z5 F200 				; lower Z relative to current position
                    G90            				; absolute positioning
                    G1 X150 Y150 F6000          		; go to first bed probe point and home Z
                    G30 S-1                    		; home Z by probing the bed
                    G92 Z2.1 ;U2.1
                    G1 H2 Z5 U5 F100          		
                    G1 X0 Y0 F6000         			; go back home XY
                    
                    1 Reply Last reply Reply Quote 0
                    • cugetareundefined
                      cugetare
                      last edited by

                      I think this looks like a needle in hay stack kind of thing so let me simplify my doubts...
                      After defining the U axis with

                      M669 K5  X1:1:0:0 Y1:-1:0:0 Z0:0:1:1 U0:0:0:1
                      

                      And specifying the motor assignments and steps pr mm:

                      M350 X32 Y32 Z16 U16 E16 I1                             ; Configure microstepping with interpolation
                      M92 X320.00 Y320.00 Z798.8 U1597.6		   	   			; Set steps per mm for XYZ
                      

                      then speed, jerk, acc

                      M566 X800.00 Y800.00 Z12 U12 E300 		           		; Set maximum instantaneous speed changes (mm/min)
                      M203 X12000.00 Y12000.00 Z600 U600 E2400 	            ; Set maximum speeds (mm/min)
                      M201 X1500.00 Y1500.00 Z20 U20 E1500 	          		; Set accelerations (mm/s^2)
                      

                      Should i also mention U in:

                      • axis limits?
                      M208 X300 Y300 Z0 U0 S0 								; Set axis maxima
                      M208 X0 Y0 Z250 U250 S1 								; Set axis minima
                      
                      • Z probe config?
                      M574 Z1 U1 S2                       ; Set endstops controlled by probe
                      M558 P9 H5 F1000 T12000		    ; Set Z probe type/mode 5. H=Dive Height. F=Speed the bed moves
                      G31 X0 Y25 Z2.1 U2.1 P25	    ; actual 1.635 Set Z probe trigger value, offset and trigger height
                      
                      • home Z?
                      • bed.g?
                        In other words, should i mention U every time Z is also mentioned?
                      dc42undefined 1 Reply Last reply Reply Quote 0
                      • dc42undefined
                        dc42 administrators @cugetare
                        last edited by

                        @cugetare said in 3 independent Z motors issue:

                        I think this looks like a needle in hay stack kind of thing so let me simplify my doubts...
                        After defining the U axis with

                        M669 K5  X1:1:0:0 Y1:-1:0:0 Z0:0:1:1 U0:0:0:1
                        

                        And specifying the motor assignments and steps pr mm:

                        M350 X32 Y32 Z16 U16 E16 I1                             ; Configure microstepping with interpolation
                        M92 X320.00 Y320.00 Z798.8 U1597.6		   	   			; Set steps per mm for XYZ
                        

                        then speed, jerk, acc

                        M566 X800.00 Y800.00 Z12 U12 E300 		           		; Set maximum instantaneous speed changes (mm/min)
                        M203 X12000.00 Y12000.00 Z600 U600 E2400 	            ; Set maximum speeds (mm/min)
                        M201 X1500.00 Y1500.00 Z20 U20 E1500 	          		; Set accelerations (mm/s^2)
                        

                        Should i also mention U in:

                        • axis limits?
                        M208 X300 Y300 Z0 U0 S0 								; Set axis maxima
                        M208 X0 Y0 Z250 U250 S1 								; Set axis minima
                        
                        • Z probe config?
                        M574 Z1 U1 S2                       ; Set endstops controlled by probe
                        M558 P9 H5 F1000 T12000		    ; Set Z probe type/mode 5. H=Dive Height. F=Speed the bed moves
                        G31 X0 Y25 Z2.1 U2.1 P25	    ; actual 1.635 Set Z probe trigger value, offset and trigger height
                        
                        • home Z?
                        • bed.g?
                          In other words, should i mention U every time Z is also mentioned?

                        I suggest this:

                        • Define the U axis in M584 in config.g. Initially, don't hide it.
                        • Set the current, microstepping and steps/mm of all drives including U.
                        • Then hide U (M584 P3). After that, never mention U again.

                        Here's an alternative that doesn't involve a U axis, based on your steps/mm ratio being 2:1:

                        • Define 3 axes and 3 Z motors
                        • Set the currents, microstepping etc. with the microstepping set to be correct for the U axis
                        • Redefine Z as having only 2 motors
                        • Change the Z microstepping by a factor of 2 so that those 2 motors now have the same steps/mm as the third one
                        • Redefine Z as having 3 motors. After that, don't change the microstepping again.

                        Caution: if VIN power is lost (under voltage event) but the board doesn't reset, all 3 drives will be reprogrammed with the same microstepping. So I suggest you do the above sequence in homez.h and in homeall.g.

                        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

                        cugetareundefined 1 Reply Last reply Reply Quote 0
                        • cugetareundefined
                          cugetare @dc42
                          last edited by

                          @dc42 said in 3 independent Z motors issue:

                          Define 3 axes and 3 Z motors
                          Set the currents, microstepping etc. with the microstepping set to be correct for the U axis
                          Redefine Z as having only 2 motors
                          Change the Z microstepping by a factor of 2 so that those 2 motors now have the same steps/mm as the third one
                          Redefine Z as having 3 motors. After that, don't change the microstepping again.

                          Thanks a lot for the help, I was actually thinking that micro-stepping could be the answer but i would have never figured it out alone how exactly to to that. i added the following 3 lines after removing all mentions of the U axis and switching back to M667 S1

                          M584 Z2:4
                          M350 Z32
                          M584 Z2:3:4
                          

                          works like a champ! even tested the leadscrew self adjustment and works perfectly.

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