Does anyone have experience with driving BLDC motors at low speed with high mechanical load? I’m attempting to diff-drive a robot with hoverboard-style wheels (modified to have high resolution AS5304 encoders, at 6880cpr). The robot configuration is actually similar to this powered cart made by @madcowswe.
I need responsive velocity control in order to interface with the robotics controllers that I’m using. Under no load, the motors do indeed respond well to velocity commands, both in terms of accuracy and response time. Under load however, the motors lag behind the target velocity (especially when turning).
Increasing the vel_integrator_gain
parameter improves response time but introduces too much unwanted overshoot. I’ve increased vel_gain
to about as high as it can go before it becomes unstable. It still seems that at low speeds (e.g. 0.2rev/s), the error terms between the estimated velocity from the encoder and the velocity setpoints are too small so the controller isn’t driving the motor with enough current to overcome the inertia of the robot.
I am not an expert in PID control but regarding the ODrive control diagram below, it seems to me that it would be beneficial to have acceleration error feedback by differentiating the encoder output twice. However, I have read that this is susceptible to noise and is therefore generally avoided.
Is the diff-drive + castor wheel design simply unfit for this application? Would a stepper motor with high holding torque be preferable in this case? Or a BLDC as part of a geared system that can spin at higher speeds while the wheels move more slowly with high torque?
Any input appreciated. Thanks!