2

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
    what are the *absolute* errors? – Trish Apr 02 '19 at 22:03
  • @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. – R.. GitHub STOP HELPING ICE Apr 02 '19 at 22:18
  • 2
    That is important info, R.. Becasue the *absolute* error never changes. – Trish Apr 02 '19 at 22:20
  • @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). – R.. GitHub STOP HELPING ICE Apr 02 '19 at 22:22

4 Answers4

4

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.

0scar
  • 32,029
  • 10
  • 59
  • 135
  • 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. – R.. GitHub STOP HELPING ICE Apr 02 '19 at 22:32
  • @R..R Filament could well be dragged before it sets explaining the smaller radius – 0scar Apr 02 '19 at 22:37
  • 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. – R.. GitHub STOP HELPING ICE Apr 02 '19 at 22:46
  • 2
    you can set a *negative* size compensation – Trish Apr 03 '19 at 00:42
  • @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. – R.. GitHub STOP HELPING ICE Apr 03 '19 at 04:01
3

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}$
Trish
  • 20,169
  • 10
  • 43
  • 92
  • 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. – R.. GitHub STOP HELPING ICE Apr 04 '19 at 01:09
  • When you wrote "Extrusion/Flow Multiplier 100 %" under the first heading, did you mean 110%? – R.. GitHub STOP HELPING ICE Apr 04 '19 at 01:09
  • No, I meant 100% & 0.44 mm – Trish Apr 04 '19 at 01:36
  • 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. – R.. GitHub STOP HELPING ICE Apr 04 '19 at 03:43
  • steps/mm for XYZ should not be measured but rather calculated based on belt pitch and pulley diameter. Nothing in the printer allows for variable steps/mm. If you calibrate it you will worsen it for any part which is not the calibration part. – FarO Feb 28 '22 at 08:13
1

I've had this problem recurringly after marking this solved before, so I'm writing a new answer to revisit it.

Based on the magnitude of the error being absolute rather than relative, and not being direction-dependent (i.e. not backlash), it can't be caused by the motion system. I further ruled out inward warping of the material by running tests with 100% infill. When, even at 100% infill, the diameter (thus volume of material) was too low, the only remaining explanation was underextrusion.

Measuring the theoretical rotation distance of my extruder hob (now a different extruder from the original Ender 3 one), accounting for approximate tooth depth along with a precise hob diameter measurement, I got a value 15% lower than my configured value (E-steps 15% higher). I was already aware there was a discrepency here, just not the magnitude, and had purposefully kept it lower because of concerns that the full value would lead to parts that don't fit, due to imperfections in the walls, and especially that it might make the undersized holes problem worse.

In reality, it's done the opposite. The best explanation I can come up with for fixing holes is that, for extrusion widths narrower than the nozzle (which a 15% under-extruded 0.4 mm line is, since it's only about 0.34 mm), the line does not stay centered well, but gets dragged with the direction of curvature. I think I still have some problems with holes being slightly undersized, but they're at least no worse, and seem slightly better.

As for positive cylinders, at 5 mm, printed diameter is nearly perfect, only under by about 40-50 µm, which is very acceptable and better than being over. Getting this result does depend on having a 100% solid part, though; as soon as infill comes into play, the cylinder is undersized again. Setting Cura's "Minimum Infill Area" high enough, or using enough walls to ensure the cylinder will be solid, can ensure 100% fill without printing the whole part at 100% infill.

So, I think I can conclusively say the main likely cause for this problem is underextrusion due to inaccurate E-steps.

0

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.