Hall Effect Sensors AND Encoders


I just purchased 4 of the 56V ODrives last week and I’m reading up on how to use them so that integration is somewhat seamless when they arrive. While reading around I found one issue that I think I’m going to run into. Let me explain the use case.

I’m using the ODrive as a motor controller for a 4 axis CNC mill. I plan to use step/dir control signals from a motion control board (possibly linuxcnc) to control the individuals motors to get trajectories to cut material.

Okay so far so good. I can easily hook up the motor to the ODrive and the quadrature encoder to the ODrive as well. The issue comes with the drive system setup. The brushless motor is connected directly to the lead screw to cause the linear movements. The encoder is also directly connected. The motor also has 3 hall effect sensors internally. I haven’t gotten the ODrives yet so I can say with certainty, but I believe the ODrive might have some trouble controlling the position of the motor without the hall effect sensors also mixed into the position control loop.

Now I might be wrong (and hopefully I am), and the calibration procedure might take care of my concerns, mainly having the ODrive able to hold the brushless motor between a set of poles, similar to how a stepper motor micro-steps.

Is it possible to have both a quadrature encoder, and 3 halleffect sensors connected to each axis of the ODrive? And secondly, would this even be a necessity? I would like to get precision down to 1-2 encoder counts while in position control, which might correspond to 0.001" of tolerance for machining in that axis. Sorry for the long question, if it’s been answered where could I find this answer?

Exicted to get these anyways, I’ve been wanting an ODrive for years but never had a reason to just buy a bunch. Now I do!!


1 Like

No and no. :smiley:
They use the same input, so you can’t have both at once. But as you guessed, you don’t need the Hall sensors, they are just low-resolution encoders to the ODrive anyway.

1-2 counts of error could be hard to achieve though - the control loop needs some error otherwise it won’t produce any torque, and a mill usually has a backlash, so trying to increase the positioning accuracy beyond the width of the backlash (sometimes 100 or more counts) will only result in oscillation.
However @Dev255 has a very successful ODrive CNC project where he compensated for the backlash in his software. You can find him on YouTube.
I believe he also used a belt reduction which increased both the torque and effective encoder resolution.

BTW, You could perhaps try PyCNC. It has a fairly simple python API that you could fill out with ODrive commands. This would let you skip the step/dir interface and use CAN bus or USB to send position commands directly, instead of treating ODrive like a stepper when its not.

1 Like