Bed levelling with 3x independent Z motors issues
-
I've got some weirdness happening when i try to run bed leveling on my 3x Z stepper machine (Voron Trident) that i can't wrap my head around.
Thought i had got everything working yesterday, at least to the point where checking bed leveling routine was the next step. Then i found out that the printer totally shits the bed once it comes to the point in the leveling macro that calls out the G30 commands. It's like it haven't got a clue what to do and all the steppers kinda just slowly goes everywhere without any apparent logic to whats happening at all (and i have to toggle the power before it destroy itself). I've checked the M584 and M671 countless times now and i can't see anything wrong with either of them. And I've tripple checked that all the steppers are indeed wired up to the correct physical stepper driver, which they are.
This is happening on a Wifi v1.03 running the 3.4.0 b6 bundle.
Here's the related files for those willing to check them out:
config.g
; General preferences M111 S0 ; debugging off G21 ; work in millimetres G90 ; send absolute coordinates... M83 ; set extruder to relative mode M575 P1 B57600 S1 ; enable and configure PanelDue ; General setup M669 K1 X-1:-1:0 Y1:-1:0 Z0:0:1 ; select CoreXY mode and set kinematics matrix ; Network M550 P"Voron Trident" ; set printer name M552 S1 ; enable network M586 P0 S1 ; enable HTTP (for DWC) M586 P1 S1 ; enable FTP (for remote backups) M586 P2 S0 ; disable Telnet ; --- 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 ; Drive for extruder M569 P5 S0 ; E (physical drive 5) goes backwards ; Motor mapping and steps per mm M584 X4 Y3 Z0:1:2 E5 ; set drive mapping M350 X16 Y16 Z16:16 E16 I1 ; configure microstepping with interpolation M92 X80.00 Y80.00 Z400.00:400.00:400.00 ; set XYZ steps per mm (1.8deg motors) M92 E430.11 ; set Extruder steps per mm (BMG) ; Drive currents M906 X1400 Y1400 Z1200:1200:1200 ; set XYZ motor currents (mA) M906 E1000 ; set Extruder motor current (mA) M906 I30 ; set ide current percentag 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 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 ; Z-Probe M558 K0 P8 C"^zprobe.in" H5 F350:120 T18000 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 ; Bed leveling M671 X175:388:-38 Y416.6:1.5:1.5 S10 ; leadscrew locations (Rear, Right, Left) M557 X15:335 Y25:325 P5:5 ; define mesh grid ( positions include the Z offset!) ; Bed heater M308 S0 P"bedtemp" Y"thermistor" T100000 B4138 A"Bed" ; configure sensor 0 as thermistor on pin bedtemp M950 H0 C"bedheat" T0 ; create bed heater output on bedheat and map it to sensor 0 M307 H0 B0 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit M140 H0 ; map heated bed to heater 0 M143 H0 S110 ; set temperature limit for heater 0 to 110C M143 H0 A2 C0 S110 ; make sure bed heater stays below 110°C M143 H0 A1 C0 S125 ; make sure bed heater shuts down at 125°C ; Hodend heater M308 S1 P"spi.cs1" Y"rtd-max31865" A"Hotend" ; configure sensor 1 as thermocouple via CS pin spi.cs1 M950 H1 C"e0heat" T1 ; create nozzle heater output on e0heat and map it to sensor 1 M307 H1 B0 S1.00 ; disable bang-bang mode for heater and set PWM limit ; Chamber temperature sensor M308 S5 P"e2temp" Y"thermistor" T100000 B3950 A"Chamber Temp" ; configure sensor 10 as thermistor on pin e2temp ; Fans M950 F0 C"fan0" Q100 ; create fan 0 on pin fan0 and set its frequency M106 P0 S0 H-1 C"Part Cooling" ; set fan 0 value. Thermostatic control is turned off M950 F1 C"fan1" Q100 ; create fan 1 on pin fan1 and set its frequency M106 P1 S1 H1 T45 ; hotend fan @ 100%, turns on if temperature sensor 1 reaches 45 degrees M950 F2 C"fan2" Q100 ; create fan 2 on pin fan2 and set its frequency M106 P2 H2:3 L0.15 X1 B0.3 T40:70 ; Set fan 2 value, Electronics cooling, starts to turn on when the MCU temperature (H100) reaches 45C and reaches full speed when the MCU temperature reaches 65C or if any TMC2660 drivers (H101 & H102) report that they are over-temperature. Thermostatic control is turned on ; Tools M563 P0 S"Mosquito" 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 M308 S2 Y"mcu-temp" A"MCU" ; configure sensor 100 as mcu temperature M308 S3 Y"drivers" A"DRIVERS" ; configure sensor 101 as drivers temperature M950 P2 C"e1heat" ; create output port 2 attached to e1heat connector for LED lights M591 D0 P1 C"e0stop" ; filament monitor for extruder0, simple sensor (high signal when filament present), connected to e0stop ; Miscellaneous M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; set voltage thresholds and actions to run on power loss M912 P0 S-2.9 ; MCU temp calibration parameters M572 D0 S0.0 ; disable Pressure Advance M98 P"/macros/System/Current/xy_current_high.g" ; set normal xy currents M98 P"/macros/System/Current/z_current_high.g" ; set normal z currents M98 P"/macros/System/fw_retraction.g" ; set firmware retraction settings M501 ; load config-override.g T0 ; select tool 0
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 at 3 points ; 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 --- ; --- 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 M98 P"/macros/System/Home/leave_klicky.g" ; put the klicky probe back in the dock M291 R"Leveling bed" P"Done" T5 ; done
bed_probe_points.g
; bed_probe_points.g ; called to define probing points when traming the bed ; 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
-
Hi you don't mention which board or firmware you have?
have you seen this guide bed levelling. -
@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.
-
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 =/
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.
-
-
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
-
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
-
-
@exerqtor thx
-
@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
-
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 ... "
-
@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:
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
-
-
This post is deleted!