BLDC smooth start and stop

Hi there!

I control the spinning of the sensorless BLDC via a joystick. When I release the stick, the motor stops immediately. I need it to stop smoothly and gain when moving the stick up smoothly.

What exactly are the parameters to use for a smooth start and stop of the BLDC? Vel gain? Pos gain? Else?


Hi there,

Sensorless has a minimum speed requirement, usually a few hundred RPM, though this strongly depends on the motor in question. The ODrive uses an open-loop ramp to get the motor up to a speed where sensorless control is possible. However, once at that speed, you cannot go below it without sensorless control failing, so a smooth, controlled deceleration to zero speed is impossible. I’d strongly recommend using an encoder on your motor – is there anything preventing you from doing so?

1 Like

Thank you! Your answers always help to figure out the reasons.
Using the Hall sensors is quite difficult in my case. I will have to disassemble the waterproof housing with an unknown result.
Maybe I have to try the anticogging feature?
I noticed that changing the values of the “pm_flux_linkage” and “config.current_lim” corrects the situation, but I don’t know how harmful it is for the BLDC…

Oh, unless the motor explicitly has hall sensors in there you shouldn’t disassemble it.

Anticogging won’t help with sensorless, and in fact can’t be used with it.

I wouldn’t touch pm_flux_linkage for now, and current_lim should be the motor’s maximum safe peak current.

Fundamentally there is no way to properly and reliably use sensorless mode down to zero speed, and you shouldn’t try to command zero speed, as it will make the control algorithm work unpredictably.

Ideally, whenever you want the motor to stop, you should put the ODrive in idle, and then back to closed loop control when you want the motor to start spinning again. I’d recommend using an Arduino to process joystick commands and control the ODrive over UART.

1 Like

I made a short video. You can see the behavior of the thruster while I`m trying to control it via joystick. I have only one channel configured on the RC (throttle PWM signal).

That’s unfortunately an aberration, and can’t really be relied on. It’s not guaranteed to work across changing load conditions, at the very least.

1 Like

Here is the same test for a hoverboard motor wheel. Everything seems fine except a smooth start and stop. So, what is the next step to make it work smoothly?

With a hoverboard wheel you’ll have to tune the vel_gain and vel_integrator_gain for smooth start/stop. I assume you’re using the hall sensors with the hoverboard wheel?

1 Like

Thank you! Ill try it. Yes, its exactly that kind of wheel.

Just keep trying :slight_smile:

Hi there,

I’m glad that’s working out for you! However I wanted to reiterate that sensorless is not designed to start motors from a stop, and you might experience some unreliability.

1 Like

Thank you for supporting me! I haven`t reached any success yet. It works really unstable now. But I keep trying.

Sure! To be very blunt, I don’t think you’re on the right path here – what you have is probably as good as it can get. Sensorless mode absolutely cannot be used for reliable control down to zero speed. Instead you should use an Arduino or similar to put the ODrive in idle when you want to turn off the thruster, and then back in closed loop control when you want it to move.