Where to find motor with low cogging torque (skewed slots/magnets)

I have an application where I need a motor to produce a very constant/smooth velocity (< 5% velocity ripple) from speeds as low as 0.3 rpm up to 600 rpm. I currently have an ODrive S1 and an iPower GM5208-12 motor. The ODrive is fully capable of reaching my desired speeds. However, even with the anticogging feature enabled, I observe significant velocity ripple (~ ±70%) at 0.3 rpm. I assume this is just a limitation of how well the cogging torque can be compensated for. I hoped that a motor intended for camera gimbals would be good enough, but it doesn’t seem so.

The documentation of the ODrive anticogging feature mentions the following: “Therefore, if you find anticogging to give unsatisfactory results for your application, consider selecting a motor that is specifically designed for low cogging torque. Such motors are typically recognized by their skewed magnet or stator arrangement.” (Anticogging — ODrive Documentation 0.6.11 documentation)

I tried to look for such motors, but was unable to find any that are freely available. All that I found were specialty motors for space/military/… applications, only available upon request. Does anyone have a source for these motors, with skewed magnets/slots or even ironless or coreless?

Hi!

Some questions:

  1. What encoder are you using? The encoder resolution has a pretty direct relation to the velocity control resolution and also anticogging resolution. Changing to a higher resolution encoder could definitely help.
  2. Do you need to be able to change velocity rapidly? Adding some external inertia is usually a really easy way to smooth out the velocity, like a flywheel.

I tried to look for such motors, but was unable to find any that are freely available. All that I found were specialty motors for space/military/… applications, only available upon request

Unfortunately this is pretty common. What sort of torque do you need, and at what bus voltage?

Also, could you share more as to the specific requirement / application here? There are some workarounds you can do to reduce the velocity error, but they depend on the actual requirements.

Sure: I intend to evaluate the performance of an optical speed sensor. For that, I have a thin rotating plastic disk of ~20cm in diameter mounted directly to a motor. This means that the motor is spinning freely, with only minimal intertia. I have the following requirements:

  • Velocity variable from 0.3 rpm to 600 rpm
  • Velocity ripple < 5 % (this is the ideal case, < 20 % would already be great)
  • Acceleration: 30 turns/s²
    • → Requires a torque of about 0.1 Nm
  • Low position noise
  • Bus voltage is currently 30 V but is not fixed

The iPower GM5208-12 motor that I’m testing at the moment came with an AS5048A encoder (14 bit resolution) already mounted, so I have been using that. I see (and hear) quite a bit of position noise that I attribute to the encoder. Therefore, I lowered the ODrive encoder bandwidth setting to 100 which reduced it a bit, and affected the velocity rippple neither negatively nor positively.

What workarounds do you have in mind? I’m open to modifying the setup if that means better velocity control.

The AS5048A is definitely pretty garbage – the noise and nonlinearity is high. It’s definitely worth running harmonic compensation. Can you attach something instead like the AMT21 instead? That’ll get much better results, especially with anticogging. For comparison, the AS5048A has about 0.06° RMS noise (and isn’t actually a true 14-bit encoder, most of that is garbage to the point where it’s more like 11-12 bits effective), compared to about 0.006° with the AMT21 – this noise directly influences the fidelity of the velocity control.

One workaround here is to run the motor instead in position control mode (likely in a circular frame), with an external (constantly incrementing) position + velocity feedforward setpoint, ideally over CAN for deterministic timing. That can definitely help smooth the velocity at low speeds, as you’re not just relying on the velocity integrator.

If you can switch motors too, I can recommend the Cubemars GL40 KV70 or GL60 KV55; they’re both super low cogging torque. You could also consider the ODrive Micro (optimized for lower currents + precise control of higher resistance motors like these) + AMT10E2 (even higher resolution than the AMT21!). If you don’t want to wait for Cubemars’s shipping (they can have a bit of a lead time), we have a spare GL60 that I’d be happy to send you at-cost.

Thanks a lot, those are some interesting insights. I have ordered an AMT21 encoder, in the hope that it will already improve things enough.

If the encoder alone doesn’t fix the problem, I will try changing the motor. The CubeMars motors are in stock at some online shops here in Germany, so I think the shipping will be faster from there. But thank you for the offer!