How to choose motor type?


#1

I have a motor, the phase register is 8 ohm.

I want to drive this motor using odrive34 board, the firmware is newest.

when I set motor_type = MOTOR_TYPE_HIGH_CURRENT, odrive34 report error ERROR_PHASE_RESISTANCE_OUT_OF_RANGE

when I set motor_type = MOTOR_TYPE_GIMBAL, odrive35 report error ERROR_CONTROLLER_FAILED

log info of two case as below:

================
Reconnected to ODrive 2058306A354B as odrv0
In [72]: odrv0.erase_configuration()

In [73]: odrv0.axis0.motor.config.current_lim = 4

In [74]: odrv0.axis0.controller.config.vel_limit = 500

In [75]: odrv0.axis0.motor.config.calibration_current = 4

In [76]: odrv0.config.brake_resistance = 0.47

In [77]: odrv0.axis0.motor.config.pole_pairs = 7

In [78]: odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT

In [79]: odrv0.axis0.encoder.config.cpr = 4096

In [80]: odrv0.save_configuration()

In [81]: odrv0.reboot()
Oh no odrv0 disappeared

ChannelBrokenException Traceback (most recent call last)
/usr/local/lib/python3.5/dist-packages/fibre/shell.py in
----> 1 odrv0.reboot()

/usr/local/lib/python3.5/dist-packages/fibre/remote_object.py in call(self, *args)
160 for i in range(len(args)):
161 self._inputs[i].set_value(args[i])
–> 162 self._parent.channel.remote_endpoint_operation(self._trigger_id, None, True, 0)
163 if len(self._outputs) > 0:
164 return self._outputs[0].get_value()

/usr/local/lib/python3.5/dist-packages/fibre/protocol.py in remote_endpoint_operation(self, endpoint_id, input, expect_ack, output_length)
307 try:
308 if wait_any(self._resend_timeout, ack_event, self._channel_broken) != 0:
–> 309 raise ChannelBrokenException()
310 except TimeoutError:
311 attempt += 1

ChannelBrokenException:

Reconnected to ODrive 2058306A354B as odrv0
In [82]: odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

In [83]: odrv0.axis0.error
Out[83]: 64

=====================

Reconnected to ODrive 2058306A354B as odrv0
In [82]: odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

In [83]: odrv0.axis0.error
Out[83]: 64

In [84]: odrv0.erase_configuration()

In [85]: odrv0.axis0.motor.config.current_lim = 4

In [86]: odrv0.axis0.controller.config.vel_limit = 500

In [87]: odrv0.axis0.motor.config.calibration_current = 4

In [88]: odrv0.config.brake_resistance = 0.47

In [89]: odrv0.axis0.motor.config.pole_pairs = 7

In [90]: odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_GIMBAL

In [91]: odrv0.axis0.encoder.config.cpr = 4096

In [92]: odrv0.save_configuration()

In [93]: odrv0.reboot()
Oh no odrv0 disappeared

ChannelBrokenException Traceback (most recent call last)
/usr/local/lib/python3.5/dist-packages/fibre/shell.py in
----> 1 odrv0.reboot()

/usr/local/lib/python3.5/dist-packages/fibre/remote_object.py in call(self, *args)
160 for i in range(len(args)):
161 self._inputs[i].set_value(args[i])
–> 162 self._parent.channel.remote_endpoint_operation(self._trigger_id, None, True, 0)
163 if len(self._outputs) > 0:
164 return self._outputs[0].get_value()

/usr/local/lib/python3.5/dist-packages/fibre/protocol.py in remote_endpoint_operation(self, endpoint_id, input, expect_ack, output_length)
307 try:
308 if wait_any(self._resend_timeout, ack_event, self._channel_broken) != 0:
–> 309 raise ChannelBrokenException()
310 except TimeoutError:
311 attempt += 1

ChannelBrokenException:

Reconnected to ODrive 2058306A354B as odrv0
In [94]: odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

In [95]: odrv0.axis0.error
Out[95]: 0

In [96]: odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

In [97]: odrv0.axis0.error
Out[97]: 0

In [98]: odrv0.axis0.controller.pos_setpoint = 1000

In [99]: odrv0.axis0.error
Out[99]: 512


#2

That’s definitely a high resistance motor intended for GIMBAL mode. But I don’t actually know how to configure motors for this mode, sorry :frowning: