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

    3 independent Z motors issue

    Scheduled Pinned Locked Moved
    Duet Hardware and wiring
    4
    12
    474
    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.
    • 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