My ODrive (v3.5-24V) always worked properly. Today I updated the software and went through the calibration steps, but my motors wont calibrate.
I am using Turnigy 3632 - 1500KV motors.
the motor fuzzes, but does not move and there is also no beep.
After some seconds it stops and I get the following error:
system: no error
axis0
axis: no error
motor: Error(s):
MOTOR_ERROR_PHASE_INDUCTANCE_OUT_OF_RANGE
MOTOR_ERROR_CURRENT_LIMIT_VIOLATION
sensorless_estimator: no error
encoder: no error
controller: no error
axis1
axis: no error
motor: no error
sensorless_estimator: no error
encoder: no error
controller: no error
It seems to measure the motor_resistance, because i get a value. odrv0.axis0.motor.config outputs:
The inductance is calculated by this function in motor.cpp:
float get_inductance() {
// Note: A more correct formula would also take into account that there is a finite timestep.
// However, the discretisation in the current control loop inverts the same discrepancy
float dt = (float)(last_input_timestamp_ - start_timestamp_) / (float)TIM_1_8_CLOCK_HZ; // at 216MHz this overflows after 19 seconds
return std::abs(test_voltage_) / (deltaI_ / dt);
}
If it is returning inf then deltaI is probably zero i.e. the current reported by the controller has not changed over the timestep. Try calibating at a higher current i.e. increase motor.config.calibration_current and also check that the current sense gain is set correctly i.e. motor.config.requested_current_range is no more than double your max current.
High KV motors have low inductance and we need to use more current to be able to measure it.
In general I’d say High KV motors are not ideal for ODrive - they have low torque, require gearing, and the FOC commutation that ODrive uses is less useful in highly geared actuators.
You make a High KV motor by using fewer turns of wire. At some point, it’s not a motor anymore.