Odrive 3.5 90W motor does not move and beep?

#1

Hi, guys
I’m using a 90W(3 pole pairs) motor and a 1024 resolution encoder. I followed the instructions step by step.I do have an odrive detected, I do get the correct vbus_voltage as expected.But when I’m running the motor calibration nothing happens. no movement, no beep…
Then I try reading the error codes. The axis error is 0x41 and the motor error is 0x11. The configuration I have saved shown below.

In [2]: odrv0.axis0.config
Out[2]:
startup_motor_calibration = True (bool)
startup_encoder_index_search = True (bool)
startup_encoder_offset_calibration = True (bool)
startup_closed_loop_control = True (bool)
startup_sensorless_control = True (bool)
enable_step_dir = False (bool)
counts_per_step = 2.0 (float)
ramp_up_time = 0.4000000059604645 (float)
ramp_up_distance = 12.566370964050293 (float)
spin_up_current = 10.0 (float)
spin_up_acceleration = 400.0 (float)
spin_up_target_vel = 400.0 (float)

In [4]: odrv0.axis0.motor
Out[4]:
error = 0x0011 (int)
armed_state = 0 (int)
is_calibrated = False (bool)
current_meas_phB = 0.021229267120361328 (float)
current_meas_phC = -0.023336350917816162 (float)
DC_calib_phB = -1.6526819467544556 (float)
DC_calib_phC = -0.601020097732544 (float)
phase_current_rev_gain = 0.012500000186264515 (float)
current_control:
p_gain = 0.0 (float)
i_gain = nan (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)
max_allowed_current = 35.999996185302734 (float)
gate_driver:
drv_fault = 0 (int)
timing_log:
TIMING_LOG_GENERAL = 0 (int)
TIMING_LOG_ADC_CB_I = 1237 (int)
TIMING_LOG_ADC_CB_DC = 10965 (int)
TIMING_LOG_MEAS_R = 4677 (int)
TIMING_LOG_MEAS_L = 0 (int)
TIMING_LOG_ENC_CALIB = 0 (int)
TIMING_LOG_IDX_SEARCH = 0 (int)
TIMING_LOG_FOC_VOLTAGE = 4625 (int)
TIMING_LOG_FOC_CURRENT = 0 (int)
config:
pre_calibrated = False (bool)
pole_pairs = 3 (int)
calibration_current = 15.0 (float)
resistance_calib_max_voltage = 4.0 (float)
phase_inductance = 0.0 (float)
phase_resistance = 0.0 (float)
direction = 1 (int)
motor_type = 0 (int)
current_lim = 10.0 (float)
requested_current_range = 25.0 (float)
current_control_bandwidth = 100.0 (float)

Is it likely that the motor or the encoder I choose does not match the odrive 3.5 24v. I am a newcomer in this field. I appreciate all help.

#2

Please use dump_errors(odrv0) and paste it here.

#3

Thanks for your reply. I changed a bigger power supply, these error codes disappeared. But I get a new error code for encoder 0x0002.

In [42]: dump_errors(odrv0)
axis0
axis: Error(s):
ERROR_ENCODER_FAILED
motor: no error
encoder: Error(s):
ERROR_CPR_OUT_OF_RANGE

In [84]: odrv0.axis0.encoder
Out[84]:
error = 0x0002 (int)
is_ready = False (bool)
index_found = True (bool)
shadow_count = 954 (int)
count_in_cpr = 954 (int)
interpolation = 0.5 (float)
phase = 2.9283695220947266 (float)
pos_estimate = 954.8235473632812 (float)
pos_cpr = 954.767578125 (float)
hall_state = 5 (int)
vel_estimate = 0.0 (float)
config:
mode = 0 (int)
use_index = True (bool)
pre_calibrated = False (bool)
idx_search_speed = 10.0 (float)
cpr = 4096 (int)
offset = 0 (int)
offset_float = 0.0 (float)
bandwidth = 1000.0 (float)

I’m using a 90w hall sensor motor and a 1024 resolution encoder. And this motor equipped with a 1:12 reduction gear. I can not figure out what went wrong . I set the encoder.config.cpr =1024*4 = 4096. But I still get the ERROR_CPR_OUT_OF_RANGE. I think , is that odrive not support motor has reduction gearbox? I will be looking forward to your reply.

#4

Does your motor move? Because from your first post I can see that your motor wasn’t calibrated. If your motor does turn on your second post, then my next question is that your encoder is connected to your motor through your gearbox or not?

If your encoder is connected through a 1:12 reduction gear, then you need to take that into account for your CPR-value because your Counts Per Revolution changes.

#5

Where is your encoder mounted? On the output of the gearbox? If so, you need to divide your CPR by the gearbox ratio.