From RepRap
Revision as of 08:53, 21 July 2015 by Glenn (talk | contribs) (wiki)
Jump to: navigation, search
This page has been flagged as containing duplicate material that RepRapSoftwareTweakingManual also attempts to cover.
These pages should be merged such that both pages do not attempt to cover the duplicate topics.

ANNOUNCEMENT: If you search for the latest up-to-date guide please take a look at Triffid's Guide.

Calibration is the collection of mechanical "tweaking" processes needed to get exact, quality prints. While your RepRap machine may be working as far as the electronics are concerned, calibration is necessary to have well printed parts.

Without calibration, prints may not be the correct dimensions, they may not stick to the build surface, and a variety of other not-so-wanted effects can occur. A RepRap can be calibrated to be as accurate as the mechanics allow.

Once you have finished the physical build of your RepRap printer, calibration is the next big hurdle. Trying to print before calibration will likely result in a messy "blob" smeared over the printer bed.

The following set of objects and notes are taken (and edited) from Coasterman who posted them to Thingiverse. They have been moved to the RepRap wiki so that they could more easily be edited and contributed to by the broader community.

Though the specific recommendation made in this article are based on Skeinforge (or sfact), this information should be nearly equivalent for most other software. Regardless of the software used, the techniques described and the set of calibration objects are invaluable.

Note that calibration is an ongoing process that needs to be performed throughout the life of the printer. There are almost always adjustments and tweaks that can be done to improve print quality.


Whilst calibration is a somewhat iterative process; the order of calibration laid out below is quite important.

It is PARTICULARLY IMPORTANT that the calibration of the motors is done first as poorly calibrated motors can destroy a stepper motor driver (e.g. Pololus) and potentially the motors!


Before attempting calibration, a few things are necessary:

  • A stable build process should be established. Your machine should be completely built and all of the nuts and bolts tightened down.
  • The machine should be on a steady, flat, level surface.
  • Calipers, a level, and any necessary wrenches/screwdrivers to adjust the machine should be handy.

Calibration processes


Whilst not technically a calibration issue, if you don't set the firmware's motherboard setting correctly then calibration simply won't work.

Basically each firmware supports a number of different motherboards. As such, one of the first things you need to do is correctly specify the correct motherboard.

For Marlin edit Configuration.h and find the line:

  1. define MOTHERBOARD XX

Change the XX to the number which corresponds to your printer's motherboard.

Motor Calibration

Objective: set the current for the stepper motors to the correct level.

Your motors should be quiet when running and can occasionally make musical sounds, particularly when making circles. If they are making a fair amount of noise then you have a problem.

Calibration Object: None

NOTE: incorrect current settings can damage your stepper motor driver and/or your motors.


Motor make significant noise.

This generally means you have too much current to the motor.

Motor vibrates without turning.

This generally means that you have insufficient current to the motor. You could also have a problem with a part sticking which stops the motor from being able to drive the axis. It might also be possible to be way off in your steps/mm (e.g. a typo in your value in the config file): when steps/mm is double the correct value your motor might vibrate on the spot.

Axis movement pauses momentarily and then resumes.

You may have too much current going to the motor which is causing the stepper motor driver to over-heat. Reduce the current. This can also be caused by firmware but check your motors first. Another possible cause is the set screw on the gear is not tight enough.


Each Pololu has a trimpot located next to the heatsink. The trimpot controls the current that is sent to each motor. Turning the trimpot counter-clockwise reduces the current to the motor, turning it clockwise increases the current to the motor.

Start by adjusting the trimpot down until your motor vibrates on the spot rather than turning cleanly. Now turn the trimpot in a clockwise direction in small increments (1 eighth of a turn) until the motors just start running. Then give the trim port a final turn of about 1 eighth of a turn and your should be good to go.


Like your motherboard, most firmware support a variety of thermistors. You need to ensure that the firmware is set to match your thermistor. If it doesn't, then your temperature readings won't match the real world.

For marlin the settings are in Configuration.h under 'Thermal Settings'.

  1. define TEMP_SENSOR_0 5
  2. define TEMP_SENSOR_1 0
  3. define TEMP_SENSOR_2 0
  4. define TEMP_SENSOR_BED 2

TEMP_SENSOR_0 is normally your hot end and TEMP_SENSOR_BED is normally your bed. Set both according to the table of supported thermistors.

End Stop

Objective: to correctly set the endstops on each axis.

The results of this step should see each axis correctly home and not run into the opposite end of each axis.

Signs of having mis-calibrated endstops: the bed or extruder physically crash into either end of their axis.

An head (extruder) crash can damage the extruder, bed, cogs or motors.

Calibration Object: none


Each axis of your printer has a 'home' position and a maximum feed length. If the firmware attempts to drive the extruder or bed beyond either of the two end points physical damage to your printer is possible.

Most printers have a single 'physical' end stop on each axis whilst some may have a physical end stop at each end of an axis.

End stops are typically a micro switch which is triggered when the carriage or bed touch the end stop.

Soft Endstop Printers with only a single 'physical' end stop will rely on the firmware implementing a 'soft' end stop. A soft end stop is always at the opposite end of an axis to the physical endstop. Together the physical and soft endstops 'frame' the axis and define the total travel of the axis.

With a software Endstop each time you turn on your printer you MUST perform a 'home' operation. The home operations effectively lets the firmware know where the physical endstops are. Once the firmware has confirmed the location of the physical endstops it is able to calculate the location of the soft endstops as a simple travel distance in millimetres.

A soft endstop is therefore simply a measurement entered into the firmware that tells the firmware how many millimetres of travel the axis has from the physical end stop before physically crashing into the opposite end of the axis.

Hard Endstops

Work with each axis in turn.

Start with the x end stop. Position in the Extruder so that it is in the middle of the carriage and well clear of the bed.

Most printer software will let you move each of the axis in small increments in both directions.

Connect your printer software so that you can move the xaxis. Ideally you need to be able to have the software move the axis about 10 mm.

Start by testing that your endstop is working.

Manually close x axis endstop (e.g. with your finger :D ).

With the carriage centred instruct the software to move the axis 10 mm towards the physical endstop.

Now instruct the software to move the axis 10 mm away from the physical endstop.

If the carriage moves in neither direction then you may need to invert your axis 'enabled' state.

But make certain the power is on first ;)

Normally an axis is enabled when the endstop is 'Active Low' (end stop switch is open). In your case it appears that this needs to be reversed.

When using Marlin firmware change X_ENABLE_ON from 0 to 1.

After reflashing the firmware, peform the above test again to ensure the endstop is working.

Recentre the carriage.

With the endstop closed instruct the software to move the axis 10 mm 'towards' from the physical end stop.

It should refuse to move.

If the end stop moves then whilst holding the endstop closed instruct the axis to move 10 mm 'away' from the physical endstop. If it refuses to move then you need to 'invert' the 'x' direction for the endstop.

If you are using Marlin this requires both the INVERT_X_DIR and the X_HOME_DIR to be reversed to false and 1 respectively.

Once you have reflashed the firmware with the above settings peform the test again to ensure that the axis refuses to move 'towards' the endstop when it is manually closed.

The next action is to find the limit of the x axis in the direction of the physical endstop. The limit is defined as the most extreme position the x axis can be in without impacting the side of the printer.

Move the x axis slowly towards the physical endstop. As you approach the end stop reduce the number of mm you move each time.

Check the carriage before each move to ensure that the next move isn't going to cause the carriage to impact. Once you have the carriage in the most extreme position move the endstop into contact with the carriage so that the carriage triggers the end stop.

Move the carriage away from the end stop and adjust the end stop a little further in towards the centre of the axis to give yourself a little more buffer between the carriage stopping and a possible impact.

Finally you need to do a test 'home' for the axis.

Have you hand near the power switch incase the 'homing' operation moves the axis in the wrong direction.

Start by moving the carriage so that it is 10 mm clear of the physical end stop.

Instruct the printer software to 'home' the single axis. DO NOT tell the software home ALL axis.

The carriage should move towards the endstop, back away from the end stop a couple of mm and then move towards the endstop and on contact stop.

If the carriage moves in the wrong direction or fails to stop when it contacts the endstop immediately cut power to the printer. Now repeat the above process again to correct the problem!

You have no completed configuration of the x axis physical end stop.

Repeat this process for each physical end stop.

You should now do a test 'home' of ALL axis.

Software endstop

Configuring the software end stop is a simple matter of determining how far the axis can travel away from the physical end stop before it impacts the other side of the printer.

Start by homing the axis. Now move the carriage in 10 mm increments towards the far side of the printer. Count the number of movements. As the carriage approaches the far side of the printer, you may want to reduce the travel of each movement. Once you are within about 5mm of the far side of the printer, add up the total distance traveled. This is the location of the software end stop for that axis. Repeat for the other two axes.

Now update your firmware with the location of the software end stops. For Marlin firmware you need to se the X_MAX_POS, Y_MAX_POS and Z_MAX_POS with each of the above settings.

Once you have reflashed your firmware. Home the printer on each axis and then with your finger on the power cut off switch send the carriage in the direction of the soft end point, reducing the distance of each move as you approach the soft end stop's logical location. Ensure that the carriage stops moving when it hits the soft and stop (and not the printer side).

Do this for each axis in turn. Your end stops are now calibrated.

Bed Leveling

Objective: To level the print bed so that your objects will adhere to the surface. The result of this step should make the extruder nozzle the exact same height above the bed across the entire bed surface.

Signs of having an unlevel bed: Plastic will adhere to part of the bed but not others. The extruder nozzle might "dig" into parts of the bed, pulling up or deforming the bed surface.

Importance: The first layer of the print is the foundation of all subsequent layers. A bad first layer could mean the part might peel off of the print bed during the print, "blobs" of plastic may form, causing problems in following layers, and a variety of other things.

Calibration Object: bedleveling.stl


Step 1 - Establish a corner height:

  • Move the nozzle to a corner of the bed and measure its height at this point.
  • Move the nozzle down close to the bed.
  • Use a thick piece of paper or plastic as a shim and slide it under the nozzle. You should feel a slight drag from the extruder on the paper as you pull the paper through. If not, move your nozzle up or down slightly until it does.

Step 2 - Getting the second corner:

  • Move the Y axis (the bed should move) to the second corner.
  • Using the same shim, determine if the bed is too close or too far away from the nozzle at that point.
  • Adjust the screws that hold up the bed along that edge so that the height at the corner matches your shim.
  • Move back to the first corner and check the height with the shim again. It should match, if not, repeat step 1 and step 2 until it does.

Step 3 - Getting the third and fourth corners:

  • There are two ways to adjust this - tweaking the jack screws that hold up your X axis rails and adjusting the bed itself.
    • Jack screw method:
      • Move the Y axis to the third corner and check it with the shim. If it is too high or too low, turn off the motors and slightly rotate one of the jack screws until the nozzle height matches the shim.
      • If this method is used, you MUST return to the second corner and move the nozzle up/down to the shim, and then repeat this method until both sides line up with the shim.
    • Nut and bolt method:
      • Move the Y axis to the third corner and check it with the shim. If it is too high or too low, adjust the bed screws along that edge until they line up.
      • Check the height with the second corner and repeat this method until the corners line up

Once the bed is level print the Bed Leveling Calibration test object and ensure that each square is even, smooth and consistent.

Other methods do exist. Reference Leveling the Print Bed for more information. You may want to download the original scad file so that you can change the dimensions to match your print bed.

Bed surface preparation

Objective: correct preparation of the bed to ensure that objects adhere to it.

Additional troubleshooting info can be found in the Bed Adherence section of the Print Troubleshooting Pictorial Guide.


An incorrectly prepared bed can result in poor adhesion of the plastic to the bed as well as a 'bubbling' effect.

Even a little bit of finger print grease on some surfaces is enough to ruin a print.

Bed preparation will depend on what material your bed is made out of, what you intend on covering it with, as well as what material you expect to be printing:


Clean the glass with a non-abrasive common household window cleaner using a lint free cloth. Spare no effort in ensuring that the glass is spotless. Alternative recommended cleaners include:

  • acetone/cheap nail polish remover,
  • isopropyl alcohol.

With a heated bed and ABS you will probably want something to help the print stick to the bed. Options include:

  • Sugar water (Sugar dissolved in Water, approx. 1:10 by weight) -> bed temp approx. 95,
  • ABS juice (ABS dissolved in acetone, e.g. 10mm length of 3mm filament (0.07g) dissolved in 10ml acetone) -> bed temp approx. 90,
  • Kapton tape (as below).


When applying any type of tape to print on, it is important to make sure the print surface is still smooth when you are done. Attempt to lay down tape edge-to-edge, with no overlap. If applying multiple layers, it can be beneficial for the layers to alternate directions, so that direction-specific defects do not build up as you add layers.

Blue Tape

For those printing with PLA filament, blue tape has been found to adhere well when using 3M's 'Scotch-Blue Painters Tape for Multi-Surfaces #2090'. This tape may be found in two inch rolls, or three inch rolls. The PLA will adhere to multiple layers, so it is advised to place down at least three layers of tape, before printing on a surface, to prevent damage to the print bed.

Kapton Tape

Kapton tape is a heat resistant tape which is commonly used to cover a variety of material types used in beds. The kapton tape provides good adherence for a variety of plastics. It is important to avoid bubbles while applying the tape. The "wet method" is particularly helpful as explained in this video.

Other Materials


A semi-permanent adhesive-backed plastic sheet that is installed on the build platform. Does not require prep (e.g. hairspray). Works with ABS and PLA. Not clear what the lifetime is, but it is advertised as longer than tapes. Buildtak

TODO: need details on other materials.


Objective: to ensure the hot end temperature is set correctly so that material is extruded cleanly

Calibration Object: None

Extruder steps

Objective: to adjust the extruder steps per unit

To set the extruder steps per distance of filament, (the 3mm or 1.75mm filament, NOT the material that comes out of the hot end) send M92 E<new value>. You can check the current value by sending "M503". Your host software is part of the CAM toolchain that you use to send G-Code to control the printer.

If you received filament driver as a whole unit the first estimate is calculated, however the error margin is possibly too great to leave it as it is. Importantly, write the initial value for M92 down, then raise the hot end and extrude, then measure the length extruded.

Then the value (wanted_length/measured_length)*old_M92 is a better value. You might want to do it some more times until it doesn't change much.

Calibration for printing

We also want to calibrate based on how it actually prints, basically for this a calibration Object is used and the value is increased/decreased, this can be done both by using M92 E again, or setting extrusion multipliers in slicer software.

Basically you do this until it looks good, increasing if it looks like too little, decreasing if too much. Pictures are in the Print Troubleshooting Pictorial Guide.

Note that this calibration is affected by the xyz calibration, if the part is made larger than intended, it takes more filament to make it, so that calibration should be correct. However calculations from gear ratios should already give values very close to the correct ones.


Layer height

Objective: to correct the layer height settings to reflect your printer's actual layer height.

Calibration Object: 0.5mm-thin-wall.stl

When your extruder draws a line of plastic, that line has a height and width. You get to choose these values.

Best results are obtained 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 max layer height.

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 hard 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!

Triffid Hunter (whose guide this text was stolen from :D ) recommends layer height of 0.2mm, and extrusion width of 0.5mm regardless of which nozzle he's using.

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 advanced setting. It is frequently advantageous to choose as models may have walls of a particular width, and by choosing you can ensure they are entirely filled with perimeter with no gap in the middle and no infill.


Print the 0.5mm thin wall cube and make sure that the layers adhere well but the nozzle does NOT drag through while printing.

Adjust the layer height in .01 increments until you get a nice print. In Pronterface/Skeinforge settings, this can be found under Craft > Carve.

Depending on other factors you may find it hard to get all four walls to print nicely. For the first pass if you can get just one wall looking good then move on to the next test.


Objective: to correct the infill setting.

Calibration Object: 20mm-box.stl


Set infill solidity to 1.0 for this, using linear infill. In Pronterface/Skeinforge settings, this can be found under Craft > Fill.

Print the cube and analyze the top. If there is NOT ENOUGH plastic (a concave top), reduce the Infill Width over Thickness by .05 increments. If there is TOO MUCH plastic (convex top), turn that parameter up by .05 increments. In Pronterface/Skeinforge settings, this can be found either in Craft > Inset in some versions, or Craft > Fill in other versions.

Once you're feeling close, start bumping it around in smaller increments.

You may also need to adjust your feed rate.

Adjust the feed rate by increments of 2 or so until you feel close. If it looks really disgusting and blobby, go by increments of 0.5mm. Then go by smaller and smaller increments until you've nailed it. Although you probably just want to decrease Infill Width over Thickness instead of decreasing Feedrate because lowering feedrate will degrade the resolution.

Temperature control

Objective: to set the hot end temperature correct for your preferred plastic.

Note: you will find that different types of plastic have vastly different temperatures for both your hotend and your bed. What you might not expect is that different colours for the same material can also required different printing temperatures.

As the tower has quite a small 'top' surface area you may need to cool this object as you print. If your printer doesn't have a built in fan you can use any room fan as a substitute.

Calibration Object: 50mm-tower.stl

Something to be aware of is that there are multiple reasons an extruder can skip during a manual extrude. Take care of those problems first by setting the temp to the high end of the expected range (e.g. 235-240 for ABS) and making sure the extruder doesn't skip during a manual extrude.


Set the 'Infill solidity' to 1.0. In Pronterface/Skeinforge settings, this can be found under Craft > Fill.

If the plastic comes out as a drip instead of a cylindrical filament, the temperature is too high. --

Start by doing a simple extruder test to determine what the range of temperatures are that you can extrude at. Reduce the temperature in 5 degree increments until the extruder starts skipping when you do a manual extrude. Turn the extruder up 5 degrees and note this as your minimum extruder temperature.

Print this block.

If it looks like a blob, turn down all the temps by 5 degrees until you get something good. Chances are you won't need to do this more than 5 degrees.

Note: Be careful as going too low can result in the plastic setting making it hard for the motors to drive the plastic, possibly causing wear or damage.

TODO: list temperature ranges for common plastics.



Hotend: 185 °C

Bed: 60 °C


Hotend: 230 °C

Bed: 110 °C

Perimeter Width

Objective: correct the perimeter width over thickness. In newer versions Edge Width over Height.

When using Slic3r, this is automatically calculated from the layer height. Adventurous sorts can modify this setting through Print Settings->Advanced->Extrusion Width->Perimeters. Slic3r accepts a fixed value (use the layer height and do the math to get Edge Width over Height), or a fixed % of the layer height (which is better, as this would be the exact multiple you would need anyway)

Calibration Object: Perimeter_Width.stl


This test prints two objects which are designed to fit together.

Try to insert the smaller block into the larger block. Try inserting it differently a few times, and check your belt tensions.

TODO: Need notes on calibration of belt tensions

If you can get it in a few mm, good. If you can get it in all the way, awesome. The fit should be snug. If it is loose and can jitter around inside, decrease the perimeter width over thickness, also called Edge Width over Height. In Pronterface/Skeinforge, "Edge Width over Height" can be found in Craft > Carve in the Slicing Settings. If you CANNOT get it in AT ALL, and you are sure there are no whiskers blocking it, INCREASE perimeter width over thickness or Edge Width over Height. The latter is more likely.


Objective: to maximize your printers ability to bridge gaps (i.e. print in thin air).

Calibration Object: 20mm-hollow-box.stl


Print the calibration object and if the top droops in, increase the BRIDGE FEEDRATE MULTIPLIER in Speed by increments of .1 until the top stops drooping.

Print Precision

Objective: improve print precision

Calibration Object: precision-block.stl


Then there is the precision block. No real huge calibration parameter here. Just play with this and see how well it does on the overhangs and shapes.

TODO: We need to add some recommendations on how to improve this or find more direct methods of calibrating specific aspects of the print.


Objective: fix overhang problems

Calibration Object: overhang-test.stl


Then there is a simple overhang test. Print and observe the overhangs. This is up to you to figure how to improve the overhangs.

TODO: We need to add some recommendations on how to improve this or find more direct methods of calibrating specific aspects of the print.

gregor: i get better results when i add a fan to cool the overhang down

this was my test object: [1]


Objective: stop material oozing out of the nozzle during 'non-printing' moves.

Many extruders will emit (ooze) plastic even when the extruder motor is not turning. To overcome this your slicing software needs to 'retract' the print medium during head movement when not printing. The retraction creates negative pressure within the hot end heating chamber which effectively sucks the print medium back up through the nozzle, stopping it from oozing.

Calibration Object: oozebane-test.stl

The calibration object prints two towers about 30 mm apart. The head must move between each of the towers at each layer. If your printer is not set correctly then you will see many fine filaments (or strings) between the two towers. You can eliminate these filaments by eliminating ooze.

Calibration Object 2 (Variable sized towers for testing ooze): variable_size_ooze_test_nobase.stl

This is a simple model to help tune reversal parameters for a stepper extruder (using much less filament before actually testing the ooziness). It consists of a number of towers with different thicknesses, with different spacing between each tower. A well-tuned bot should be able to produce even the smallest towers.



This is to try to control ooze and calibrate it to be useful.

Start by setting the Early Shutdown distance to 0 and Slowdown Startup Steps to 1.

Print the piece and measure the length of stringers where the extruder shut off and the line is thick before becoming a thin whisker. Take that length and put it into early shutdown distance.

Play with Early Startup Distance Constant until the place where the extruder arrives at the other tower is nice and smooth, so that there isn't any empty space where plastic should be, but there isn't excess plastic extruded.


Since Slic3r 0.9.10b there is a wipe before retract option (under Printer Settings => Extruder) which seems to make the most difference. Other options to consider: reduce temperature, increase travel speed, retracting more, retract slower, z-lift before travel or lowering extrusion ratios.


Objective: eliminate droop from overhangs.

Calibration Object: BridgeTestPart.stl


If the calibration object droops, you likely need to decrease "Bridge Flowrate over Operating Flowrate." Or increase "Bridge Feedrate over Operating Feedrate."

X & Y scaling and steps/mm calculations

The following information concerning steps/mm adjustments is outdated. It has since been agreed that steps/mm should be set to the exact calculated values since printing with non-ideal steps/mm results in an accurate test piece, but makes the dimensions on every other part even more inaccurate.

Scaling goes into the STEPS_PER_MM of the firmware, track offset goes into the G-code compiler (Skeinforge etc.).


The most simple way to get reasonably accurate parts is to simply ignore the track offset or to set it to some guessed value, then adjust scaling of the axes, only:

<math>\frac {\mbox {current steps per mm} \cdot \mbox {expected distance movement}} \mbox{actual measured distance}</math>



Then repeat:


Until you get your desired steps per mm.

(Do note that there is a setting in configuration.h that enable these EEPROM functions.)

 M501 (show current settings (steps per mm etc)
 M92 X44.04982491245622811406 (change steps per mm to your calculated value, useful for any axis; X,Y,Z and E for Extruder)
 M500 (save your new settings)
  • In Teacup firmware you multiply these values by 1000, to get steps per meter, and put the value left of the decimal into config.h's STEPS_PER_M_X, STEPS_PER_M_Y, ... . Then, re-upload the firmware.

Track Offset

OK, here we get a bit stuck. While the theory section below nicely shows how to calculate the optimum track offset, Skeinforge has no configuration option to adjust this value.

An excerpt from a chat between Greg Frost and Traumflug, on 2011/22/06 (typos corrected):
[14:30] <GregFrost_> I calibrated the extruded length and then set feed=flow and pw/t and iw/t to 1.5 and immediately got nice looking prints. However, and here is the kicker, the objects are all slightly too big because my single wall box has an actual w/t of 2.1
[14:31] <GregFrost_> I can fix this with p flow but then i get thin perimeters and they don't always bond well to each other (but objects are the right size).
[14:31] <GregFrost_> I would like normal flow on the perim but a wider w/t but if i do that it adjusts all of the flows up and I get far too much plastic.
[14:32] <GregFrost_> what I really need is a way to change the distance inside the object that the perimeter is traced without changing the flow rates.
[14:37] <Traumflug> To be honest, I never used Skeinforge, this adjustable track offset is an assumption.
[14:38] <GregFrost_> Traumflug: it would be a good setting, i agree.
[14:38] <GregFrost_> Traumflug: I think the only way to achieve a track offset is to adjust the perimeter w/t ratio.
[14:38] <Traumflug> So, Skeinforge doesn't compensate for track width?
[14:38] <GregFrost_> Traumflug: it does. but it uses the perimeter width/t and infill w.t settings
[14:39] <GregFrost_> Traumflug: then it uses the layer height
[14:39] <GregFrost_> Traumflug: and using those it works out the track offset.
[14:39] <Traumflug> ok, good to know.
[14:39] <GregFrost_> Traumflug: but the kicker is, changing perimeter w/t also adjusts the flow rate
[14:40] <GregFrost_> Traumflug: so theoretically when you choose a new w/t, it puts out enuf plastic to fill the width.
[14:40] <Traumflug> Yes, theoretically
[14:41] <GregFrost_> Traumflug: but on the perimeter if you use the same volumetric flow as the infill, it bulges past the desired width because there is no containing line.
[14:42] <GregFrost_> but the one setting that allows you to compensate for that adjusts the flow on all other lines (both infill and perimeters)
[14:42] <Traumflug> IMHO, changing the plastic flow to compensate for size errors isn't a good way.
[14:43] <GregFrost_> Traumflug: I agree completely.
[14:43] <Traumflug> Each time you change the flow, a lot of minor parameters change as well, so a prediction is very difficult.
[14:43] <GregFrost_> I want to change the track offset.

Theory and Maths

By Markus "Traumflug" Hitter.

X and Y Axis

Both horizontal axes can be calibrated with two values: track offset and overall scaling. To find out how this is done, let's have a look at a part specially designed to find out those values:

RepRap Calibration Frame Drawing.png

It's a frame, similar to the one you use to put pictures up onto the wall. The essential part here is, it has long and short distances to measure on the same part. We need to measure both, to distinguish between track offset and scaling.

To the right of the drawing, a few tracks laid down by the extruder are sketched in. It shows how the track offset lets the extruder move closer to the inside of the part, so the outer side of the track just ends where the part should end as well.

All the sizes are overlaid by scaling, which is sort of a "gear ratio" between measurement units and stepper motor steps.

Calibration Object


// X-Y Calibration object
// See

difference() {
	cube([100,100,3], true);
	cube([80,80,3.1], true);

STL file


Basic Equation

With that knowledge, we can sum up what the extruder moves to get the size T = 10 mm exactly 10 mm wide:


\mbox{movement} = ( \mbox{intended size} - 2 * \mbox{track offset} ) * \mbox{scaling} \\ \end{align}</math>

This holds true for measurements of any size, i.e. also for the 100 mm size of our calibration frame:


M_{10} & = ( 10\,\mbox{mm} - 2 * TF ) * S \\ M_{100} & = ( 100\,\mbox{mm} - 2 * TF ) * S \\ \end{align}</math>

You see? Two unknowns and two equations, so the set is solvable.

Extending to Erroneous Movements

Now, the whole point of this writing is, the extruder movement doesn't match what we need to get accurately sized parts. So we have not only a movement, but also a movement error.

The reason for the movement error is, according to the basic equation, erroneous track offset and/or erroneous scaling.

Get these two into the basic equation, result to the left, reason to the right:


& \mbox{movement} * \mbox{movement error} = \\ & ( \mbox{intended size} - 2 * \mbox{track offset} * \mbox{track offset error} * \mbox{scaling} * \mbox{scaling error} \\ \end{align}</math>

Again, this holds true for both our measurements:


M_{10} * E_{M10} & = ( 10\,\mbox{mm} - 2 * TF * E_{TF} ) * S * E_S \\ M_{100} * E_{M100} & = ( 100\,\mbox{mm} - 2 * TF * E_{TF} ) * S * E_S \\ \end{align}</math>

... to be continued ... about a formula to get scaling and track offset from measuring these 10 mm and 100 mm ...

Z Axis

On the Z axis, there is no track offset compensation, so calibration is reduced to scaling of part height. Build any part of 50 mm height, let it cool down, measure it. Then adjust your STEPS_PER_MM in your firmware's config.h to reduce the difference between intended and received part.

As most RepRaps use a threaded rod on the Z axis, the theoretical value, which can be generated from the online calculator, should match reality pretty close. However, there's also material shrink as the plastics is printed at a higher temperature than room temperature.

Further reading


Old Version of this Page

put here as the new part is still incomplete --Traumflug 22:55, 21 June 2011 (UTC)

Is this part of commissioning? Is this part of Builders/Config/Config Axes?

To calibrate, you will need the following: a Rep(st)rap, a slide caliper, and printing material (ABS, PLA, HDPE, etc).

You will also need this object file to print out.

  1. Setup and load your printing material.
  2. Print the calibration object.
  3. Allow the object to cool.
  4. Use the slide caliper to measure each edge and the diagonals.
  5. Make a note of each measurement and this will allow you to determine where a problem is IF there is a problem.

With the above measurements, you should be able to determine any alignment issues. The sides should measure within 0.5mm of 40mm.

if it is off consistently, then it is probably a firmware issue.

Most inconsistent discrepancies are a sign of backlash (i.e. slop or play in your mechanical system). Make sure the grub screws on the pulleys are tight; make sure the belts are tensioned so that when you turn the stepper by hand, it immediately produces a movement in the axis; make sure all the bearings turn smoothly, and that the carriages only move along their intended axis. with all of that double checked, try printing your test piece again, and pay very close attention while it is printing. If your stepper motors make strange noises occasionally, it might be that they are skipping steps because they don't have enough torque. Try turning up the trim pot for that axis.

If all this fails, the best place to go to figure out how to fix your issue, once you've identified it, is either to ask someone in the forums, or on IRC, if you prefer. Then come back here and make this page better, or complain to the forum users.

Once you get a simple cube printed adequately, you might consider trying a more difficult object such as the bearing clip 01 for more fine-tuning.