How Software Is Hurting Your Print Accuracy, and What You Can Do About It

Posted by Michael Armani on

Hi everyone, it’s time to explain exactly how printers differ in their accuracy and precision based on their selection of stepper motors, motor drivers, and driving voltage, and driving firmware.

As you've may have seen lately, many people people are raving about quality improvements by switching from a stock electronic board to the Duet, which was the first board to use the German-produced Trinamic motor drivers.  

Before we get into the details, it’s first important to understand how we define a good print as humans - and that is qualitatively.  The human eye can easily notice details typically down to about 50 microns. For comparison, a human hair is typically 100 microns - so this figure represents half a strand of hair.  Alternatively, if you are on a laptop, each pixel on your screen is about 100 microns, with sub-pixels of color about 25-50 microns.

This is why 3D prints can look good to the eyes, while a camera has higher resolution and shows off the imperfections very easily.  For reference, take a look at this close up photo taken of an LCD screen with ~30 micron subpixels (3 colors make one full pixel).

So, having established that, we know that we need 3D prints to have a resolution of at least 50 microns in order to appear decent to the human eye.  Let’s take that knowledge and see how it extends to a typical 3D printer in the motion of the (XY) plane.

A typical NEMA 17 stepper motor has a pulley of 16 teeth, with a pitch diameter of 10.35mm. A typical stepper motor also gives 200 steps per rotation, or 1.8 degrees.  Combining these figures, each rotation of the pulley gives 10.35mm * pi = 32.5mm of movement. Dividing that by 200 divisions per rotation gives 162.5 microns. This resolution would not only be very obvious to the eye, but more importantly, would give very loud, jerky motion with large vibrations further impacting print quality.

That’s why all 3D printers employ some kind of micro-stepping.  Microstepping is a feature that allows motors to step more accurately than 1.8 degrees per step down. By oscillating the electric field between two nearby stepper motor poles, a motor drive can micro step down to 1/8th, 1/16th, or even more (1/256 in the case of our trinamic drivers!) of a full step. If we use the example of 1/16th microstepping, which is fairly typical, we would divide the resolution in our example to 162.5mm/16 = 10.15 microns.

This is a much smaller movement, and it would certainly be below the visible resolution of the human eye. It would also lead to smoother motion. However, there are two major problems typical 3D printers do not address: First, just because the driver sends a micro-stepping motion signal, does not mean the motors actually move with this accuracy.  Second, since the motor drivers are sending high frequency signals, the motors ‘sing’ like small speakers and have a rather annoying sound pattern during printing.

So let’s tackle these issues one at a time, starting with the first: LACK OF PRECISION.


The stepper motor driver is very accurate - it can send signals that would consistently give 10.15 microns resolution.  However it is not precise - because it doesn’t follow a linear path. To understand this further, we need to look at some typical motor drivers, and how the motor responds to these signals.

There are many stepper drivers popularized by the reprap movement.  These include Allegra and TI drivers initially. These drivers worked best when supplying high voltage / lower current to optimize microstepping. However, they all have one major flaw - when microstepping at slow speeds, the motors lack inductance, which leads to very imprecise, non-linear movements.  If we refer back to our example, this means that in situations where motion is slow, like for extrusion movements or small printing moves, the resolution of 10 microns practically can degrade back to 50 microns or more.  This leads to wobbly line appearance in the print, caused by electronics & motor tuning, and not by flaws in the hardware.


This problem can be compounded by knock-off motor drivers used in cheap electronics and clone electronics boards.  So as usual, the saying goes that you get what you pay for.

The second problem is NOISE.  These motor drivers are from an older generation of naive motor control - the tuning is fixed, meaning it isn’t properly tuned to the motors, specifically their inductance and resistance isn’t accounted for.  The result is a noisy motor that sings and further decreases accuracy and creates wobbly line appearance.

So how does the Promega with Duet Maestro & Trinamic Motor Drives solve all these problems?

We used several solutions to increase the performance of the Promega 3D Printer.

  1. The first thing we did was increase the motor resistance.  This increases motor inductance, giving any stepper motor driver better tuning and control over microsteps at slower speed.
  2. Second, to compensate for a slight speed loss of having larger inductance, we doubled the typical system voltage from 12V to 24V.  This also results in a motor and driver that runs cooler because the current is what generates heat.
  3. Third, we use Trinamic stepper motor drivers, which use 1/256 microstepping.  This takes the theoretical resolution down from 10.15 microns in our example down all the way to 0.63 microns or 630 nanometers resolution!  Obviously we don’t expect actual 630 nanometer motion in practice, but the impact of this is huge - it gives a large reserve of accuracy and precision so that even if it degrades, the result is still a high quality print.  It also results in smoother motion. This leads to greater motor force at lower currents, cooler motors, and no motor ‘singing’.

So in summary, the Promega using the 2018 Duet Maestro with trinamic motor drivers uses the latest innovations and establishes new standards while most printer manufacturers are operating with noisy, untuned motor control.  The impact to you the user and the quality of prints is obvious.

Share this post

← Older Post