The measured motor phase resistance is outside of the plausible range.
During calibration the motor resistance and inductance is measured. If the measured motor resistance or inductance falls outside a set range this error will be returned. Check that all motor leads are connected securely.
The measured values can be viewed using odrivetool as is shown below:
In : odrv0.axis0.motor.config.phase_inductance Out: 1.408751450071577e-05 In : odrv0.axis0.motor.config.phase_resistance Out: 0.029788672924041748
Some motors will have a considerably different phase resistance and inductance than this. For example, gimbal motors, some small motors (e.g. < 10A peak current). If you think this applies to you try increasing config.resistance_calib_max_voltage from its default value of 1 using odrivetool and repeat the motor calibration process. If your motor has a small peak current draw (e.g. < 20A) you can also try decreasing config.calibration_current from its default value of 10A.
In general, you need
resistance_calib_max_voltage > calibration_current * phase_resistance resistance_calib_max_voltage < 0.5 * vbus_voltage
The measured motor phase inductance is outside of the plausible range.
PHASE_RESISTANCE_OUT_OF_RANGE for details.
The gate driver chip reported an error.
The ODrive v3.4 is known to have a hardware issue whereby the
motors would stop operating when applying high currents to M0. The
reported error of both motors in this case is
The conjecture is that the high switching current creates large ripples in the power supply of the DRV8301 gate driver chips, thus tripping its under-voltage fault detection.
To resolve this issue you can limit the M0 current to 40A. The lowest current at which the DRV fault was observed is 45A on one test motor and 50A on another test motor. Refer to this post for instructions for a hardware fix.
The bus voltage was insufficent to push the requested current through the motor. If you are getting this during motor calibration, make sure that config.resistance_calib_max_voltage is no more than half your bus voltage.
The current sense circuit saturated the current sense amplifier. This can be caused by setting config.current_lim higher than config.requested_current_range. If this happens, increase the requested current range, save the configuration, and reboot the controller.
The motor current exceeded
motor.config.current_lim + motor.config.current_lim_margin.
The current controller is a PI controller, so it can experience overshoot. The PI gains
are automatically calculated based on config.current_control_bandwidth and the
motor resistance and inductance (pole placement). Some overshoot is normal, so a sensible
solution is to increase the current limit margin if your current limit is large.
The motor thermistor measured a temperature above motor.motor_thermistor.config.temp_limit_upper
The inverter thermistor measured a temperature above motor.fet_thermistor.config.temp_limit_upper
A timer update event was missed. Perhaps the previous timer update took too much time. This is not expected in official release firmware.
The phase current measurement is not available. The ADC failed to sample the current sensor in time. This is not expected in official release firmware.
The motor was disarmed because the underlying controller failed. Usually this is the FOC controller.
An attempt was made to run the motor PWM while the brake resistor was configured as enabled
config.enable_brake_resistor) but disarmed.
The most common cause is that you just set
True but didn’t
arm the brake resistor yet (by either rebooting or running
Otherwise, the brake resistor can be disarmed due to various system-wide errors.
The root cause will usually show up under
system when you run
To re-arm the brake resistor reboot the ODrive or run
The motor had to be disarmed because of a system level error. See <odrv>.error for more details.
The main control loop got out of sync with the motor control loop. This could indicate that the main control loop got stuck.
The current controller did not get a valid angle input. Maybe you didn’t calibrate the encoder.
The motor controller did not get a valid phase velocity input.
The motor controller did not get a valid torque input.
The current controller did not get a valid current setpoint. Maybe you didn’t configure the controller correctly.
The current controller did not get a valid current measurement.
The current controller did not get a valid <odrv>.vbus_voltage measurement.
The current controller did not get a valid feedforward voltage setpoint.
Internal value used while the controller is not yet ready to generate PWM timings.
The motor phases are not balanced.