Hello Community
I have been reading around trying to find out what is going on with my setup. I am running a Odrive v3.6-24V with some success but it is just missing that last little bit for it to work in my project. The end goal is stable velocity ripple at 7000 to 7500 RPM before I am able to reach that speed I get a MOTOR_ERROR_CURRENT_LIMIT_VIOLATION. the load is very light and the torque of the motor is more than enough to run at the commanded speed. but I am not able to pass 85 RPS.
Motor info
BLDC
16 amps rated
0.0155 Nm/A
0.25Nm rated torque
24 Vdc
650 Kv
Pole pairs 7
Odrive
hw_version_major = 3 (int)
hw_version_minor = 6 (int)
hw_version_variant = 24 (int)
fw_version_major = 0 (int)
fw_version_minor = 5 (int)
fw_version_revision = 1 (int)
fw_version_unreleased = 1 (int)
Settings
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.resistance_calib_max_voltage = 4
odrv0.axis0.motor.config.requested_current_range = 16
odrv0.axis0.motor.config.torque_constant = 0.0155
odrv0.axis0.motor.config.current_lim = 16
odrv0.axis0.controller.config.vel_gain = 0.05
odrv0.axis0.controller.config.vel_integrator_gain = 0.1
odrv0.axis0.controller.config.vel_limit = 150
odrv0.axis0.controller.config.control_mode = 2
odrv0.axis0.controller.config.input_mode = 2
odrv0.axis0.controller.config.vel_ramp_rate = 4
odrv0.axis0.controller.config.pos_gain = 1
odrv0.axis0.motor.config.direction = 1
odrv0.axis0.config.sensorless_ramp.accel = 200
odrv0.axis0.config.sensorless_ramp.vel = 400
odrv0.axis0.config.sensorless_ramp.current = 4
odrv0.axis0.sensorless_estimator.config.pm_flux_linkage = 0.001271171
odrv0.axis0.motor.config.current_control_bandwidth = 500
odrv0.axis0.encoder.config.bandwidth = 500
Motor calibration
odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION
phase_inductance = 3.111668411293067e-05 (float)
phase_resistance = 0.08896870911121368 (float)
odrv0.axis0.motor.config.pre_calibrated = True
Math
motor.sensorless.pm_flux_linkage = 5.51328895422 / ( * <rpm/v>)
from what I was able to find the MOTOR_ERROR_CURRENT_LIMIT_VIOLATION happens when I_trip = config_.current_lim_tolerance(not sure how current_margin affects thsi since it replaced tolerance) * effective_current_lim(); if (SQ(Id) + SQ(Iq) > SQ(I_trip)). the effective current limit is auto determined from the thermal limits and the Current_lim and requested_current_range. I have increased the current lim and requested current much higher with limited change to when the error happens. in the below two images. the setting above could not exceed 60 RPS but in any of these instances there is a simlar disturbance. is there a setting missed or a reason the current controller is spiking other than that the motor is going from ramping to rapid deceleration from the error.
start_liveplotter(lambda: [odrv0.axis0.sensorless_estimator.vel_estimate])
(I had another image but could only post one if you need other graphed data let me know)
I also have tried adjusting the Bandwidth settings I have found that increasing the current_control_bandwidth higher than default can help a bit but the encoder.config.bandwidth need to stay at or below 1000.
I have also tried halls using the hoverboard example but the stability at around 85 RPS was not great event with the Caps added.
Any help would be great