Delta calibration failed
I have this delta printer.
I have replaced the defective Azteeg X5 mini by the DUET3D 2 WiFi.
After calibrated the printer I'm only able to print small parts, since the calibration is not good on the edge of the bed.
I made a video to clearly explain the situation. The resolution of the micrometer is 0.01mm. Which means that the difference between the max and min height after calibration is about 0.6mm on the edge of the bed.
Here is my beg.g
M561 ; clear any bed transform, otherwise homing may be at the wrong height G31 X0 Y0 ; don't want any probe offset for this G28 ; home the printer ;*** Remove the following line if your Z probe does not need to be deployed ;M98 Pdeployprobe.g ; deploy the mechanical Z probe ; The first time the mechanical probe is used after deployment, it gives slightly different results. ; So do an extra dummy probe here. The value stored gets overwritten later. You can remove this if you use an IR probe. ;G30 P0 X0 Y0 Z-99999 ; Probe the bed and do 6- or 7-factor auto calibration G30 P0 X-86.60 Y-50.00 Z-99999 ;H-0.04 ; Pos 1 X tower G30 P1 X0.00 Y-100.00 Z-99999 ;H0.054 ; Pos 2 between X-Y towers G30 P2 X86.60 Y-50.00 Z-99999 ;H-0.055 ; Pos 3 Y tower G30 P3 X86.60 Y50.00 Z-99999 ;H.023 ; Pos 4 between Y-Z towers G30 P4 X0.00 Y100.00 Z-99999 ;H0.019 ; Pos 5 Z tower G30 P5 X-86.60 Y50.00 Z-99999 ;H0.058 ; Pos 6 between Z-X towers G30 P6 X-43.30 Y-25.00 Z-99999 ;H0.008 ; Pos 7 X tower G30 P7 X0.00 Y-50.00 Z-99999 ;H0.027 ; Pos 8 between X-Y towers G30 P8 X43.30 Y-25.00 Z-99999 ;H0.018 ; Pos 9 Y tower G30 P9 X43.30 Y25.00 Z-99999 ;H0.023 ; Pos 10 between Y-Z towers G30 P10 X0.00 Y50.00 Z-99999 ;H0.044 ; Pos 11 Z tower G30 P11 X-43.30 Y25.00 Z-99999 ;H0.053 ; Pos 12 between Z-X towers G30 P12 X0 Y0 Z-99999 S9 ; center and auto-calibrate 6 factors ;*** Remove the following line if your Z probe does not need to be retracted ;M98 Pretractprobe.g ; retract the mechanical Z probe G1 X0 Y0 Z150 F15000 ; get the head out of the way of the bed
And my config.g
; General preferences G90 ; Send absolute coordinates... M82 ; and absolute extruder moves ;M83 ; ...but relative extruder moves ;M555 P1 ; Set firmware compatibility to look like RepRapFirmare M555 P2 ; Set firmware compatibility to look like Marlin ;*** The homed height is deliberately set too high in the following - you will adjust it during calibration. ;M665 R105.6 L215 B85 H230 ; Set delta radius, diagonal rod length, printable radius and homed height ;M665 L290.810 R171.507 H227.139 B114.0 X-0.045 Y-0.138 Z0.000 ;M666 X0.184 Y-0.468 Z0.284 A0.00 B0.00 ;M665 L292.355 R172.023 H227.087 B114.0 X0.217 Y0.195 Z0.000 ;M666 X0.113 Y-0.816 Z0.703 A-0.22 B0.24 M665 L290.542 R171.422 H226.851 B114.0 X-0.242 Y-0.211 Z0.000 M666 X-0.276 Y-0.097 Z0.373 A0.25 B0.14 ;CPU temperature correction M912 P0 S-1.5 ; Network M550 K250VS ; Set machine name M551 xk250vs ; Set password M552 S1 ; Enable network ;M586 P0 S1 ; Enable HTTP M586 P1 S0 ; Disable FTP M586 P2 S0 ; Disable Telnet ; Drives M569 P0 S1 ; Drive 0 goes forwards M569 P1 S1 ; Drive 1 goes forwards M569 P2 S1 ; Drive 2 goes forwards M569 P3 S0 ; Drive 3 goes backwards M350 X16 Y16 Z16 E16 I1 ; Configure microstepping with interpolation M92 X200 Y200 Z200 E850 ; Set steps per mm M566 X1200 Y1200 Z1200 E1200 ; Set maximum instantaneous speed changes (mm/min) M203 X18000 Y18000 Z18000 E1500 ; Set maximum speeds (mm/min) M201 X1000 Y1000 Z1000 E500 ; Set accelerations (mm/s^2) M906 X1000 Y1000 Z1000 E500 I40 ; Set motor currents (mA) and motor idle factor in per cent M84 S30 ; Set idle timeout ; Axis Limits M208 Z0 S1 ; Set minimum Z ; Endstops M574 X2 Y2 Z2 S1 ; Set active high endstops ; Z-Probe ;M558 P4 H5 F120 T6000 ; Set Z probe type to switch and the dive height + speeds M558 P5 X0 Y0 Z0 H.5 I1 T15000 F50 ;G31 P500 X0 Y0 Z-.189 ; Set Z probe trigger value, offset and trigger height G31 P500 X0 Y0 Z-0.25 ; Heaters M305 P0 T100000 B4138 C0 R4700 ; Set thermistor + ADC parameters for heater 0 M143 H0 S120 ; Set temperature limit for heater 0 to 120C M305 P1 T100000 B4138 C0 R4700 ; Set thermistor + ADC parameters for heater 1 M143 H1 S280 ; Set temperature limit for heater 1 to 280C M307 H0 A152.3 C416.0 D2.0 S1.00 V23.7 B0 M307 H1 A393.8 C209.3 D1.7 S0.80 V24.0 B0 ; Fans M106 P0 S0 F500 H-1 ; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off M106 P1 S1 F500 H1 T40 ; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on ;M106 P2 S1 I0 F500 H1 T45 ; Set fan 2 value, PWM signal inversion and frequency. Thermostatic control is turned on ; Tools M563 P0 D0 H1 ; 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 ; Automatic saving after power loss is not enabled ; Custom settings are not configured ; Miscellaneous ;T0 ; Select first tool ; Mesh Grid M557 R120 S30 ;Scale Correction ;M579 X1.020 Y1.012 Z1 M579 X1.013 Y1.01
I guess that defective bed leveling comes from the glass but I did the same test after rotating the glass by 180°, and the issue is still the same.
Any help will be appreciated.
Your dial gauge probe is offset from the nozzle, which means that if you have a geometric error that causes effector tilt (very common in delta printers) then it won't give you an accurate reading of nozzle height. My suggestions:
Measure the FSR trigger height at various points on the bed, not by using the dial probe but but dropping the nozzle until it just grips a piece of paper, sending G92 Z0, raising the nozzle a few mm and using G30 S-1 to measure the trigger height. This is to check that the FSRs are giving you consistent trigger heights.
If the FSR trigger height is consistent, after calibration run G29 to generate a height map. Then the difference between the dial gauge reading and the height map is caused by effector tilt. See https://duet3d.dozuki.com/Wiki/Calibrating_a_delta_printer#Section_Make_sure_your_build_is_accurate for common causes.
Thank you for quick help.
I already do such calibration for FSRs.
As you can see in my bed.g, I have commented all the H parameters to do new tests. because even with H parameters I have bad results.
G30 P0 X-86.60 Y-50.00 Z-99999 ;H-0.04 ; Pos 1 X tower G30 P1 X0.00 Y-100.00 Z-99999 ;H0.054 ; Pos 2 between X-Y towers G30 P2 X86.60 Y-50.00 Z-99999 ;H-0.055 ; Pos 3 Y tower G30 P3 X86.60 Y50.00 Z-99999 ;H.023 ; Pos 4 between Y-Z towers G30 P4 X0.00 Y100.00 Z-99999 ;H0.019 ; Pos 5 Z tower G30 P5 X-86.60 Y50.00 Z-99999 ;H0.058 ; Pos 6 between Z-X towers G30 P6 X-43.30 Y-25.00 Z-99999 ;H0.008 ; Pos 7 X tower G30 P7 X0.00 Y-50.00 Z-99999 ;H0.027 ; Pos 8 between X-Y towers G30 P8 X43.30 Y-25.00 Z-99999 ;H0.018 ; Pos 9 Y tower G30 P9 X43.30 Y25.00 Z-99999 ;H0.023 ; Pos 10 between Y-Z towers G30 P10 X0.00 Y50.00 Z-99999 ;H0.044 ; Pos 11 Z tower G30 P11 X-43.30 Y25.00 Z-99999 ;H0.053 ; Pos 12 between Z-X towers G30 P12 X0 Y0 Z-99999 S9 ; center and auto-calibrate 6 factors
I followed as well all the calibration documentation including the possibility of mesh correction.
Here is the height map result:
As I already said on my first post, rotating le glass by 180° gives quite the same height map. So I guest that this comes from the frame and not the bed...
Even with G29 S1 in the config.g, I still not be able to print big part, this is why I decided to replace the duct by a dial gauge probe to try to understand what's wrong.
Just for fun, I think there is a bug in the mesh process. Changing the mesh grid to 9 points gives me this strange result.
Looks like you have 6 points around the periphery, 6 points half way, and 1 in the centre. You may get better results with more peripheral points. I use 9 around the periphery, 3 half way, and the centre.
Yes, that height map looks odd.
Ok, I will give a try with this settings.
What is the maximum number of points we can set for probing ?
Does it make sense if I use the maximum ?
Maximum points in bed.g is 32. Using more points helps if your height map shows substantial errors in places well away from your existing probe points.
Using this awesome tool http://escher3d.com/pages/wizards/wizardbed.php , I set 10 points on edge, 3 half way and 1 in the centre.
G30 P0 X0.00 Y110.00 Z-99999 H0 G30 P1 X70.71 Y84.26 Z-99999 H0 G30 P2 X108.33 Y19.10 Z-99999 H0 G30 P3 X95.26 Y-55.00 Z-99999 H0 G30 P4 X37.62 Y-103.37 Z-99999 H0 G30 P5 X-37.62 Y-103.37 Z-99999 H0 G30 P6 X-95.26 Y-55.00 Z-99999 H0 G30 P7 X-108.33 Y19.10 Z-99999 H0 G30 P8 X-70.71 Y84.26 Z-99999 H0 G30 P9 X0.00 Y55.00 Z-99999 H0 G30 P10 X47.63 Y-27.50 Z-99999 H0 G30 P11 X-47.63 Y-27.50 Z-99999 H0 G30 P12 X0 Y0 Z-99999 S9
G32 Calibrated 9 factors using 13 points, deviation before 0.075 after 0.067
Height map result
This gives different result, but that still sounds not very good
Dougal1957 last edited by
@viald I notice that you are using S9 on the last line of your G30's in the bed.g file I think you would do better if you changed that to S6 or S8 S7 and S9 will auto adjust the arm lengths for a best fit and we know that isn't always optimum as I am sure DC will explain.
Just my thoughts.
Thank you Doug.
Here is the result with S6
Unfortunately, almost the same.
Dougal1957 last edited by
@viald that's not actually auto calibration tho that is the result of mesh bed compensation!!
You are right, this is the height map calculation after the auto calibration I did
What information do you what about the autocalibration ?
Finally, I set 19 points, 12 on edge, 6 half way and 1 in the center. I also add the trigger height for each point in real condition (head at 210° and bed at 65°)
G30 P0 X0.00 Y110.00 Z-99999 H-0.092 G30 P1 X55.00 Y95.26 Z-99999 H-0.024 G30 P2 X95.26 Y55.00 Z-99999 H-0.005 G30 P3 X110.00 Y0.00 Z-99999 H-0.073 G30 P4 X95.26 Y-55.00 Z-99999 H0.03 G30 P5 X55.00 Y-95.26 Z-99999 H0.011 G30 P6 X0.00 Y-110.00 Z-99999 H0.026 G30 P7 X-55.00 Y-95.26 Z-99999 H0.029 G30 P8 X-95.26 Y-55.00 Z-99999 H0.015 G30 P9 X-110.00 Y-0.00 Z-99999 H-0.039 G30 P10 X-95.26 Y55.00 Z-99999 H-0.011 G30 P11 X-55.00 Y95.26 Z-99999 H-0.072 G30 P12 X0.00 Y55.00 Z-99999 H-0.05 G30 P13 X47.63 Y27.50 Z-99999 H-0.015 G30 P14 X47.63 Y-27.50 Z-99999 H-0.009 G30 P15 X0.00 Y-55.00 Z-99999 H0.014 G30 P16 X-47.63 Y-27.50 Z-99999 H0.010 G30 P17 X-47.63 Y27.50 Z-99999 H-0.025 G30 P18 X0 Y0 Z-99999 S6
What do you think about the trigger heights ? Is it necessary to add it ?
Here the autocalibration log
Calibrated 9 factors using 19 points, deviation before 0.067 after 0.062
The same using S6
Calibrated 6 factors using 19 points, deviation before 0.065 after 0.064
I don't know what this information means, what could be the conclusion ?
As Doug said, what is the difference between S6/7/8/9 in G30 command ?
It seems to be good
In fact, the first layer is still no so good, so I still try to improve the precision of the Delta.
I have completely disassembled the delta and check each part.
I have rebuild it, calibrated again and again for in fact having the same poor calibration result
G32 Calibrated 6 factors using 19 points, deviation before 0.068 after 0.067
The default seems to be symmetrical and I have absolutely no idea where it comes from.
I switched the connection of the stepper and end switch on the board, X ->Y, Y->Z and Z->X, and did another calibration.
I supposed that the height map will also rotate 90°, actually not, the height map has exactly the same symmetrical default in the same direction
What could it mean ? This Delta makes me crazy
oliof last edited by
check out http://boim.com/DeltaUtil/CalDoc/Calibration.html for possible reasons for deviation.
Thanks. I already read this interesting information, but none of the effects exposed are precisely mine. It seems that my issue is a combination of multiple error effects.
I think, I should start with the rod length effect. I should precisely manually measure each of them, and check is they are equal.
But they are about 290mm long and my caliper is not large enough 🤔
@Viald, have you read https://duet3d.dozuki.com/Wiki/Calibrating_a_delta_printer#Section_Make_sure_your_build_is_accurate ? A circular (bulls-eye) spirit level mounted on the effector will show up many types of geometric error that can cause height variations.
Yes I read it several times. The bulls-eye spirit level is a very good idea, If the result is not correct, I think It won't be easy to interpret the feedback.
If the bubble is fixed during effector mouvements, the issue clearly comes from the bed, at the opposite it could comes from too many things.
I'm currently trying to compare rods length with a micrometer. I'm going step by step, because I'm lost.
As my caliper is not large enough to measure the magnetic arms length, I made this tool to compare the length.
I took one arm length as a reference and compare it to others, here is the result:
1/ Ref (0.00)
I guess that this is good enough, and my issue does not come from the arms length.
Arms are good
To check if the autocalibration is correct, I measure as precise as possible the length in 3 parts
The sphere diameter is 9.41, so the arm length is 213.64 + 42.55 + 42.53 - 9.41 = 289.31
The autocalibration (S7) always find a longer length around 291.786
M665 Diagonal 291.786, delta radius 171.632, homed height 229.294, bed radius 114.0, X -0.180°, Y -0.129°, Z 0.000°
So I decided to fixe the real length in config.g and did multiple S6 autocalibration
That's the best I can have:
G32 Calibrated 6 factors using 19 points, deviation before 0.078 after 0.077
M665 L289.300 R170.748 H229.244 B114.0 X-0.167 Y-0.125 Z0.000 M666 X0.135 Y0.152 Z-0.287 A0.30 B0.19
Bed is good
Then I put the level on the effector, adjusted its level at X0 Y0 and move to each tower, below is the result:
The video link https://dai.ly/k50wYDzWkYziSLtb1Nv
What ever the Z position is, I have exactly the same levelling, and moving along the Z axe, the levelling does neither not change.
But, actually the effector is tilting when it's close to each tower. For sure this is the issue, but where does it come from ?
Thanks for your help.
And Voilà !!!!
Look at this That's much better compare to the previous one :))
G32 Calibrated 7 factors using 19 points, deviation before 0.022 after 0.021
M665 Diagonal 289.536, delta radius 170.580, homed height 229.474, bed radius 114.0, X -0.089°, Y -0.175°, Z 0.000°
And the rod length is quite the same compare to measurement I did.
The distance between balls of the carriage and balls of the effector was not the same. The max difference was 0.9mm
The carriages of my printer have a screw to tight them much or less on the V-slot profile. But when you tight them you change the distance between the 2 balls, which cause a major issue on the geometry of the printer.
I still have a small tilt effect on the effector, but I think that the precision should be now enough to print large parts.
I'll give a try and let you know.
The result is better, mostly for the first layer but it could be improved further.
What are the other reasons which can tilt the effector ?
I have printed a large rectangular object which should measure 120x170mm, but in fact the print is smaller and not rectangular, the shape is trapezoid
Only the height is correct.
What are the other reasons which can tilt the effector ?
The common reasons are listed at https://duet3d.dozuki.com/Wiki/Calibrating_a_delta_printer#Section_Make_sure_your_build_is_accurate.
Step by step checks
Towers must be parallel to each other
My Delta has metal corners. I have checked spacing with a caliper at bottom, top and half way. the max difference between 2 towers is less than 0.2mm
Bed should be at right angles to the towers in both X and Y directions
I have checked with a square, the bed is perpendicular to the 3 towers
All 6 rods must be the same length, measured between bearing centres
Checked, see above.
The spacing between the bearings at the top of a pair of rods must be exactly the same as the spacing between the bearings at the bottom
Corrected, see above
The joints must have enough angle of movement to allow the nozzle to reach all of the printable area
I use magnetic balls, not an issue.
The two bearings on each carriage must be at the same height
Should be by design, I don't know how to check.
Carriages must not be rotated or warped about the Z axis
It should not be my case. Check the video with the bulls-eye level. I suppose If one of the carriage has this issue, the level should move during mouvement along the Z axe.
There must be no play in the joints
I use magnetic balls
I have printed this calibration tool https://www.thingiverse.com/thing:745523
M665 L289.536 R170.677 H227.388 B114.0 X-0.504 Y-0.516 Z0.000
It seems that autocalibration failed to correct the Y tower position. And it seems that I have a rod length error as well, but all lengths are equal
Now that you have corrected the rod bearing spacing, what does the spirit level show?