Why does Torque Control mode not cause constant acceleration?

Possibly a dumb question, with an in-retrospect very obvious answer:

When in torque control mode, if I set input_torque = 1, I would expect that the ODrive should maintain a constant torque of 1Nm.

  • → Under a constant torque, you would expect a constant acceleration. Ie, my motor should speed up and continue speeding up until I turn the torque off again.

Instead I see that the motor speeds up to a certain speed, then stays at that speed. In my case, that speed is around 22 turns/s.

I don’t believe that can be just air resistance increasing until it balances the torque, it feels like it’s going far too slowly for that to have happened yet.

  • → If I then increase the torque to 2Nm, I don’t see any increase in speed. If I start from stationary and set input_torque = 2, I see that the motor does indeed accelerate faster - it reaches 22 turns/s more quickly. But it never goes faster.

If it was air resistance causing the steady velocity, I would have expected higher input torques to result in higher steady state speeds. Instead, whatever I do I always get the exact same 22 turns/s.

What’s going on here?

(I am definitely in torque control mode, not velocity control mode. I have set my vel_limit to a very large value, and the measured 22 turns/s is nowhere near it.)

Im not sure, but you might be hitting the electrical limit.

At 35000 erpm and 22 rps, you are at the limit with 26 poles I think.

Hadn’t thought of that. But my motor has fourteen poles (seven pole pairs) so nowhere near the limit.

However I notice that another limit mentioned in that quoted reply is bus voltage * motor KV * 0.75, which comes out to 21 turns/s with the motor+power supply I’m using.

Is there any setting to increase this, or have I found a hard limit of the Odrive?

First, controller.config.enable_current_mode_vel_limit is True by default to prevent you from hurting yourself, so make sure vel_limit is high enough.

V_{bus} * 0.75 is the maximum voltage that we can apply to the motor itself because ~reasons~ relating to how we’re sampling the current shunts and so forth. Therefore V_{bus} * 0.75 * Kv is the maximum rpm you can achieve for a given motor.

have I found a hard limit of the Odrive

Note that the 75% factor (as opposed to 100%) is a limitation of ODrive v3. But generally with any other motor controller you cannot go faster than bus voltage * motor KV (disregarding special motors that are designed with Field Weakening in mind)

Gotcha. Thanks for the insight!