3d printing calibration
This 3d printing calibration guide was created for prusas, and was specifically developed for a MK3S. This was developed when using firmware version 3.8.1. Topics covered include: idler tension, e-steps, filament thickness measurement, xyz / z-offset, extrusion multiplier, and linear advance.
basic calibration
idler tension
start with completely loosened. use manual controls to move extruder motor, filament should not move because of looseness. slowly start screwing in screw until just grabs filament. after this tighten by a few complete turns (e.g. 2). Note that Prusa guides have variable and sometimes contradictory information on this (sometimes flush with side, sometimes not; sometimes mentioned filament is not in, others times is noted in)
if too tight the gears can grind the filament which can result in inconsistent extrusion, or no extrusion if the gears loose grip after grinding. if too loose, gears may not grip filament resulting in reduce or absent extrusion.
e-steps
This process ensures your printer is extruding the proper length of filament in millimeters when commanded to do so. If not optimized you may get various artifacts & inaccuracies due to over or under extrusion. Calibration process is as follows:
-
open a program like pronterface or octoprint to directly control printer (in octoprint the “terminal” tab)
-
heat up nozzle/extruder/tool to temperature you will be printing at for this type of filament
-
set extruder to relative mode:
M83
-
repeat these until e-steps are calibrated:
- check/verify current estep setting (default value=E280.00):
M503
- note the e-number in “steps per unit), should be approximately the second line in the long output
- measure and mark filament 120mm from set point on extruder top using marker (e.g. sharpie)
- rulers work well, try to keep filament straight as possible (perpendicular to top of extruder assembly) without pulling/pushing filament
- if filament is curved/bent (like in some “instructional” youtube videos) this whole enterprise is pointless due to the significant error you would be introducing
- extrude slowly 100mm of filament:
G1 E100 F100
- remeasure remaining distance to initial mark
- do not wait too long between extrusion & remeasuring given potential extrusion while idling
- calculate current extrusion calibration (see if now under/over extruding)
- current deviation = 20mm - remaining distance (i.e. 20mm remaining = perfectly calibrated)
- new estep calculation = (current estep * 100) / (120 - leftover avg)
- set new estep
- recommend doing at least 2 runs before setting new estep to get a feel for amount of error
- set estep command when ready:
M92 E[new value]
- where the new value is that calculated above
- save estep value to firmware:
M500
- when to stop? i.e. when to consider calibrated?
- consider stopping when 2-3 runs performed with remaining filament deviation in the ~0.5-1mm range
- this range is an estimate based on my skepticism that filament measurements can be accurate beyond this range given e.g. small filament bends during measurement
- check/verify current estep setting (default value=E280.00):
-
troubleshooting swings between over & under extrusion values
- likely due to error in measurement - consider doing multiple runs with same estep value:
- if swinging extrusion values with same estep setting: attempt to improve user measurements (ensure ruler is perpendicular to top of extruder assembly, not pulling on filament during measurement, filament is straight in middle of ruler without bends, not waiting to long to measure remainder)
- if swinging only between estep changes: when setting new estep set at value in between current and calculated new - e.g. 10-50% of calculated change (there may be variables unaccounted for in simple estep equation)
- likely due to error in measurement - consider doing multiple runs with same estep value:
esteps references:
- photo0411 tips & trips for mk3s - esteps
- mattshub extruder calibration
- all3dp calibration
- matterhackers calibration
filament thickness
Filament thickness is set in slicer software. High or low values can result in over or under extrusion (e.g. underestimation can result in blobbing on extrusion multiplier cube-shell corners - a subsequent calibration step). Most filament seems not the marketed thickness. Use calipers to better estimate at multiple points and input the average into your slicer. I use the flatter part of the calipers (i.e. not the sharp blade part). Ensure you are not pushing so hard that you indent the filament (resulting in underestimation). E.g. for a recent esun PLA+ filament the advertised 1.75mm filament seemed to average 1.73mm on ~20 measurements along a ~1-2 foot span of the filament.
XYZ calibration / z-contact / z-offset
This process sets the distance of the nozzle from the bed for the lowest first layer of prints. This is important for ensuring the print sticks to the plate, you don’t have gaps or other bottom-layer surface defects, and you don’t under-extrude from being to close to the bed. Recommended process:
- probe & nozzle height - run through Prusa’s recommendations - generally probe ~1 zip tie’s thickness higher than the nozzle
- Prusa’s XYZ calibration that uses the PINDA sensor
- on printer:
Calibration -> XYZ cal
- on printer:
- run default z-calibration program to grossly estimate z-height (manual section 6.3.6)
- on printer:
calibration -> calibrate Z
- Live adjust Z
- lower the nozzle until filament sticks to plate and won’t move to light touch (caution re too close & scratching)
- on printer:
- one-layer square ~5cm per side - e.g. this model (approx 5 min)
- print square multiple times to calibrate first layer
- check if nozzle gets too close to efficiently extrude the filament (cautious re bed scratches when this close)
- check for evidence of being too far away with poor adhesion (not close enough to evenly “squish” adjacent layers):
- bend the finished print looking for diagonal holes
- uneven or gapped lower surface
- as with prusa test: poor adhesion with running finger over finished print
extrusion multiplier
- location in prusa slic3r:
filament tab -> filament -> extrusion multiplier
(default is 1) - need a model of a featureless cube: e.g. this half 4cm cube or this one via prusa
- load cube into slic3r and use following settings (under
print settings
):- 0.15mm resolution (I started with base profile of “0.15 quality”)
- single perimeter:
layers & perim / vertical shells / perimeters: 1
- remove top layer:
layers & perim / horizontal shells / solid layers / top: 0
- no infill:
infill / fill density: 0%
- note: do NOT use “spiral vase” (in
print settings / layers/perimeters
) mode as this introduce bizarre artifacts in the print (for me introduced more corner blobs and holes in walls near some corners that resolved with non-vase mode keeping other settings the same–suspect related to retraction parameters in vase mode) - check current extrusion width:
advanced / extrusion width section
:- defaults to 0.45mm (except first layer at 0.42)
- this is how thick the walls should be when you measure them
- print the featureless shelled cube (approx 30 min)
- note while printing you can also double-check/fine-tune your 1st-layer with live Z
- measure average wall thickness of the print
- e.g. measure each wall ~2x, taking averages, and noting variance that might indicate you have other problems
- calculate new extrusion multiplier (EM)
(current extrusion multiplier x extrusion width) / average measured wall thickness
- adjust extrusion multiplier, reprint, remeasure until honed in
- when done re being calibrated? I am crudely estimating as follows based on seeming error:
- as long as average is within ~0.01mm of 0.45mm
- measurement ranges +/- 0.02mm between 0.43 & 0.47
EM refs:
advanced
linear advance/ K-factor
This paramater tailors nozzle pressure to print speed based on the “springiness” of the filament. I will only use this on non-PLA/PLA+ filaments given the default values worked best for me with PLA & PLA+
- if using more advanced materials consider running this calibration
- download and print the K Factor Test G-code, modifying if necessary for temperature/printer
- the printer will print a number of lines, varying the speed within the lines
- inspect the lines looking for which is the most consistent (with least bulging/thinning):
- line 1 k=0 (closest to front of printer)
- line 2 k=10
- line 3 k=20
- line 4 k=30
- line 5 k=40
- line 6 k=50
- line 7 k=60
- line 8 k=70
- line 9 k=80
- line 10 k=90 (farthest from front of printer)
- in prusa slic3r is set in filament settings -> custom g-code -> start g-code (default: 30)
refs:
switching filaments
- if switching between different filaments of the same type (e.g. a different color of PLA+) re-run:
- filament thickness measurement
- extrusion multiplier
other troubleshooting / optimization
- calibration prints: some models can help diagnose specific issues - e.g.:
- temperature towers: help identiy optimal temperatures for given filament