Why Are 3D Printers Still Using ANCIENT Motors?

… and why is the answer “it depends”? 😁

These are three electric motors, and the names that have been taught to you are brushed DC motor, brushless DC motor, and stepper motor.

But just for a second, open your mind to this: There is no spoon. Everything is fish. And these motors are all the same – they’re all permanent magnet DC motors.

But then why do we use stepper motors for 3D printers, brushed DC motors for cheap toys, and brushless DC motors for percussive “maintenance” of oil refineries? Well, historical reasons, but also cost, complexity, and performance. The one that right now makes the least sense to me is why we still use steppers for 3D printers. I’ve been experimenting with BLDC servo setups, because for Caroline, steppers were easy to use for me, but I’m really running into their limits. In this video, maybe we can explore together why, for 3D printers, nobody aside from Bambu Labs, for their extruder heads, seems to think it’s worth making that next step from ancient stepper motors to proper servo drives. Though actually, steppers might not be as bad of a choice as you’d think.

Now, I’ve had a look through some forums on the internet, and there seem to be a lot of misconceptions about what a servo is and how it relates to stepper motors, brushless DC motors, and brushed motors. Any of these motors can be a servo as long as it has a way of measuring its position and using that as feedback for how the motor is controlled. And once you have that position feedback, you can also use it to control the motor more efficiently.

But what does that mean? For all intents and purposes, a permanent magnet DC motor is always a combination of a set of electromagnets and a permanent magnet. Sometimes the magnet spins, sometimes, the coils that make up the electromagnet, when you get both of them spinning, something has gone wrong.

The hardest part is turning the electromagnet on and off at the right times, and with the right polarity, and how you need to do that is also the biggest difference between these motors.

Stepper motors exist because they could be driven with a super-simple electrical signal. This would be a 4 steps per revolution motor, real ones have 200 or 400, but it’s the same thing just repeated over and over. 

Unipolar motors, which are the 5-wire types that we don’t really use anymore, can be driven by tying the common lead to a supply voltage and then switching on each of the 4 “half-coils” in sequence.

To spin the motor in the opposite direction, you would simply run that sequence in reverse, and that entire control scheme is something you can do with simple NPN transistors, or even relays if you really wanted to.

Each step of that sequence is a full step, but you could also do half steps by turning on two sequential electromagnets at the same time, essentially overlapping the magnetic fields and creating an in-between position.

Today’s “hybrid” type stepper motors rely on the fact that nowadays, we can build much more complex and more powerful drivers that can easily reverse the current through each coil, so now we’re using 100% of the coil instead of just half at best. That makes it more efficient.

On top of that, microstepping logic and the current control that modern drivers can do has much improved, even in just the last couple of years.


A brushless DC motor works in much the same way.

The big difference is that instead of two separate coils or two pairs, it uses three coils that are wired up to each other, and by powering one of the coils, you’re also partially powering the other two so that they can all work in tandem.

You can totally run a brushless DC motor with a fixed step sequence, but just like hybrid stepper motors, the way they are built today is optimized to work with a modern driver setup instead of catering to the specific needs of some outdated control system.

But in the end, the windings and how they’re wired up are just a means to an end, and that ultimately is creating a magnetic field that forces the rotor into the position we want it in. Whether it’s two coils, or three, or eleven, doesn’t really matter when you have a modern controller that run runs a variant of FOC, field-oriented-control, where instead of going through a fixed step sequence or current tables, it continuously does the math for how it needs to align and combine the field from the electromagnets relative to the magnet in the rotor so that you get the torque or positional output you want.

I’ve been using simpleFOC to run these BLDCs, and it can just as easily run a stepper motor if you give it four outputs instead of three. To the FOC algorithm, these are all the same. SimpleFOC is based on the Ardunio runtime and you can actually tie it into your standard step and direction signals.

You can even get little bolt-on driver boards that directly sit on a stepper motor and run it in FOC mode, instead of just stepping through pre-calculated amounts of current like a traditional driver. But these ones from Makerbase are running proprietary firmware that you can’t replace, so I wouldn’t really recommend them.

I assume FOC is also what Bambu Labs uses for the BLDC extruder in their printers. There are a bunch of benefits to the FOC drive mode, and also some downsides, and we’ll cover those later.


Side note: How do stepper motor get their steps? Because they have 200 or 400 steps per revolution, and that is an insane amount if, for example, you wanted to get that many physical steps from a BLDC with individual magnets. You’d need 200 magnets!
How steppers do it is by just using one or in this case 2 big magnets, packing it into an iron core, and giving that ridges. 

Because that iron core is so good at guiding the magnetic field, whenever you get an air gap, it’s like that field isn’t even there. So the way that the ridges in the rotor and the stator line up is so that you first get one pole of the rotor lined up, then you turn it a little bit, and suddenly the other pole is lined up. It’s like having hundreds of individual, virtual magnets in there, and it’s what gives steppers such a fine resolution, even with just one magnet.


But probably the worst one of these motors, but also, in some cases, the best one, is the brushed DC motor.

The basic principle is the same as the other two, but instead of needing a step sequence or some complicated external control loop, you just give it straight DC power, and it has a built-in slip ring contact that more or less accurately sends power to the correct internal coils. If you reverse the polarity of your power source, it spins the other way. 

It trades efficiency, performance, and fine-grained control for ease of use – and that’s why it’s so commonly used as a servo drive. Because there, you have an external control loop anyway, the lack of fine-grained control doesn’t matter as much, and it simply becomes an incredibly cost-effective way of producing torque. But brushed motors have quite a limited lifetime, especially when you strain them with harsh direction changes, and because they typically can’t deliver as much torque as BLDC or stepper motors, applications like RC servos need to heavily gear them down, which introduces backlash. So not the best candidates for our application, but for something like an inkjet printer, they’ve become the de-facto standard solution and are being combined with optical encoders—either the long strips of finely graded transparent plastic film that will be labeled “do not touch”, or rotating types that have an optical sensor attached to the motor itself. What turns a motor into a servo is just that: a way of getting positional feedback, and then using that to adjust how the motor is driven. It’s a closed-loop control system where the thing that’s controlling it not only knows what it is putting into the motor but also what is coming out of the motor.

The kind of encoder that simpleFOC or platforms like Odrive typically uses is a magnetic encoder, where you attach a magnet directly to the motor shaft and a separate chip then measures the exact rotational position.

So, like any servo, this allows the system to work in closed-loop mode. If there is an external disturbance, a closed-loop system can detect that and compensate for it, whereas an open-loop system, like a typical stepper motor setup, would just lose a couple of steps and never realize it.

But this kind of magnetic encoder is also what enables the FOC drive mode. Typical BLDC speed controllers, like those for RC cars and drones, already make an educated guess for where the rotor is at any time, simply speaking, by measuring how much the motor acts as a generator at any time. This only really works at higher RPMs, and for robotics and 3D printers, which are robotics, that low-speed control is pretty important. Also happens to be something that stepper motors are naturally really good at.

But by knowing the exact position of the rotor, the driver can precisely control each of the coils to run the motor as smoothly and as efficiently as possible. For example, if the motor is already where we want it to be, then we can just stop sending it current entirely.

Not so with stepper motors: We just constantly energize them, because we don’t know how much we need at any time. That ends up being too much when the motor isn’t taxed much, and might be too little, for example, in rapid accelerations, or when the print is curling up and starts interfering with the nozzle. It’s like you’re always pegging the throttle in your car because you don’t know if you’re going up a hill right now. This does mean that a stepper motor will constantly pull the rotor towards the ideal position, while a servo relies on the software control loop to initiate that correction. But steppers aren’t infinitely rigid, either; they act sort of like a spring and only produce maximum torque just before they lose a step, and software loops can be tuned to better suit a system. At the expense of needing quite a bit of computing performance.

Theoretically, even with stepper motors, 3D printers can make estimates about how much torque they need in every specific situation by looking at how hard they’re accelerating, and dynamically ramping up or down the current, but I don’t know how much, or even at all that is being used yet. But definitely, the ability to make predictions and use them for things like input shaping is a major contribution to why open-loop steppers still work so well for 3D printers.

And under normal circumstances, the CoreXY motors on a 3D printer will only need to move the tool head, which ends up being a pretty well-defined and very predictable use case, so needing to compensate for things outside of your control isn’t something that these motors typically need to do. A robot arm, though, where you’re interfacing with things outside of your control, like handling physical objects, that definitely is something that is not exactly predictable, and there, a closed-loop servo setup is very much needed.

So it totally makes sense that the first motor that Bambu Labs has replaced with a BLDC servo is the extruder. Filament is the one thing inside of a 3D printer that is unpredictable. It might be harder to extrude, it might be easier to extrude, or it might have some contamination in it that suddenly spikes the force required to push it through the nozzle. When you add feedback to any motion system, you can almost always use much smaller motors and get a more reliable system. Because you’re now only sending as little current through the motor as possible, which keeps it from unnecessarily heating up, you gain headroom to now drive it harder when you actually need it. And if that still isn’t enough, you can just make up for it as soon as possible. Lagging behind for a fraction of a second is much less of an issue on the extruder than it is for the CoreXY motors.

But that weight reduction on the toolhead is also where it matters the most. When your tool head is lighter, you’re also reducing the requirements for how rigid the linear guides need to be. When you have lighter linear guides, you’re reducing the torque requirement for the drive motors of your core XY system. So it’s not just the direct weight-saving in the motor, but it’s an exponential weight-saving in everything that needs to support that motor weight as well. The two core XY drive motors are completely static within the printer, so except for the inertia of the rotor, saving weight there would really not make a difference in overall performance and cost. And again, they don’t see unpredictable loads as often as the extruder motor.

But would it be cheaper? That’s something I don’t have a definitive answer to.

Right now, this BLDC setup, which I would put at at least comparable with a NEMA17 drive, cost me about 40 bucks in parts, while a NEMA17 and a driver are closer to 15 bucks.

Of course, those prices come down at volume, and the motor and electronics can most likely be engineered to be cheaper, but the magnetic encoder would need to be replaced with something a little more cost-effective. Not impossible, but I think more work than most 3D printer companies would be willing to take on.

Now, I know that there is always a “golden goose” to chase where you can make things better and improve them, and it’s something that I often have to actively stop myself from doing. At some point, you reach “good enough” and the extra effort spent on optimizing something just isn’t worth it anymore. In the case of stepper motors in 3D printers, we might just have reached that point. With a bit of smart software, stepper motors manage to achieve incredible performance to a point where the other parts of a 3D printer are now a bottleneck, and switching to BLDC servos just because they are “better”, might not even improve the product that is the entire 3D printer.

I mean, it’s worth a try, right? These would fit on a Voron, but I didn’t just want to make a video going all “WOW I put BLDCs on a VORON”, “I’m so innovative”, because there are good reasons why it might actually not be a good idea.

By the way, if you’re at Formnext next month, say hi, I’ll be wandering the showfloor, hunting for content. Until then, take care of yourselves, keep on making, and I’ll see you in the next one.


Learn more about SimpleFOC https://simplefoc.com/


BLDC stuff I used:

MKS ESP32 FOC boards. These are available with an onboard ESP32 or as separate parts. Either one works (but the ESP32 plug-in modules are a non-standard size and pinout) https://go.toms3d.org/mksdualfoc

BLDC motors

Generally, lower “kv” ratings mean higher torque at the same current – but also means you’ll need to supply more voltage to the driver to get to that current. For robotics, you’ll most likely want a kv rating as low as possible. The smallest I would recommend for motion/robotics work is “2807” or “2806.5” size (stator diameter x height) – 1300kv https://go.toms3d.org/28065bldc

Mid-size motor – actually closer to 4006, but they call it a “5010”, which it absolutely is not. 360kv https://go.toms3d.org/5010bldc

Alternate mid-size motor, higher pole count (finer resolution) – 380kv https://toms3d.org/4108bldc

Large motor, probably the upper end up what the MKS SimpleFOC boards can handle. Typically “MiToot” branded – 335kv https://toms3d.org/5008bldc

The OG of BLDCs for robotics: The Eaglepower 8308 90kv. Requires Odrive-class hardware. https://toms3d.org/goat


Magnetic encoders

There are basically three relevant options:

The AS5600 has barely enough resolution to be usable with robotics-class BLDCs, but can be a decent option for smaller (lower pole count) motors. But… it’s cheap https://go.toms3d.org/as5600

The AS5048 is a drop-in upgrade, but can cost 10x as much as an AS5600 https://toms3d.org/as5048

The MT6701 has a different interface, but should perform as good as the AS5048 at a fraction of the price. Choose wisely, and read the SimpleFOC documentation first. https://toms3d.org/mt6701


Tools I use:

đŸ”© Onshape Cloud-native CAD (free for Makers)

đŸŽ” Epidemic Sound for video music (30-day trial)

đŸ“· Camera gear and recording equipment (not free, unfortunately)

🎧 Check out the Meltzone Podcast (with CNC Kitchen)!

👐 Enjoying the videos? Support my work on Patreon!

Product links are affiliate links – I may earn a commission on qualifying purchases (at no extra cost to you)

All my video gear

💙 Enjoying the videos? Support my work on Patreon!

Product links are affiliate links – I may earn a commission on qualifying purchases (at no extra cost to you)