Using bed leveling screws with independent z motors
-
Hi everyone,
The printer im building has 3 independently driven Z leadscrews and 3 bed leveling screws. Now i want to probe at the 3 leveling screws and then manually adjust it so the bed is parallel to the printframe. At that point i would like to do the automatic bed leveling for the fine tuning.
However i used the tutorial on the manual leveling but because there are 3 Z-motors defined it wont show how much i have to adjust the screws but it will just do the changes automatically. Does anyone have a workaround for this issue?
This is my manual leveling macro:
M561
M671 X195:400:605 Y120:380:120 P1 ; Change to the bed leveling screws positioning
G30 P0 X195 Y120 Z-99999 ; probe near an adjusting screw
G30 P1 X400 Y380 Z-99999 ; probe near an adjusting screw
G30 P2 X605 Y120 Z-99999 S3 ; probe near an adjusting screw and report adjustments neededM671 X51.3:400:748.7 Y75:448.7:75 ; change back to the leadscrew positioning
Thanks in advance,
Greetings, Piet. -
Hi,
since I only know printers with screws (but someday maybe can try individual/independent-z-motor-levelling) my answer might be only of limited help:As far as I understand from my own questions about this (see e.g. here https://forum.duet3d.com/topic/19574/manual-bed-levelling-assistant/7) I understand it that way that if you have BOTH, screws & I-Z-M, you might only need the screws for the 1st time when you build the actual machine, or in service case.
After that you fix them, and from there on the motors do the small precisionwork... otherwise I think, there is a chance you might create a human/machine endless-loop where it is not clear who/which is in charge of what exactly...
If you really need the manual step for whatever reason (would be great to know why you need it?) you might just code something like this yourself and save it as a macro (Attention this is for RRF>=3.x):
;Manually coded manual bed levelling via screws: ;heat at this point tool & bed maybe to have realistic thermal expansion of all parts: ;... ;extruder ;... ;heat-plate ;... ;chamber ; Conditional g-code needs RRF>=3.x ! OTHERWISE COMMENT OUT! ; If the printer hasn't been homed, home it if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed ; tell user that printer homes and have the user ok/cancel it: M291 R"Homing all axis in order x, y & z" P"Confirm to proceed..." S3 G28 M291 R"Approaching 1st screw: front left" P"Confirm to proceed..." S3 ;lift head: ;M98 P"z-do-lift.g" ; check for correct directory, default folder is /sys on sd-card G1 Z{move.axes[2].min+5} F500 ; separate plate & extruder ;goto position: G1 X{move.axes[0].min+10} Y{move.axes[1].min+10} F1000 ; position above screw M291 R"Move plate away with screw under extruder" P"Confirm to proceed..." S3 ;lower head again G1 Z{move.axes[2].min} F500 ; bringtogether plate & extruder M291 R"Move plate to extruder to 0 distance" P"Confirm to proceed..." S3 M291 R"Approaching 2nd screw: front right" P"Confirm to proceed..." S3 ;lift head: ;M98 P"z-do-lift.g" ; check for correct directory, default folder is /sys on sd-card G1 Z{move.axes[2].min+5} F500 ; separate plate & extruder ;goto position: G1 X{move.axes[0].max-10} Y{move.axes[1].min+10} F1000 ; position above screw M291 R"Move plate away with screw under extruder" P"Confirm to proceed..." S3 ;lower head again G1 Z{move.axes[2].min} F500 ; bringtogether plate & extruder M291 R"Move plate to extruder to 0 distance" P"Confirm to proceed..." S3 M291 R"Approaching 3rd screw: back right" P"Confirm to proceed..." S3 ;lift head: ;M98 P"z-do-lift.g" ; check for correct directory, default folder is /sys on sd-card G1 Z{move.axes[2].min+5} F500 ; separate plate & extruder ;goto position: G1 X{move.axes[0].max-10} Y{move.axes[1].max-10} F1000 ; position above screw M291 R"Move plate away with screw under extruder" P"Confirm to proceed..." S3 ;lower head again G1 Z{move.axes[2].min} F500 ; bringtogether plate & extruder M291 R"Move plate to extruder to 0 distance" P"Confirm to proceed..." S3 M291 R"Approaching 4th screw: back left" P"Confirm to proceed..." S3 ;lift head: ;M98 P"z-do-lift.g" ; check for correct directory, default folder is /sys on sd-card G1 Z{move.axes[2].min+5} F500 ; separate plate & extruder ;goto position: G1 X{move.axes[0].min+10} Y{move.axes[1].max-10} F1000 ; position above screw M291 R"Move plate away with screw under extruder" P"Confirm to proceed..." S3 ;lower head again G1 Z{move.axes[2].min} F500 ; bringtogether plate & extruder M291 R"Move plate to extruder to 0 distance" P"Confirm to proceed..." S3 G1 Z{move.axes[2].min+5} F500 ; separate plate & extruder ;G1 X{move.axes[0].min+10} Y{move.axes[1].min+10} F1000 ; position above screw M291 R"Finished" P"Re-start macro if you want another pass" S1
... hope I could help a bit, but maybe someone with your setup might be better for help...
-
On my printer (3 leads screws, 4 bed screws) the bed.g looks like this and performs an automatic level:
M561 ; clear any bed transform ; If the printer hasn't been homed, home it [more code ...] ; Probe the bed and do auto calibration M558 H10 ; higher dive hight for yet to be levelled bed G30 P0 X{move.axes[0].max/2} Y{move.axes[1].max+sensors.probes[0].offsets[1]} Z-99999 G30 P1 X{move.axes[0].max-10} Y10 Z-99999 G30 P2 X10 Y10 Z-99999 S-1 M558 H3 ; back to speed
while this is my "bed_level.g" macro for tuning the bed level screws:
; Check bed level ; Probe the bed M558 H10 G30 P0 X{move.axes[0].max} Y{move.axes[1].min} ; probe near an adjusting screw G30 P1 X{move.axes[0].min} Y{move.axes[1].min} G30 P2 X{move.axes[0].min} Y{move.axes[1].max} G30 P3 X{move.axes[0].max} Y{move.axes[1].max} S-1 ; probe near an adjusting screw and report adjustments needed M558 H3 echo "Deviation:", move.calibration.initial.deviation ^ "mm"
As you can see the commands are the same really, so I must assume the difference is that one is called from a G32 command, vs the other is a standalone macro without any special meaning.
-
Why do you want to do it manually and then get RRF to do the fine adjustments?
Adding an S value increases the amount the levelling with compensate for.
So for example, the default S value for M671 is 1mm. If the amount to be compensated is larger than this, nothing happens. Increase it to 10 and if your bed is 10mm out, it will compensate for that. -
Great explanation: This should explicitly be added for the "newer " levelling routines and the reason and behaviour for the S-parameter should be explained here I guess:
https://duet3d.dozuki.com/Wiki/Using_the_manual_bed_levelling_assistant -
@Piet said in Using bed leveling screws with independent z motors:
Hi everyone,
The printer im building has 3 independently driven Z leadscrews and 3 bed leveling screws. Now i want to probe at the 3 leveling screws and then manually adjust it so the bed is parallel to the printframe. At that point i would like to do the automatic bed leveling for the fine tuning.
There is no real need to have the ability to both manual level and auto level.
Replace the leveling screws with something fixed and then rely on auto level.
Frederick
-
Hey folks - thanks for helping me back then here https://forum.duet3d.com/topic/19574/manual-bed-levelling-assistant - I think there is a real need to add all this information here:
https://duet3d.dozuki.com/Wiki/Using_the_manual_bed_levelling_assistant
Can I do that or do you wanna help me or how is this working with the duet-wiki? -
@LB said in Using bed leveling screws with independent z motors:
Hey folks - thanks for helping me back then here https://forum.duet3d.com/topic/19574/manual-bed-levelling-assistant - I think there is a real need to add all this information here:
https://duet3d.dozuki.com/Wiki/Using_the_manual_bed_levelling_assistant
Can I do that or do you wanna help me or how is this working with the duet-wiki?I would think that all documentation about MBC, MBLA and ABL should start with an overview to put all the parts into the correct relation.
So no matter which one you search on you are first presented with the overview.
I have seen a good deal of confusion with folks mixing the concepts and the terms.
Frederick
-
@jay_s_uk As im using ballscrews i want minimal adjustment on the ballscrews themselves as they, and all the parts for mounting them, are precision machined. Therefore i want the first setup to be able to level the bed as close as possible to parallel. Im not having them correct for a 10mm difference obviously?
-
@fcwilt Can you explain to me why there is no need for both? I agree with you that the manual leveling should be a one time thing and im planning on exactly that. However this is not a consumer machine (more of these will be made). So i want it integrated.
-
@ofliduet It works because you have 4 screws and 3 spindles. It apparently doesnt with 3 screws and 3 spindles unfortunately.
-
@Piet Right. I'm not a big fan of leaving bed edges unsupported with only 3 mounting points. You might be able to tell my bed isn't that stiff. I therefore actually have 2 screws and 2 fixed points. The two screws are there so I can adjust twist in the bed. One might be theoretically enough, but two allows me to make opposing adjustments that don't move the probe point in the middle near the lead screw. Probing all 4 in the script gives me the output I need to even everything out.
All this gives us a workaround for your original question: Probe an additional dummy point in your manual test and you get the output you need for your one-off calibration.
-
@Piet said in Using bed leveling screws with independent z motors:
@fcwilt Can you explain to me why there is no need for both? I agree with you that the manual leveling should be a one time thing and im planning on exactly that. However this is not a consumer machine (more of these will be made). So i want it integrated.
Because having adjustment screws for the Manual Bed Leveling Assistant (MBLA) and having multiple Z steppers for Auto Bed Leveling (ABL) are two different solutions to the same problem - leveling the bed.
The firmware probes the bed in the same matter - the only difference is MBLA outputs instructions on how to turn the adjustment screws while ABL issues commands to the steppers to move as needed to level the bed.
Frederick
-
@fcwilt I understand the functions of either but don't you agree that manually adjusting the bed to be parallel to the print frame initially is a better way to go. For example in an extreme case where one point of the bed is 10mm off. If I were to level that initially using the ABL it would torque the entire Z-axis assembly and would put a lot of strain and resistance on the leadscrews. Now if initially the entire bed was parallel using the manual adjustment and the ABL can be called every now and then or before every print for that matter, wouldn't you think that's the better solution.
I do understand for small adjustments this is obsolete but like I said this is for a production machine and for our assembly people and customers, who frankly most of the time aren't as technical as any of us on this forum, it would be a useful feature to fall back on because its so easy to understand.
-
I think you're thinking too much into it.
Whether the levelling is manual or automatic, the whole bed still has to move up and down to trigger the probe at each point. Then all that's left is for the one screw that's out to be adjusted and whether you are turning it, or the motor is turning it, o don't see the difference. -
@jay_s_uk Maybe you're right however I think its an interesting discussion. I'll draw a schematic tomorrow which will hopefully show my point more clearer. I appreciate the help nonetheless!
-
@ofliduet said in Using bed leveling screws with independent z motors:
@Piet Right. I'm not a big fan of leaving bed edges unsupported with only 3 mounting points. You might be able to tell my bed isn't that stiff. I therefore actually have 2 screws and 2 fixed points. The two screws are there so I can adjust twist in the bed. One might be theoretically enough, but two allows me to make opposing adjustments that don't move the probe point in the middle near the lead screw. Probing all 4 in the script gives me the output I need to even everything out."
That is the only real use-case to have both: Have the screws to "undistord" a non-planar plate you begin with (so you activly overconstrain it by purpose to make "a banana" to a "flat-toast"/"pizza". And then when that thing is flat like a pizza (or so, of which MBL can take care) you auto-level-home from there on with your I-Z-M.
Did I get your intention right? If yes, an interesting survival-point for analog hand-dialed screws just came up here But then I would not use them vertical but rather pull diagonal horizontal the whole metal-plate flat by pulling... just thinking for myself...
-
Hi All,
I've skimmed over this topic a little, but having just figured out this problem I thought I would add my 2c.
I have a very large bed - roughly 800x800, with 16 manual adjustment screws (4x4 arrangement), and 4 independent Z motors.
In my case, I have (at some point) needed to manually level both the lead screws, and the manual adjustment screw - I have also used G32 and G29 bed levelling.
I partially agree that there is a hierarchy to bed levelling, which needs to be done after assembly, maintenance or a component failure (like a loose screw on a Z motor coupling for example?). With so many components there's plenty of opportunity for something to go wrong, so the correct procedure helps.
I manually adjust the Z screws with the hot end close to the screws first - this gets the nozzle within a reasonable range for G32 to work its magic. Then I run G29 to do a mesh bed levelling - now that all 4 motors are coplanar this gives me a good idea on the flatness of the bed. If the min/max deviation of the mesh bed levelling is less than 1mm (an arbitrary number I've decided to use), then I'll leave it be - otherwise, I'll adjust the manual levelling screws...
A more thorough method would be to look for a deviation greater than Xmm (some number) between any two neighboring points in the mesh bed levelling, but for now I'm satisfied with maximum deviation...
On smaller printers like your typical 300x300 size, then I think a similar approach is easy enough to do, so it doesn't really matter whether it's necessary - do what ever you feel works best for you.
-
@Piet said in Using bed leveling screws with independent z motors:
@fcwilt I understand the functions of either but don't you agree that manually adjusting the bed to be parallel to the print frame initially is a better way to go.
By "print frame" do you mean something that surrounds and supports the bed?
If so, yes, it is best to have the bed properly aligned to that frame but the solution is to design it such that it does not need manual adjustment.
If you mean something else by "print frame" please explain.
Thanks.
Frederick
-
@Piet said in Using bed leveling screws with independent z motors:
For example in an extreme case where one point of the bed is 10mm off. If I were to level that initially using the ABL it would torque the entire Z-axis assembly and would put a lot of strain and resistance on the leadscrews.
Whether you're using manual levelling assistant or auto bed levelling, the process is taking the measurements from probing the bed surface.
I think your concern is that the bed is not level with the z-gantry (e.g. because one of the manual adjustment screws is way off). So you want to get the bed close to level to the z-gantry (and so level with the lead screws) so that they aren't kinked over later. The trouble is the Duet has no idea where the lead screws are as it is still only probing the bed surface. Only exception/caveat is if you are using independent endstops on them as well (and somehow worked out the offset for them all).
One option could be to remove the bed and try probing the z-gantry to get that near level (so the leadscrew are all level) using auto bed levelling. Then put the bed back on and use the manual assistant to get the manual screw right, then use auto levelling again to actually get it all tuned in fine (assuming you didn't with manual). Might work, but probably will end in tears trying to probe aluminium extrusions....
Alternatively, just try making sure your bed is level to your z-gantry when building the printer. Simplest way is to use fixed spacers (i.e. no manual adjustment). Or just a spirit level/your eyes? The lead screws should take a little misalignment. Unless you have a massive bed, if you build your printer 10mm out and don't see it, you're probably gonna have a bunch of other problems in there too...