I am currently trying to get a NEO Motor to move using the ODrive. I was able to calibrate the motor and its internal hall effect encoder without any issues. Using the PID values from the hoverboard example as a starting point I was able to set velocity from 0-30RPS with no issues. The problem occurred when I tried to go to 0-40RPS I got an overcurrent limit error. I figured this was because the vel gain was too high and or the integrator vel gain. So following the PID tuning example, I removed the integrator gain and decreased the vel_gain. This worked pretty well and I was able to get to 0-70RPS without error.
I plotted it with the following command
start_liveplotter(lambda: [
odrv0.axis0.controller.vel_setpoint,
odrv0.axis0.encoder.vel_estimate,
odrv0.axis0.motor.current_control.Iq_setpoint,
odrv0.axis0.motor.current_control.Iq_measured])
This all works fine but I run into issues when I try to go from 0-80RPS which I have attached a graph of here.
For some reason, the OVER_CURRENT_LIMIT is triggered at 80RPS. The specs of the motor are 473RPM KV. My system is running at 24 volts. Theoretically, the motor is capable of 189RPS. Also in my graph I dont see the target current going anywhere near my max of 60 amps. I have attached my motor configuration below.
odrv0.axis0.motor.config.current_lim = 60
odrv0.axis0.motor.config.requested_current_range = 90
odrv0.axis0.controller.config.vel_limit = 100
odrv0.config.brake_resistance = 0
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.torque_constant = 8.27 / 7.88333333333
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.resistance_calib_max_voltage = 4
odrv0.axis0.motor.config.current_control_bandwidth = 100
odrv0.config.dc_max_negative_current = -15
odrv0.config.max_regen_current = 15
odrv0.save_configuration()
odrv0.reboot()
odrv0.axis0.encoder.config.cpr = 42
odrv0.axis0.encoder.config.use_index = False
odrv0.axis0.encoder.config.mode = ENCODER_MODE_HALL
odrv0.axis0.encoder.config.bandwidth = 100
odrv0.axis0.controller.config.pos_gain = 1
odrv0.axis0.controller.config.vel_gain = 0.01 * odrv0.axis0.motor.config.torque_constant * odrv0.axis0.encoder.config.cpr
odrv0.axis0.controller.config.vel_integrator_gain = 0 * odrv0.axis0.motor.config.torque_constant * odrv0.axis0.encoder.config.cpr
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
odrv0.save_configuration()
odrv0.reboot()
The motor is also making weird noises that can best be described as a crunchy whining sound. When controlling the motor with Spark Max motor controller it was designed for I have no such sound.