3D printer application

I have been developing the motion system using ball screws for a 3d printer (2 actually) over the last couple of months and recently came across the ODrive. With many years of experience in RC airplanes/helis utilizing BLDC motors (up to 5kw) I’m intrigued to say the least . I have spent a good bit of money on steppers trying to find the best combination for my application. Perhaps what I find most interesting is the potential for using the O Drive not only for the motion system but also the extruders which typically burdens the motion system with the excessive mass of 2 nema 17 steppers. One of the 2 3D printers will be somewhat conventionally from the standpoint of the size of the parts the other will have an extrusion width of .1mm (.004") which utilities nema 8 steppers with a 10:1 reduction and is the reason for the ball screws and accuracy/ repeatability requirments
As for the motion system 10mm lead ballscrews are readily available but mean the stepper needs to run upwards of 2400 rpm for 400 mm/s rapids (3000rpm/500mm/s would be sweet) with accelerations of 6000 mm/s2. The extruder motors typicacally turn much slower but can use gear reduction to get the torque up. High end, pro model 3D printers also use ball screws, servos and dc motors for the extruder.
I wouldnt mind throwing some more money at this project by giving the O Drive a try but would like to know what the advantages would be.
Compared to a stepper what advantage does the BLDC/ODrive/encoder offer relating to maximum speed, acceleration, torque and accuracy. Is there a weight savings. What is involved in sizing the motor to the application. Im sure that these types of questions have been asked a million times and for that, I apologize but I wanted to share my application for the purpose of understanding.

Hi Bill! It sounds like ODrive could be useful for your application.

Compared to a stepper motor, a BLDC is going to provide:

  • Higher power density
  • Higher speeds
  • Larger accelerations
  • Constant torque across its entire speed range
  • Higher precision
  • No missed steps

The increased power density means a BLDC will provide higher speed or torque than an equivalent size/weight stepper motor. Generally, this comes in the form of much higher RPM than a stepper, but gearing can of course let you trade that RPM for torque.

Stepper motors struggle with high step accelerations, as loading increases during this period and increasing the step rate too quickly can cause the stepper to miss steps. ODrive has no issue with that: The only acceleration limit is the maximum current (and therefore maximum torque) that can be provided. This applies across the entire speed range of the BLDC, whereas steppers experience a significant drop in torque as speed increases.

Precision is better on ODrive than on your typical stepper, if used with a good encoder. A normal stepper motor is 200 steps per revolution, and uses a 16x microstepping, for 3200 steps / revolution. The AMT102 encoders available in the ODrive Shop are good for 8192 “steps” per revolution, with a precision of about +/-1 step (it will tend to oscillate +/- 1 about its setpoint in steady-state). Even if you assume the 2-step range from that oscillation, you’d be at 4096 effective steps, which is still above an average stepper. To top it off, increasing the resolution of the encoder improves the performance of the BLDC, whereas increasing microstepping generally decreases the loudness of the stepper, at the expense of performance. Because ODrive uses an encoder for feedback, it will never miss steps. If it becomes overloaded and stalls, it will return to the correct position as soon as it is able to move again.

Sizing the motor is dependent on:

  • Speed requirements
  • Acceleration requirements
  • Available mounting locations

Take a look at the ODrive Motor Guide.

You mention you want 3000 rpm, with accelerations of 6000 mm/sec^2. The speed is easy. Take the value in the RPM column and multiply by 80%, and that’s a reasonable rpm that you can expect. Acceleration is slightly harder because you need to know:

  • The inertia of the motor
  • The “reflected inertia” of the load
  • Motor torque

But, for simplicity’s sake, let’s just look at the ball screw and the motor torque. The force required for a given linear acceleration of the load is given by

F = ma

So to accelerate a 1kg mass at 6000mm/sec^2, you need:

F = 1kg * 6000mm/sec^2 = 6 Newtons

The load torque of a ball screw is given by:

T = (F * P) / (2 * Pi * Eff.)

Where F = force, P = lead pitch, and Eff = efficiency (typical 90%)

For our 6N, 10mm pitch ball screw, we would need:

T = (6N * 10mm) / (2 * pi * 0.9) = 10.6 N-mm = 0.0106 N-m of torque.

That’s a tiny amount of torque. To get near maxing out the 5065 motors that the ODrive shop sells, you’d be looking at about 1130N of force on the ball screws, which would require a load of about 188kg (!!!). And that would still be capable of accelerating at 6000 mm/sec^2. You might need a more rigid frame for that though haha.

So in short, buy the smallest, least expensive motor that meets your speed requirement, because your torque requirement is already met by using ball screws.

By the way, with the AMT102s, you have ~ .00122mm (1.22 micron) resolution. 2 orders of magnitude smaller than your .1mm nozzle, so I think you’ll be ok :wink:

Thanks for the excellent response. I did fail to mention the loads. The Y axis for the larger machine will drive 3kg (motor static) and the X axis, driven by the Y axis = 1.5kg (motor flying). The machine with smaller nozzle is half those values. Cartesian type machines.


Did anything become of this? I’m interested in almost the same thing!


To add to the list of advantages: going with closed loop control makes it possible to measure the actual position of the extruder relative to the frame, and close the control loop with that information. That gets rid of a whole slew of issues that other printers have, like belt tension and backlash and whatnot messing with your precision.

I am interested in doing some precision fdm printing, but all open loop stepper setups have let me down so far.

Has anyone successfully made a 3D printer based on ODrive components-- I’m currently trying to build one

1 Like

Any progress? I am thinking about the odrive for the X-axis of a direct drive 3d printer.

How would the g-code get translated into the motor movements? And would one make sure that multiple axis run synchronized?

Since I couldn’t solve these questions, I abandoned odrive for my own CNC Project and went with steppers instead.

You have to go through a Gcode interpreter like TinyG, grbl, or something else that can generate step & direction outputs. We do want to make Odrive a supported device for Klipper, but that won’t happen right away.

1 Like

Support for Klipper would be perfect, as Klipper is probably the best 3D-Printer firmware for high performance applications.

Just FYI klipper sends this commands: queue_step oid=7 interval=7458 count=10 add=331 which include distance, direction, velocity, and acceleration. It was meant to compress the communication. But all 4 are encoded here

For lightest pellet extruder what would be lightest BLDC motor with 3-4Nm torque (like direct drive Nema23)?