High Speed Rotation


I have a project needing a servo running around 12000RPM. Ill be looking to run 24V with a 500kv 52mm outrunner. I dont need high resolution 200 CPR would be plenty. Will i be able to do this?


ODrive will in general drive to about 75% of base speed, so a 500kv motor on 24V would only reach about 9000 RPM. You can use a slightly higher kv motor to get to 12000 rpm.

It also depends on number of pole pairs in the motor. Right now ODrive will do about 48000 electrical rpm. We are looking to double that with some firmware upgrades (no estimated date for that yet though).


Sorry for hijacking this thread, my question is probably not worth opening a new thread.

75% of base RPM? Well. I wish I had known this earlier. A big part of my mechanical design depends on this --> 5300rpm motor, reduced 1:1.5 for a spindle speed of roughly 3500rpm.
Reaching only 75% of the 5300rpm gives me around 4000rpm, after the reduction it’s only 2666rpm.
I therefore have to deal with almost 1000rpm less spindle speed.

Is there any way around that?
I have the 24V odrive, the motor could handle a higher voltage - I guess the odrive can’t, right?

Also, what does this mean for controller.config.vel_limit?

Should I enter the theoretical value for 5300rpm? What will the odrive do when I set velocity to this value? Rotate as as fast as it “can” but stay below the theoretical value?


Yes, this is a limitation of how the current measurement is done. Currently there is no way around it other than increasing the bus voltage or increasing the Kv of the motor. As you mention, this would require changing the motor or to the 48V ODrive.

There is a firmware method called Field Weakening that could be used to increase the speed above these limitations, but it is quite a lot of work to get this right as an error when above base speed will probably blow up the ODrive. So it will be a while before we attempt that.

You can enter the unreachable vel_lim if you like, the motor will simply max out at the fastest speed that it can reach. Though it won’t level off the speed as smoothly in this case.


Thank you very much for your reply! :slight_smile:

I read from it that it’d be better to manually search for the velocity limit and to then use this value (minus a little headroom) in the config for vel_limit?

Maybe you could edit your motor-guide and add that 75% limitaton into it. Would be helpful for new users (in case it is already there somewhere and I’m just blind: nevermind) :smile:


I’m trying to get my bearings on the project and the code, so I’d like to verify my understanding here. This is because you need some off time in the two sensed phases to get the current measurement, right? And if I’m understanding, You would still be stuck at about 82%: sqrt(1/2) for RMS vs Peak, times sqrt(4/3) for the apparent voltage boost that comes from the floating center voltage of SVM?

With or without current measurement off time shouldn’t you be able to go to a higher speed as long as you aren’t expecting full phase current? You wouldn’t need the full coil voltage to slew the current as fast and high.


That’s correct.

Yes so actually the base speed is similar to the no-load speed, and accounts for only the back-emf at that speed. Like you say you need some voltage to “slew the current” (aka the “inductance cross term” in the motor therory), this means your nominal speed under load is lower than the no-load speed. In other words, this spec is already without current, and with current max speed is even lower.