Thing-O-Matic: Axis Calibration vs. ABS Shrinkage

In the process of adapting my HT GPS interface to a Wouxun KG-UV3D radio, I printed some trial-fit pieces that consistently came out a little short. A bit of division showed that the larger pieces tended to be small in the X & Y axes by about 0.5%. This makes no difference for most 3D printed objects, but in this case the pieces must match up precisely with the radio’s existing battery interface layout. Half a percent matters a lot across a 75 mm part.

The advice found with most calibration pieces seems to boil down to fudging the printer’s steps/mm setting to make the answer come out right. The default Thing-O-Matic calibration (in machines/thingomatic.xml, wherever that’s hidden in your installation) looks like this:

<axis id="x" length="106" maxfeedrate="6000" homingfeedrate="2500" stepspermm="47.069852" endstops="min"/>  <!-- Pulley dia: 10.82mm / 1/8 step = 1/(10.82 * pi / 1600) -->
<axis id="y" length="120" maxfeedrate="6000" homingfeedrate="2500" stepspermm="47.069852" endstops="min"/>  <!-- Pulley dia: 10.82mm / 1/8 step = 1/(10.82 * pi / 1600) -->

You will, of course, have twiddled the maxfeedrate, homingfeedrate, and maybe even the comments to make the answers work on your machine.

Nophead slapped me upside the head when I made the same mistake that produced the stock stepspermm values: the pulley moves the belt by a fixed number of teeth on each revolution, so you just multiply by the belt tooth pitch to find the distance per revolution. Divide that into the number of (micro)steps per revolution and you get the exact stepspermm value. The stock MBI pulleys have 17 teeth and the belt has a 2 mm tooth pitch, so:

47.05882 step/mm = 1600 step / (17 * 2 mm)

That differs from the stock value by not very much at all:

0.999766 = 47.05882 / 47.069852

Given that these steppers aren’t losing steps (don’t start with me, you know how I get), I’m quite confident that the X and Y stages move by exactly the commanded distance every time.

The printer uses a heated build plate and the first layer is 0.33 mm, give-or-take about 0.05 mm, and the objects come out with essentially straight vertical walls. However, the walls aren’t quite perfect, tending to be a bit larger where they contact the plate, and I finally asked the obvious question (abs plastic shrinkage), which produces, among many other hits, that useful table.

The money quote is that ABS shrinks just about exactly 0.5% as it cools. That’s modulo the starting temperature, the molding process, and so forth and so on, but it’s a pretty nice match.

Therefore, fudging the printer’s scale isn’t appropriate, because that affects everything you might do with it. Such as, for example, the initial homing sequence, which depends on fairly precise locations that must match up with reality and have no shrinkage problems whatsoever.

Skeinforge’s Scale plugin applies a factor to the object, so that’s (probably) a more appropriate location for this adjustment. The myriad SF settings get broken down by Craft (extrusion, milling, whatever) and material (ABS, PLA, whatever), so if you can keep all that straight, then you can apply the appropriate Scale for each process and material.

The Scale doc may seem a tad sparse, but the plugin does have separate settings for the XY plane and the Z height. The latter (probably) doesn’t need scaling, because the nozzle height sets the actual extrusion level; the top layer or two will stretch to make the vertical size come out right as the object cools while it’s a-building.

I’ll toss a 1.005 scale factor into the XY mix and see what horrors that unleashes by way of unintended consequences.

More on the radio interface & suchlike in a while…

16 thoughts on “Thing-O-Matic: Axis Calibration vs. ABS Shrinkage

  1. Interestingly, I built a ~120mm fixture that had to align up exactly with the holes in a PCB. On the Makerbot CupCake I had to split the part in two builds, sand and glue, but it still aligned OK. I then had one part made at Prototech ( on their Objet Connex500 Polyjet 3D Printer, it came out as perfect as I can measure. At the same time I had an SLS part made at Shapeways with their strong & flexible white material. It was small by ~0.5mm and the PCB would not align properly. I assume I could have complained at the Shapeways folks and they would have scaled and reprinted, but by then the ObJet parts were already doing their job.

    1. align up exactly with the holes in a PCB

      I’d expect commercial sources with spendy 3D printers have solved this already; for what they charge, the dimensions should be spot on every time!

      This is the first relatively large thing I’ve built with small interlocking mechanical features, matching holes, and tapered mating surfaces, which means it’s the first time everything has had to come out right at the same time. Up to this point, I’ve been perfectly happy to bash things to fit… now, it’s time for some fine tuning!

  2. Correct me if I am wrong, please, but if (FinalSize) = 0.995 * (InitialSize), then you would have to scale the initial size by 1/0.995 to scale it properly, which would be 1.005025126, not just 1.005. But then again, you’re talking two orders of magnitude smaller error term, so it probably doesnt matter.

    1. scale the initial size by 1/0.995 to scale it properly, which would be 1.005025126, not just 1.005

      Verily, the correct number to many more significant figures than the printer can possibly deliver!

      To a large extent, this is one of those “measure with a micrometer, mark with chalk, cut with an axe” situations: I can measure the outer dimension to maybe give-or-take 0.2 mm, but even the wall straightness down near the mating surfaces varies by the same order. So the overall measurement error is at best 0.3-ish% for large objects.

      The last time I ran a hole test, they were 3% undersized, grossly larger than this correction and close enough for most purposes. Object outside dimensions come out much closer to consensus reality, so I’m assuming a shrinkage factor will push them in the right direction.

      But, given the rubbery nature of the whole process, a fraction of a percent is pretty close to spot on. I expect to make a few cut-and-try tweaks to the whole thing along the way, which is just one step above “bash to fit, file to hide, paint to cover”.

  3. So on a ToM are you supposed to adjust the X and Y at the pots on the motor controllers or in the firmware? My ToM is printing slightly undersized and round holes come out oval in shape – so my X and Y aren’t traveling in sync. I’ve confirmed that it’s not my motors loosing steps, or an issue with one loose belt and one tight belt. So … adjust the voltages or the firmware to get round holes?

    And as for shrinkage, is there a way to permanently upsize every print, or do you have to adjust the scale manually everytime you create the GCode in RepG?


    1. Sorry, I just re-read and realized that you said you were going to edit the “scale” setting in skeingforge. I’ll check that out. But I still haven’t figured out how to fix the ovals.

      1. how to fix the ovals.

        Yup, do that before you change the scale, because any number you put in there will be wrong when you’ve gotten the mechanical issues sorted out.

      1. where I can adjust the scale in skeinforge

        It’s in the Scale plugin, at least in SF45… I don’t know where (or if) it exists in SF35, which is what I think RepG uses by default.

    2. My ToM is printing slightly undersized and round holes come out oval in shape

      The overall size depends the three stepspermm settings in thingomatic.xml: for a given motion (set by the G-code instructions), a lower stepspermm value decreases the distance moved. However, that’s not likely to be the problem, because the standard values should be very, very close to the right numbers.

      Oval holes suggests an unseemly amount of backlash along the longer direction, which could be belt looseness, or an unseemly amount of mechanical restriction along the shorter direction, which could be the usual overconstrained X axis binding (you have printed an A axis rod follower, right?)

      adjust the voltages

      If you’ve established that the motors are not losing steps, then increasing the voltages (which means the winding current) won’t have any effect.

      The most obvious effect of a stepper losing steps will be a horizontal fault in the middle of the object’s height that displaces the upper layers to one side. If that’s not happening, then you’ve got enough winding current.

      permanently upsize every print

      That’s the scaling parameter I tweaked, which will remain in effect until you change it! But I think you’ve got other problems to solve before altering that number…

      1. Thanks for the prompt replies. I’m not losing steps. I’d hear it (at least I think I’d hear it) and I’ve printed tall objects (4″) with no shifting in the layers.

        As for the X-axis folower, I have a new (Jan 2012) ToM, so it has self centering bushings on one of the X-axis rods, and bearings on the other. So I think it already has this functionality improvement built in. Or is there some other upgrade you’re referring to?

        My belts aren’t loose. They’re pretty tight. And as equally tight as I can get them without rigging up some sort of tension jig. So is there anything else I should check? I’m really confused as to how to get round holes from my tom. They aren’t that far off. But they aren’t round. My 20x20mm cube is also a bit off.

        19.84mm x 19.71mm. I’m using a micrometer to measure so I know those are accurate.

        Unfortunately, I didn’t pay attention to which was X and which was Y. Should I reprint a calibration cube and let you know?

        1. I think I’d hear it

          The only time you’ll hear anything is when the motor stalls completely, at which point you’ll hear (and see!) the poor thing chatter in place. Losing a handful of steps happens essentially instantly and then it continues running normally… just at the wrong spot.

          self centering bushings on one of the X-axis rods, and bearings on the other.

          That sounds familiar… and ought to work just fine. [grin]

          19.84mm x 19.71mm

          Ah, now I get it: a 1% error matters! You’re crazy like me…

          IMHO, that’s pretty nearly as good as you (well, I) can get. The actual width of the extruded thread, the overall half-percent shrinkage factor, the effect of first layer thickness, and the un-level-ness of the platform all come into play at that tolerance.

          You can have a great deal of fun fiddling with each of those factors, but I think that’s best done while creating the objects you bought the printer to make. There was a calibration cube bubble going on for a while, but that’s long since popped and they’re no longer useful as currency. [grin]

          So I’d say there’s nothing to be done but fire the Thing-O-Matic and start printing!

  4. “Ah, now I get it: a 1% error matters! You’re crazy like me…”

    Well … yea, it matters. Doesn’t it matter to everyone? To me that’s an oval, not a circle!

    You’re kidding me, right? Have I really just spent over a weak trying to figure out why my ToM was making ovals only to discover that to most people a circle with +/- 1% tolerance is still a circle?

    Wow, I feel like a fool. LOL.

    You see, I’m a hobby machinist. So if I were to drill a hole that came out like that I’d bore it … and then ream it. And if it still wasn’t perfect I’d put it on the honing machine and give it a little extra attention.

    Honestly, I’m embarrassed. It never even occurred to me that a difference of .13mm was within the normal range. To me that’s huge!

    So really the ToM manual should mention a couple of things. First, don’t use zz class plug gages to measure your holes, and don’t use a quality micrometer to measure the external dimensions of your prints. Instead, buy the cheapest caliper you can find and use that! And maybe it would help to mention what tolerances we can expect from our X and Y motors. They mention resolution all over the place, but the printer is so good at repeatability I thought the poor resolution had more to do with the extrusion diameter than the precision of the steppers themselves. I’m not complaining about the quality or precision of the ToM. For the money it’s still an amazingly precise machine. I guess I just feel foolish that I was expecting more precision from a thousand dollar machine.

    I just grabbed my emperial mic. It reads to ten thousandths of an inch. So my calibration cube is 0.7814 x 0.7779. That’s 3.5 thousandths different!

    Which is actually 0.4% of a difference. But it seems so big when you look at the numbers! Interestingly the original measurements from my earlier post that I took with my metric mic were 0.6% different, which goes to show that human error with a mic (in my hands at least) is about 0.2%.


    Ok, so back to Skeinforge then to figure out where to change the settings to compensate for shrinkage …

    Thanks for the help and the sanity check!

    1. Doesn’t it matter to everyone?

      For creating all those bunnies and toy soldiers and emblems and suchlike, nope, even a few percent doesn’t matter in the least. [grin]

      So really the ToM manual should mention a couple of things.

      Well, I’d say a few other things might be in order, too.

      human error with a mic (in my hands at least) is about 0.2%.

      See? That’s half of the problem right there!

      There’s also the surface finish & flatness along the sides, plus a few zits here & there, to confuse the measurements. For most objects, I’d say getting within +/- 0.25 mm of nominal is Just Fine. Remember that you’re laying down a ribbon of hot-melt glue, so it’s a wonder it works as well as it does.

      You’ll find that the actual dimensions depend on a myriad factors, including the overall size & shape of the object, room temperature (cover those openings!), first layer thickness, and so forth and so on. If you measure (as I have!) dimensions for various & sundry objects, they’ll all be pretty close and you can add a bit of windage to make the answer come out better, but the windage varies depending on what you’re creating. So it’s not unusual (for me, anyhow) to print a couple of objects, tweaking the model to make the answer come out right.

      And, yes, I do run a drill through the holes to make that answer come out right. Haven’t yet machined the outside surfaces flat, but I can see that coming.

      I think of it as a fast way to get near-net-shape parts, sort of like casting metal.

Comments are closed.