Motor doesn't move

Hello everyone,

I’m using FL80BLS120 motor (48V, 1400RPM, 8 poles, sensored) with Odrive V3.6 (56V version).
Unfortunately, I can’t make the motor spin.
My motor doesn’t calibrate when I send : odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

I tried changing config.resistance_calib_max_voltage and config.calibration_current but it didn’t work.

Also, I can read encoder position with: odrv0.axis0.encoder.pos_estimate
But can’t set position with: odrv0.axis0.controller.input_pos = 5 (5 for instance).

Here’s what dump_errors(odrv0) prints:

system: not found
axis0
  axis: Error(s):
    UNKNOWN ERROR: 0x00000040
  motor: Error(s):
    MOTOR_ERROR_PHASE_RESISTANCE_OUT_OF_RANGE
  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

Here’s what odrv0.axis0 prints:

clear_errors(obj: object_ref)
config:
  calibration_lockin: ...
  can_heartbeat_rate_ms: 100 (uint32)
  can_node_id: 0 (uint32)
  can_node_id_extended: False (bool)
  dir_gpio_pin: 2 (uint16)
  enable_step_dir: False (bool)
  enable_watchdog: False (bool)
  general_lockin: ...
  sensorless_ramp: ...
  startup_closed_loop_control: False (bool)
  startup_encoder_index_search: False (bool)
  startup_encoder_offset_calibration: False (bool)
  startup_homing: False (bool)
  startup_motor_calibration: False (bool)
  startup_sensorless_control: False (bool)
  step_dir_always_on: False (bool)
  step_gpio_pin: 1 (uint16)
  turns_per_step: 0.0009765625 (float)
  watchdog_timeout: 0.0 (float)
controller:
  anticogging_valid: False (bool)
  config: ...
  error: 0 (int32)
  input_pos: 0.0 (float)
  input_torque: 0.0 (float)
  input_vel: 0.0 (float)
  move_incremental(obj: object_ref, displacement: float, from_input_pos: bool)
  pos_setpoint: 0.0 (float)
  start_anticogging_calibration(obj: object_ref)
  torque_setpoint: 0.0 (float)
  trajectory_done: True (bool)
  vel_integrator_torque: 0.0 (float)
  vel_setpoint: 0.0 (float)
current_state: 1 (int32)
encoder:
  calib_scan_response: 0.0 (float)
  config: ...
  count_in_cpr: 8191 (int32)
  error: 0 (int32)
  hall_state: 5 (uint8)
  index_found: False (bool)
  interpolation: 0.5 (float)
  is_ready: False (bool)
  phase: -0.002682924270629883 (float)
  pos_abs: 0 (int32)
  pos_circular: 0.9999065399169922 (float)
  pos_cpr: 0.9999065399169922 (float)
  pos_cpr_counts: 8191.234375 (float)
  pos_estimate: -9.34600830078125e-05 (float)
  pos_estimate_counts: -0.765625 (float)
  set_linear_count(obj: object_ref, count: int32)
  shadow_count: -1 (int32)
  spi_error_rate: 0.0 (float)
  vel_estimate: 0.0 (float)
  vel_estimate_counts: 0.0 (float)
error: 64 (int32)
fet_thermistor:
  config: ...
  error: 0 (int32)
  temperature: 34.724571228027344 (float)
is_homed: False (bool)
lockin_state: 0 (int32)
loop_counter: 2674834 (uint32)
max_endstop:
  config: ...
  endstop_state: False (bool)
min_endstop:
  config: ...
  endstop_state: False (bool)
motor:
  DC_calib_phB: 0.39669981598854065 (float)
  DC_calib_phC: -0.5165843367576599 (float)
  armed_state: 0 (int32)
  config: ...
  current_control: ...
  current_meas_phB: 0.0056268274784088135 (float)
  current_meas_phC: 0.23446762561798096 (float)
  effective_current_lim: 10.0 (float)
  error: 1 (int32)
  gate_driver: ...
  is_calibrated: False (bool)
  phase_current_rev_gain: 0.02500000037252903 (float)
  timing_log: ...
motor_thermistor:
  config: ...
  error: 0 (int32)
  temperature: 0.0 (float)
requested_state: 0 (int32)
sensorless_estimator:
  config: ...
  error: 0 (int32)
  phase: 0.0 (float)
  pll_pos: 0.0 (float)
  vel_estimate: 0.0 (float)
step_dir_active: False (bool)
trap_traj:
  config: ...
watchdog_feed(obj: object_ref)

Thanks for the helpers in advance :slight_smile:

EDIT: I used odrv0.erase_configuration() and retried the calibration.
The motor moved only one way very slowly and stoped.
I rechecked for errors, and now it is this:

system: not found
axis0
  axis: Error(s):
    UNKNOWN ERROR: 0x00000100
  motor: no error
  sensorless_estimator: no error
  encoder: Error(s):
    ENCODER_ERROR_CPR_POLEPAIRS_MISMATCH
  controller: no error
axis1
  axis: no error
  motor: no error
  sensorless_estimator: no error
  encoder: no error
  controller: no error

Ok, so you got past the motor calibration (resistance and inductance check), and now you have a mismatch between the encoder.config.cpr value and the motor.config.pole_pair value. Please double check that these are both correct.