Hi ODrive Community,
As a new user I have spent a few days on getting my ODrive unit to work on a custom built coreless motor with 16 magnets (8 Poles). The motor works great with a standard ESC controller in open loop, but with the motor under load the motor controller shuts down during breaking with the motor error code 3, PHASE_RESISTANCE_OUT_OF_RANGE and PHASE_INDUCTANCE_OUT_OF_RANGE.
I need closed loop control for high torque, variable load robot applications.
Initially, I had trouble getting it to work and run the calibration. After setting the Calibration voltage to 5 and the Calibration current to 2, I got it to beep and find the index point (Edit: I thought it was finding the index, but I did not have that configured correctly, got it fixed with help form hbtousa). After playing with many of various gain and other settings, I was able to get it to work well with a slow velocity setting.
I have the motor connected to a mass based dyno for loading and initial testing. I have a 1200W programable power supply rated to 60 Volts at 50 Amps, so power should not be the issue.
My initial velocity setting was 100,000 (approx. 730 rpm). All worked well and tuned to not overshoot with good position holding response. I have been using the Position_setpoint command to run the motor from 100,000 to -100,000.
I increased the velocity setting to 200,000 or 300,000 and the motor accelerates great, but every time when breaking, the motor controller shuts down with the motor error code 3, PHASE_RESISTANCE_OUT_OF_RANGE and PHASE_INDUCTANCE_OUT_OF_RANGE.
I have been unable to make any progress from here…
While tuning I frequently get this same error code 3 and always when breaking. I have the break resistor that came with the unit installed and set the break resistor setting to 2.1, but also tried settings from 2.0 to 2.3.
Here are the motor parameters reported from the controller:
error = 0x0000 (int)
armed_state = 3 (int)
is_calibrated = True (bool)
current_meas_phB = 0.09581756591796875 (float)
current_meas_phC = -0.03451991081237793 (float)
DC_calib_phB = -0.9421103000640869 (float)
DC_calib_phC = -1.9998149871826172 (float)
phase_current_rev_gain = 0.012500000186264515 (float)
current_control:
p_gain = 0.0015518594300374389 (float)
i_gain = 10.576704978942871 (float)
v_current_control_integral_d = 0.004234021063894033 (float)
v_current_control_integral_q = 0.030545257031917572 (float)
Ibus = 0.00023002925445325673 (float)
final_v_alpha = -0.00974909495562315 (float)
final_v_beta = 0.029686549678444862 (float)
Iq_setpoint = 0.07871683686971664 (float)
Iq_measured = 0.07864609360694885 (float)
max_allowed_current = 35.999996185302734 (float)
gate_driver:
drv_fault = 0 (int)
timing_log:
TIMING_LOG_GENERAL = 0 (int)
TIMING_LOG_ADC_CB_I = 917 (int)
TIMING_LOG_ADC_CB_DC = 10955 (int)
TIMING_LOG_MEAS_R = 4351 (int)
TIMING_LOG_MEAS_L = 4189 (int)
TIMING_LOG_ENC_CALIB = 4693 (int)
TIMING_LOG_IDX_SEARCH = 0 (int)
TIMING_LOG_FOC_VOLTAGE = 4627 (int)
TIMING_LOG_FOC_CURRENT = 6853 (int)
config:
pre_calibrated = False (bool)
pole_pairs = 8 (int)
calibration_current = 2.0 (float)
resistance_calib_max_voltage = 5.0 (float)
phase_inductance = 7.759297295706347e-05 (float)
phase_resistance = 0.5288352370262146 (float)
direction = -1 (int)
motor_type = 0 (int)
current_lim = 20.0 (float)
requested_current_range = 20.0 (float)
current_control_bandwidth = 20.0 (float)
set_current_control_bandwidth(current_control_bandwidth: float)
I would greatly appreciate any insights you may provide.
Thank you,
Steve