I'm having a problem where the relative dimensional error of cylinders is rapidly increasing as the absolute size decreases. Printing a calibration stack of cylinders of diameters 8, 7, 6, 5, 4, and 3 mm, they come out undersized by 5%, 5.3%, 7%, 8%, 10%, and 13%, respectively, as measured by a digital caliper. Cubes exhibit a less severe version of the same pattern: 2.5%, 3%, 5%, 4%, 5%, 7%. The cylinders are generated with OpenSCAD using $fn=180, i.e. they're actually extrusions of 180-gons, so the error should not be caused by poor chord approximation; indeed, measuring projections of the model, or reading the gcode and accounting for nozzle width, everything looks right.

Printer is Ender 3, using PLA at 210. Slicing with CuraEngine.

Could this be caused by underextrusion or print speed issues - or some effect where the material pulls itself together under tight curvature? What techniques might be able to compensate for it, short of fudging the model?

Some additional information: As noted by Trish in the comments, the consistency of the absolute error, which is 0.4 for cylinders and 0.2 for cubes, is likely important. I've also subsequently tested with 110% extrusion rate and the errors for the cylinders dropped to consistently 0.2 mm (still a significant increasing relative error), but the skin layers at the top of the 3 mm cylinder bulged, suggesting the increased extrusion is wrong - an excessive total volume of material.

  • 1
    $\begingroup$ what are the absolute errors? $\endgroup$
    – Trish
    Apr 2 '19 at 22:03
  • $\begingroup$ @Trish: The percent errors were just 1.0-measured_size/ideal_size. The absolute errors were all very close to 0.4 mm for the cylinders, 0.2mm for the cubes. $\endgroup$ Apr 2 '19 at 22:18
  • 2
    $\begingroup$ That is important info, R.. Becasue the absolute error never changes. $\endgroup$
    – Trish
    Apr 2 '19 at 22:20
  • $\begingroup$ @Trish: Indeed, I overlooked that it was near-constant, but I don't have any good explanation/model for why a constant error in dimensions would happen. It could likely be compensated by Cura's xy_offset setting, but that's going to be wrong because it will give holes an extreme error in the opposite direction (holes are also smaller than they should be). $\endgroup$ Apr 2 '19 at 22:22

You should not look at the relative dimensional differences, you should be looking at the absolute differences. Multiplying the undersized dimensions in percentage with the cylinder diameter gives you a value of 0.4  mm for each cylinder give or take a few hundreds. So, basically your printer works very consistent it is just suffering from a systematic offset.

Basically, the printing process needs to adjust the X-Y dimensions to compensate for plastic flow effects. An option or setting in Ultimaker Cura to counteract this is called Horizontal Expansion. Slic3r and Simplify3d have similar settings. In Slic3r it is called XY size compensation.

  • $\begingroup$ Unfortunately, the effect happens in the opposite direction with the opposite curvature: holes are too small. Adjusting xy_offset with a positive value will make that even worse. It seems likely that fixing this might require enhancing the slicer to take local curvature into effect when applying an offset. $\endgroup$ Apr 2 '19 at 22:32
  • $\begingroup$ @R..R Filament could well be dragged before it sets explaining the smaller radius $\endgroup$
    – 0scar
    Apr 2 '19 at 22:37
  • $\begingroup$ Yeah, my thought is that something like that is happening to make the error happen in the direction of the curvature - either dragging or some sort of surface-tension like force in the material. $\endgroup$ Apr 2 '19 at 22:46
  • 2
    $\begingroup$ you can set a negative size compensation $\endgroup$
    – Trish
    Apr 3 '19 at 0:42
  • $\begingroup$ @Trish: Right, but that will make the problem described here worse. There's some small constant negative compensation needed for die swell, plus what seems to be a curvature-dependent compensation that would be large and positive for inward curvature and unknown (since I haven't yet measured) magnitude negative for outward curvature. $\endgroup$ Apr 3 '19 at 4:01

The increase of the relative error is not an anomaly, it is a direct result of what is the actual error: There is a systematic, absolute error, which is almost the same for all the cylinders and all the cubes. +0.2 mm or +0.4 mm on progressively smaller items gets a progressively bigger relative error. But the source of the absolute error is what you need to compensate for.

Fighting bulging for 0.2 mm accuracy

As you figured out that 110% extrusion did halve the absolute error of the cylindrical test, in conjunction with layer deformation, I suggest to try this:

  • Extrusion/Flow Multiplier 100 %
  • Linewidth 0.44 to 0.45 mm

This fights the die swell but also spaces the walls and roofing lines, allowing them to take the extra material. 0.2 mm accuracy is pretty good for a start, you get into the specs of many parts with that, but we want more!

For a slight increase, measure your filament in a couple of spots and do the average, then use that as filament diameter.

Increasing Accuracy further

If you want to go further, proper calibration of the motion system and the extruder are the next steps.

Short Calibration Rundown

The rundown is extruder first, then possibly the axis.

  • Connect your printer to the PC with an interface such as Pronterface or Repetier Host.
  • Place a mark 150 mm from the intake of the printer
  • Extrude 100 mm via G1 E100 F100
  • Measure from the intake to the mark.
  • Get the current steps per mm via M503 - it is the E-entry that follows M92
  • Calculate $\frac {\text{current steps per mm }\times 100}{150 - \text {remaining length}}=\text {new steps per mm}$
  • Set the new steps per mm via M92 E###.# and save with M500, verify with M503.

The process for the XYZ axis is pretty much the same, but you don't need to mark filament. Instead, print a known size cube, best with a side length that is a multiple of 10 mm.

  • Calculate $\frac {\text{current steps per mm }\times \text{ designed length}}{\text {actual length}}=\text {new steps per mm}$
  • $\begingroup$ Thanks for the detailed information on calibration. I'm pretty sure no X/Y/Z steps-per-mm calibration is needed, or the absolute error would vary proportional with cube size, rather than being constant with respect to it. Extruder error seems possible though. $\endgroup$ Apr 4 '19 at 1:09
  • $\begingroup$ When you wrote "Extrusion/Flow Multiplier 100 %" under the first heading, did you mean 110%? $\endgroup$ Apr 4 '19 at 1:09
  • $\begingroup$ No, I meant 100% & 0.44 mm $\endgroup$
    – Trish
    Apr 4 '19 at 1:36
  • $\begingroup$ Ah, so increasing the line width tells Cura to increase the extrusion to fill that width, but also causes it to space paths according to the new width (rather than just extruding more material along the same paths like increasing the flow % would do)? That sounds interesting. I'll try it. $\endgroup$ Apr 4 '19 at 3:43

This problem seems to have mostly gone away - at least any remaining error is within a margin explainable by my cheap/low-quality digital caliper. Since asking the question, I've made a lot of changes that could contribute, but the biggest factor was probably the loose X-axis timing belt and misaligned X-axis.

Slicer options may also have been involved. For example, Cura's Ender 3 profile attempts to set limits on acceleration speeds, but does so in a way that requires the GUI to compute derived accelerations; if you're using the command line CuraEngine (which I am), all the derived settings are left at the very high defaults.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.