Over/under-sized features on prints

I have been using the SM2 to make small replacement parts, and after dialing everything in I am still producing parts which appear to be the right size (or at least within tolerance), but which have features that are 3% to 5% over- or under-sized. Examples of the parts: a rectangular 1"x4" plate 0.5" thick with two precisely-located holes to be used as a drilling template, a captive-nut washer (if that’s a thing) 4mm thick 14mm radius with a 3.75mm diameter through-hole and an 8.75mm diameter hex-shaped recess for the nut, and the hot-end wrench I mentioned in a different thread (11mm slot in a 19mm to 13mm trapezoid),.

For example, a 1/4" through-hole will be 0.23", an 11mm slot will be 10.5mm, a 2mm tab will be 2.10mm.

I suspect that this has to do with the walls being over-extruded, so I reduced the extrusion to 90% on outer walls - that got me from 15-25% down to 3-5%. Linear Advance is at 0.075 and the extruder has been calibrated (and that calibration verified after a hot-end replacement).

Any ideas? I’m running out of print settings to tweak - about the only idea left is stepping through the gcode to see if the slicer is producing inaccurate coordinates (something I highly doubt but is within the realm of possibility).

1 Like

Are the dimensions consistent wrong through the entire print, or only on the first/last layer?

I’ve printed a few of the FDM 3D Printer Assessment test from the 3D Print Guide, Section 4.6 (I can’t link directly to the section, just the post). My first attempt received a score of 1 on the Fine Negative Features section. After printing a temperature tower and adjusting my retraction settings, I got it up to a 4.5 (I can remove the tightest pin, but only be lifting the pin out; I cannot drop the pin through the hole). That was printed with a 0.1mm layer height. The hangup on the tightest pin is when the top layer of the pin is flush with the hole. When I feel the pin, it is slightly mushroomed out on the top. If I trimmed up that top layer with a scraper, I’m sure if would fit through just fine. If I wiggle the pin in the hole, I can feel a small amount of slop. I only have analog calipers, so I can’t measure the pin and hole more accurately than about ±0.5mm.

That indicates that I can print in the X/Y axis with a max inaccuracy of +0.1mm. Most of that is either the top or bottom layer. For a project that I wanted very tight fitting pieces, I scraped the bottom layer with a metal ruler to remove the burr.

Through the entire print. I used a deburring tool to chamfer the holes, for example, and they were still too small.

I’ve also ruled out the extrusion blobs as a culprit. These were visible on the exterior of the part, and running an x-acto or a fine file was sufficient to clean up the side. The same does not work on the ID of a hole - that is, after a similar pass the hole is still too small.

That FDM assessment looks interetsing, I’ll see what I can get out of that. What I’m worried about it compounded error - e.g. one side is large by 0.1mm, then a hole on that side is off by 0.1mm, then a locating tab by the hole is 0.1mm too big … and suddenly we’re out of tolerance for a work-holding fixture.

If you have under or oversize on your whole print, I would scale the model to the right size.

Unfortunately I don’t understand your whole post because of my understanding.

Fact is, every filament has its own settings and shrinks or has oversize.

If I need very tight prints, I print a small thing like a calibration cube to get the right scale.
Don’t forget about the oversize of the first layer, like elephant foot or over extrusion.

This is mostly features within the print, like holes, slots, or tabs. If the entire print was the wrong size, I would suspect the slicer had scaled it.

Honestly, if you are using Luban, try Cura or something else. I had the same problem - holder for my taps cam out right size overall but holes too small. I switched to Cura and everything came out exactly correct. For some reason Luban can’t handle holes exactly??? Anyway, you’ll be happier with Cura all around anyways if you switch it up.

I’ve been using Cura. Considering Simplify3D. Currently have a 7-hour print going with a 1/8 dia hole, I’ll measure that when it’s finished and see if the larger nozzle + print head monkeying have solved it.

1 Like

I measured the result of printing a 6.35mm diameter hole in Openscad, and it came to 4.95mm in the final print . 6.39 - 4.95 = 1.40, slightly under double the wall size of 0.8mm, so it is not the slicer forgetting to account for the wall thickness. The diameter of the OD for the entire print is spot-on: 28.75mm.

I’m going to back up a bit here, because in the course of this print I noticed other symptoms of what might turn out to be the same problem.

The print is a file handle, 100mm long 28.75mm diameter. I am printing this upright, as I want the stress from inserting a file to be perpendicular to the layers (otherwise the handle will split along the layers). After a few mishaps, I am printing with the hole up (the handle is top-heavy with the hole down, and the support gets added inside the hole by the slider) using a raft extending roughly 15mm around the part.

Material: SM-provided PLA
Nozzle: 0.6mm
Layer height: 0.48mm
Line width: 0.72mm
Wall thickness: 0.8mm
Flow: 90%
Nozzle Temp: 195 (bridging problems start at 198)
Bed temp: 75

Preparation: Extruder e-steps have been calibrated using the 100mm test, bed freshly autoleveled, Z axis carriages aligned using 1-2-3 blocks, first layer monitored to ensure starting Z offset was correct.

I had two failed prints before the final, successful one, Each print failed due to the nozzle catching the print and knocking it off the bed. I was able to overcome this by manually overriding the Z offset when the print was at approximately the same height as a previous failed print. Specifically:

  • when print is 35mm high, increase Z offset to 0.25mm
  • when print is 65mm high, increase Z offset to 0.75mm

As you can see, the required offset is extremely high, and appears to be growing with the number of layers. At 35mm (roughly 73 of the 0.48mm layers), the Z offset required is ~ 0.25mm, or .003 per layer. At 65mm (roughly 135 layers), the Z offset required is ~0.75mm, or .005 per layer.

The difference between expected and actual height does not appear to be changing directly with the number of layers, but it is growing over time. I suspect this may be related to the problem of positive features (e.g. tabs, pins) being over-sized and negative features (holes, solts) being undersized. There appears to be a compounding of error in the slicer (doubtful, or everyone would see it), the extruder (possible, but unlikely as the OD of the file handle measures to 28.75, as expected), or the linear modules.

What steps should I take to debug this further and identify the root cause of the problem?

May you share your model and your gcode, please?

Your previous post is a bit curious, for me.
I never increase my z-offset in the middle of a print and i don´t understand what you want to increase by that…
If you print the hole upside, this means in Z-direction, there is a setting in cura about a adaptive hole dimension.
If you print the hole on your printbed, it should be possible to be right-scaled.

Do you really print with 0.6mm nozzle and 0.48mm layer height (the whole print?).
Your wall thickness should be a multiple of your line width, this could be a point to knock off your problem.

Without even getting into details, it’s pretty clear there’s too much filament being extruded. You’ve already noted that positive features are oversized, negative features are undersized, and that the layer height keeps creeping up incrementally. If the outer dimensions are correct, all that means is that the extra plastic is going somewhere else.

This problem could either be in software or in the filament. Make sure that the extrusion settings for your test are identical to your work piece. If there’s any difference, the slicer could be thinking it’s putting one volume of plastic down and it’s really putting down a slightly larger one.

If that’s all correct, it might be the filament. If the filament is not of identical thickness along the roll, it’s entirely possible that the calibration was done on a relatively thin piece of filament and the print was done on a relatively thick one. “Thin” and “thick” need not be just the diameter of the filament, but should also take into account varying water content. The outer layers of a spool may have dried out more than the inner ones, so the calibration, which uses the outer layers, may not be accurate for the inner part.

As a detail, recall that just-printed plastic is molten, and will flow. Ideally, a negative feature like a hole should have a boundary layer printed before the infill is. This boundary layer will solidify first, so that when the infill flows, it doesn’t flow into the hole. Same with a tab.

1 Like

As I mentioned, I started to monitor the print when it reached the point where the previous print had failed (using the height of the failed print as a reference and eyeballing when the current print was close). I observed that the nozzle was beginning to strike the surface of the workpiece, causing flex at the top of the workpiece (but not enough to remove it from the bed, as it was just starting to catch). I raised the Z offset until the nozzle did not strike the workpiece. I ended up having to do this twice (for the two failed workpieces that exhibited this problem): the first time, I had to increase the Z offset to 0.35mm, the second time I had to increase it to 0.75mm.

In this particular instance, yes. I had the problem with the standard 0.4mm nozzle and a 0.32mm layer height (0.48mm line wdith) using the same model. I replaced the nozzle while examining the print head for problems, largely so that I could reduce the print time - the error was occuring 4 to 6 hours into a 7-hour print.

I forgot that wall thickness has to be a mutiple of nozzle diameter and did not modify it on the change, but with 0.4mm nozzle it still occurred. I haven’t read before that wall thickness has to be a multiple of the line width - that might help.

That was my initial thought, but I did the e-step calibration and it seemed pretty dialed in (repeatable extrusion of 100mm of filament). On top of that, I have reduced the flow to 90% in Cura; below that there seems to be too little being extruded. I’m not really sure what else to do to manage the extrusion.

I am not really sure what you mean by this. In terms of cablibration (e-steps, levelling, etc), it is the same filament and nozzle. My test pretty much is the workpiece, in this case - I have been using the raft layers to debug the print setting, usually stopping the print if things are too off.

Quite possible. I am trying with a different filament now, though not for debugging purposes (this second filament is much more poorly-behaved than the SM-provided filament). Eventually I will be breaking into the better quality filament, once I have ironed out all of the problems getting the SM to print reliably. To put it another way, I want to eliminate every other possible cause before swapping the filament: for the file handle project, accuracy of features is not crucial, but inabiity to complete a print is :slight_smile:

So, I was initially discounting this idea because the e-step calibration performed in between two failed prints should have matched one of those prints.

The print I currently have going, using a spool of PolyTerra Matte that has given me nothing but problems, is about 50% done and has not exhibited any of the vertical creep I saw with the black SM filament.

I’ll have to wait until the print finishes, of course, and verify whether the hole diameter is closer to spec than previous attempts. But it appears you may be correct that the filament is the culprit, and it may be moisture doing it. The PolyTerra has been in a bag with dessicant for a month; the SM spool has been on the reel, exposed to the air this entire time.

If it is moisture in the filament, then it is conceivable that the calibration only appears to be unchanged. That is, if the extrusion amount changed by, say, 0.01mm per 100mm, that might cause the effect I am seeing (I haven’t done the math, just conjecturin’) without being noticeable during the e-step test.

This is because the e-step calibration process is inherently inaccurate, like the Z-offset setting during bed auto-levelling. It relies on measuring the 100mm of already-loaded filament (which will have some error), then measuring the un-printed remainder, and either of these could be off due to position of the calipers on the extruder mouth, or due to pinching/tapering of the filament cut, or some other small but nonzero factor.

I’ll have to think about this for a bit and see if I can come up with a more reliable method. The difficulty is mostly in having to measure or mark the filament once loaded; if it is pre-marked, then perhaps a depth-gauge can be set to the distance from the extruder mouth to the Start marker (0 of 100mm), then compared to the distance from the extruder mouth to the End marker (100 of 100mm). Gonna let that one gel a bit.

EDIT : all that being said, of course, I am currently using a completely different filament without having done any re-calibration. So that may point away from the specific filament and more to filament condition, i.e. moisture. I can shove the SM filament in the oven and give it another go tomorrow or Tues.

FURTHER EDIT: The print completed without any Z-axis creep, which is surprising as I switched from this filament to the SM filament due to how poorly it behaved, even on small parts. The measurements are off in every aspect (outside of workpiece, diameter of bore), but I expected this from what is a rather gooey or runny filament. Supports and raft remove much more easily. For anyone searching for tips on the PolyTerra Matte, ignore everything the mfg says and work very slow (10-15 mm/s) and somewhat hot (205C, 65C bed) if you want the filament to stick to itself and not just run off down the side of the print.

Regarding e-step calibration, I am thinking that a post-calibration step of printing and measuring a known length of filament is the way to go. For example, an STL with a simple 100mm length of a 1.43 (w) x 0.32mm (h) line should amount to an 100mm extrusion of 1.75mm filament. At the very least, further calibration of the e-steps to this print, or a test run of this print before starting a job where feature size matters, would demonstrate whether or not the current filament and extrusion settings are up to the task.

OK, made an STL of a 1.43 x 0.32 x 100mm cube using openscad (really just “cube([1.43, 100, 0.32]);”).
Layer height 0.32 and line width 0.48 (ergo 3 passes to get 1.43).

The width was rather excessive, something like 1.59, and the length was 100.32mm. If we assume the error happens at either end of the 100mm line, then there is 0.16mm of extra filament being extruded (or a z-axis squish of that amount, as this is still the runny filament).

My previous (calculated) e-step setting was 258.91; new one (via (E*100)/(100-R), using -0.32 for R) is 258.09.

I’ll plug that in when the current print finishes (sometime tomorrow no doubt; the file handle quickly demonstrated the need for a higher infill value) and see how it goes.

Might as well attach the STL 100mm-test.stl (1.6 KB) in case anyone wants to give this a go.

?? Are you adjusting your e steps based on a horizontal dimension? I’m amazed that works at all.

Simplify3D will tell you the length of filament consumed after it slices. I’m not confident that you can accurately predict how any given slicer will dish out filament, particularly with first layer adhesion squash, and infill overlap, which is handled differently in different slicers.

Also, 1.43 = 3x.48 is assuming overlap of roughly <1%, which seems small, often it’s larger than that, and some slicers take that into volume consideration, others don’t.

There’s so many variables, again, I’m genuinely surprised you got a meaningful result.

Well, like I said, I haven’t tried it yet. Just noted that the e-step calibration process is subject to some error (e.g. snipping the filament at exactly 100mm, not 100.10 or 100.25) and am trying to find a way to reduce that error. I agree on the width aspect, which is why I am focussing on the length (100mm), though it looks like I did not include that reasoning in the post.

Seems a pretty harmless experiment to make: tweak the e-steps to the new value, determine if the results are more accurate, roll back to previous e-step value if not. And come up with a better method of course :wink:

I can’t remote into my machine running simplify3d, I was going to check how much filament it thinks it would extrude.

One major issue here is the conflation of physical vs virtual parameters. e-steps is a physical, real, measurable thing. But the measurement you’re describing is measuring the combination of esteps, flow percentage, initial layer height, infill overlap, and half a dozen other parameters, each with varying levels of influence.

I think all of those variables combined can easily introduce a total error of more than .25mm, which would make directly measuring, even with the inaccuracy of a single measurement, more accurate overall. If you repeat 3 or so times, the direct measurement is even better.

Have you verified your axis steps/mm is exactly 400 on each linear module? Some people are slightly over or under that due to manufacturing tolerances of the lead screw.

Also the flow percentage is intended to capture any deviation in PLA shrinkage or other induced error, after setting the e-steps to a correct measured value, as measured by printing a single walled object and measuring the commanded 0.48mm wall thickness is exactly 0.48mm, within a close tolerance (maybe +/-0.03mm or so). Backing into this by doing a print and using that to set esteps makes some assumptions about the flow percentage that will be hard to meaningfully correct.

Good points. I also realized my implementation was flawed: the goal being to extrude 100mm of filament, the measurements for the cube should be based on the volume of a cylinder, and that works out to 0.86mm for the width, not 1.43 - and the resulting measurement of extra filament would also approximate the volume of an equivalent-sized cylinder, but not equal it. So okay, a half-baked idea all around.

Have not verified the axis steps, thought that was a fixed value. I’ll look into that.

Flow percentage seems more difficult to reason about than setting the e-steps, but if trial-and-error is what it has to be, then I guess flow percentage will work.

It’s not entirely trial and error, it’s a very similar process to esteps: https://teachingtechyt.github.io/calibration.html#flow

For example:

This is one though that chasing perfection will not be good - once you’re close leave it. You’ll never get it exactly 100% accurate, and like the note at the bottom says common sense must prevail - if you’re getting underextrusion and the calculator is telling you to reduce flow that will just make it worse.

However, the under or overextrusion can be caused by things other than just flow percentage. It can be related to overlap, initial layer height, linear advance, and other increasingly less likely settings.

1 Like

I was just reading something similar here.

I’m not convinced that e-steps is the solution here, but it is one of two apparently crucial settings (the other being Z-offset) that are basically set by eye (or feel, for the Z-offset). Given how small measurements in question are (Z offset, for example, showing noticeable differences in increments of 0.1 or even 0.05mm), that makes me want find a way to perform this calibration more reliably. That may not be possible - Z offset should be dead simple, for example, but I still watch the first layer so I can tweak it if need be.

As far as the original problem goes (over/under-sized features), and to sum up my thinking so far, it seems like there are four probable causes:

  1. flaw in the filament
  2. wrong amount of filament being produced at the nozzle
  3. filament being produced from the nozzle at the wrong location
  4. error in slicing

While #1 is extremely likely, especially given the two filaments I am working with, it also could be considered a red herring. Filament issues caused by inconsistance would lead to local differences (blobs, varying line width, etc), but not to consistently-wrong-sized features such as I have encountered. Consistently problematic filament , such as the runny matte PLA I keep complaining about, should just be a matter of configuring the printer to deal with the vagaries of the filament.

#2 is something I was mistakingly treating as a one-off error (i.e. a 1% error in flow would cause a 1% deviation in the result), but as eh9 pointed out, it is a compounded error as that filament gotta go somewhere. This could be caused by the machine calibration (such as the e-steps), print settings, etc. I thought I had worked out most of the settings, but it may be that very fine tweaking of, say, the flow settings (e.g. fractions of a %) would improve things.

#3 would basically be an error in the linear modules. I consider this unlikely, and if it turns out to be true, very unfortunate.

#4 I consider the least likely simply because nobody would be using the slicer software if it generated such awful gcode. There will be bugs in edge cases, as with any compiler (don’t even get me started on gcc), and if it comes down to it I will walk through the gcode to verify it. But let’s save that for the next time I’m snowed in with no internet and a bottle of the finest debugging whisky.

1 Like

Found a couple of very good guides: Calibrate your 3D printer to print parts to fit and Part Fitting Calibration and have started going through the steps.

One of the interesting details in the second link is the iterative e-steps calculation*, where you use the thin-walled print to measure directly whether the amount being extruded is correct. This is the step that I felt was missing from the e-steps calibration recommended on this forum : the caliper-and-eyeball method will get you close enough, and from there you can use prints to really nail down the optimal e-steps value for a filament.

I was trying this myself by extruding a line, but the thin-wall approach makes some sense (if nothing else, it lets you do a taller line).

  • EDIT: This is actually detailed in Triffid Hunter’s Guide; the Part Fitting Calibration object only has an overview.