The CNC machine using an ODrive I'm working on

Here is a first look at the multi purpose CNC platform I’m working on. It uses a cheap Chinese 3040 CNC as a basis. The X and Y axis are driven by an ODrive. These axis also use linear encoders. The Z Axis uses a Nema23 stepper Motor. Gcode interpretation and motion planning is performed by a Smoothieboard. All of this is finally controlled by a Jetson Nano SBC.

The machine is almost finished, only a few minor parts are missing. The biggest step left is to install the board with all of the electronics and plugging in all connections.


Cool stuff. You mentioned that your design uses absolute encoders. How has this benefited your project? Does this allow you skipping the homing process within your CNC firmware or does this merely allow you to skip the ODrive calibration procedure?

Oops… Sorry, I wrote the wrong thing… I’m using linear encoders not absolute encoders… :expressionless:

I assume that the linear encoders feed into the Smoothieboard and that you are using more standard incremental encoders to provide feedback for the ODrive?

No, the linear encoders are directly hooked up to the ODrive

Really!? Have you figured out some way to translate the linear position given by the linear encoders to the rotational offset of the motor? Did you have to write some custom firmware?

No, I didn’t have to write any code. The ballscrews have a pitch of 4mm/rev and the encoder outputs 200 counts / mm. This results in 800 counts/rev.

Wow, that’s a quite novel idea. Can you post a link to where you sourced the linear encoder from? I’d be interested in taking a look at it myself.
What is the purpose of the Jenson Nano? Does it just perform the initialization routines for both the ODrive and the Smoothieboard?

I used this encoder:
There are a lot of similar encoders available.

The Jetson Nano does GCode sending, computer vision, user interface,… It also interfaces with the ODrive for configuration. The initialisation routines are performed automatically by the ODrive and independent of the Nano

1 Like

What about motors overheating while holding the position? What voltage are you using?

Btw, I’m considering rebuilding my CNC router with Odrives, and I’m wondering is this platform suitable. My setup is different, I’m running belt reductions on long rack and pinion.

PS. Very nice machine :smiley:

I’m running both Motors at 24V (60 A). They aren’t even getting warm while holding position. I already had the PSU (24V 18A) laying around and didn’t want to buy a new one. If you are more flexible in that regard I would advise you to use 56 V ODrive and use a highero Voltage to reduce currents and be more flexible.
The ODrive platform is great for CNC machines. But it requires more planning and considerations before building compared to Stepper motors. You also definitely have to electrically isolate the ODrive from your CNC controller unless you want to risk killing your ODrive with a ground loop.

Also unless you’re motor is very tightly coupled to your axis like on my machine, I would advise against using only linear encoders as I have done.

Thanks for the compliment, The machine is coming along fine and all axis are moving the way they should. The only setback I had while doing the final integration, was an endstop blowing up (yes blowing up with a really loud bang and fireball) because I plugged it in backwards.


It’s alive :smiley:


You have a pretty big capacitor bank setup. I assume that is to maintain power quality. How many farad is it and what have you set your ODrive current_limit too? Is your jetson nano powered from the same source as your ODrives?

It is a 47mF capacitor bank (more about it here: STM32 getting very hot. Can’t connect (ODrive 3.6))

The current limit for the X Axis is 60A and for the Y Axis it is 90A. The Jetson Nano is powered by the same power supply as the ODrive (with a DC/DC step down converter). Because of this, the communication signals between the ODrive and other boards has to be isolated (to counter ground loops). I created a digital Isolator board just for this usecase: Triple Isolator for two Step/Dir/En and one UART signal


Thanks for the response, it definitely builds my confidence that Odrive is right direction for my machine.

I’ve prepared a big 48V/40A power supply form old server rack, so definitely higher is better.

Your advice on isolating Odrive will be top priority when assembling the electrical cabinet :+1:

I guess I’ll give it a spin, and see how it goes :grin: I’ll post a dedicated thread with my exact setup :call_me_hand: especially because I need some advice on gear ratio.

Running smooth, keep it up!

How difficult is the PID tuning process for CNC applications? I am working on an odrive based CNC and I concerned that I won’t be able to tune it to the point it doesn’t oscillate but does keep tight tolerances.

Nice machine.
I to have set up linear encoder and had quite a learning curve.
If you buy from manufacturer you pay through the nose.
But if you hunt around and go to component level you can get price right down.

I’m just about to turn my machine on this week and start configuration of odrive.
I’m a bit nervous.
See mine is a home made linear tubular bldc motor.
And it will be a bit scary turning on.

Sorry to bother you.
I’m setting up a linear motor with incremental linear encoder.
How do go about setting up homing and calibration.
Do you have a endstop.

Hi, I am using ODrives for my CNC and calibrated the motors before fitting them to the machine (no load) just to test everything, then once on the machine under load and everything works well with no oscillations and maintains position under 1 rotary encoder position (AMT102). I just followed the online calibration guide under documentation. I made a video about setting these up if that helps, just click on my avatar for more info.

Nice machine @SG-O :+1:

1 Like

Sorry for the late reply. I’m using capacitive endstops.

1 Like