A torque-limited position axis can appear to lose torque completely when a different protection limit is crossed. In the reported setup, external pulling drove the motor faster than the configured velocity limit. The axis then disarmed and removed current, even though commanded torque opposed the measured velocity. The number that matters at the trip is therefore not only current; it is every active limit evaluated by the controller.
Common fixes that miss the fault
Raising current_lim does not correct a velocity-limit disarm. It increases the permitted current and associated thermal load while leaving the speed condition unchanged. This can add heat without changing the shutdown mechanism.
Reducing current_lim alone also cannot produce the intended compliant behavior. A current ceiling limits the position loop's available effort, but it does not override independent velocity, axis, motor, power, or communication protections. Once any protection disarms the axis, current falls to zero rather than remaining at the selected ceiling.
Increasing position-loop aggressiveness is another wrong response. More aggressive control drives the command into the current limit sooner and can produce a harder interaction with an obstruction. It does not prevent an externally back-driven motor from crossing its velocity limit.
Repeatedly re-enabling the axis hides the initiating condition. If the USB device also disappears and the Python object reports lost device, first distinguish an axis disarm from a controller reset, power interruption, or USB transport failure.
Current, torque, heat, and speed
Position control produces a torque request from position error. The current limit clips that request before it reaches the motor-current regulator. For a motor operated within its normal magnetic region, torque is approximately proportional to torque-producing current:
T = Kt × Iq
Use the motor torque constant from its datasheet and the controller's definition of reported current. The resulting motor-shaft torque is not automatically the same as linear force at the load; gearing, pulley radius, transmission efficiency, friction, gravity, and inertia alter the relationship.
Current also creates winding heat proportional to I²R. A blocked axis can remain at the current ceiling because position error persists, so this is a thermal operating point, not merely a momentary force setting. Select continuous holding current from the motor and drive thermal limits. Use a peak value only when the permitted duration and recovery conditions are defined by the applicable documentation.
The velocity limit is a separate protection dimension. Direction does not make excessive speed harmless: back EMF, mechanical overspeed, bus-energy flow, estimator operating range, and control stability depend on speed magnitude. A motor driven by the load can therefore cross the limit while commanded torque points against motion.
Limit and symptom separation
| Quantity or symptom | Engineering meaning | Where to read it |
|---|---|---|
| Commanded or measured current | Shows whether position effort reaches current_lim
|
Live controller telemetry and configuration |
| Motor velocity | Compare its magnitude with the configured velocity limit immediately before disarm | Live axis telemetry and velocity-limit setting |
| Axis and motor errors | Identify the protection that removed torque |
dump_errors(odrv0) immediately after the event |
lost device |
Indicates that the host lost the USB object; it does not by itself identify the axis fault | Python exception, USB status, controller power, and host logs |
| Motor and power-stage temperature | Determines whether sustained stall current is thermally acceptable | Available device telemetry and component documentation |
| Load force | Validates the actual mechanical ceiling rather than inferred motor current alone | Load cell, force gauge, or calculated transmission torque |
Capture current, velocity, position error, state, and errors on the same time base. If velocity reaches its limit before current disappears, treat the event as a speed-limit trip. If the USB object vanishes at the same instant, check controller supply stability and USB continuity before attributing the event solely to motion configuration.
Torque-limited position configuration
- Confirm motor current sensing and position feedback operate correctly with the mechanism unloaded. A current ceiling cannot compensate for incorrect feedback polarity, scaling, or commutation.
- Convert the required load force into motor torque through the actual transmission. Then convert motor torque to current with
I = T / Kt, using compatible units and the motor's documented torque constant. - Set
current_limto the lower of the calculated force requirement and the continuous electrical or thermal capability. Read the exact configuration path from the connected device's interface or parameter listing because the evidence does not identify a firmware-specific namespace. - Set the velocity limit above the highest legitimate externally imposed speed, including manual pulling and load overrun, but below the safe speed of the motor, mechanics, feedback system, and power stage. Raising it without evaluating those boundaries removes protection rather than creating compliance.
- Use position-loop gains that approach the obstruction without unacceptable impact or oscillation. The current limit caps effort after contact; trajectory limits and gains control how much speed and stored mechanical energy exist before contact.
- Save the configuration through the supported device interface, restart if required by that interface, and read the values back. Re-enable the axis only after recording the initiating error.
Loaded verification
- Begin with no obstruction and command a small position move. Confirm stable tracking, correct direction, and current below
current_lim. - Apply a measured resisting load gradually. Verify that current rises to the configured ceiling while the axis remains enabled and position error remains bounded by the mechanical situation.
- Hold the obstruction only for a thermally justified interval. Monitor winding or available motor temperature, controller temperature, bus behavior, and current rather than treating a successful short stall as proof of continuous capability.
- Back-drive the mechanism at the greatest intended external speed. Confirm measured velocity remains below the configured velocity limit with operating margin.
- Deliberately test the protection boundary under controlled conditions. After a trip, run
dump_errors(odrv0)before clearing errors or cycling power, then correlate the result with the captured velocity and current traces.
The passing result is not merely a stalled shaft. The axis must remain enabled, current must plateau at the selected limit, measured force must stay within the mechanical requirement, and temperatures must remain inside documented ratings. If current drops to zero, diagnose the new error rather than interpreting zero current as torque limiting.
Recurring integration pitfalls
A current limit bounds electromagnetic torque, not every instantaneous load force. Impact, inertia, gravity, spring preload, gearbox friction, and stored energy can create forces that differ from the steady current-to-torque calculation. Measure force directly when personnel safety, tooling, or product damage depends on the ceiling.
USB loss and motion disarm are different fault classes even when they occur together. Preserve controller power and retrieve errors before resetting; otherwise the most useful diagnostic state may be lost. If the controller disappears, log supply voltage and host USB events alongside motion telemetry to separate power, communication, and axis-protection causes.
Another recurring mistake is selecting velocity protection from commanded motion alone. Include external back-driving in the speed envelope. A resisting torque command does not exempt the motor from a speed-magnitude limit.
FAQ
What happens if ODrive reaches current_lim in position control?
The position loop's requested effort is clipped at current_lim. The axis can keep applying limited current against an obstruction, provided no other protection disarms it.
What happens if I pull the motor faster than the velocity limit?
The axis can disarm and remove motor current even when commanded torque opposes the motion. Read the errors with dump_errors(odrv0) and compare captured velocity with the configured limit.
What happens if the motor stays stalled at the current limit?
Position error keeps requesting torque, so winding heating continues at roughly I²R. Use documented continuous ratings and measured temperature to decide how long that condition is acceptable.
When should I stop testing and contact official support?
Stop if the device repeatedly disappears from USB, errors cannot be retrieved, supply behavior is abnormal, or the axis disarms below every verified limit. Preserve the configuration, dump_errors(odrv0) output, synchronized current and velocity traces, power measurements, and reproduction steps, then escalate them through the manufacturer's official support channel.