Hi all,

I am quite newbie in Odrive and have limited experience with electronics and BLDC.
I discovered ODRIVE recently and this is fantastic.
I have set up a BLDC motor with hall sensors. This motor is the one of a powertool (screwdriver)
I am testing in no load.
motor can achieve >20 000RPM in the screwdriver application. I set odrv0.axis0.controller.config.vel_limit=370.
I am able to command the motor with some success using : odrv0.axis0.controller.input_pos = xx
This is working till a certain limit where I reach error MOTOR_ERROR_CURRENT_LIMIT_VIOLATION & AXIS_ERROR_MOTOR_FAILED
I assume it may be due to important acceleration and thus overcurrent is reached but odrv0.axis0.motor.config.current_lim is adjusted at 60A and sounds to me already huge.
Does anyone has an idea about this issue?

Thanks in advance.

Have you find answer of your question? If yes please share with us.

If I had to guess, it’s going unstable. 370 rev/sec is 22,200 rpm. How many pole_pairs do you have on your motor, and at what point does the motor stop working? The ODrive can handle about 600Hz electrical, so even at 2 pole_pairs, you’re already over this threshold.

Hi Wetmelon, my motor has got 4 poles indeed. Should I limit the rev/s?

Yeah, as Wetmelon says the upper limit for ODrive v3.x is 600Hz electrical, so 300 rev/sec for 2 pole pairs. That equates to 18k rpm. In practice, you probably shouldn’t go above about 15k so that you still have some headroom for control.


We have a motor with 21 pole pairs. Sometimes also got a current limit violation at higher speeds.
Could you explain to us how you calculate the max RPM based on this amount of pole pairs and the 600Hz frequency? Running a 56V ODRive (v3.6), assuming this still has 600Hz electrical frequency?

Does it mean we can only hit aroun 1700 rpm with these specs? If so, i guess i understand the calculations but still could one explain the source of 600Hz?

Precisely what you have.

V_{max} = \omega * 60 / pp = 600 * 60 / 21 = 1714

The 600hz basically comes from the fact that the ODrive runs the current loop and updates the voltage vector at 8kHz, so above 600hz electrical you start getting a fair amount of phase shift. The fact it only has two current sensors also doesn’t help. It’s more of an empirical value than anything, some motor / encoder combinations will do better than 600 and some worse.


I recently also discovered this issue when using ODrive to control a 100KV motor with 20 pole pairs - it can only go up to 1800RPM. I was wondering if you can explain how do you get 600Hz from the fact that ODrive has a 8kHz current control loop.

If I want to control the motor beyond 1800 RPM, is there anything that you would recommend? For my application, I need to drive the device at around 2400 RPM.