Dual Z - Weird compensation (G32) - Cartesian style printer
-
Hi,
I recently commissioned a Cartesian style printer with two Z motors (drive 2 & drive 3) that use a Bltouch to home, but after the probe, the X-axis would not correct the tilt but would worsen it.
The probe would yield two results back, and the majority of the time, its same number (or extremely close to it), but one would be positive, and the other would be the exact opposite of the first valve. I would manually move the lead screws to level the X-axis, and at the end of the G32 command, the printer would tilt axis.
I'm not sure if I set up my config file correctly.
Firmware: 2.03
Here's my config.g file
; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"Big Bertha" ; set printer name M669 K0 ; select Cartesian ;M572 D0 S0.04 ; pressure advance ;M591 D0 P1 C3 S1 ; Filament run-out sensor. ;M556 S50 X-1.0 Y-1.0 Z0.00 ; Axis skew compensation ; Network M552 S1 ; Turn on wifi M552 P192.168.0.17 ; Set Static-IP address M586 P0 S1 ; Enable HTTP M586 P1 S0 ; Disable FTP M586 P2 S0 ; Disable Telnet ; Stepper Motor Direction M569 P0 S0 ; physical drive 0 goes backwards(X-AXIS) M569 P1 S1 ; physical drive 1 goes forwards (Y-AXIS) M569 P2 S1 ; physical drive 2 goes forwards (Z1-AXIS) M569 P3 S0 ; physical drive 3 goes backwards(E0 - Titan Aero) M569 P4 S1 ; physical drive 4 goes forwards (Z2-AXIS) ; Axis drive mapping M584 X0 Y1 Z2:4 U4 E3 ; Driver 0 = X, Driver 1 = Y, Driver 2 & 4 = Z, U=4 (second Z motor) M671 X50:350 Y110:110 S8 ;leadscrews at left (connected to Z) and right (connected to E0) of X axis ; Axis Limits M208 S1 X0 Y0 Z0 ; Set axis minima M208 S0 X400 Y400 Z475 ; Set axis maxima ; All Axis M204 P500 T500 ; Print Acceleration and travel Accerlation M350 X16 Y16 Z16 U16 E16 I1 ; configure microstepping with interpolation M92 X100.00 Y80.00 Z800.00 U800.00 E420.00 ; set steps per mm M906 X500 Y1200 Z1200 U1200 E500 I30 ; set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout ; Printer Acceleration/Speed/Jerk ; X-Axis M201 X1500 ; accleration (mm/s) M566 X1200 ; instantaneous speed change (jerk - mm/min) M203 X9000 ; maximum speed (mm/min) ; Y-Axis M201 Y500 ; accleration (mm/s) M566 Y600 ; instantaneous speed change (jerk - mm/min) M203 Y9000 ; maximum speed (mm/min) ; Z-Axis M201 Z100 ; accleration (mm/s) M566 Z24 ; instantaneous speed change (jerk - mm/min) M203 Z300 ; maximum speed (mm/min) ; U-Axis M201 Z100 ; accleration (mm/s) M566 Z24 ; instantaneous speed change (jerk - mm/min) M203 Z300 ; maximum speed (mm/min) ; Extruder M201 E10000.00 ; accleration (mm/s) M566 E7200 ; instantaneous speed change (jerk - mm/min) M203 E900000 ; maxium speed (mm/min) ; Endstops M574 X1 Y1 S3 ; set endstops controlled by motor stall detection ; Z-Probe M307 H3 A-1 C-1 D-1 ; Disable Heater 3 for BLTouch M574 Z1 U1 S2 ; Set endstops controlled by probe M558 P9 H8 F100 R1.0 T6000 A8 B1 S0.02 ; Set Z probe type to bltouch and the dive height + speeds G31 P25 X0.00 Y-30.0 Z3.49 ; Z offset (lower futher away from bed) and Z probe location (old P25) (P value, lower = more sensitive) M557 X30:300 Y0:300 S40 ; Define mesh grid ; Heaters M140 H-1 ; disable heated bed M305 P1 T100000 B4725 C7.060000e-8 R4700 ; set thermistor + ADC parameters for heater 1 M143 H1 S280 ; set temperature limit for heater 1 to 280C M570 H1 P30 T30 S5 ; Heater fault time out ; Fans ; Tools M563 P0 S"TitanAero" D0 H1 F0 ; define tool 0 G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C ; Custom settings are not defined ; Miscellaneous M501 ; load saved parameters from non-volatile memory M911 S23 R23.3 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss T0 ; select first tool
-
@banana_waffles said in Dual Z - Weird compensation (G32) - Cartesian style printer:
M584 X0 Y1 Z2:4 U4 E3 ; Driver 0 = X, Driver 1 = Y, Driver 2 & 4 = Z, U=4 (second Z motor)
why do you have driver 4 assigned to u and z?
this should not be required.
-
Hi,
After you level the bed manually run two G30 S-1 commands at the same locations that are being probed when executing G32.
See what values are reported and let us know.
Frederick
-
Are your motors plugged in the right way around? In the example here:
https://duet3d.dozuki.com/Wiki/Bed_levelling_using_multiple_independent_Z_motors#Section_Example_for_2_motors
the motors are defined by M671 in the order they are defined by M574, so the left motor plugs into Z, right into E1. If they’re swapped you get a correction the wrong way.Ian
-
@Veti said in Dual Z - Weird compensation (G32) - Cartesian style printer:
@banana_waffles said in Dual Z - Weird compensation (G32) - Cartesian style printer:
M584 X0 Y1 Z2:4 U4 E3 ; Driver 0 = X, Driver 1 = Y, Driver 2 & 4 = Z, U=4 (second Z motor)
why do you have driver 4 assigned to u and z?
this should not be required.
Driver 4 isn't assigned to U and Z, from what I've understand the Z axis is controlled by driver 2 and 4, and that U4 is assigning a letter to the axis?
@droftarts said in Dual Z - Weird compensation (G32) - Cartesian style printer:
Are your motors plugged in the right way around? In the example here:
https://duet3d.dozuki.com/Wiki/Bed_levelling_using_multiple_independent_Z_motors#Section_Example_for_2_motors
the motors are defined by M671 in the order they are defined by M574, so the left motor plugs into Z, right into E1. If they’re swapped you get a correction the wrong way.Ian
Yup, the motors goes up and down correctly and are leveled (if I manually level it) before G32.
@fcwilt said in Dual Z - Weird compensation (G32) - Cartesian style printer:
Hi,
After you level the bed manually run two G30 S-1 commands at the same locations that are being probed when executing G32.
See what values are reported and let us know.
Frederick
Will do!
-
Something's wrong in these lines:
; Axis drive mapping M584 X0 Y1 Z2:4 U4 E3 ; Driver 0 = X, Driver 1 = Y, Driver 2 & 4 = Z, U=4 (second Z motor) M671 X50:350 Y110:110 S8 ;leadscrews at left (connected to Z) and right (connected to E0) of X axis ; Axis Limits M208 S1 X0 Y0 Z0 ; Set axis minima M208 S0 X400 Y400 Z475 ; Set axis maxima
You've got your leadscrew positions inside your bed. I'm guessing they are 50mm outside the bed, so should be
M671 X-50:450 Y110:110 S8
@banana_waffles said in Dual Z - Weird compensation (G32) - Cartesian style printer:
Driver 4 isn't assigned to U and Z, from what I've understand the Z axis is controlled by driver 2 and 4, and that U4 is assigning a letter to the axis?
You don't need to define the U axis unless you are specifically homing that axis independently of the Z axis. There's no other reason to define it. For example, you home the Z axis (both motors) with an endstop on the Z endstop connection, then home the U axis (i.e. one end of the Z axis) with another endstop connected to the E1 endstop. Or use motor stall to do the same thing. But you're not doing that, so no need to define U.
Yup, the motors goes up and down correctly and are leveled (if I manually level it) before G32.
Not what I said. I didn't mean that the motor directions are reversed, I mean that if the Z motor connections are swapped, it will apply correction in the wrong direction, which is pretty much exactly the symptom you describe:
but after the probe, the X-axis would not correct the tilt but would worsen it.
Try plugging motor from Z into E1, and vice versa.
Posting the commands or macro you're running to actually do the levelling would be helpful.
Ian
-
@droftarts said in Dual Z - Weird compensation (G32) - Cartesian style printer:
Not what I said. I didn't mean that the motor directions are reversed, I mean that if the Z motor connections are swapped, it will apply correction in the wrong direction, which is pretty much exactly the symptom you describe:
Ah that makes a lot more sense! I'll see when I get home and will post the update.
You don't need to define the U axis unless you are specifically homing that axis independently of the Z axis. There's no other reason to define it. For example, you home the Z axis (both motors) with an endstop on the Z endstop connection, then home the U axis (i.e. one end of the Z axis) with another endstop connected to the E1 endstop. Or use motor stall to do the same thing. But you're not doing that, so no need to define U.
I see!
So it should only be:
M584 X0 Y1 Z2:4 E3
I just type G32 in the console. Here are my bed/homex/homey/homez.g code
; bed.g M561 ; clear any bed transform G28 ;home G30 P0 X50 Y110 Z-99999 ; probe near 1st leadscrew G30 P1 X350 Y110 Z-99999 S2 ; probe near 2nd leadscrew and calibrate 2 motors
My homey is the same.
; homex.g M400 ; make sure everything has stopped before we make changes G91 ; use relative positioning G1 Z5 U5 F6000 S2 ; lift Z and U axis up 5MM to clear bed G90 ; absolute positioning M913 X50 ; reduce motor current to 50% to prevent belts slipping M201 X600 ; reduce acceleration on X to stop false triggers M915 P0 S3 R0 F0 ; Driver 0, Sensitivity 3, don’t take action, don’t filter G91 ; use relative positioning G1 S1 X-500 F4000 ; move to home position G90 ; back to absolute positioning M400 M913 X100 ; motor currents back to normal M201 X1500 ; accel back to original
;homez G91 ; relative positioning M584 Z2:4 ; (split axis into 2) G1 Z8 U8 F6000 S2 ; lift Z relative to current position G90 ; absolute positioning G1 X200 Y110 F6000 ; go to first probe point G30 ; home Z by probing the bed M584 Z2:4 P3
-
@banana_waffles said in Dual Z - Weird compensation (G32) - Cartesian style printer:
M584
remove these from the homez. they are not required as you do not have an independent u axis.
remove the u part from the G1 command. -
@Veti Thanks for all the help! I got the printer sorted out and did what you've recommended!!
The motors cables were swapped, and I've edited my config and homing files. Works perfectly now!