So since wrote on the topic,
I’ve migrated to the Repetier firmware and RepetierHost with Slic3r, and
thought I’d update my post….
First, and foremost, build your printer as accurately as you
can. Most important is getting the three
vertical towers equally spaced and as parallel to each other as possible. The actual spacing is less important than
having equal spacing of the towers.
We’ll correct for actual spacing in firmware.
Next, the six diagonal rods must be as equally matched in
length as possible. Again, the exact
length is less important than getting the rods equal in length.
And we’re going to make an assumption that your build surface is
flat. A pretty good assumption, as the community consensus is to use a glass build surface.
And, typically, that glass surface is typically held at three points, so the build
surface shouldn’t be mechanically warped.
Also, at this point you should have an Arduino environment,
some knowledge of how to edit the Repetier or Marlin firmware, compile it, and
upload it to your controller of choice. Your printer’s upper end-stops should be
working properly, and your steps per inch values for your extruder and carriage
motors should be set correctly. Your
RepetierHost or Pronterface program should be able to control your printer.
What we’re going to do is:
Enter some starting values into the
firmware
Calibrate each of the three towers
to the actual build surface.
Calibrate the firmware to print
flat (not dished or cupped) across the build surface.
Calibrate the firmware to print to
correct dimensions.
1- Enter starting values into the firmware.
With your endstop screws about halfway into the carriage
(allowing for adjustability in either direction), click the HOME on Pronterface
or RepetierHost, and measure the distance from the tip of your extruder to the
build surface.
For Repetier, edit
DELTA_DIAGONAL_ROD
in Configuration.h
END_EFFECTOR_HORIZONTAL_OFFSET
in Configuration.h
CARRIAGE_HORIZONTAL_OFFSET in
Configuration.h
PRINTER_RADIUS in Configuration.h
Z_MAX_LENGTH in Configuration.h
For Marlin, edit
DELTA_DIAGONAL_ROD in
Marlin.pde/Marlin.ino
DELTA_EFFECTOR_OFFSET in
Marlin.pde/Marlin.ino
DELTA_CARRIAGE_OFFSET in
Marlin.pde/Marlin.ino
DELTA_SMOOTH_ROD_OFFSET in
Marlin.pde/Marlin.ino
Z_HOME_POS in Configuration.h
If you built your printer as designed, the default values
should be pretty close. Otherwise adjust
as appropriate. I like to double check the Z_... value to avoid crashing the
extruder tip into the build surface.
2- Calibrate the towers to the actual build
surface.
An important trick here.
Set up four scripts in RepetierHost, or four user defined buttons in
Pronterface, to move the carriage to four specific measurement locations on
your build surface. Three locations are
on a circle centered on the center of your build surface immediately in front
of each of the three towers. The fourth
is the actual center of your build surface.
And each of the four locations is at height Z=0.
Let’s call the three tower locations A, B, and C, and the
center D. The script code for each is:
Button Script
A g28 g0 f8000
x-77.94 y-45 z0
B g28 g0 f8000 x77.94 y-45
z0
C g28 g0 f8000 x0 y90 z0
D g28 g0 f8000 x0 y0 z0
(Decoded,
g28 homes the printer carriage, g0 is a move to an absolute location, f8000
controls the speed of the move, and x, y, and z are followed by the
corresponding coordinates in 3D Cartesian space. The x and y coordinates are points on a
circle 90mm from the build surface center and directly in front of each of the
three towers.)
Now run
script A in RepetierHost / click button A in Pronterface. The carriage should move up to home, then
down to a point in front of tower A. The
proper height should be just above the print surface, with clearance space for
a single sheet of paper to slide between.
Adjust the end-stop screw only for tower A if necessary, then repeat the
test by running the script or clicking the button. Repeat until the paper slides between the
print surface with only slight drag.
With
tower A adjusted, move on to tower B, and then to tower C. When tower C is adjusted, you should be able
to go back and successfully repeat the test on tower A without having to
readjust.
3- Calibrate
the firmware to print flat
At this point, it is likely that if the firmware instructs
the printer to move the carriage across the build surface, the nozzle tip will
not stay true to the build surface. Even
though the extruder will be at the calibrated correct Z height at each of the
three tower locations, it will either be above or below the build surface at
the center of the build area. This is
also corrected by adjusting the firmware.
Run script D / click button D. The carriage should move up to home, then
straight down to the center of the build surface. You will see one of three things. The extruder nozzle will be above the build
surface, at just the right height (using the paper test), or will hit the build
surface.
The value in the firmware constant DELTA_RADIUS (both
Repetier and Marlin) controls the “flatness” of the movement of the carriage at
a given Z height. If DELTA_RADIUS is too
large, the extruder nozzle will track below the desired Z height inside the
calibrated points A, B, and C. If
DELTA_RADIUS is too small, the extruder will track above the desired Z height
inside the calibrated points A, B, and C.
However, in both Repetier and Marlin (as the code is
written), you don’t adjust DELTA_RADIUS directly. DELTA_RADIUS is calculated from the initial
values entered earlier:
For Repetier in Configuration.h
DELTA_RADIUS is
PRINTER_RADIUS - END_EFFECTOR_HORIZONTAL_OFFSET
-CARRIAGE_HORIZONTAL_OFFSET
For Marlin in Marlin.ino.Marlin.pde
DELTA_RADIUS is
DELTA_SMOOTH_ROD_OFFSET - DELTA_EFFECTOR_OFFSET
-DELTA_CARRIAGE_OFFSET
To correct the problem, the best course is to change one of
the variables set earlier to force the value of DELTA_RADIUS to increase(to
lower the extruder nozzle) or to decrease (to raise the nozzle).
To lower the extruder nozzle
increase DELTA_RADIUS by increasing DELTA_SMOOTH_ROD_OFFSET(Marlin) or
PRINTER_RADIUS(Repetier).
To raise the extruder nozzle,
decrease DELTA_RADIUS by decreasing DELTA_SMOOTH_ROD_OFFSET(Marlin) or PRINTER_RADIUS(Repetier).
For your first cycle, if you are above the build surface,
increase DELTA_RADIUS by (about) the same amount. If the extruder nozzle hits the build surface,
decrease DELTA_RADIUS.
Next, repeat the ABC tower calibration process. Changing the DELTA_RADIUS changes the tower
calibrations, so you must cycle through the process of adjusting the ABC
buttons/scripts again. And when the ABC
towers are set, test the center D button/script.
You may have to repeat this a few times with smaller changes
to DELTA_RADIUS, but eventually, the drag on a piece of paper should be the
same at all four locations. Now the printer
knows how to print flat at a given Z height.
4- Calibrate the firmware to print to correct
dimensions.
At this point the printer probably
prints, but the results are dimensionally wrong. Printing something 100mm long results in a
printed object that is not exactly 100 mm long.
This also, can be corrected in firmware. Adjustments
to DELTA_DIAGONAL_ROD in the firmware control the size of the printed object.
Create a
simple calibration object in openscad, slice it, and print it. By measuring the
actual size of the object as printed and comparing it to the size in the
design, the accuracy of the printer can be assessed and adjusted.
Here is
my sample openscad object:
cube([100,2,2]));
If the
length of the object is wrong, adjust DELTA_DIAGONAL_ROD:
new DELTA_DIAGONAL_ROD =
100 / measured_length * original DELTA_DIAGONAL_ROD
then
re-upload the firmware, and print and measure again. When the printed object measures 100 mm, the
printer is printing accurately to size and is fully calibrated.