The formula for dimensional calibration is
new_diagonal_rod = measured_length / target_length * current_diagonal_rod
Current diagonal rod is 232.26 in Bulbul Junior.
I printed a test model whose dimension is 40.00×28.00×18.00 (mm).
Actual measurement of the printed model was 40.80×28.85×18.20 (mm). It printed the model little bigger so I would increase diagonal rod length.
x_factor = 40.80 / 40.00 = 1.02
y_factor = 28.85 / 28.00 = 1.02
z_factor = 18.20 / 18.00 = 1.01
average_factor = (x_factor + y_factor + z_factor) / 3
In Deltabot 3D Printer, using one factor is sufficient because a position in 3D space is converted into spherical coordinate by inverse kinematics.
new_diagonal_rod = 1.02 * 232.26 = 236.91
In my case, the Marlin firmware supports data retrieval in EEPROM of the controller board. Below is the EEPROM content of Bulbul Junior 3D Printer.
Connecting...
start
Printer is now online.
echo: External Reset
Marlin 1.0.0
echo: Last Updated: Mar 22 2016 03:35:52 | Author: (RichCattell v1.0, Bulbul Junior v0.99, No LCD)
Compiled: Mar 22 2016
echo: Free Memory: 3059 PlannerBufferBytes: 1232
echo:Stored settings retrieved
echo:Steps per unit:
echo: M92 X100.00 Y100.00 Z100.00 E450.67
echo:Maximum feedrates (mm/s):
echo: M203 X200.00 Y200.00 Z200.00 E200.00
echo:Maximum Acceleration (mm/s2):
echo: M201 X5000 Y5000 Z5000 E9000
echo:Acceleration: S=acceleration, T=retract acceleration
echo: M204 S3000.00 T5000.00
echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)
echo: M205 S0.00 T0.00 B20000 X20.00 Z20.00 E20.00
echo:Home offset (mm):
echo: M206 X0.00 Y0.00 Z0.00
echo:Endstop adjustment (mm):
echo: M666 X-6.80 Y-6.30 Z-6.95
echo:Delta Geometry adjustment:
echo: M666 A0.00 B0.00 C0.00 E0.00 F0.00 G0.00 R92.50 D232.26 H172.77 P0.00
echo:PID settings:
echo: M301 P18.13 I1.06 D77.84
echo:SD init fail
To set new diagonal rod length, I run:
M666 D236.91
M500
This is typical way of dimensional calibration of Deltabot 3D Printer. You repeat above calibration cycle until it reaches consistent accuracy range you desire.
One tricky part of Deltabot 3D Printer is dimensional accuracy gets off as the model’s dimension moves away from the calibration size. Suppose you plan to print mating parts whose size is 100.00 mm, do quick dimensional calibration and check the accuracy.
Some serious 3D Printer users exclusively run Cartesian 3D Printers due to this subtle variation of accuracy of Deltabot 3D Printer. I haven’t spend time to investigate why does it yet.
Adjusting flatness of the virtual plane
If the center height is lower than the three tower positions, the virtual plane formed by effector’s movement is concave. Increasing Delta Radius lowers the edges till center and the three tower positions are at the same plane.
Here is the example. Bulbul Junior’s Delta Radius was 92.50 mm.
Lowering the effector to the center on xy plane, Z height of (0, 0) should be zero as the nozzle touches the print bed. Well, the nozzle touches the print bed 0.2 mm down. Z was -0.20 mm.
Three tower positions’ Z height are 0.20 mm, 0.20 mm, and 0.10 mm as the nozzle touches the print bed.
How can we adjust end stops so that four points form one virtual plane, which means exact parallel plane to print bed?
I increased Delta Radius to 93.00 mm. And the measurement of four points were
0.10 mm in X tower, 0.05 mm in Y tower, and 0.05 mm in Z tower. At the center nozzle barely touches the print bed.
I increased Delta Radius to 93.50 mm.
X tower was -0.15 mm, Y tower was -0.1 mm, Z tower was -0.1 mm. And adjustment three endstops made center and three tower positions exactly touches the print bed, Z was 0.00 mm.