Where to start with a comprehensive extrusion calibration?

  • searching for 'calibration' leads to so many specific discussions I can't put it all together. A deadline to get a lot of small precise parts printed soon is not helping!
    I'm trying to fine-tune my extrusion flow and plowing through discussions about pressure advance, non-linear extrusion rates, not to mention the speed, accel, and jerk settings. Anything else I'm overlooking?
    I've been trying various settings with the pressure-advance-test-wall python script and I never seem to get above the point where the pressure advance is too high.
    The interplay between accel, jerk, speed, pressure advance, and non-linear extrusion rate is too complicated and I'm not making progress.
    Is there a place that discusses the proper sequence of adjusting all these parameters? I've read some of the official Duet calibration docs but they don't seem to wrap up everything in order.

  • Moderator

    This is a pretty comprehensive topic and as you've already seen can get pretty complicated. But here's what I've gathered together from research and experience. I've been trying to work this up into a wiki article for the documentation, so here's a rough version of it. Maybe if people give some feedback and their own experience and observations I can incorporate that as well into the final article.

    1. Measure your filament diameter using a caliper. Several places over a few meters worth and in at least 2 orientations (in case it's oval and they all are). Use the average value as your filament diameter in your slicer.

    2. Figure out the correct e steps per mm for your extruder. The manufacturer probably already gave you a recommended starting point based on the mathematics of the extruder configuration.

    e_steps_per_mm = (motor_steps_per_rev * driver_microstep) * (big_gear_teeth / small_gear_teeth) / (hob_effective_diameter * pi)

    Then to get a closer true value you can actually extrude some filament and compare the commanded extrusion to the actual extrusion. You can do this with or without a hotend installed, but if you have the hotend and nozzle installed you should use a slow extrusion speed and high temp to remove any back pressure from skewing your results.

    I use this macro, which should be fairly self explanatory.

    ; 0:/macros/Calibration/E Steps Calibration.g
    ; Macro to calibrate the extruder steps per mm by extruding 110mm of filament slowly and comparing expected result with actual result.
    M291 S3 R"Proceed?" P"Run E Steps per MM Calibration?"
    M117 "Homing"
    G28 ; Home All Axis
    M98 P"0:/macros/1_Nozzle Access.g"	; Move print head to nozzle access
    T0	; Activate Tool0
    G10 P0 S220 R0	; Hot end to 220c
    M291 S3 R"Heating to 220" P"Mark 110mm on filament from top of extruder body."
    M116	; Wait for temp to 220
    M291 R"Temp reached." P"Extruding 100mm at 1mm/s"
    M83 ; relative extrusion
    G1 E100 F60	; Extrude 100mm of filament at 1mm/s
    M400	; wait for moves to complete
    G10 P0 S0 R0	; Turn off hot end
    T0	; Deactivate Tool0
    M291 S2 P"Measure distance to mark and update e steps."
    M291 S2 P"old_e_steps * (100 / (110 - distance_to_mark))"
    M291 S2 P"Repeat test to verify." R"E Steps calibration complete."

    The gist of it is mark 110mm from the where the filament enters the extruder on the filament. Extrude 100mm slowly. Measure the distance from the extruder to the mark. It should be 10mm. Use this formula to determine your new esteps value. New esteps = old_e_steps * (100 / (110 - distance_to_mark))

    Do this a few times until the values start to converge around a value. Your measuring isn't likely to be perfect every time, so the best you can do is get it narrowed down. You'll do further fine tuning of the slicer extrusion multiplier next.

    1. Further refine your slicer extrusion multiplier/flow rate.

    Print a 50mm solid cube in vase mode. Set the external perimeter extrusion width to match your nozzle diameter. Set the flow % or extrusion multiplier or whatever your slicer calls it to 100% or 1, or whatever a full value is. Print using the lower temp range of your filament at a reasonable speed and make sure you have adequate cooling. When it's done printing and it looks like it printed consistently (as in no overheating artifacts or other oddness) measure the wall thickness with your calipers. Try to just pinch the top 1mm or so. Measure all four walls and take the average. Now compare the measured result to the commanded extrusion width and use the formula New Extrusion multiplier = Old Extrusion Multiplier * (Expected Thickness/Measured Thickness)

    You may need to repeat this test a few times to dial it in as well.

    Once you've got the multiplier where the extrusion width is measured correctly you should do some actual prints now and watch how it looks. Does the solid infill look smooth and solid or is there a gap between lines, or does it pile up and look rough? Is there a gap between perimeter walls? Adjust the extrusion factor on the fly by a few percent and watch the changes. You'll know it's right when it looks right. Even with everything calibrated I'll still watch the first few layers and adjust as needed on the fly. If you use a lot of different materials this can be a quicker way of getting a good extrusion multiplier than doing a full set of calibration prints. Your eyeball is better at detecting a bad looking print better than a caliper.

    1. Make sure your first layer is dialed in.

    Over extrusion on the first layer can impact the following layers and make it seem like you're over extruding when you actually aren't. If your flow is dialed in, and your z height is accurate the first layer should print well using normal flow and normal extrusion width, you shouldn't need any tricks or hacks of over extrusion to get a good first layer to stick. Z=0 should be 0 and z=0.2 should be 0.2.

    1. Pressure advance.

    Tuning pressure advance can get as complicated as you want it to get. If you have a direct extruder it's going to be a lot easier than if you have a really long bowden tube setup. For direct drive start with 0.05 and see how a print actually looks. If you notice blobs or bulging corners you can increase it a bit. Increasing jerk can also help with getting sharper corners. It's a bit of a fudge factor value and it's going to be very hard to do one test and say that's a perfect value for it. It will depend on many factors like material type, print speed, print temp, layer height, etc. As a rule of thumb, some is better than none, and you'll know when it's too much because it will look like under extrusion on direction changes.

    1. Speed, acceleration, jerk

    This is going to depend a lot on your mechanics and printer type. Generally I would say start low and work your way up until things sound bad and back it off. Ask around for profiles from people who have a similar printer to you. It may help to keep in mind that a 3D printer is a pressure based extrusion system first and foremost. So your goals in tuning should be to try and maintain a smooth flow of extrusion throughout the print. Rapid fluctuations in flow rate aren't ideal. That means going too fast and going too slow are bad, and it's even worse to alternate from too fast to too slow and back again.

    1. Max flow rates

    To find your max print speed you'll need to know your max extrusion rate. Your melt rate will be your hard limit on speed. This is a good place to mention that you should have completed a PID tune on your hotend before doing this since the heater will be need to keep up with a maximum flow of plastic and fluctuating temps could lead to weird extrusion problems and limit your max flow rate.

    You can find your max feed rate by getting your hotend up to print temp and extruding starting at a low speed and increasing it until your extruder starts to skip steps. Once you have your max feed rate without skipping you can use

    Max Flowrate = Max Input Feedrate * pi * (Filament Diameter/2)^2

    That will give you a volumetric limit. So say you can extrude at 6mm/s and your filament is 1.715mm that gives you 13.86 mm^3/s^2 So that's how much plastic you can extrude reliably. Asking for more will give you under extrusion. This is where non-linear extrusion can start to come into play to helkp even out the high end of the rate range, but honestly it's not necessary to get good prints provided you're printing at reasonable speeds. If you want to push the envelope there is the main thread on non-linear extrusion and how you can try to calibrate it. But honestly, if you really need to push a lot of plastic, get a larger capacity hotend like a volcano.

    Then you can use that limit to find your top speed based on the layer height and extrusion width you want to use. Max Suggested Speed = Volumetric Limit / ( Layer Height * Extrusion Width) So if we say the limit is 13, layer height 0.3, extrusion width 0.6, we get 72mm/s as a top speed that our hotend could reliably deliver enough plastic for.

    I'm gonna stop there.

    If you're interested, here's a link to the excel spread sheet I use to keep track of all this stuff. It'll make the formulas easy to use anyway.


  • thanks for the overview Phaedrux, that helps keep calibration from turning into a exercise in OCD behavior 🙂
    A few comments:
    -There is some discussion about whether micrometers are better than calipers. I always get a lower value when using just the first few millimeters of the caliper tips.
    -The wall thickness may change as the extrude moves from one corner to another (printing a cube) so the middle is probably the best one-spot measurement to make.
    -I've found that one side often differs from the other three, probably because that side is right after the layer change (unless you have retractions turned off)
    -I really liked some of the scripted test prints such as the pressure-advance-test-wall python script in this forum. Those would be good for your document. Changing over a range of parameter values during a print are impossible to do manually or with a slicer.
    -How to differentiate the source of artifacts can be difficult. Thick corners can be from any or a combination of pressure-advance, accel/jerk/vel, and non-linear extrusion.

  • @Phaedrux
    Do you have that excel?
    Thanks you 🙂

  • Moderator

  • @Phaedrux I have a question about non-linear extrusion calibration. My extruder drive moves in a non-linear fashion for every 50 mm distance travelled the amount of extrusion exceeds by 0.25mm. I wonder if this is something that can be solved by pressure advance setting.

    extruder movement.PNG

  • Moderator

    @akhilnex I have no idea. 😖

  • @shadowphile said in Where to start with a comprehensive extrusion calibration?:

    that helps keep calibration from turning into a exercise in OCD behavior

    That's a good observation. At some point we also need to recognize the FDM in general has limitations when it comes to print quality. Similar to the situation with dot matrix printers in the early days of desktop 2D printing.