Odrive ERROR_CURRENT_UNSTABLE

i have the odrive 3.6 56v at 24v and a Scorpion 4035-500

When i first connected the odrive and configured the encoder and the rest i could do set_pos or velocity. Then i tuned the motor. Then i wanted to change to velocity mode. Now it wont do position/velocity control anymore. Motor calibration only turns for a split second, then beeps but doesnt rotates cw/ccw. I also did reset the configuration and did a new one.

After motor calibration:

In [104]: dump_errors(odrv0)
axis0
axis: Error(s):
ERROR_MOTOR_DISARMED
ERROR_MOTOR_FAILED
motor: Error(s):
ERROR_CURRENT_UNSTABLE
encoder: no error
controller: no error
axis1
axis: no error
motor: no error
encoder: no error
controller: no error

Before motor calibration and after reboot there are no errors.

How can that be?

i mounted the motor and encoder to the M1 and it works. I can calibrate the motor without errors. Back to M0 and it doesnt work again :confused:

something else i noticed is it doesnt seem to save the startup procedure:

In [1]: odrv0.axis0.config.startup_motor_calibration = 1

In [2]: odrv0.axis0.config.startup_encoder_index_search = 1

In [3]: odrv0.axis0.config.startup_encoder_offset_calibration =1

In [4]: odrv0.axis0.config.startup_closed_loop_control = 1

In [5]: odrv0.save_configuration()

In [6]: odrv0.reboot()

But after a reboot nothing happens.

if i do the exact same to M1 then everything works:

Reconnected to ODrive 2068358F524B as odrv0
In [13]: odrv0.axis1.config.startup_motor_calibration = 1

In [14]: odrv0.axis1.config.startup_encoder_index_search = 1

In [15]: odrv0.axis1.config.startup_encoder_offset_calibration =1

In [16]: odrv0.axis1.config.startup_closed_loop_control = 1

In [17]: odrv0.save_configuration()

In [18]: odrv0.reboot()

after a reboot the motor calibrates (successfully) and does position control. either there is a Hardware error or i need to completely reset the firm/software.

if that helps:

In [8]: odrv0.axis1.motor
Out[8]:
error = 0x0000 (int)
armed_state = 3 (int)
is_calibrated = True (bool)
current_meas_phB = 1.3570867776870728 (float)
current_meas_phC = -1.308037519454956 (float)
DC_calib_phB = -0.1084473729133606 (float)
DC_calib_phC = 0.38133883476257324 (float)
phase_current_rev_gain = 0.02500000037252903 (float)
thermal_current_lim = 45.605873107910156 (float)
get_inverter_temp()
current_control:
p_gain = 0.007143108174204826 (float)
i_gain = 27.287220001220703 (float)
v_current_control_integral_d = 0.0011333753354847431 (float)
v_current_control_integral_q = -0.07201576232910156 (float)
Ibus = 0.006855755113065243 (float)
final_v_alpha = -0.01041458174586296 (float)
final_v_beta = 0.07166272401809692 (float)
Iq_setpoint = -1.4722706079483032 (float)
Iq_measured = -1.6013392210006714 (float)
Id_measured = 0.02776429057121277 (float)
I_measured_report_filter_k = 1.0 (float)
max_allowed_current = 60.75 (float)
overcurrent_trip_level = 67.5 (float)
gate_driver:
drv_fault = 0 (int)
timing_log:
TIMING_LOG_GENERAL = 0 (int)
TIMING_LOG_ADC_CB_I = 4486 (int)
TIMING_LOG_ADC_CB_DC = 14666 (int)
TIMING_LOG_MEAS_R = 8582 (int)
TIMING_LOG_MEAS_L = 8582 (int)
TIMING_LOG_ENC_CALIB = 8830 (int)
TIMING_LOG_IDX_SEARCH = 0 (int)
TIMING_LOG_FOC_VOLTAGE = 8778 (int)
TIMING_LOG_FOC_CURRENT = 9670 (int)
config:
pre_calibrated = False (bool)
pole_pairs = 5 (int)
calibration_current = 10.0 (float)
resistance_calib_max_voltage = 2.0 (float)
phase_inductance = 7.143108177842805e-06 (float)
phase_resistance = 0.02728722058236599 (float)
direction = -1 (int)
motor_type = 0 (int)
current_lim = 10.0 (float)
current_lim_tolerance = 1.25 (float)
inverter_temp_limit_lower = 100.0 (float)
inverter_temp_limit_upper = 120.0 (float)
requested_current_range = 60.0 (float)
current_control_bandwidth = 1000.0 (float)

In [9]: odrv0.axis0.motor
Out[9]:
error = 0x0000 (int)
armed_state = 0 (int)
is_calibrated = False (bool)
current_meas_phB = 0.04845967888832092 (float)
current_meas_phC = -0.5625606179237366 (float)
DC_calib_phB = -0.37082546949386597 (float)
DC_calib_phC = -0.6459059715270996 (float)
phase_current_rev_gain = 0.02500000037252903 (float)
thermal_current_lim = 45.80812454223633 (float)
get_inverter_temp()
current_control:
p_gain = 0.007383590564131737 (float)
i_gain = 28.994342803955078 (float)
v_current_control_integral_d = 0.0 (float)
v_current_control_integral_q = 0.0 (float)
Ibus = 0.0 (float)
final_v_alpha = 0.0 (float)
final_v_beta = 0.0 (float)
Iq_setpoint = 0.0 (float)
Iq_measured = 0.0 (float)
Id_measured = 0.0 (float)
I_measured_report_filter_k = 1.0 (float)
max_allowed_current = 60.75 (float)
overcurrent_trip_level = 67.5 (float)
gate_driver:
drv_fault = 0 (int)
timing_log:
TIMING_LOG_GENERAL = 0 (int)
TIMING_LOG_ADC_CB_I = 2690 (int)
TIMING_LOG_ADC_CB_DC = 12882 (int)
TIMING_LOG_MEAS_R = 0 (int)
TIMING_LOG_MEAS_L = 0 (int)
TIMING_LOG_ENC_CALIB = 0 (int)
TIMING_LOG_IDX_SEARCH = 0 (int)
TIMING_LOG_FOC_VOLTAGE = 0 (int)
TIMING_LOG_FOC_CURRENT = 0 (int)
config:
pre_calibrated = False (bool)
pole_pairs = 5 (int)
calibration_current = 10.0 (float)
resistance_calib_max_voltage = 2.0 (float)
phase_inductance = 7.3835904004226904e-06 (float)
phase_resistance = 0.02899434231221676 (float)
direction = -1 (int)
motor_type = 0 (int)
current_lim = 10.0 (float)
current_lim_tolerance = 1.25 (float)
inverter_temp_limit_lower = 100.0 (float)
inverter_temp_limit_upper = 120.0 (float)
requested_current_range = 60.0 (float)
current_control_bandwidth = 1000.0 (float)

In [10]:

no one has an idea? i need to know if this is a hardware issue

Hi MMD, I just spotted your post, I had exactly the same error and symptoms the other day that resolved occasionally after a re-boot.

After a lot of head-scratching, I noticed one of the phases were loose in the screw terminal of the ODrive. Initially, I jammed a screwdriver in with the wire as I may have previously overtightened it; this worked a treat. I will be soldering the motor wires directly to the board soon.

Therefore it may be a connection problem to the motor. I think if the electrical parameters change after the full calibration sequence, the ODrive protects everything by disarming the motor.

I hope that helps.

i think i remember i had the feeling of some screw overtightening but it did feel secure nontheless. i may have to look at the connection again. Thanks

(i am unsure if the small terminal connection is enough to deliver 20-40amps safely. I may solder them directly as well)

I think that would be the best option, I was running mine at 60A on a 12v lead-acid battery at the time. The 0.5ohm brake resistor was a little warm also.

I hope that fixes your issue.

ignore this, i tried it again and now it saved it.

i dont think this is a connection issue because i have connected the motor on both drivers multiple times and every time axis 0 has the fault while axis 1 doesnt.

If you turn an encoder on axis 0 by hand, is encoder.shadow_count accurate?

yes encoder.shadow_count is accurate and also will get higher or lower depending on how i rotate the motor

Hi guys, I have the same error on axis0. On axis1 works totally fine.
Using 56V Odrive 3.6 with Odrive D5065 motor and 24V psu.
Has anybody solved this issue?