Configure Neo 550 motor

We are trying to configure a Neo 550 to an Odrive S1 Motor controller for the purpose of autonomous steering.

I am currently having trouble calibrating it on the Web GUI. More specifically, I am running into PHASE_RESISTANCE_OUT_OF_RANGE error. When I checked for the odrv0.axis0.config.motor.phase_inductance and odrv0.axis0.config.motor.phase_resistance on the ODrive tool I got zero values for both. I already checked for the following two conditions:

config.motor.resistance_calib_max_voltage > calibration_current * phase_resistance
config.motor.resistance_calib_max_voltage < 0.5 * vbus_voltage

I might not have configured the pole pairs correctly and I didn’t set up the brake resistor yet.

Hi there - looks like you sent an email about this as well, would you like to keep discussion here or over email? Whatever works best for you!

Hi, sorry I didn’t get your email. We can continue the discussion here so that other people can see it.

Right now I have:
odrv.axis0.config.motor.resistance_calib_max_voltage = 12
odrv.axis0.config.motor.calibration_current = 12

Here’s the entire script if you want to look at it:
odrv = odrv0
odrv.config.dc_bus_overvoltage_trip_level = 24
odrv.config.dc_bus_undervoltage_trip_level = 10.5
odrv.config.dc_max_positive_current = 14
odrv.config.dc_max_negative_current = -0.01
odrv.axis0.config.motor.motor_type = MotorType.HIGH_CURRENT
odrv.axis0.config.motor.torque_constant = 0.009018538713195202
odrv.axis0.config.motor.pole_pairs = 7
odrv.axis0.config.motor.current_soft_max = 24
odrv.axis0.config.motor.current_hard_max = 41.2
odrv.axis0.config.motor.calibration_current = 12
odrv.axis0.config.motor.resistance_calib_max_voltage = 12
odrv.axis0.config.calibration_lockin.current = 50
odrv.axis0.controller.config.input_mode = InputMode.PASSTHROUGH
odrv.axis0.controller.config.control_mode = ControlMode.POSITION_CONTROL
odrv.axis0.controller.config.vel_limit = 10
odrv.axis0.controller.config.vel_limit_tolerance = 1.2
odrv.axis0.config.torque_soft_min = -0.97
odrv.axis0.config.torque_soft_max = 0.97
odrv.can.config.protocol = Protocol.NONE
odrv.config.enable_uart_a = False
odrv.rs485_encoder_group0.config.mode = Rs485EncoderMode.ODRIVE_OA1
odrv.axis0.config.load_encoder = EncoderId.RS485_ENCODER0
odrv.axis0.config.commutation_encoder = EncoderId.RS485_ENCODER0

Connected to ODrive S1 3950357D3231 (firmware v0.6.9) as odrv0

This is what I’m getting on odrivetool:
In [1]: odrv0.axis0.config.motor.phase_inductance

Out[1]: 0.0

In [2]: odrv0.axis0.config.motor.phase_resistance

Out[2]: 0.037325840443372726

If I press erase and reboot before calibrating, it turns the encoder off and the motor spins with the No_Reponse error popping up. However, when I get the encoder in range and calibrate after applying and saving the configuration, I run into the phase induction error.

Some thoughts:

  • Your resistance calib max voltage is quite high, this is also used for inductance calibration (it could use a better name…) – can you try lowering this to 2V?
  • Your calibration lockin current is quite high - are you calibrating with a significant load on the motor? I’d recommend lowering this to 20A if possible.
  • You say “get the encoder in range” - how is the encoder mounted to the motor? It’s important that the encoder’s mounting is rigid and fixed throughout calibration and doesn’t change afterwards, since a consistent encoder to motor angle correlation is essential to calibration and operation.

Thank you! Those tips helped pass calibration. And sorry for the confusion, the encoder is mounted via a bracket and is lighting green. However, the magnet is the perfectly centered on the motor and is moving a little. But the distance from the magnet is constant.

After calibration, I am running into the DC_BUS_OVER_REGEN_CURRENT when I try to use position or velocity control. I am planning on hooking up the brake resistor to see if that fixes the problem.

Glad to hear things are working out!

Yes, the brake resistor should solve the over regen issue :slight_smile: