Auto Bed Level/Tilt Calibration with 4 z motors
-
First time posting here, but i have a problem that is stumping me with no luck after days scrolling forums and internet.
My problem is while trying to run bed.g it normally would probe all 4 corners and determine how far out they are and automatically adjust each one and continue to do so until it gets within .02mm and then say proceed to print. Last week between prints, i noticed the first layer was all over the place and then dove in to find my tilt calibration was not updated correctly. Now trying to run the tilt macro (G32) it will go around to all for corners and then says "Your bed is within 0.02 mm between the corners. The difference was 0.000mm. You can proceed to print". i can tell this is incorrect as there can be a notable 5-10mm difference from corner to corner and it will still give the same message.
i have proven that the probe is working by generating a good height map even with the notable height differences from corner to corner. but some reason the machine has decided not to auto level anymore...
Any help is greatly appreciated! Thanks in advance!
Config.g ```; General preferences_________________________________________________________ G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M555 P2 ; Set output to look like Marlin M575 P1 B57600 S1 ; Set auxiliary serial port baud rate and require checksum (for PanelDue) ; Network_____________________________________________________________________ M550 P"Big 60" ; set printer name ;M551 P"MODIX3D" ; Set password (optional) M552 S1 ; enable network ;M552 P0.0.0.0 ; Uncomment this command for using Duet Ethernet board ; Drives_________________________________________________________________________ M569 P0 S1 ; Physical drive 0 goes forwards. X-Axis. M569 P1 S0 ; Physical drive 1 goes backwards. Y-Axis. M569 P2 S0 ; Physical drive 2 goes backwards. Z-Axis. M569 P3 S1 ; Physical drive 3 goes forwards. E0-Extruder. M569 P4 S0 ; Physical drive 4 goes backwards. E1-Extruder. ;Settings_________________________________________________________ M584 X0 Y1 Z2 E3:4 P3 ; Driver mapping ;___________________________________________________________________ M350 X16 Y16 Z16 E16:16 I1 ; Configure microstepping with interpolation M92 X100 Y100 Z2000 E415:415 ; Set steps per mm M566 X300 Y300 Z120 E3600:3600 P1 ; Set maximum instantaneous speed changes (mm/min) M203 X9000 Y9000 Z200 E12000:12000 ; Set maximum speeds (mm/min) M201 X1000 Y1000 Z120 E1000:1000 ; Set accelerations (mm/s^2) M204 P500 ; Set print and travel accelerations (mm/s^2) M906 X1800 Y1800 E1000:1000 I50 ; Set motor currents (mA) and motor idle factor in per cent M906 Z2400 I50 ; set Z motor currents M84 S100 ; Set idle timeout - 100 seconds ; Axis Limits M208 X0 Y0 Z-3 S1 ; set axis minima M208 X600 Y600 Z660 S0 ; set axis maxima ; Endstops M574 X1 S1 P"xstop" ; configure switch-type (e.g. microswitch) endstop for low end on X via pin xstop M574 Y2 S1 P"ystop" ; configure switch-type (e.g. microswitch) endstop for low end on Y via pin ystop ; Z-Probe M558 P9 C"zprobe.in" H5 F120 T6000 A1 R0.7 ; BLTouch probing settings M950 S0 C"exp.heater3" ; set probe pin M376 H50 ; Height (mm) over which to taper off the bed compensation G31 P500 X-26 Y60 ; BLTouch X and Y offset from nozzle M557 X{move.axes[0].min + sensors.probes[0].offsets[0] + 1, move.axes[0].max + sensors.probes[0].offsets[0] - 1} Y{move.axes[1].min + sensors.probes[0].offsets[1] + 1, move.axes[1].max + sensors.probes[0].offsets[1] - 30} P10:10 ; The M557 is used to define the mesh grid area. It uses the P parameter to set the amount of probing points. P10:10 would be a 10x10 grid M98 P"config_probe.g" ; Load the Z-offset from the config_probe.g file ; The Z_offset value is now set in config_probe.g, not in config.g ; Adjust the values there, do not adjust anything here. ; Heaters___________________________________________________________ M140 H-1; disable heated bed (overrides default heater mapping) ;E0_________________________________________________________________ ;M308 S0 P"e0temp" Y"thermistor" T100000 B4725 ; configure sensor 0 as thermistor on pin e0temp ;M308 S0 P"spi.cs1" Y"rtd-max31865" ; Configure sensor 0 as PT100 via the daughterboard M308 S0 P"e0temp" Y"pt1000" ; Configure sensor 0 as PT1000 on pin e0temp M950 H0 C"e0heat" T0 ; create nozzle heater output on e0heat and map it to sensor 0 M98 P"PID_tune_E0.g" R1 ; PID calibration M143 H0 S285 ; set temperature limit for heater 0 to 285C ;E0_________________________________________________________________ ;M308 S0 P"e0temp" Y"thermistor" T100000 B4725 ; configure sensor 0 as thermistor on pin e0temp ;M950 H0 C"e0heat" T0 ; create nozzle heater output on e0heat and map it to sensor 0 ;M307 H0 B0 S1.00 ; PID calibration ;M143 H0 S285 ; set temperature limit for heater 0 to 280C ;E1_________________________________________________________________ ;M308 S1 P"e1temp" Y"thermistor" T100000 B4725 ; configure sensor 1 as thermistor on pin e1temp ;M950 H1 C"e1heat" T1 ; create nozzle heater output on e1heat and map it to sensor 1 ;M307 H1 B0 S1.00 ; PID calibration ;M143 H1 S285 ; set temperature limit for heater 1 to 280C ; Fans & LED_________________________________________________________ M950 F0 C"fan0" Q500 ; create fan 0 on pin fan0 and set its frequency M106 P0 S0 H-1 C"Primary blower fan" ; set fan 0 value. M950 F1 C"fan1" Q500 ; create fan 1 on pin fan1 and set its frequency M106 P1 S0 H-1 C"Secondary blower fan" ; set fan 1 value. M950 F2 C"fan2" Q500 ; create LED on pin fan2 and set its frequency M106 P2 S0 H-1 C"LED" ; Disable fan channel for LED ; Tools______________________________________________________________ ;T0_________________________________________________________________ M563 P0 S"E0 Primary" D0 H0 F0 ; define tool 0 G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets G10 P0 R0 S210 ; set initial tool 0 active and standby temperatures to 0C ;T1_________________________________________________________________ ;M563 P1 S"E1 Secondary" D1 H1 F1 ; define tool 1 ;G10 P1 X0 Y49 Z0 ; set tool 1 axis offsets ;G10 P1 R0 S210 ; set initial tool 1 active and standby temperatures to 0C ; Filament sensor settings__________________________________________________ M591 D0 P1 C"e0stop" S1 ; Regular filament sensor for E0 M591 D1 P1 C"e1stop" S1 ; Regular filament sensor for E1 ; Automatic power saving____________________________________________ M911 S22.5 R29.0 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; Set voltage thresholds and actions to run on power loss. Power Failure Pause ; Primary hotend Clog detector__________________________________________________ ;M591 D0 P7 C"e0stop" S1 L4.2 E10 R10:1000 ; Clog Detector E0 [Add-On] ;Secondary hotend Clog detector__________________________________________________ ;M591 D1 P7 C"e1stop" S1 L4.2 E10 R10:1000 ; Clog Detector E1 [Add-On] ; Crash detector__________________________________________________ ;M950 J2 C"zstop" ; create Input Pin 2 on Z-endstop to for M581 Command. ;M581 P2 T0 S0 R0 ; Crash Detector [Add-On] ; Emergency stop button__________________________________________________ ;M950 J3 C"exp.e6stop" ; create Input Pin 2 on pin E6 to for M581 Command. ;M581 P3 T0 S1 R0 ; Emergency stop [Add-On] ;M581 P3 T1 S1 R1 ; Emergency stop, pause the print [Add-On] ;M581 P3 T1 S1 R0 ; Emergency stop, pause always [Add-On] ; Automatic Z Offset Calibration____________________________________ ;global ErrorFix = 0 ;M501
Bed.g
M98 P"config_probe.g" ; insure probe is using most recent configuration values M280 P0 S60 I1 ; clear any probe errors G28 ; home all M280 P0 S60 I1 ; clear any probe errors G29 S2 ; cancel mesh bed compensation M290 R0 S0 ; cancel baby stepping G90 ; absolute moves G1 Z5 F99999 ; insure Z starting position is high enough to avoid probing errors G1 X{move.axes[0].min+2} Y{move.axes[1].min+2} F6000 ; move to front left G30 ; do single probe which sets Z to trigger height of Z probe ; --- level bed --- while true M280 P0 S60 I1 ; clear any probe errors G30 P0 X{move.axes[0].min + sensors.probes[0].offsets[0] + 2} Y{move.axes[1].min + sensors.probes[0].offsets[1] + 2} Z-99999 ; Probe near front left leadscrew M280 P0 S60 I1 ; clear any probe errors G30 P1 X{move.axes[0].max + sensors.probes[0].offsets[0] - 2} Y{move.axes[1].min + sensors.probes[0].offsets[1] + 2} Z-99999 ; Probe near front right leadscrew M280 P0 S60 I1 ; clear any probe errors G30 P2 X{move.axes[0].max + sensors.probes[0].offsets[0] - 2} Y{move.axes[1].max + sensors.probes[0].offsets[1] - 30} Z-99999 ; Probe near rear right leadscrew M280 P0 S60 I1 ; clear any probe errors G30 P3 X{move.axes[0].min + sensors.probes[0].offsets[0] + 20} Y{move.axes[1].max + sensors.probes[0].offsets[1] - 30} Z-99999 S4 ; Probe near rear left leadscrew if move.calibration.initial.deviation < 0.02 echo "Your bed is within 0.02 mm between the corners. The difference was " ^ move.calibration.initial.deviation ^ "mm. You can proceed to print" break ; check pass limit - abort if pass limit reached if iterations = 10 M291 P"Bed Leveling Aborted" R"Pass Limit Reached" abort "Bed Leveling Aborted - Pass Limit Reached" G1 X{move.axes[0].min+2} Y{move.axes[1].min+2} F6000 ; move to front left G30 ; do single probe which sets Z to trigger height of Z probe
-
You should not need all of the M280 P0 S60 I1 commands. Have you found them to be necessary?
And why are you adding the sensor offsets to the min/max positions?
You might find your code easier to read if you make use of local variables. For instance you could create 4 variables to hold the X/Y min/max values. And 2 more to hold the sensor X/Y offset values. Then your code can become something like (if memory serves me):
G30 P1 X{var.Xmin + var.Xoff} Y{var.Ymin + var.Yoff} Z-99999
Thanks.
Frederick
-
@fcwilt the code was provided by the manufacture (Modix Big 60) and I would assume it was built like that for versatility of copying and pasting to all of their different machines.
Both our Big 60 and our Big Meter have the same style code.
I'm sure there is no good reason having multiple M280 commands. I'm just completely stumped and frustrated that it worked one day and not the next. I have copies of previous system/SD files before firmware updates and reverting back to those doesn't fix anything either.
After Reverting, now I'm getting "Error: This kinematics does not support auto-calibration".
-
@AndrewG said in Auto Bed Level/Tilt Calibration with 4 z motors:
the code was provided by the manufacture (Modix Big 60) and I would assume it was built like that for versatility of copying and pasting to all of their different machines.
That makes a certain amount of sense.
I'm sure there is no good reason having multiple M280 commands.
I have two printers with BLTouch probes with hundreds of hours on them and have never needed to use M280 that way. Does it hurt? Probably not. I would be interested to know their reasoning.
After Reverting, now I'm getting "Error: This kinematics does not support auto-calibration".
What does "auto-calibration" refer to?
Thanks.
Frederick
-
@fcwilt I'm not sure they even know their reasoning for the methods they have used. lol
both of our machines have run nonstop for the last two years with minimal issues, up until now.
Auto calibration is referring to the Tilt/Auto Bed Level macro(G32) that it's trying to run. measuring the 4 corners and auto adjusting the steppers to be less the .02mm between each other before letting you proceed to mesh and print.
-
@AndrewG said in Auto Bed Level/Tilt Calibration with 4 z motors:
Auto calibration is referring to the Tilt/Auto Bed Level macro(G32) that it's trying to run
So what is known here on the forum as "Auto Bed Leveling" gets a new term that no one else understands. Got it.
What makes auto bed leveling possible is two or more independent Z steppers. So the message about kinematics perhaps relates to that? They could have provided a bit more explanation.
So I checked the config file you posted and there is only one Z stepper so auto bed leveling is not possible. If it worked in the past then somehow you have the wrong config file.
It's interesting how often I've seen config files where the M92 follows M350 when it is simpler to put M92 first. Just thinking out loud there...
Frederick
-
@fcwilt said in Auto Bed Level/Tilt Calibration with 4 z motors:
So I checked the config file you posted and there is only one Z stepper so auto bed leveling is not possible. If it worked in the past then somehow you have the wrong config file.
That would make sense why the kinematics wont add up. still doesn't make sense why it all of a sudden stops working after 2 years of no problems.
I will add the correct info into the config.g and see if i can make sense of what its expecting.
thanks for all the help Frederick! i will update once i know something further.
-
@AndrewG The config.g you have seems to be quite an old one, and that bed.g wouldn't work with it. I have no idea how that would suddenly revert, but I would try and download the correct variant of the config files to use for your printer
https://github.com/Modix3D/Modix-V3-configuration-and-Macro-files/releases/tag/v3.4.5.c
edit: It might also be worth updating your firmware, those files are made for RRF3.4.5