Independent lead screw bed levelling
-
-
Thanks - I've read through those in a bit of detail - but what I'm observing isn't what I'm expecting.
After running G32, I notice that the z axis still moves up and down to compensate - just like it would with G29. What I want is for the compensation to occur at the end of the G32 command, and not during the print.
Looking at it closer, I noticed that after multiple G32 routines, the results are changing - not quite converging though. I would expect that it's easy to test it, then make all Z values zero...
I decided to have a crack at solving it with a macro, so I wrote this.
Caveats - the H Parameter in M558 is intended to capture the maximum tolerance that you are trying to compensate - so you still need to manually get the bed level close, but that's easier than getting it <1mm close.
Basically the macro just re-assigns the Z axis to only 1 driver at a time, and probes close to the lead screw.
It seems to work and definitely takes out the big twists - though I don't particularly like the idea of twisting the bed for each probe.
M558 P9 H3 ; set Z probe type to bltouch and the dive height + speeds M98 P"homeall.g" G0 X0 Y250 F12000 ;MOVE TO FIRST POINT M584 Z6 ;ASSIGN FIRST MOTOR DRIVER (6) TO ZAXIS G30 Z0 ;PROBE FIRST POINT G0 X0 Y650 F12000 ;MOVE TO FIRST POINT M584 Z5 ;ASSIGN FIRST MOTOR DRIVER (5) TO ZAXIS G30 Z0 ;PROBE FIRST POINT G0 X800 Y650 F12000 ;MOVE TO FIRST POINT M584 Z7 ;ASSIGN FIRST MOTOR DRIVER (7) TO ZAXIS G30 Z0 ;PROBE FIRST POINT G0 X800 Y250 F12000 ;MOVE TO FIRST POINT M584 Z8 ;ASSIGN FIRST MOTOR DRIVER (8) TO ZAXIS G30 Z0 ;PROBE FIRST POINT M584 Z5:6:7:8 ;RE-ASSIGN TO ALL DRIVERS.
-
post your config.g and your bed.g
After running G32, I notice that the z axis still moves up and down to compensate
G32 does not do that. that means your mesh is still loaded.
-
Post the rest of your config files.
Do you load the mesh in homeall or bed.g or your slicer start gcode? -
I see from your other thtread where you have posted your config that you are loading the heightmap in your config.g file. You shouldn't do that as it applies the heightmap before the bed Z0 position has even been determined.
; Z-Probe
M307 H3 A-1 C-1 D-1 ; disable heater on PWM channel for BLTouch
M558 P9 H5 F120 T6000 ; set Z probe type to bltouch and the dive height + speeds
G31 P500 X-21.6 Y9.4 Z3.2 ; set Z probe trigger value, offset and trigger height - **PREVIOUS Z VALUE = Z1.35
M557 X40:800 Y40:760 S78 ; define mesh grid - AS DESIGNED
;M557 X270:530 Y270:530 S52 ; define mesh grid - FOR TESTING ONLY
M376 H5 ; Set bed compensation taper (layers to fade out bed compensation)
G29 S1Remove the G29 S1 from config.g
-
bed.g
; bed.g ; called to perform automatic bed compensation via G32 ; ; generated by RepRapFirmware Configuration Tool v2.1.8 on Mon Mar 30 2020 11:14:17 GMT+1000 (Australian Eastern Standard Time) M561 ; clear any bed transform ;G28 ; home G30 P0 X0 Y250 Z-99999 ; probe near a leadscrew G30 P1 X0 Y650 Z-99999 ; probe near a leadscrew G30 P2 X800 Y650 Z-99999 ; probe near a leadscrew and calibrate 3 motors G30 P3 X800 Y250 Z-99999 S4 ;G29 ; probe the bed and enable compensation
config.g
***with G29 S1 removed
; Configuration file for Duet WiFi (firmware version 2.03) ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v2.1.8 on Mon Mar 30 2020 11:14:18 GMT+1000 (Australian Eastern Standard Time) ; General preferences G90 ; send absolute coordinates... M83 ; ...but relative extruder moves M550 P"Point Zero CoreXY" ; set printer name M667 S1 ; select CoreXY mode ; Network M552 S1 ; enable network M586 P0 S1 ; enable HTTP M586 P1 S0 ; disable FTP M586 P2 S0 ; disable Telnet ; Drives M569 P0 S1 ; physical drive 0 goes backwards M569 P1 S1 ; physical drive 1 goes forwards M569 P5 S0 ; physical drive 5 goes backwards M569 P6 S0 M569 P7 S0 M569 P8 S0 M569 P4 S0 ; physical drive 3 goes backwards M584 X1 Y0 Z5:6:7:8 E4 ; set drive mapping M671 X200,400,200,400 Y-60,-60,875,875 S5.0 P2.0 ; Set location of z leadscrews for independant bed levelling. M350 X16 Y16 Z16 E16 I1 ; configure microstepping with interpolation M92 X80.00 Y80.00 Z1600.00 E412.0 ; set steps per mm M566 X600.00 Y600.00 Z20.00 E1200.00 ; set maximum instantaneous speed changes (mm/min) *** PREVIOUS VALUES X&Y:600 Z12 E900 M203 X8000.00 Y8000.00 Z400.00 E1500 ; set maximum speeds (mm/min) M201 X800.00 Y800.00 Z100.00 E600.00 ; set accelerations (mm/s^2) *** PREVIOUS VALUES X400 Y400.00 Z10.00 E150.00 M204 P1200 T4000 ; print and travel acceleration M906 X1600 Y1600 Z600 E1200 I30 ; set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout M593 F80 ; Set Dynamic Acceleration Adjustment M572 D0 S0.05 ; Set extruder pressure advance M915 P0:1 S7 F1 H200 R3 ; Set up stall detection ; Axis Limits M208 X0 Y0 Z0 S1 ; set axis minima M208 X860 Y800 Z750 S0 ; set axis maxima ; Endstops M574 X1 Y1 S1 M574 Z0 S0 ; set active high endstops M591 D0 P5 C3 R5:120 E20.0 S1 ; Configure Laser filament sensor for extruder drive 0. ; Z-Probe M307 H3 A-1 C-1 D-1 ; disable heater on PWM channel for BLTouch M558 P9 H5 F120 T12000 ; set Z probe type to bltouch and the dive height + speeds G31 P500 X-21.6 Y9.4 Z3.2 ; set Z probe trigger value, offset and trigger height - **PREVIOUS Z VALUE = Z1.35 M557 X40:800 Y40:760 S78 ; define mesh grid - AS DESIGNED ;M557 X270:530 Y270:530 S52 ; define mesh grid - FOR TESTING ONLY M376 H10 ; Set bed compensation taper (layers to fade out bed compensation) ; Heaters M307 H0 B0 S1.00 ; disable bang-bang mode for the bed heater and set PWM limit M305 P0 T100000 B4138 R4700 ; set thermistor + ADC parameters for heater 0 M143 H0 S120 ; set temperature limit for heater 0 to 120C M305 P1 T100000 B4138 R4700 ; set thermistor + ADC parameters for heater 1 M143 H1 S280 ; set temperature limit for heater 1 to 280C M305 P2 T100000 B4138 R4700 ; set thermistor + ADC parameters for heater 1 M143 H2 S280 ; set temperature limit for heater 1 to 280C M305 P101 S"Duet 2" T100000 B4725 R4700 ; Duet 2 Drivers Over Temp Warning M305 P102 S"Duex 5" T100000 B4725 R4700 ; Duex 5 Drivers Over Temp Warning ; Fans M106 P0 S0 I0 F25000 H1 T45 ; set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned on M106 P1 S1 I0 F500 H-1 ; set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned off ; Tools M563 P0 D0 H1 F0 ; define tool 0 G10 P0 X0 Y0 Z0 ; set tool 0 axis offsets M563 P1 D0 H2 F0 ; define tool 1 G10 P1 X0 Y20 Z0 ; set tool 1 axis offsets G10 P1 R0 S0 G10 P0 R0 S0 ; set initial tool 0 active and standby temperatures to 0C ; Custom settings are not defined
Now that G29 S1 is removed - should it be added somewhere else?
-
@Gerrard said in Independent lead screw bed levelling:
Now that G29 S1 is removed - should it be added somewhere else?
at the start of your slicer g code after the G28
M305 P0 T100000 B4138 R4700 ; set thermistor + ADC parameters for heater 0
M305 P1 T100000 B4138 R4700 ; set thermistor + ADC parameters for heater 1
M305 P2 T100000 B4138 R4700 ; set thermistor + ADC parameters for heater 1Your thermistor config is wrong. find the correct beta value in your thermistor documentation.
-
@Veti said in Independent lead screw bed levelling:
at the start of your slicer g code after the G28
Done.
Your thermistor config is wrong. find the correct beta value in your thermistor documentation.
I don't have documentation, and they seem to be working fine.
So I ran G32 twice - expecting that Z height would be close to zero after the first time - but it's (almost) exactly the same. So G32 hasn't made any changes to the Z height.
I then ran my macro above, followed by G32 (only because I can't report the Z height any other way - that I know of), and the results were much closer - see image below.
![alt text](![image url](image url))
-
@Gerrard
what firmware version are you using?that suggest that its not actually adjusting but using the old bed compensation.
-
Again from your other thread.
M122
=== Diagnostics ===
RepRapFirmware for Duet 2 WiFi/Ethernet version 2.05 running on Duet WiFi 1.02 or later + DueX5However, you're not using the independent lead screw leveling as described in that link, your just using bed.g to probe a list of points and make a fitted plane, which is just a crude for of mesh bed leveling.
To do the leveling automatically you need to define the position of the lead screws in your config.g with M671 based on their location relative to 0,0. Then probe close as possible to them in bed.g.
Are you sure you have the right coordinates for the lead screws in M671?
Are the points probed in the same order as the drivers are listed in M584?
It is a good idea to do a single G30 probe at the center of the bed at the end of bed.g to reestablish the Z0 point since the tilting of the bed can change the z height.
Also, it looks like you're setting a P parameter in your M671, which is intended for manual adjustment of a bed leveling bolt.
Pnnn Pitch of the bed levelling screws (not used when bed levelling using independently-driven leadscrews). Defaults to 0.5mm which is correct for M3 bed levelling screws.
So remove the P2
and I don't think your syntax for the M671 command is correct.
Your syntax:
M671 X200,400,200,400 Y-60,-60,875,875 S5.0 P2.0
Example:
M671 X-15.0:100.0:215.0 Y220.0:-20.0:220.0 ; Z leadscrews are at (-15,220), (100,-20) and (215,220)
The order of your homing and leveling operations should be
G28 to home all axis for safe movement
G32 to level the bed using bed.g
G29 to create a new heightmapTechnically you could combine all of that into bed.g itself and then call G32 in your slicer start gcode, but I prefer to leave G28 and G29 out of bed.g to keep it more modular.
-
There's a few things here to digest, so I hope I've understood your points correctly.
@Phaedrux said in Independent lead screw bed levelling:
However, you're not using the independent lead screw leveling as described in that link, your just using bed.g to probe a list of points and make a fitted plane, which is just a crude for of mesh bed leveling.
This is what I'm observing, but not what I expected.
To do the leveling automatically you need to define the position of the lead screws in your config.g with M671 based on their location relative to 0,0. Then probe close as possible to them in bed.g.
Isn't this what I've done in my config.g (above)?M671 X200,400,200,400 Y-60,-60,875,875 S5.0 ; Set location of z leadscrews for independant bed levelling.
Oh... I think I have the coordinates wrong - some time ago my X and Y were rotated 90deg... my X and Y coordinates should be transposed.
My coordinates are: (-60,200), (-60, 400), (875,400), (875,200)I take your point about the P2 Parameter - I've removed that. I misunderstood what was written in the wiki.
Are the points probed in the same order as the drivers are listed in M584?
No, drivers 5 and 6 are swapped for no particular reason. I'll correct that too.
Agree with your order of operations - that's what I have been doing.
So, with M671 correctly defined, is bed.g right?
-
I still don't think your M671 syntax is correct.
M671 X-15.0:100.0:215.0 Y220.0:-20.0:220.0
Note the use of
:
between the points, not commas.Send M98 P"config.g" in the console to check for any syntax errors. See if it complains. But the fact that your screen shot shows an error message indicating that it's doing the old style of plane fitting and not the actual independent correction it would seem it's not detecting your M671 command as valid at all.
@Gerrard said in Independent lead screw bed levelling:
So, with M671 correctly defined, is bed.g right?
That will be up to you to check. The order of the points in bed.g needs to match the order of the motors in M584, otherwise it will try to rip your bed apart by adjusting the wrong motors.
-
How about that... syntax was the problem!
Thanks for the help
-
Hazzah! How 'bout that.
I am still curious if running M98 P"config.g" would have shown that as an error.