New experimental firmware 1.19beta10
-
Hey David, did you see my question nested up a few posts about dual-Z motor cartesian printers?
-
Can this new independent Z motor leveling be used for dual Z Cartesian printers like the Prusa, OrdBot, clones, etc, or is this a Delta only feature? Seems like it could be used to automatically get the X-axis of the bed mechanically leveled, only requiring the Z motors to track Y-axis movement…
Yes, it's for Cartesian and CoreXY printers, not deltas.. See https://duet3d.com/wiki/Bed_levelling_using_multiple_independent_Z_motors.
It can also be used to tell you what adjustments to make to manual bed levelling screws, but I haven't documented how to do that yet.
-
Did some more testing for the leveling. There might be some other bug. Feels like its still adjusting in the wrong direction…
I changed the probe order to match the reporting of G32 and moved the points a bit.16:55:14 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.136 -0.441 -0.471, mean -0.349, deviation from mean 0.151 16:54:26 G32 Error: some computed corrections exceed configured limit of 0.50mm: -0.007 0.505 0.553 16:52:50 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.138 -0.439 -0.461, mean -0.346, deviation from mean 0.147 16:52:09 G32 Leadscrew adjustments made: -0.294 0.260 0.269, points used 3, deviation before 0.170 after 0.000 16:51:36 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: 0.186 -0.203 -0.174, mean -0.064, deviation from mean 0.177
Front left lead screw (-60,-10) is connected to Z (drive 2)
Front right lead screw (560,-10) is connected to Y (drive 1)
Back centre lead screw (250,560) is connected to X (Drive 0)Macro "4 - Leveling Check Probe":
T0 M401 G30 P0 X250 Y420 Z-99999 ; probe near a leadscrew G30 P1 X420 Y80 Z-99999 ; probe near a leadscrew and calibrate 3 motors G30 P2 X80 Y80 Z-99999 S-1 ; probe near a leadscrew M402 G90 G1 X250 Y250 T-1 ```bed.g:
T0
M401
G30 P0 X250 Y420 Z-99999 ; probe near a leadscrew
G30 P1 X420 Y80 Z-99999 ; probe near a leadscrew and calibrate 3 motors
G30 P2 X80 Y80 Z-99999 S3 ; probe near a leadscrew
M402
G90
G1 Y250
T-1M584 Y5 X7 U8 V6 E3:4 Z0:1:2 ; Set up steppers for x, y, u, v, z and e, use P4 once it works to hide V
M671 X250:560:-60 Y560:-10:-10 S0.5 ; Set up lead screw positions for bed leveling -
Lars, thanks for that. The corrections it wants to make now look correct - they are similar to the height errors but with opposite sign and somewhat larger magnitude - which is expected because you are probing well inside the leadscrew positions.
As you say, it looks like the corrections may be getting applied with the wrong sign, at least for the 2nd and 3rd screws. I'll simulate your figures on my Cartesian printer (which has only 1 Z motor) and see whether there is a problem with positive corrections.
EDIT: I found the problem. When it is setting the motor direction, it sets the directions of all Z motors together instead of individually. I will fix this shortly as I am keen to get this feature working properly.
-
Lars, please try DuetWiFiFirmware 1.19beta10+3, available here https://dl.dropboxusercontent.com/u/19369680/DuetWiFiFirmware.bin.
-
21:45:43 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.275 -0.663 0.068, mean -0.290, deviation from mean 0.299 21:45:15 G32 Error: some computed corrections exceed configured limit of 0.50mm: 0.260 0.969 -0.344 21:44:34 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.274 -0.659 0.049, mean -0.295, deviation from mean 0.289 21:43:43 G32 Leadscrew adjustments made: 0.136 0.486 -0.174, points used 3, deviation before 0.210 after 0.000 21:42:42 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.148 -0.339 0.041, mean -0.149, deviation from mean 0.155 21:41:57 G32 Leadscrew adjustments made: 0.043 0.230 -0.082, points used 3, deviation before 0.094 after 0.000 21:41:19 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.010 -0.112 0.054, mean -0.023, deviation from mean 0.069
Firmware Name: RepRapFirmware for Duet WiFi
Firmware Electronics: Duet WiFi 1.0 + DueX5
Firmware Version: 1.19beta10+3 (2017-07-21)
WiFi Server Version: 1.19beta9
Web Interface Version: 1.17+2 -
Just in case they got lost in all the back-and forth, here are the two issues I'm still seeing with 1.19beta10+2 & DWC 1.17+2:
-
M666 in config.g doesn't execute/"stick" - after a reboot M666 is always reset to [c]Endstop adjustments X0.00 Y0.00 Z0.00, tilt X0.00% Y0.00%[/c]. I don't have a config-override.g file or an M501 command in my config.g. M665 in config.g works as expected.
-
My prints are now ending with a "Can't delete file 0:/sys/resurrect.g" error, and the final lines in my gcode are not executed:
G1 X0.053 Y9.146 F540 G1 E-8.0000 F6000 ; layer end T0 ; Select Extruder 0 if not already selected G90 ; Switch to absolute mode G1 X0 Y0 Z250 E-10 F6000 ; Retract filament and raise printhead M104 S0 ; Turn off heater M84 S10 ; turn off motors after 10 seconds ```I'm guessing it might have to do with the [c]T0[/c], because the print completes, but the printhead doesn't move up and the heater doesn't turn off. I'll try a print without the [c]T0[/c] tomorrow and see if the problem goes away.
-
-
David, any chance you could add the probe point data in the output together with the adjustment for the leveling?
-
21:45:43 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.275 -0.663 0.068, mean -0.290, deviation from mean 0.299 21:45:15 G32 Error: some computed corrections exceed configured limit of 0.50mm: 0.260 0.969 -0.344 21:44:34 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.274 -0.659 0.049, mean -0.295, deviation from mean 0.289 21:43:43 G32 Leadscrew adjustments made: 0.136 0.486 -0.174, points used 3, deviation before 0.210 after 0.000 21:42:42 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.148 -0.339 0.041, mean -0.149, deviation from mean 0.155 21:41:57 G32 Leadscrew adjustments made: 0.043 0.230 -0.082, points used 3, deviation before 0.094 after 0.000 21:41:19 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.010 -0.112 0.054, mean -0.023, deviation from mean 0.069
Firmware Name: RepRapFirmware for Duet WiFi
Firmware Electronics: Duet WiFi 1.0 + DueX5
Firmware Version: 1.19beta10+3 (2017-07-21)
WiFi Server Version: 1.19beta9
Web Interface Version: 1.17+2This is strange. I set up my bench system, configured as a CoreXY with your leadscrew positions and motor assignments:
M584 Y5 X7 U8 V6 E3:4 Z0:1:2 ; Set up steppers for x, y, u, v, z and e, use P4 once it works to hide V M671 X250:560:-60 Y560:-10:-10 S0.5 ; Set up lead screw positions for bed leveling
I created a bed.g file like yours, except that I put the initial probe height errors that you reported in it:
G30 P0 X250 Y420 Z-0.010 G30 P1 X420 Y80 Z-0.112 G30 P2 X80 Y80 Z0.054 S3
I set my Z steps/mm to 3200 so that 1mm movement is 1 revolution of the motor. I have flags on the motor shafts so that I can see the movement. I loaded firmware 1.19beta10+3. I sent G92 X0 Y0 Z10 as I don't have any means of homing this setup.
When I run G31, I get this:
Leadscrew adjustments made: 0.002 0.185 -0.117, points used 3, deviation before 0.072 after 0.000
I can see the X motor moving clockwise very slightly, the Y motor moving clockwise a little less than 1/5 of a turn, and the Z motor moving anticlockwise a little less than 1/8 of a turn. I checked that when I command +Z movement, the rotation is clockwise. So it all looks correct.
Please can you check a few things:
1. Is the maximum Z speed in your M201 command in config.g achievable?
2. Are you certain that you have the motors connected to the driver outputs in the order listed? Bear in mind that the order of driver outputs along the edge of the Duet is 2 1 0 3 4 (i.e. Z Y X E0 E1) not 0 1 2 3 4.
3. Can you see the leadscrews moving by about the correct amount, in the correct direction?
-
Just in case they got lost in all the back-and forth, here are the two issues I'm still seeing with 1.19beta10+2 & DWC 1.17+2:
-
M666 in config.g doesn't execute/"stick" - after a reboot M666 is always reset to [c]Endstop adjustments X0.00 Y0.00 Z0.00, tilt X0.00% Y0.00%[/c]. I don't have a config-override.g file or an M501 command in my config.g. M665 in config.g works as expected.
-
My prints are now ending with a "Can't delete file 0:/sys/resurrect.g" error, and the final lines in my gcode are not executed:
G1 X0.053 Y9.146 F540 G1 E-8.0000 F6000 ; layer end T0 ; Select Extruder 0 if not already selected G90 ; Switch to absolute mode G1 X0 Y0 Z250 E-10 F6000 ; Retract filament and raise printhead M104 S0 ; Turn off heater M84 S10 ; turn off motors after 10 seconds ```I'm guessing it might have to do with the [c]T0[/c], because the print completes, but the printhead doesn't move up and the heater doesn't turn off. I'll try a print without the [c]T0[/c] tomorrow and see if the problem goes away.
Thanks for your report.
I can't reproduce the M666 problem, it works on my delta. Please share your config.g file. If you run M98 Pconfig.g subsequently, does it pick up the correct M666 settings?
I don't know why the last few lines of gcode are not being executed. Is tool 0 active at the end, or is some other tool active? Do you have anything in the tool change files for tool 0?
The "Can't delete" message will be fixed in the next beta.
-
-
-
My M666 command wasn't "taking" because I put it before my original block of mechanical configuration commands, one of which was [c]M666 X0 Y0 Z0 ; put your endstop adjustments here, or let auto calibration find them[/c]. So the first M666 was just getting clobbered (PEBCAK).
-
I was also wrong about the issue at the end of a print. I'd switched printing profiles to one that (I didn't notice this at the time) didn't have an ending script with a Z raise. Then when the print finished without moving the head off the print, I looked at the gcode console and saw the "Can't delete" error, so I assumed they were related, and then I managed to look at the wrong gcode when I was "confirming".
Dave, one of these days I swear I'm going to stop wasting your time and actually be helpful… I really appreciate your patience.
-
-
No problem!
-
Please can you check a few things:
1. Is the maximum Z speed in your M201 command in config.g achievable?
2. Are you certain that you have the motors connected to the driver outputs in the order listed? Bear in mind that the order of driver outputs along the edge of the Duet is 2 1 0 3 4 (i.e. Z Y X E0 E1) not 0 1 2 3 4.
3. Can you see the leadscrews moving by about the correct amount, in the correct direction?
1. I halved all the vales and retested with same result:
M566 Z12 M203 Z200 M201 Z125
2. Yes, rechecked again.
3. All lead screws move in the wrong direction. I do estimate they turn about what it says but in the wrong direction…
Edit: If you look at the result from my last post it shows the test probing confirms that they all turn the wrong way on my printer...M569 P0 S0 ; Drive 0 Z M569 P1 S0 ; Drive 1 Z M569 P2 S0 ; Drive 2 Z M569 P3 S0 ; Drive 3 E0 M569 P4 S0 ; Drive 4 E1 M569 P5 S1 ; Drive 5 Y M569 P6 S1 ; Drive 6 V M569 P7 S1 ; Drive 7 X M569 P8 S1 ; Drive 8 U M569 P9 S1 ; Drive 9 ```Edit 2: In your test was M569 PX S0 or S1?
-
Hi Lars, I think you are right, I had the corrections in the wrong direction. Please try DuetWiFiFirmware 1.19beta10+4, available at https://dl.dropboxusercontent.com/u/19369680/DuetWiFiFirmware.bin.
-
Hi Lars, I think you are right, I had the corrections in the wrong direction. Please try DuetWiFiFirmware 1.19beta10+4, available at https://dl.dropboxusercontent.com/u/19369680/DuetWiFiFirmware.bin.
[[language]] 07:53:56 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.001 0.008 -0.002, mean 0.002, deviation from mean 0.005 07:53:12 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.003 0.005 -0.001, mean 0.000, deviation from mean 0.003 07:52:38 G32 Leadscrew adjustments made: -0.023 0.025 0.002, points used 3, deviation before 0.012 after 0.000 07:51:53 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.021 -0.006 0.003, mean -0.008, deviation from mean 0.010 07:51:18 G32 Leadscrew adjustments made: 0.325 0.014 -0.374, points used 3, deviation before 0.167 after 0.000 ```I do believe its working! I guess it might offset the center point from Z=0 if it is not on the plane made up of the 3 probings? I included it as a fourth point to minimize this but I guess one could include a rehome of Z in the bed.g…?
-
Hi Lars, I think you are right, I had the corrections in the wrong direction. Please try DuetWiFiFirmware 1.19beta10+4, available at https://dl.dropboxusercontent.com/u/19369680/DuetWiFiFirmware.bin.
[[language]] 07:53:56 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.001 0.008 -0.002, mean 0.002, deviation from mean 0.005 07:53:12 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.003 0.005 -0.001, mean 0.000, deviation from mean 0.003 07:52:38 G32 Leadscrew adjustments made: -0.023 0.025 0.002, points used 3, deviation before 0.012 after 0.000 07:51:53 M98 P0:/macros/4 - Leveling Check Probe Bed probe heights: -0.021 -0.006 0.003, mean -0.008, deviation from mean 0.010 07:51:18 G32 Leadscrew adjustments made: 0.325 0.014 -0.374, points used 3, deviation before 0.167 after 0.000 ```I do believe its working! I guess it might offset the center point from Z=0 if it is not on the plane made up of the 3 probings? I included it as a fourth point to minimize this but I guess one could include a rehome of Z in the bed.g…?
I'm glad this is working at last. Thanks for your patience!
The algorithm minimises the sum of the squares of the height errors at the probe points. So if the bed centre is not on the plane - either because the bed is not flat or (more usually) because the gantry flexes enough to allow the head to droop a little around the centre, then it will upset Z=0 at the centre. To correct it, you can add a single G30 command in bed.g to probe the bed centre after doing leadscrew compensation. Including probe points near the centre of the bed as you have done will also help.
-
I want to give the bed leveling feature a try.
I remember reading about this in another thread, on how to assign the second Z motor, but I can't find it in search.If memory serves…
I connect the second Z motor to the E1 port of the board. I assign it in config.g with P4. And then the 2nd Z motor would be identified as "U". Is this correct?
Also, would I need to replace the jumper back into the Z2 port on the board when it's empty?If this is a redundant question I apologize. If so, if someone recalls that conversation could they please post a link?
Thanks
-
See https://duet3d.com/wiki/Bed_levelling_using_multiple_independent_Z_motors. You will need firmware 1.19beta10+4. If your board is a Duet WiFi you can get it via the link I posted 4 replies up.
In summary, you don't configure the extra Z drive as U, and you do need to replace the jumpers in the second Z motor socket.
-
Nice! Will give the leveling a try as soon as I have time.
And I have that extra U axis working so well
David, I must say I'm impressed by your development pace and how quickly you respond to our issues!
-
David, I must say I'm impressed by your development pace and how quickly you respond to our issues!
Thanks!
The difference between the Series 2 Duets and other open-source controller boards is that the profits we make on the Duets fund development, support and a generous warranty replacement policy. So I can afford to work almost full time on Duet development and support. Most other open-source boards rely on volunteers.