UART calibration not working

Hey all,

I’ve got 2x odrives on my robot running @24V. I’m communicating to both with a teensy 4 over 2 separate serial uart.

1x odrive is v3.5 @ 24v running 0.5.2 firmware
1x odrive is v3.6 @ 56v running 0.5.4 firmware

V3.5 works great I can calibrate and control it over serial.

V3.6 doesn’t work so well. Using the example sketch I am able to read vbus and read both encoders. But when I send it a calibrate command it does nothing. Note it all works fine in python.

Is there some setting on 0.5.4 firmware that I need to change. Please let me know if you have any advice.

I don’t recall having to do anything special to run my two odrives from esp32 (56V version 3.6 FW 0.5.4). Sometimes one axis of the four might not calibrate, so I just retry. Not sure why. Here’s my setup. Maybe you’ll see something useful.

{
  "axis0": {
    "acim_estimator": {
      "config": {
        "slip_velocity": 14.706000328063965
      }
    },
    "config": {
      "dir_gpio_pin": 2,
      "enable_sensorless_mode": false,
      "enable_step_dir": false,
      "enable_watchdog": false,
      "startup_closed_loop_control": false,
      "startup_encoder_index_search": false,
      "startup_encoder_offset_calibration": false,
      "startup_homing": false,
      "startup_motor_calibration": false,
      "step_dir_always_on": false,
      "step_gpio_pin": 1,
      "watchdog_timeout": 1.0,
      "calibration_lockin": {
        "accel": 20.0,
        "current": 10.0,
        "ramp_distance": 3.1415927410125732,
        "ramp_time": 0.4000000059604645,
        "vel": 40.0
      },
      "can": {
        "encoder_rate_ms": 10,
        "heartbeat_rate_ms": 100,
        "is_extended": false,
        "node_id": 1
      },
      "general_lockin": {
        "accel": 20.0,
        "current": 10.0,
        "finish_distance": 100.0,
        "finish_on_distance": false,
        "finish_on_enc_idx": false,
        "finish_on_vel": false,
        "ramp_distance": 3.1415927410125732,
        "ramp_time": 0.4000000059604645,
        "vel": 40.0
      },
      "sensorless_ramp": {
        "accel": 200.0,
        "current": 10.0,
        "finish_distance": 100.0,
        "finish_on_distance": false,
        "finish_on_enc_idx": false,
        "finish_on_vel": true,
        "ramp_distance": 3.1415927410125732,
        "ramp_time": 0.4000000059604645,
        "vel": 400.0
      }
    },
    "controller": {
      "config": {
        "axis_to_mirror": 255,
        "circular_setpoint_range": 1.0,
        "circular_setpoints": false,
        "control_mode": 2,
        "electrical_power_bandwidth": 20.0,
        "enable_gain_scheduling": false,
        "enable_overspeed_error": true,
        "enable_torque_mode_vel_limit": true,
        "enable_vel_limit": true,
        "gain_scheduling_width": 10.0,
        "homing_speed": 0.25,
        "inertia": 0.0,
        "input_filter_bandwidth": 2.0,
        "input_mode": 2,
        "load_encoder_axis": 0,
        "mechanical_power_bandwidth": 20.0,
        "mirror_ratio": 1.0,
        "pos_gain": 20.0,
        "spinout_electrical_power_threshold": 10.0,
        "spinout_mechanical_power_threshold": -10.0,
        "steps_per_circular_range": 1024,
        "torque_mirror_ratio": 0.0,
        "torque_ramp_rate": 0.009999999776482582,
        "vel_gain": 0.1666666716337204,
        "vel_integrator_gain": 0.3333333432674408,
        "vel_integrator_limit": Infinity,
        "vel_limit": 25.0,
        "vel_limit_tolerance": 1.2000000476837158,
        "vel_ramp_rate": 50.0,
        "anticogging": {
          "anticogging_enabled": true,
          "calib_anticogging": false,
          "calib_pos_threshold": 1.0,
          "calib_vel_threshold": 1.0,
          "cogging_ratio": 1.0,
          "index": 0,
          "pre_calibrated": false
        }
      }
    },
    "encoder": {
      "config": {
        "abs_spi_cs_gpio_pin": 1,
        "bandwidth": 1000.0,
        "calib_range": 0.019999999552965164,
        "calib_scan_distance": 50.26548385620117,
        "calib_scan_omega": 12.566370964050293,
        "cpr": 8192,
        "direction": 1,
        "enable_phase_interpolation": true,
        "find_idx_on_lockin_only": false,
        "hall_polarity_calibrated": false,
        "hall_polarity": 0,
        "ignore_illegal_hall_state": false,
        "index_offset": 0.0,
        "mode": 0,
        "phase_offset_float": 1.4437429904937744,
        "phase_offset": 4526,
        "pre_calibrated": false,
        "sincos_gpio_pin_cos": 4,
        "sincos_gpio_pin_sin": 3,
        "use_index_offset": true,
        "use_index": false
      }
    },
    "max_endstop": {
      "config": {
        "debounce_ms": 50,
        "enabled": false,
        "gpio_num": 0,
        "is_active_high": false,
        "offset": 0.0
      }
    },
    "mechanical_brake": {
      "config": {
        "gpio_num": 0,
        "is_active_low": true
      }
    },
    "min_endstop": {
      "config": {
        "debounce_ms": 50,
        "enabled": false,
        "gpio_num": 0,
        "is_active_high": false,
        "offset": 0.0
      }
    },
    "motor": {
      "config": {
        "I_bus_hard_max": Infinity,
        "I_bus_hard_min": -Infinity,
        "I_leak_max": 0.10000000149011612,
        "R_wL_FF_enable": false,
        "acim_autoflux_attack_gain": 10.0,
        "acim_autoflux_decay_gain": 1.0,
        "acim_autoflux_enable": false,
        "acim_autoflux_min_Id": 10.0,
        "acim_gain_min_flux": 10.0,
        "bEMF_FF_enable": false,
        "calibration_current": 10.0,
        "current_control_bandwidth": 1000.0,
        "current_lim_margin": 8.0,
        "current_lim": 50.0,
        "dc_calib_tau": 0.20000000298023224,
        "inverter_temp_limit_lower": 100.0,
        "inverter_temp_limit_upper": 120.0,
        "motor_type": 0,
        "phase_inductance": 1.550403430883307e-05,
        "phase_resistance": 0.0001250000059371814,
        "pole_pairs": 7,
        "pre_calibrated": false,
        "requested_current_range": 60.0,
        "resistance_calib_max_voltage": 2.0,
        "torque_constant": 0.03999999910593033,
        "torque_lim": Infinity
      },
      "fet_thermistor": {
        "config": {
          "enabled": true,
          "temp_limit_lower": 100.0,
          "temp_limit_upper": 120.0
        }
      },
      "motor_thermistor": {
        "config": {
          "enabled": false,
          "gpio_pin": 4,
          "poly_coefficient_0": 0.0,
          "poly_coefficient_1": 0.0,
          "poly_coefficient_2": 0.0,
          "poly_coefficient_3": 0.0,
          "temp_limit_lower": 100.0,
          "temp_limit_upper": 120.0
        }
      }
    },
    "sensorless_estimator": {
      "config": {
        "observer_gain": 1000.0,
        "pll_bandwidth": 1000.0,
        "pm_flux_linkage": 0.0015800000401213765
      }
    },
    "trap_traj": {
      "config": {
        "accel_limit": 0.5,
        "decel_limit": 0.5,
        "vel_limit": 2.0
      }
    }
  },
  "axis1": {
    "acim_estimator": {
      "config": {
        "slip_velocity": 14.706000328063965
      }
    },
    "config": {
      "dir_gpio_pin": 8,
      "enable_sensorless_mode": false,
      "enable_step_dir": false,
      "enable_watchdog": false,
      "startup_closed_loop_control": false,
      "startup_encoder_index_search": false,
      "startup_encoder_offset_calibration": false,
      "startup_homing": false,
      "startup_motor_calibration": false,
      "step_dir_always_on": false,
      "step_gpio_pin": 7,
      "watchdog_timeout": 1.0,
      "calibration_lockin": {
        "accel": 20.0,
        "current": 10.0,
        "ramp_distance": 3.1415927410125732,
        "ramp_time": 0.4000000059604645,
        "vel": 40.0
      },
      "can": {
        "encoder_rate_ms": 10,
        "heartbeat_rate_ms": 100,
        "is_extended": false,
        "node_id": 2
      },
      "general_lockin": {
        "accel": 20.0,
        "current": 10.0,
        "finish_distance": 100.0,
        "finish_on_distance": false,
        "finish_on_enc_idx": false,
        "finish_on_vel": false,
        "ramp_distance": 3.1415927410125732,
        "ramp_time": 0.4000000059604645,
        "vel": 40.0
      },
      "sensorless_ramp": {
        "accel": 200.0,
        "current": 10.0,
        "finish_distance": 100.0,
        "finish_on_distance": false,
        "finish_on_enc_idx": false,
        "finish_on_vel": true,
        "ramp_distance": 3.1415927410125732,
        "ramp_time": 0.4000000059604645,
        "vel": 400.0
      }
    },
    "controller": {
      "config": {
        "axis_to_mirror": 255,
        "circular_setpoint_range": 1.0,
        "circular_setpoints": false,
        "control_mode": 2,
        "electrical_power_bandwidth": 20.0,
        "enable_gain_scheduling": false,
        "enable_overspeed_error": true,
        "enable_torque_mode_vel_limit": true,
        "enable_vel_limit": true,
        "gain_scheduling_width": 10.0,
        "homing_speed": 0.25,
        "inertia": 0.0,
        "input_filter_bandwidth": 2.0,
        "input_mode": 2,
        "load_encoder_axis": 1,
        "mechanical_power_bandwidth": 20.0,
        "mirror_ratio": 1.0,
        "pos_gain": 20.0,
        "spinout_electrical_power_threshold": 10.0,
        "spinout_mechanical_power_threshold": -10.0,
        "steps_per_circular_range": 1024,
        "torque_mirror_ratio": 0.0,
        "torque_ramp_rate": 0.009999999776482582,
        "vel_gain": 0.1666666716337204,
        "vel_integrator_gain": 0.3333333432674408,
        "vel_integrator_limit": Infinity,
        "vel_limit": 25.0,
        "vel_limit_tolerance": 1.2000000476837158,
        "vel_ramp_rate": 50.0,
        "anticogging": {
          "anticogging_enabled": true,
          "calib_anticogging": false,
          "calib_pos_threshold": 1.0,
          "calib_vel_threshold": 1.0,
          "cogging_ratio": 1.0,
          "index": 0,
          "pre_calibrated": false
        }
      }
    },
    "encoder": {
      "config": {
        "abs_spi_cs_gpio_pin": 1,
        "bandwidth": 1000.0,
        "calib_range": 0.019999999552965164,
        "calib_scan_distance": 50.26548385620117,
        "calib_scan_omega": 12.566370964050293,
        "cpr": 8192,
        "direction": 1,
        "enable_phase_interpolation": true,
        "find_idx_on_lockin_only": false,
        "hall_polarity_calibrated": false,
        "hall_polarity": 0,
        "ignore_illegal_hall_state": false,
        "index_offset": 0.0,
        "mode": 0,
        "phase_offset_float": 0.6572696566581726,
        "phase_offset": 4539,
        "pre_calibrated": false,
        "sincos_gpio_pin_cos": 4,
        "sincos_gpio_pin_sin": 3,
        "use_index_offset": true,
        "use_index": false
      }
    },
    "max_endstop": {
      "config": {
        "debounce_ms": 50,
        "enabled": false,
        "gpio_num": 0,
        "is_active_high": false,
        "offset": 0.0
      }
    },
    "mechanical_brake": {
      "config": {
        "gpio_num": 0,
        "is_active_low": true
      }
    },
    "min_endstop": {
      "config": {
        "debounce_ms": 50,
        "enabled": false,
        "gpio_num": 0,
        "is_active_high": false,
        "offset": 0.0
      }
    },
    "motor": {
      "config": {
        "I_bus_hard_max": Infinity,
        "I_bus_hard_min": -Infinity,
        "I_leak_max": 0.10000000149011612,
        "R_wL_FF_enable": false,
        "acim_autoflux_attack_gain": 10.0,
        "acim_autoflux_decay_gain": 1.0,
        "acim_autoflux_enable": false,
        "acim_autoflux_min_Id": 10.0,
        "acim_gain_min_flux": 10.0,
        "bEMF_FF_enable": false,
        "calibration_current": 10.0,
        "current_control_bandwidth": 1000.0,
        "current_lim_margin": 8.0,
        "current_lim": 50.0,
        "dc_calib_tau": 0.20000000298023224,
        "inverter_temp_limit_lower": 100.0,
        "inverter_temp_limit_upper": 120.0,
        "motor_type": 0,
        "phase_inductance": 1.4669668416900095e-05,
        "phase_resistance": 0.0520918145775795,
        "pole_pairs": 7,
        "pre_calibrated": false,
        "requested_current_range": 60.0,
        "resistance_calib_max_voltage": 2.0,
        "torque_constant": 0.03999999910593033,
        "torque_lim": Infinity
      },
      "fet_thermistor": {
        "config": {
          "enabled": true,
          "temp_limit_lower": 100.0,
          "temp_limit_upper": 120.0
        }
      },
      "motor_thermistor": {
        "config": {
          "enabled": false,
          "gpio_pin": 4,
          "poly_coefficient_0": 0.0,
          "poly_coefficient_1": 0.0,
          "poly_coefficient_2": 0.0,
          "poly_coefficient_3": 0.0,
          "temp_limit_lower": 100.0,
          "temp_limit_upper": 120.0
        }
      }
    },
    "sensorless_estimator": {
      "config": {
        "observer_gain": 1000.0,
        "pll_bandwidth": 1000.0,
        "pm_flux_linkage": 0.0015800000401213765
      }
    },
    "trap_traj": {
      "config": {
        "accel_limit": 0.5,
        "decel_limit": 0.5,
        "vel_limit": 2.0
      }
    }
  },
  "can": {
    "config": {
      "baud_rate": 250000,
      "protocol": 1
    }
  },
  "config": {
    "brake_resistance": 2.0,
    "dc_bus_overvoltage_ramp_end": 59.92000198364258,
    "dc_bus_overvoltage_ramp_start": 59.92000198364258,
    "dc_bus_overvoltage_trip_level": 59.92000198364258,
    "dc_bus_undervoltage_trip_level": 8.0,
    "dc_max_negative_current": -5.0,
    "dc_max_positive_current": Infinity,
    "enable_brake_resistor": false,
    "enable_can_a": true,
    "enable_dc_bus_overvoltage_ramp": false,
    "enable_i2c_a": false,
    "enable_uart_a": true,
    "enable_uart_b": false,
    "enable_uart_c": false,
    "error_gpio_pin": 0,
    "gpio10_mode": 11,
    "gpio11_mode": 2,
    "gpio12_mode": 12,
    "gpio13_mode": 12,
    "gpio14_mode": 2,
    "gpio15_mode": 7,
    "gpio16_mode": 7,
    "gpio1_mode": 4,
    "gpio2_mode": 4,
    "gpio3_mode": 3,
    "gpio4_mode": 3,
    "gpio5_mode": 3,
    "gpio6_mode": 0,
    "gpio7_mode": 0,
    "gpio8_mode": 0,
    "gpio9_mode": 11,
    "max_regen_current": 0.0,
    "uart0_protocol": 3,
    "uart1_protocol": 3,
    "uart2_protocol": 3,
    "uart_a_baudrate": 115200,
    "uart_b_baudrate": 115200,
    "uart_c_baudrate": 115200,
    "usb_cdc_protocol": 3,
    "gpio1_pwm_mapping": {
      "endpoint": null,
      "max": 0.0,
      "min": 0.0
    },
    "gpio2_pwm_mapping": {
      "endpoint": null,
      "max": 0.0,
      "min": 0.0
    },
    "gpio3_analog_mapping": {
      "endpoint": null,
      "max": 0.0,
      "min": 0.0
    },
    "gpio3_pwm_mapping": {
      "endpoint": null,
      "max": 0.0,
      "min": 0.0
    },
    "gpio4_analog_mapping": {
      "endpoint": null,
      "max": 0.0,
      "min": 0.0
    },
    "gpio4_pwm_mapping": {
      "endpoint": null,
      "max": 0.0,
      "min": 0.0
    }
  }
}
1 Like

Please check your errors dump_errors(odrv0) and get back to us

Hey @BenM and @Wetmelon . Thank you both so much for taking the time to look at my issue. Your profile helped me a lot @BenM. I

@Wetmelon I checked dump. It has no recorded errors at all.

It turned out to be my fault. Im not sure how but I must have flashed the wrong firmware on it. After reflashing the 0.5.4 firmware the Uart started working as expected.

Thank you both for your help

1 Like