Encoder choice FAQ?

Hi there,

The context, could be skipped:
*I’m a software engineer who has a bit of an experience with electronics and is just getting started in the mechanical engineering. *
I’m planning to use ODrive for my upcoming project (likely one of the newer options), but before I start buying components, I want to have a plan and required budget in mind. I’m prepared to eventually buy several options of each component (like motors, encoders, reducers, could also different ODrive versions), but possibilities are huge, and I would prefer to narrow the options down as much as possible.

For my application, I plan to use mid-power motors (say 5-10Amps range, relatively high resistance in the order of a few Ohms, as I understand that would work better for my “lower speed / higher precision” purpose). One of the options would be removing the controller from this https://www.myactuator.com/product-page/rmd-l-5015 motor (10T version) that I already have from my previous project, and controlling it using ODrive. The original controller doesn’t work for my purpose as I need to perfectly synchronize several motors which is impossible with the stock one, but I thought will be achievable with ODrive (worst case I will just customize the firmware and use one of GPIOs as a trigger signal).

My goal is to drive motors with relatively low RPM, think of 100 RPM - 1000 RPM range, while positioning them as accurately as possible.

Now, one thing I particularly struggle with is the encoder choice. I’m looking to use some incremental encoder (homing will be implemented separately), and my assumption is that I will be able to use literally any encoder, even if it’s not directly supported by ODrive, I’ll just couple it with some tiny microcontroller and convert whatever its signal is into ABI.

It’s easy to find a ton of pros/cons comparisons for virtually any encoder aspect. Much more difficult part is to understand how those pros/cons apply to FOC.

Referring to this ODrive Encoder Guide spreadsheet

  • the document mentions the bandwidth / filter cutoff below 200Hz is not even considered, I understand it should be > 200Hz. Is higher bandwidth better in practice? What are the reasonable limits? MA330 encoder and several similar ones offer a configurable bandwidth between 23Hz and 6000Hz at the expense of resolution. Are there any guidelines how to optimally balance these parameters?
  • the resolution. The document mentions a huge range between 2400 and 262144 counts/rev. How much is really needed for the FOC purpose? What is the point of diminishing returns?
  • Noise (RMS) – any examples how does one calculate that? Take, for example, this simulation (click “Launch simulation” at the bottom of the page to see the results). It says “Mechanical Resolution 13.25bit ±0.0185°” – how does that translate into RMS noise? What is the acceptable range and how does it accept the performance? How does 0.05º differ from 0.005º in practice?
  • Optical vs Magnetic. Apart from the obvious difference, it seems that the optical encoders will have lower noise that the magnetic ones. How critical is that for FOC purpose. Should I prefer say 1000 PPR / 4000 CPR optical encoder over the 12-bit magnetic?

I would really appreciate any bits of data and opinions that would help to clarify that. Ideally, this topic could result in a great documentation article.

Sure, yes, if you don’t have much phase delay (or have low speeds).

For FOC specifically? Not a lot. It works with hall effect sensors with an effective cpr of like 24. For precise positioning? More. For precise velocity estimates at low speeds? Many much more.

For slow speeds & positioning, you want an enocoder with high resolution, low hysteresis. White noise is fine (and actually somewhat preferred), since it can be filtered out. This gives you high stiffness (you can use higher PID gains).