1um precision CNC mill

Building a CNC machine with glass scale feedback. The 12 pole brushless motors are attached to a 5mm/rev screw.

  1. What stiffness can I achieve?
  2. How many N force correction with 5um error. (The screw will run ~0.4 poles/mm, so this is 1/2400 of a phase)
  3. Is this a PID regulator that is tunable?

Just some info: 1Nm into a screw with 5mm raise should give 1256N, and for static and linear force, about 400N is needed.

Your precision won’t be limited by the motors or the ballscrews but by the rigidity and stability of the frame. Fyi even DMG Mori doesn’t promise 1 mikron(if that is what you meant)accuracy to its machines. For that you’re going to need linear motors, air bearings and a frame that has weighs several tons. So a Kern.

Where do you have your numbers from? I use steel with elastic modulus of 220GPa. Overhead beam is I beam with h=0.3m, and A=0.05m2, 1.2m long. Posts and rails have similar dimensions. Calculated stiffness (F=kx) in middle of gantry is 220N/um. I just want the motors to be stiffer than this, otherwise a lot of steel is wasted. The gantry beam is 50kg, and the rest of the setup to get this stiffness is 250kg. It is all bolted to cement support.
I have been running the mill with stepper motors and glass scale feedback. Always wanted to upgrade to servo motors, and need some input on this. Using HiWin HG30 bearing with 300N/µm, and 4 bearings per railset give 1.2kN/µm per axis.

Edit: By um I actually mean μm i.e 1E-6m

From running sub-mikron optical tables and using and designing cnc machines, I know something about the subject.

Steel is overall a quite bad material since it rings quite badly and transfers vibrations very well. This is why professional machines are either special cast iron, polymer concrete or uhpc or some combination of the former. In addition stiffness a good vibration damping is also key.

Also the tolerances of ultra precision hgw30 is 0,008 mm, a c0 ballscrew has travel error of about 7 microns. There’s way more error there, especially if you’re not using the most expensive stuff.

Also odrive only has 8192 steps, a stepper with 8x microstepping or more has more and thus is more accurate so if accuracy is what you need, get steppers or proper industrial servos with 39 bit encoders
Also you need scales with sub micron accuracy to get anywhere close to a one micron, even ±1 scales can’t usually do it since the resolution is not fine enough.

I don’t know what you intend to do with your machine but your expectations are a bit optimistic.


8 x 200 = 1600… which is much less than 8192?

Huh, wonder what was I thinking there…

But its 64x microstepping for 1.8deg steppers.

Sorry to resurrect an old thread, but I was looking for information about using ODrive in CNC machines and I found this claim. What do you mean by that? I thought ODrive is limited to what the encoder outputs, so you can have as many steps as you want with encoder that’s sensitive enough. Am I missing something?

The encoder as specified has 8192 steps. Sure you can use any encoder with any amount of steps but at some point you’ll reach the limits of the controller.

The motor encoder resolution is overall not that important. A standard 5mm pitch ballscrew moves 0.00061mm per encoder tick.

Hi, it depends on your reduction gear/belt drive and how good the machine is at taking out the backlash, I should imagine it’s very difficult to get a machine down to micrometers and be able to measure it accurately. Although using a glass scale feedback as the controlling input, it may be possible with very slow and controlled movements. I am converting my CNC mill with ODrives as I type this ;-D.

Project on here too.


I also would like to understand where this 8192 value comes from exactly and what you mean by “the encoder as specified”. If you could elaborate on this, I would greatly appreciate it. Thanks.

This is a quote from another thread called [oDrive precision] (oDrive precision) regarding this:

Also, a stepper system always has limitations when it comes to the number of reliably achievable shaft positions in one revolution that make it necessary to use timing belt reductions for ultra-precision applications approaching single-digit micrometer scale, also because it is not easy to find C0-class ballscrews in extremely slow pitches below 5mm. Microstepping above a certain ratio does not lead to an increased count in positions the system can move to and I always consider a 200-step stepper motor a 2000-position device to be realistic.
Dan Gelbart talks about this in the comments of the video of his air bearing lathe that uses steppers, 4mm pitch C0 ballscrews and a 2:1 timing belt reduction transmission with pulleys carefully fabricated to very high levels of geometrical accuracy.
A simple 2000ppr / 8000cpr quadrature encoder with a good motor on an ODrive and a solid mechanical execution should exceed a stepper’s positioning and also dynamic performance and can drive a ballscrew directly if desired, eliminating the transmission and its compliance and other issues. Also, we can swap out the encoder with for example a 10,000ppr one to achieve on-paper positioning steps of 0.125µm on a 5mm screw or 0.5µm on a more common pitch of 20mm, if you use a beefy motor to direct-drive it. Of course stick-slip (and compliance and flexing of the structure if it was not designed for this mode of operation, the ballscrew bearing mounts, compliance and radial error etc.) will make single-µm positioning mostly unachievable in practice but who knows, maybe someone uses hydrostatic guides, does not want to or can’t use linear motors and gets lucky with a golden sample C0 screw in a well-designed low-force machine. So I do not quite follow the recommendation to look towards steppers over the ODrive for such an application. The timing belt transmissions are just a huge risk and source of compliance, let alone cost.

Go to the shop. There’s a 8192 count encoder on sale there. That one.

Yes, you can easily use an encoder with a higher resolution. But at some point you’ll run into the limitation of the boards ability to move the motor in small enough increments, ie the precision doesn’t necessarily increase. You may also run into the problem of 32 bit values and count frequency.

Also steppers can easily do 16x microstepping. They can easily do 128x microstepping. They’re good and reliable systems that are used all over for that exact reason.

Regardless of the motor system. To reach that kind of precision you need direct feedback from linear encoders that cost way too much for anyone to buy.

Not necessarily!
I bought some “digital caliper” style linear scales from machine-DRO.co.uk years ago, and used an AVR micro (essentially an Arduino) to read the data out of them at about 10Hz.
They may be slow, but they are accurate, and if fed into a state estimator / model-based controller, you could use them to compensate out for backlash, elastic deflection etc.
Turns out that almost all “digital calipers” have a data port with some open-collector pins, and can be put into a “high speed” mode which is about 10Hz.

Also, I’d avoid the stock 8192 count encoder because it’s a single-ended incremental interface (and also has friction) whereas using an AS5047p SPI sensor (or similar), you have absolute feedback (i.e. NO calibration on start-up, which could be highly problematic for a milling machine, and no lost steps due to noise spikes), Zero friction (non-contact sensor!) and 16384 counts to boot. It’s also a lot cheaper. I don’t know why anyone uses anything else tbh.

They have resolution of 0.01 and accuracy if 0.03. To get to micron accuracy you need scales with sub-micron resolution and accuracy.

The conventional wisdom is you need 10x the accuracy you intend to measure.

1 Like

True, but you’re never going to get micron accuracy out of a milling machine. :rofl:
Micron precision is always possible - accuracy not.

Tell that to kern :stuck_out_tongue:

My point still stands… :stuck_out_tongue_winking_eye:
Unless you happen to have a million euro or two to buy one off Kern

That was some machining porn though… Thanks! :joy:

1 Like

Thank you for clearing this up. But this is not the resolution of the ODrive, it is just a random encoder. That is what was a bit confusing in your earlier posts.

Well, this specifically is what I would like to hear more about and I think this is not fully clear. This limitation has to do with the granularity of current control in ODrive and its resolution but also the ability of the ODrive to stay within a few counts of error will (depending on how many counts per revolution we are talking about here) have something to do with motor construction such as pole and slot configurations and motor radius, to an extent. Maybe someone can shed some more light on this.

Yes, steppers are great and we love them. But they can only do one thing at a time, precision or moving at (modest) speeds. And that makes them very unsuitable if you want both in one machine. You can micro-step 1000x or ∞x and drive them with pure sine, it never will solve the problem that the number of individual positions a 1.8° stepper can turn to in one revolution in a reliable manner is not much above 2000, maybe 4000 if you are lucky and loads are very low. So for a ballscrew, you need to gear down until the error of the stepper becomes noise in the equation, which means precision pulleys. If you begin with a no-backlash electromagnetical system (permanent magnet synchronous machine servo) direct-driving a no-backlash preloaded mechanical rolling element transmission (ballscrew), you have a far superior starting point and actually save yourself from having to manufacture very precise pulleys and also you do not need to obsess over keeping the forces as low since there is less compliance in the system.

Not so much I think… If you consider for example that “bang-bang controller” can achieve good positioning, but only has one bit of current control resolution!

Yes, specifically cogging, which is effectively a torque disturbance as a function of position. Slotless (aka coreless) motors do not have any cogging, and so are much easier to control precisely.
But really even with high cogging, the main limitation is encoder resolution. Although it can be difficult to precisely control high-cogging motors especially if they have a low inertia.
At this point you are limited by the bandwidth of the current controller (which is often a function of voltage. This is partly why industrial servos run at 600V bus voltages even if the back EMF is only a few volts). However there is an upper limit on control bandwidth, because the controller runs in discrete-time, at a maximum loop rate of 8kHz on ODrive. This means that time itself is quantised from the controller’s point of view, so if the change you are interested in (a 10 count movement on a 1mppr encoder, with a coggy, low-inertia motor) happens in les than 1/8 msec, you’re toast.

1 Like

Thanks towen, this is quite interesting and helpful. Indeed, we of course have a frequency limit for changes in position which gets very obvious if we have a very high number of counts even for a few degrees of movement, creating a specific resolution-based positional change limit of a different kind than simply pulsetrain or electrical commutation frequency limits. That is another problem altogether to consider.

You mentioned increasing inertia in another thread which could limit the acceleration rate that is likely to occur in a given system and thus act as a mechanical intertia-based low-pass filter that would counteract this.

A really good point.

This is quite fascinating though. If we consider a large-ish custom made and well-fabricated ironless axial flux disc motor in a low speed system with a very high resolution absolute encoder, we may even be able to achieve an arcsecond resolution direct drive turntable with an ODrive. However, the holding of the position may be compromised if chaotic (fast) forces are acting on the system because of the above mentioned issue where fast changes are impossible to manage down to this resolution. Again, having a high mass turntable (and an arcsecond turntable would be heavy anyhow, so this is a given) may be a benefit here because the mass could be deliberately sized to make it difficult to accelerate and decelerate the system fast enough to get affected by the 8kHz limitation, but this would have to be calculated based on the actual inertias and the specific application. A very interesting idea indeed.

Yes, and this of course only works for a direct-drive system, geared systems are not able to take advantage of the turntable’s inertia, because there is a (small but nonetheless fatal) backlash between the motor and load.

I want one of those for my ebike. Where can I get one? :stuck_out_tongue:
No, seriously, it would be really good as a hub motor because ironless motors also have no magnetic hysteresis drag, which means it can be used for regen, without causing a continuous drag on the bike even while powered off.