Triffid Hunter's Calibration Guide

From RepRap
Revision as of 19:47, 11 November 2012 by Triffid hunter (talk | contribs) (New E steps calibration procedure)
Jump to: navigation, search

Prerequisites

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

NOTE: If after calculating this correctly your objects come out the wrong size by more than half a millimeter or so, your belts are damaged or something else is awry!

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

Calculate

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

Measure

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/Marlin supports M92 Ennn.

8) goto 3 unless measured is within 1% of 100mm

9) Don't flash firmware yet, there's a further refinement to this value below. Why? The back-pressure from the hot-end alters how much plastic we push with each hob rev, and you'll probably end up tightening your idler more which reduces the hob effective diameter.

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 a little so the first layer isn't quite so squished.

1) find appropriate Z=0 point

2) send G92 Z0

3) prepare printer for printing- warm up bed, load filament, etc

Slic3r/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 < 80% of nozzle diameter, and extrusion width >= nozzle diameter.

Eg; with an 0.35 nozzle, your maximum layer height is 0.35*0.8= 0.28mm and your extrusion width should be 0.4mm or greater. with an 0.5mm nozzle, your layer height can be up to 0.4mm, and an 0.25mm nozzle will give you 0.2mm layers.

You can use a lower layer height or larger extrusion width if you wish, it will work fine. The slicing software automatically calculates the appropriate volume to extrude based on the settings you choose. There is no lower limit on layer height - it is limited by your ability to keep flow consistent at very low flowrates. Some reprappers have printed layers as small as 5 micron - 0.005mm!

Personally I go for layer height of 0.2mm, and extrusion width of 0.5mm. regardless of which nozzle I'm using.

If you are using Sfact, it exposes these settings directly (in the Carve plugin).

If you're using Skeinforge, it hides them behind two settings:

  • Perimeter Width over Thickness (PWoT - found in Carve). "Edge Width over Height (ratio)" for newer versions.
  • Infill Width over Thickness (IWoT - found in Fill). Found in "Inset" for newer versions.

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.

In sfact, 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.

Slic3r automatically chooses an extrusion width for you based on your nozzle diameter. If you're determined to choose, you can use the extrusion width setting.

Temperature

Each type of plastic, and each colourant for each type of plastic alters the ideal printing temperature. Eg I can print deep purple or green PLA at 185 with fantastic results, but my translucent purple PLA needs 205 and my orange PLA needs 220!

Every machine will have different numbers due to differences in thermistor, and how close to barrel temperature your thermistor is actually sensing.

Here's how I find my optimum temperature for each roll of filament that I have:

1) choose a fairly simple model that's large enough that you can clearly see the infill while it's printing

2) make sure your hobbed bolt's teeth are clean of debris such as chunks of plastic

3) make sure your idler is tight! really tight! "it hurts my fingers to pull on it and I still can't move it" tight! A too-loose idler gives exactly the same symptoms as too low temperature.

4) start printing

5) lower temperature by 5c every 2-3 layers

6) when infill starts being a row of dots instead of a line, increase temperature by 10 degrees.

7) keep monitoring print, adjust up by 5 degrees if your infill goes dotty again

8) store or remember that temperature with that roll of filament

E Steps Fine Tuning

Now, with everything very close to ideal values, we can finally dial E steps in that final little bit!

1) find an object with flat tops on a number of levels, such as this cube stack test

2) Slice at 95% rectilinear infill. Use the lowest layer height you're comfortable with - the lower the layer height used for this test, the finer your resulting E steps calibration will be. I use 0.2mm for first run, and if I'm feeling ambitious I'll repeat this process at 0.1mm.

3) Print.

4) Ignore the first 5-6 layers because they're too sensitive to the exact height of the first layer. If it's obviously over-filling or under-filling, alter E steps or Z=0 point and restart the print.

5) Observe infill. If you can't see tiny little gaps between the lines, reduce E steps by 0.5% every 2 layers until you can see tiny gaps.

6) Observe solid top layers. If you can see tiny gaps, increase E steps by 0.5% every 2 layers until there's no gaps in the top.

7) send the new E steps to your printer with M92 Ennn without even pausing the print - you will see the result in a couple of layers when the change is this small.

8) goto 5 until the infill has tiny gaps AND the solid top layers do not.

Now, your E steps is extremely finely tuned.

9) Save this value in your firmware's configuration and flash to make permanent.

Finish

Now print your favourite calibration piece (eg ultimate calibration) 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 (or printers!). 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. For 1.75mm filament, it's almost exactly 2.4.

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 E steps calibration above. Your first print should be extremely close.

Now you can reuse the same gcode over and over again, and simply alter E steps with M92 when you change filament, or use the same gcode on another printer.

Rationale

We currently have 3 tunables affecting one measurable - extrusion multiplier, filament diameter and E steps all alter the amount of plastic extruded.

Filament diameter does not change significantly - it should not change mid-print, and only changes by a small amount when switching from one roll of filament to another.

It should be possible to set two of these tunables to fixed values, and alter only the 3rd when necessary.

It is sensible to choose the tunable which is easiest to alter - this is E steps which can be altered at any time (even mid-print) by sending M92 Ennn.

The slicer calculates the volume of filament to extrude for each line segment. Then, it takes this volume and divides it by (filament_diameter / 2) ^ 2 * PI to find the distance of filament to extrude.

SO if we alter our filament diameter such that (filament_diameter / 2)^2 * PI == 1.0, then the E words in our gcode will be in units of mm^3.

Since our new unit is 7x bigger (area of a 3mm diameter circle is ~7mm^2, so 1mm(length) becomes 7mm^3(volume), for 1.75mm filament the factor is 2.4x), we have to adjust our retraction distance, and E steps and acceleration to suit the new units.

See my blog post for more info.