Triffid Hunter's Calibration Guide

From RepRap
Revision as of 00:16, 17 October 2011 by Triffid hunter (talk | contribs) (Initial commit)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


1) some tool that can precisely measure 100mm. vernier caliper is ideal

2) some tool that can precisely measure something 0.5mm wide. micrometer is ideal, vernier calipers will do

3) know how many full steps per revolution your steppers are. steps = 360 / angle. 1.8° = 200 steps, 0.9° = 400 steps, etc

4) know what your stepper drivers' microstep is set to. Most set pololus to 16x, GEN3 stepper driver 2.3 is fixed to 2 (half step).

5) know the number of teeth on your pulleys. Standard printed pulleys have 8 teeth. Most machined pulleys have 10 or 12 teeth since 8 tooth is technically too small for T5 belt

6) know your belt pitch! XL and T5 belts /look/ the same, but the difference is important!

7) know how many teeth are on the two gears of your extruder. Alternately, know the gear ratio.

8) remove all sources of backlash. your single wall parts won't be usable as calibration pieces if you have lash!

XY steps

These should be calculated.

steps = motor_steps_per_rev * driver_microstep / belt_pitch / pulley_number_of_teeth

So, for standard T5 8 tooth pulleys,

200 * 16 / 5 / 8 = 80.0

Or, for XL belts and 8 tooth pulleys,

200 * 16 / 5.08 / 8 = 78.74

Z steps

These should be calculated too.

steps = motor_steps_per_rev * driver_microstep / thread_pitch

So, for standard M8 threaded rod,

200 * 16 / 1.25 = 2560.0

Or for 5/16" (18TPI = 25.4 / 18 = 1.4111mm)

200 * 16 / 25.4 * 18 = 2267.71654

E steps


Start with a hob effective diameter of 7mm.

Calculate E_steps = motor_steps_per_rev * driver_microstep * big_gear_teeth / small_gear_teeth / PI / hob_effective_diameter

E.g.; I have a 51:11 pair on my gregstruder, so I calculate 200*16*51/11/3.14159/7 = 674.65

Classic wade has 39:11, so 200*16*39/11/3.14159/7 = 515.91

Gregstruder has 43:10, so 200*16*43/10/3.14159/7 = 625.7


Your hob effective diameter is unlikely to be exactly 7mm.

Required tools: vernier caliper with depth gauge, or similar tool that can precisely measure 100mm.

1) remove hot-end from extruder

2) feed some filament in

3) get it exactly flush with the bottom, in such a way that you can measure exactly how much filament is fed through

4) feed 100mm of filament

5) measure how much is fed

6) calculate new_e_steps = e_steps * 100mm / measured_distance

7) feed this to your firmware. Sprinter supports M92 Ennn, sjfw uses M200 Ennn.

8) goto 3 unless measured is exactly 100mm

9) Don't save permanently yet, there's a further refinement to this value below

10) re-attach hot end

Z height

At Z=0, you should be able to have a single piece of paper between your nozzle and the bed, and move it with a little "grabbing" but not quite enough to bend the paper when you push it.

This is a simple, quick and effective test to use when levelling your bed.

Rather than tuning your endstop endlessly, you could simply make a macro that homes Z using the endstop then sends G92 Z-nnn where nnn is the position of your endstop vs this point. Your endstop must of course be below Z=0 for this to work!

When your Z=0 point is correct, your bottom layer will be slightly fatter than layers on top, but not extremely so.

Bed adhesion is strongly related to the Z=0 point. If you're not getting enough adhesion, print slower and with a lower Z=0 point so the first layer is squished more. If you're getting too much adhesion, raise the Z=0 point by 0.02mm or so.

1) find appropriate Z=0 point 2) send G92 Z0 3) prepare printer for printing- warm up bed, load filament, etc

Skeinforge/sfact settings

Layer height, Extrusion width

These are simple to visualise. When your extruder draws a line of plastic, that line has a height and width. You get to choose these values. Best results when layer height < nozzle diameter, and extrusion width >= nozzle diameter.

Personally I go for layer height of 0.2mm, 0.25 or 0.3mm depending on my mood, and extrusion width of 0.5mm.

Sfact exposes these directly, but skeinforge hides extrusion width behind two settings: Perimeter Width over Thickness (PWoT) and Infill Width over Thickness (IWoT)

Set PWot = IWot = extrusion width / layer height.

So, with 0.2 layer height and 0.5 extrusion width, PWoT = IWot = 2.50

In skeinforge speed, set flow rate = feed rate. feed / flow = sfact's packing density. This should always be 1.0 as it's easier to change E steps and this is simply an E steps calibration fudge factor.

Calibrating Extrusion Width

0) remove all sources of backlash. you cannot trust the results of this test if you have backlash!

0.5) measure your filament diameter in 5-10 locations. Rotate your measurement device around the filament so if it's oval you get both the long and short dimensions. Average these values, casting out obvious outliers. Enter this value into sfact or skeinforge as your filament diameter. If you intend to use volumetric units (see below), use your ideal filament diameter at this point instead of measured value, ie 3.0 or 1.75

1) Print a single wall calibration part. Sfact provides some in a folder, but you can use any cube or cylinder or other simple part by disabling the fill plugin when you skein. You should end up with an object that is only a perimeter and nothing else.

USE COOL PLUGIN AND A FAN or your object will be too droopy to measure!

2) print the object

3) measure the wall width with your micrometer or vernier calipers. Beware, the bottom layer or two are squashed a bit more to get good adhesion, don't measure those!

4) calculate new_e_steps = e_steps * selected extrusion width / measured extrusion width, or if that's jumping around too much, use a smaller adjustment.

5) goto 3 unless the measured value exactly matches your selected extrusion width. You can reuse the same gcode since we don't change any sfact/skeinforge settings. LEAVE PACKING DENSITY ALONE!

6) your E_steps is now correct. Save this value permanently into your firmware. For sprinter, punch into configuration.h and flash. For sjfw, burn an M200 to eeprom. <insert other firmware instructions here>

7) repeat for other filaments, write down or store the E steps for each filament you have. Even different colours of the same type, or even seemingly identical rolls can have different E steps!


Now print your calibration cube and see how it measures!

Optional: Switch to volumetric E units

It seems silly to me to have to reskein if you change filament diameter ie when switching colours. Follow these instructions if you want to use mm^3 units for E instead of mm.

1) record the filament diameter setting you've been using in skeinforge/sfact.

2) calculate (filament_diameter / 2) ^ 2 * PI. For filament_diameter = 3.0mm, this is almost exactly 7.

3) change your filament diameter in sfact/skeinforge to 2*sqrt(1 / pi) = 1.128379

4) Divide your E_steps by the number from 2)

5) multiply all your E-related speeds (esp maximums in firmware config!), and retract distance by the value from 2)

6) repeat single-wall calibration above. Your first print should be extremely close.


sfact/skeinforge calculate the volume of filament to extrude for each line segment. Then, they take this volume and divide it by (filament_diameter / 2) ^ 2 * PI to find the distance of filament to extrude.

Since this factor is constant and it's easy to change E steps, it ideally belongs in firmware.

SO if we reduce our filament diameter to the point where (fd / 2)^2 * pi == 1.0, then the E words in our gcode will be in units of mm^3, and we can simply adjust E steps in firmware when we change filament then reuse the same gcode despite the different diameter of filament, or different hob "bite" depth.

Since we've made E words 7x bigger (area of a 3mm diameter circle is ~7mm^2, so 1mm(length) becomes 7mm^3(volume)), we have to adjust our retraction distance, and E steps and acceleration to suit the new units.