ODrive for 4 axis CNC w/ linear scale encoders

Hi! I’m new on this forum, but I’ve been reading about ODrive for a little while now and I’m considering using it for a 4 axis CNC build. I am looking to building something on the smaller side with a work area of 8"x6"x6", rigid enough to handle steel.

While most cnc use stepper motors, I’d like to try a different approach with BLDC mainly for torque and speed. I also think I can source parts cheaper going this way (despite the ODrive cost).

Precision is one key element of my build, and while it’s purely a hobby build, I’ll do my best to get it as good as I can. This is were I am looking for insights from you:
In addition to the encoders on the motors, I would like to use glass dro (absolute linear scale encoders) to confirm the axis movements and possibly adjust for backlash as the work is progressing.

Did anyone try something similar? Any feedback?


as far as I know, coordinated motion is missing from such an endeaver. I’m actually watching this forum for this to happen. :slight_smile:

See also:


We call this dual-encoder or “load encoder” mode, where commutation of the motor is achieved through one encoder and motion control is achieved via a second encoder (usually on the far side of any backlash or gearing). This is a planned feature, and a very rudimentary version is working in a feature branch, but the way it’s currently written you lose access to one of the two motor channels. Currently ODrive only has the software to support 2 encoders (one per axis) but this will change so that you can setup up to 4 encoders, and then arbitrarily assign those encoders to axes as either load encoders or commutation encoders.

Thanks this is indeed what I am looking for.
I was also considering doing that as an outside control to ODrive, but it would definitely better if it’s integrated upfront as the motion could really use the feedback direclty.

I am also exploring options to put a break to lock the position once the position is set to avoid any movements due to the load. I was reading about the holding power of BLDC motors and it might be a good start however it will still be subject to backlash on the linear axis…
If you have pointer on ODrive built using brakes, I am interested in how to manage breaking/releasing while holding a position.

In short, you need a proper CNC motion controller(like Linuxcnc) that supports linear encoders. ODrive is a motor controller, not a CNC motion controller. Odrive takes care of driving the motors, the CNC controller takes care of planning the motion and monitoring it with scale encoders. If you want to do it properly then Linuxcnc, mesa cards and scales are your only bet(aside from real controllers).

I’ve designed a similar machine, and it does not come cheap, or easy. And if precision is what you’re after then you need quality ballscrews, mikron class scales and AC servos with 20bit encoders. This guy has the right idea: https://www.youtube.com/watch?v=zvqjIOG0fi0

1 Like

Well this would indeed be a more traditional approach.
Sure it works, but that’s not the path I am interested to follow.

I would like to evaluate the performance I can get with a cheaper aproach using off the shelf BLDC + ODrive. I am however willing to do the integration of several components myself including the required motion control. I’m playing with FPGA atm, not sure if I will use it in the final build though.