Triple Z Axis G32 Bed Traming
-
I am trying to implement triple Z bed traming on my CoreXY PRINTER but the bed seems to calibrate in software but move in the incorrect direction i have confirmed the motors are connected to the corresponding drivers and match in the firmware so not sure what i am missing.
Config G,
; Configuration file for Duet 3 (firmware version 3.2RC2)
; executed by the firmware on start-up
;
; generated by RepRapFirmware Configuration Tool v3.1.10 on Mon Dec 07 2020 21:49:17 GMT+0000 (Greenwich Mean Time); General preferences
G21 ; Work in millimetres
G90 ; send absolute coordinates...
M83 ; ...but relative extruder moves
M550 P"Duet 3" ; set printer nameM669 K1 ; select CoreXY mode
M569 P0.0 S0 ; Duet 3 physical drive 0.0 goes backwards (X)
M569 P0.1 S1 ; Duet 3 physical drive 0.1 goes backwards (Y)
;M584 P0.2 S0 ; Empty Header for Extruder Motor.
M569 P0.3 S0 ; Duet 3 physical drive 0.3 goes backwards (Z1 Right Middle Motor)
M569 P0.4 S0 ; Duet 3 physical drive 0.4 goes backwards (Z2 Front left Motor)
M569 P0.5 S0 ; Duet 3 physical drive 0.5 goes backwards (Z3 Back Left Motor)
M584 X0.0 Y0.1 Z0.3:0.4:0.5 ; 3 * Z motors connected to 0.3 (Right Middle), 0.4 (Front left), 0.5 (Back Left Motor) Need to keep in this order to match lead screw postions.
M584 E20.0 ; set drive mapping -- tool board
M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation
M92 X160.00 Y160.00 Z400.00 E415.00 ; set steps per mm M92 Z400 for 1.8º degree steppers and M92 X160 Y160 for 0.9ºM671 X170:-180:-190 Y30:-170:-190 S20 ; leadscrews @ Right middle (X170 Y30),Front left (X-180 Y-170), left Rear (X190 Y-190) (Sxx = tollerance ie 20mm)
M566 X600.00 Y600.00 Z360.00 E600.00 P1 ; set maximum instantaneous speed changes (mm/min)
M203 X6000.00 Y6000.00 Z600.00 E1200.00 ; set maximum speeds (mm/min)
M201 X3000.00 Y3000.00 Z120.00 E120.00 ; set accelerations (mm/s^2)
M906 X1100 Y1100 Z1100 E1000 I30 ; set motor currents (mA) and motor idle factor in per cent
;M593 F34.2 <---- look into. ; cancel ringing at 34.2Hz
M84 S30 ; Set idle timeout; Axis Limits
M208 X-195 Y-195 Z0 S1 ; set axis minima
M208 X200 Y200 Z450 S0 ; set axis maxima; Endstops
M574 X1 S3 ; configure sensorless endstop for high end on X
M574 Y1 S3 ; configure sensorless endstop for high end on Y; Z-Probe
M574 Z1 S2 ; Set endstops controlled by probe
M558 P8 C"^20.io0.in" I1 H10 F500 T6000 ; Toolboard P8 Z probe mode for ToolBoard, Prusa PindaV2 sensor config.(F= Bed speed to probe.) (H= distance bed moves during probing) ( S= tollerance) (p= probe type)
M308 S2 P"20.temp1" A"Pinda V2" Y"thermistor" A20 T100000 B3950 ; Toolboard, Prusa PindaV2 temperature config.
G31 P500 X-30 Y15 Z2.450 ; set Z probe trigger value, offset and trigger height
M557 X-180:180 Y-170:170 S20 ; define mesh grid; Bed Heaters
M308 S0 P"temp0" Y"thermistor" T100000 B4138 ; configure sensor 0 as thermistor on pin temp0
M950 H0 C"out0" T0 ; create bed heater output on out0 and map it to sensor 0
M307 H0 B1 S1.00 ; enable bang-bang mode for the bed heater and set PWM limit
M140 H0 ; map heated bed to heater 0
M143 H0 S120 ; set temperature limit for heater 0 to 120C; Hotend Heaters
M308 S1 P"20.temp0" Y"PT1000" ; Toolboard configure sensor 0 as a PY1000 thermistor on pin temp0
M950 H1 C"20.out0" T1 ; Toolboard create nozzle heater output on out1 and map it to sensor 1
M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit
M143 H1 S280 ; set temperature limit for heater 1 to 280C; Fans
M950 F0 C"20.out1" ;Toolboard create fan 0 on pin out1 and set its frequency
M106 P0 S0 H-1 Q500 ; set fan 0 value. Thermostatic control is turned off
M950 F1 C"20.out2" Q500 ; Toolboard Partcooling Fan1 on pin out2 and set its frequency
M106 P1 S1 H1 T45 ; set fan 1 value. Thermostatic control is turned on
M950 F2 C"out7" Q500 ; Toolboard Partcooling Fan1 on pin out2 and set its frequency
M106 P1 S1 H1 T25 ; set fan 1 value. Thermostatic control is turned on; Tools
M563 P0 S"HOTEND" 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
M575 P1 S1 B57600 ; enable support for PanelDue
M501 ; load saved parameters from non-volatile memory
M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss
T0 ; select first toolBed Config
; bed.g
; called to perform automatic bed compensation via G32
;M561 ; clear any bed transform
G28 ; home all
M400
G30 P0 X170 Y30 Z-99999 ; probe near a leadscrew middle right
M400
G30 P2 X-180 Y-170 Z-99999 ; probe near a leadscrew Front left
M400
G30 P1 X-190 Y190 Z-99999 ; probe near a leadscrew rear left
M400
G30 P3 X0 Y0 Z-99999 S3 ; return home and calibrate 3 motors -
Hi,
You don't need the M400s.
And I would put the S3 parameter on the third G30 and remove the fourth. I might be part of the problem.
After the process is complete then move to your XY reference point (I suggest the center of the bed) and do a single G30 to set the Z=0 datum.
Frederick
-
What's in your homeall.g?
-
@Phaedrux
; homeall.g
; called to home all axes
;
; generated by RepRapFirmware Configuration Tool v3.1.10 on Sun Dec 20 2020 20:21:04 GMT+0000 (Greenwich Mean Time)M400 ; wait til stuff stops
M913 X30 Y30 ; drop motor currents to 30%
M201 X1000 Y1000 ; reduce acceleration on X/Y to stop false triggers
M915 P0.0:0.1 S2 R0 F0 H400 ; both motors because corexy; Sensitivity 2, don’t take action, don’t filter, 400steps/secG91 ; set relative
G1 Z5 F600 H2 ; clear the bed
G1 H1 X-400 F4000 ; move left 400mm, stopping at the endstop
G1 X120 F1200 ; move away from end
G1 H1 Y-400 F4000 ; move 400mm, stopping at the endstop
G0 Y20 F1200 ; move away from end
G1 Z-5 F480 H2 ; bed back to original height
G90 ; back to absolute positioningM400 ; wait again
M913 X100 Y100 ; motor currents back to 100%
G0 X0 Y0 F3600 ; move to center of bed
G91 ; relative positioning
G1 H2 Z5 F480 ; lift Z relative to current position
G90 ; absolute positioning
G1 H2 X30 Y0 F1200 ; go to first probe point
G30 ; home Z by probing the bed; Uncomment the following lines to lift Z after probing
G91 ; relative positioning
G1 Z5 F480 ; lift Z relative to current position
G90 ; absolute positioning -
Changed Bed.g to
; bed.g
; called to perform automatic bed compensation via G32
;M561 ; clear any bed transform
G28 ; home all
G30 P0 X170 Y30 Z-99999 ; probe near a leadscrew middle right
G30 P2 X-180 Y-170 Z-99999 ; probe near a leadscrew Front left
G30 P1 X-190 Y190 Z-99999 S3 ; probe near a leadscrew rear left and calibrate 3 motorsG28 Z ;homing is set to center of bed.
G30 S-1 -
You need to make sure everything is in the same order.
So the mapping for the z axis should be front left, front right, rear.
M671 should also be in that order.
Finally, your probe points should also be in the same order.
You can change the order but it should be the same in all places. -
@Turricann said in Triple Z Axis G32 Bed Traming:
Changed Bed.g to
G30 P0 X170 Y30 Z-99999 ; probe near a leadscrew middle right
G30 P2 X-180 Y-170 Z-99999 ; probe near a leadscrew Front left
G30 P1 X-190 Y190 Z-99999 S3 ; probe near a leadscrew rear left and calibrate 3 motorsYour config.g file says you leadscrews are at these locations:
M671 X170:-180:-190 Y30:-170:-190 S20 ;
Your bed.g file is probing these same locations.
How can that be?
Normally your leadscrews would be outside the bed min/max values and the probing inside the min/max values.
Frederick
-
@Turricann said in Triple Z Axis G32 Bed Traming:
G1 H2 X30 Y0 F1200 ; go to first probe point
G30 ; home Z by probing the bedDon't use H2 on that G1 move before the G30.
@Turricann said in Triple Z Axis G32 Bed Traming:
G28 Z ;homing is set to center of bed.
G30 S-1What's in your homez now?
Why G30 S-1?
-
@fcwilt Depending on how the bed is supported probing at the same locations as specified by M671 may be correct. M671 is really specifying the positions of the pivots used to support the bed. On some beds this will be the position of the leadscrew, but on others (particularly ones using a kinematic mount) it may actually be a point under/within the bed. So for instance in my case I have bed supports arms that run (on a linear rail) from the leadscrews to a pivot point that is inside/under the bed. The support arm is in effect rigidly attached to the frame/leadscrew and the bed pivots around the other end of the support arm where it meets the bed. On many printers the mount point to the bed is rigid and the bed in effect pivots at the leadscrew.
The G32 process basically fits a plane to a set of probed points to obtain the current plane of the bed and then attempts to adjust the height of the pivot points so that the resultant adjusted plane is level.
-
Here is my WORKING files for my 3 lead-screw core-xy
DISCLAIMER: These files work for ME, they might not be considered the right or wrong way to do things but they are done the way I like them to be done.
; Config for CoreXY ; ; General preferences ; G90 ; Operate the motion system with absolute positioning moves M83 ; Operate the Extruder with relative positioning moves M669 K1 ; Set the machine to operate in CoreXY mode M552 S1 ; Enable Network M550 P"Core-XY" ; Set Machine Name ; ; Drives (121.XX) denotes the Can-Bus address that the toolboard LC1 is operating on ; M671 X-31:332:150 Y-10:-10:350 S5 ; The Z axis pivot point locations to allow true levelling to be undertaken M584 E121.0 S1 ; Drive mapping for the toolboard LC1 M584 X0.4 Y0.5 Z0.1:0.2:0.3 ; Drive mapping for the mainboard 6HC M569 P121.0 S1 ; Driver 121.0 is connected to the extruder motor output (Driver 0) on the toolboard LC1 & goes forwards M569 P0.1 S0 ; Driver 0.1 is connected to the Z1 axis motor (Front Left) on the mainboard 6HC & goes backwards M569 P0.2 S0 ; Driver 0.2 is connected to the Z2 axis motor (Front Right) on the mainboard 6HC & goes backwards M569 P0.3 S0 ; Driver 0.3 is connected to the Z3 axis motor (Centre Rear) on the mainboard 6HC & goes backwards M569 P0.4 S0 ; Driver 0.4 is connected to the X axis motor on the mainboard 6HC & goes backwards M569 P0.5 S0 ; Driver 0.5 is connected to the Y axis motor on the mainboard 6HC & goes backwards M350 X16 Y16 Z16 E16 I1 ; The stepper motors microstepping & interpolation amount M92 X160.00 Y160.00 Z800.00 E480.00 ; Steps per mm of each stepper motor M566 X700.00 Y700.00 Z160.00 E160.00 ; The maximum instantaneous speed changes expressed in (mm/min) that the stepper motors are allowed to achieve M203 X6000.00 Y6000.00 Z1200.00 E1200.00 ; The maximum speeds expressed in(mm/min) that the stepper motors are allowed to achieve M201 X1000.00 Y1000.00 Z1000.00 E1000.00 ; The maximum accelerations expressed in(mm/s^2 that the stepper motors are allowed to achieve M906 X800 Y800 Z800 E600 I30 ; The maximum motor currents expressed in(mA) & idle factor expressed as a % that the stepper motors are allowed to achieve M84 S30 ; The idle timeout ; ; Axis Limits ; M208 S1 X-12 Y-20 Z-1 ; Each axis's minimum travel locations M208 S0 X300 Y320 Z300 ; Each axis's maximum travel locations ; ; Endstops ; M574 X1 S1 P"121.io1.in" ; The X endstop is located at the X axis's minimum location & is mapped/connected to the io1.in port on the toolboard LC1 M574 Y1 S1 P"io3.in" ; The Y endstop is located at the Y axis's minimum location & is mapped/connected to the io3.in port on the mainboard 6HC M574 Z1 S2 ; The Z probe acts as a Z axis endstop & is located at Z axis's minimum & mapped/connected to the io0 port on the toolboard LC1 ; ; Z-Probe ; ;M950 S0 C"121.io0.out" ; Create servo pin 0 for BLTouch M558 P8 C"121.io0.in" H5 F100 T6000 ; The Z probe is of type 8 & is mapped/connected to 121.io0.in port on the toolboard LC1 ;M558 P8 C"io6.in" H5 F100 T6000 ; TEST FOR THE IR SENSOR CONNECTED DIRECTLY TO THE MAIN BOARD ;G31 X28 Y-38 Z0.117 P25 ; FOR THE BL TOUCH The Z probe's trigger value, offsets & trigger height G31 X-18 YO Z-0.400 P50 ; FOR THE MINI IR PROBE ON THE TOOL BOARD M557 X5:270 Y0:280 S44.1 ; The mesh grid's defined points ; ; Bed Heater ; M308 S0 P"temp0" Y"thermistor" T100000 B4138 A"Bed" ; Sensor0 is a thermistor & mapped/connected to the temp0 port on the mainboard 6HC M950 H0 C"out0" T0 ; The bed heater output is mapped/connected to the out0 port & mapped/connected to sensor0 on the mainboard 6HC M307 H0 B0 S1.00 ; The bed heater is set to PWM & limited M140 H0 ; The heated bed is mapped/connected to heater0 port on the mainboard 6HC M143 H0 S120 ; The heated bed it temperature limited to 120C on heater0 on the mainboard 6HC ; ; Hot End Heater ; M308 S1 P"121.temp0" Y"thermistor" T100000 B4725 C7.06e-8 A"Hot End" ; Sensor1 is a thermistor & mapped/connected to the temp1 on the toolboard LC1 (B4725) M950 H1 C"121.out0" T1 ; The hot end heater optput is mapped/connected to the out1 port & mapped/connected to sensor1 on the toolboard LC1 M307 H1 A312.4 C202.6 D15 S1 V24.2 B0 ; Testing M143 H1 S310 ; The hot end temperature is limited to 310C on heater1 on the toolbaord LC1 ; ; Fans ; M950 F0 C"121.out1" ; The part cooling fan (fan0)is mapped/connected to out1 on the toolboard LC1 M106 P0 S0 H-1 C"Part Cooling Fan" ; The part cooling fan (fan0)is set to value 0 & thermostatic control is turned off M950 F1 C"121.out2" ; The hot end cooling fan(fan1)is mapped/connected to out2 on the toolboard LC1 M106 P1 S255 H-1 ; The hot end cooling fan(fan1)is set to value 1 & thermostatic control turned off ; ; Tools ; M563 P0 D0 H1 F0 S"Hot End" ; Tool 0's definition G10 P0 X0 Y0 Z1 ; Tool 0's axis offsets G10 P0 R0 S0 ; Tool 0 is set to active & it's standby temperature is set to 0C ; ; Misc Settings ; ;T0 ; Define which tool is selected at start up M501 ; Run any config-overide settings
; bed.g ; ; called to perform automatic bed compensation via G32 ; G28 ; Home all axis's G30 P0 X2 Y-2 Z-99999 ; Probe near the front left lead-screw G30 P1 X152 Y278 Z-99999 ; Probe near the rear lead screw G30 P2 X290 Y-2 Z-99999 S3 ; Probe near the front right lead-screw G30 P0 X2 Y-2 Z-99999 ; Probe near the front left lead-screw (Second Pass) G30 P1 X152 Y278 Z-99999 ; Probe near the rear lead screw (Second Pass) G30 P2 X290 Y-2 Z-99999 S3 ; Probe near the front right lead-screw (Second Pass) G91 ; Switch to relative positioning moves G1 H2 Z1 F8000 ; Drop the Z axis (the bed) relative to its current position G90 ; Revert back to absolute positioning moves G1 X160 Y155 F8000 ; Position the nozzle at the centre of the bed G30 ; Probe and set the height as probed
; homeall.g ; ; called to home all axes ; G91 ; Switch to relative positioning moves G1 H2 Z5 F6000 ; Drop the Z axis (the bed) by 5mm relative to it's current position G1 H1 X-350 F6000 ; Fast travel the X axis close to it's endstop & stop G1 H2 Z-5 F6000 ; Raise the Z axis (the bed) by 5mm relative to it's current position G1 H2 Z2 F6000 ; Drop the Z axis (the bed) by 2mm relative to it's current position G1 H1 Y-350 F6000 ; Fast travel the Y axis close to it's endstop & stop G1 H0 X175 Y170 F6000 ; Fast travel both X & Y to place the probe at the bed centre G90 ; Revert back to absolute positioning moves G30 ; Raise the Z axis (the bed) and stop when probe is triggered and set Z to the trigger height
-
@Phaedrux Yes i realized what i had done late as i posted it and removed the H2 on the G1 move you will have to bear with me this is my first attempt @ setting up a 3D printer.
@jay_s_uk
Yes everything is in the correct order triple checked this including M671 and probe points.@fcwilt you are correct the lead screw points are outside the bed area however the probe points are the position where the bed mount attaches to the bed unless you know of a way to put an offset in for the actual positions ?
@gloomyandy your description fits my bed setup.
@CaLviNx just reading through your config should the M671 command come after M584 not before ?
Referance https://duet3d.dozuki.com/Wiki/Bed_levelling_using_multiple_independent_Z_motors.; bed.g
; called to perform automatic bed compensation via G32
;M561 ; clear any bed transform
G28 ; home all
G30 P0 X170 Y30 Z-99999 ; probe near a leadscrew middle right
G30 P2 X-180 Y-170 Z-99999 ; probe near a leadscrew Front left
G30 P1 X-190 Y190 Z-99999 S3 ; probe near a leadscrew rear left and calibrate 3 motorsG1 X0 Y0 F8000
G30 Z; homez.g
; called to home the Z axis
;
G91 ; relative positioning
G1 H2 Z5 F6000 ; lift Z relative to current position
G90 ; absolute positioning
G1 X0 Y0 F6000 ; go to first probe point
G30 ; use probe to find Z 0
G91 ; relative positioning
G1 Z10 F6000 ; lift Z relative to current position
G90 ; absolute positioning -
@Turricann said in Triple Z Axis G32 Bed Traming:
@CaLviNx just reading through your config should the M671 command come after M584 not before ?
Which part of my disclaimer did you not understand ?
-
@Turricann said in Triple Z Axis G32 Bed Traming:
@fcwilt you are correct the lead screw points are outside the bed area however the probe points are the position where the bed mount attaches to the bed unless you know of a way to put an offset in for the actual positions ?
How is it possible to probe at the lead screw locations? How can the probe get to those location without colliding with the lead screws?
The M671 values should be the actual XY position of each leadscrew while the G30 XY positions should be somewhere on the bed.
Frederick
-
@fcwilt or the kinematic mount positions
-
@jay_s_uk said in Triple Z Axis G32 Bed Traming:
@fcwilt or the kinematic mount positions
That's a more accurate explanation
@fcwilt some printers the lead screws only job is to move the axis, and they can also have pivots used to eliminate over constraining that axis
-
@fcwilt I understand what you mean, i had taken it as the M671 command needed to match the commands in the bed.g
ie the probe points but i have now updated the potions to match the actual lead screw position leveling seem to work better now but i need to run the leveling process twice as the first run did not adjust the offset correctly.output from the console.
G32
Leadscrew adjustments made: 1.999 1.920 3.028, points used 3, (mean, deviation) before (-0.548, 3.417) after (-0.000, 0.000)
Leadscrew adjustments made: 0.057 -0.082 1.163, points used 3, (mean, deviation) before (-2.838, 3.845) after (0.000, 0.000)
1/2/2021, 5:09:05 PM G32
Leadscrew adjustments made: 1.166 1.972 2.849, points used 3, (mean, deviation) before (-0.292, 2.602) after (-0.000, 0.000)
Leadscrew adjustments made: 0.115 -0.163 0.823, points used 3, (mean, deviation) before (-2.285, 3.068) after (0.000, 0.000) -
@CaLviNx said in Triple Z Axis G32 Bed Traming:
@jay_s_uk said in Triple Z Axis G32 Bed Traming:
@fcwilt or the kinematic mount positions
That's a more accurate explanation
@fcwilt some printers the lead screws only job is to move the axis, and they can also have pivots used to eliminate over constraining that axis
That was not the point I was trying to make.
My question dealt with how it was possible to probe the lead screw position (or the mount position).
And as we now see the OP misunderstood what the parameters to M671 should have been.
Frederick
-
@Turricann said in Triple Z Axis G32 Bed Traming:
@fcwilt I understand what you mean, i had taken it as the M671 command needed to match the commands in the bed.g
ie the probe points but i have now updated the potions to match the actual lead screw position leveling seem to work better now but i need to run the leveling process twice as the first run did not adjust the offset correctly.You still seem to be having a problem. On my printer two runs are always enough to get it spot on.
Does a single G30 to set the Z=0 datum work as expected? If you move to Z=0 is the nozzle touching (or nearly so) the bed?
Frederick
-
@Turricann said in Triple Z Axis G32 Bed Traming:
G1 X0 Y0 F6000 ; go to first probe point
G30 ; use probe to find Z 0The position of the probe for the G30 should match between homez and homeall (and any other place you are setting Z0)
-
Doing a single G30 probes the bed @X0, Y0(Bed center), Doing a G1 Z0 the nozzle moves so its touching the bed.