Increasing input torque setting doesn't translate to more torque, and drive doesn't error

I have a hover-board motor mounted on a long lever arm and as I increase the requested torque I continue seeing increased force at the end of a level arm, but then when it reaches a certain torque I stop being able to measure increased torque. I input higher values but the measured torque stays the same. Dumping errors produces nothing, and I can decrease the torque again and the motor will respond correctly.

I have hover-board motors mounted in different orientations that error out at higher requested torques, (DC bus under-voltage/ current limit violation) the way I expect them to, does anyone have any idea why I would be having issues like this?

There’s a couple possibilities: either your current_limit / temperature / something else is clamping the max torque, or you’re just hitting magnetic saturation.

1 Like

It was the current_limit.
for anyone else looking the setting is odrv0.axis0.motor.config.current_lim.

I’m encountering the same issue again, but can’t use this solution anymore. Using live plotter I can see the measured_iq get to 5amps but then refuses to go higher and doesn’t error.

The effective current limit is 60
The mootor.current_control.max_allowed_current is 121.5
motor.config.current_lim is 60

The fact that it cuts off at a number seems like it’s some setting but I can’t imagine what it is. Does anybody know?

You might be reaching the velocity limit:
odrv0.axis0.controller.config.vel_limit

That’s a good guess @Kakskiv but I’m running the motor at stall.

It is strange that measured_iq would be limited to 5 amps exactly. Besides the current limit, current is also limited by motor.config.torque_lim. By default it is infinity, but maybe it was set by mistake during a firmware update or config backup?

That’s a good guess but I checked and that’s still infinity as well. I’ll paste some of my settings in a bit.

What is the resistance of your motor and what voltage are you using?

You may check axis.controller.config.enable_current_mode_vel_limit , set False may working

@Wetmelon I’m using a 56V board at 48volts, and this motor (48V, 565Watt, 3000RPM). The phase resistance is .29

@ruijf I tested with and without enabling the vel limit, neither worked.

here are the motor values:
error = 0x0000 (int)
armed_state = 0 (int)
is_calibrated = False (bool)
current_meas_phB = 0.08351004123687744 (float)
current_meas_phC = 0.10324990749359131 (float)
DC_calib_phB = -0.92967289686203 (float)
DC_calib_phC = -1.110230565071106 (float)
phase_current_rev_gain = 0.02500000037252903 (float)
effective_current_lim = 10.0 (float)
current_control:
p_gain = 0.0 (float)
i_gain = nan (float)
v_current_control_integral_d = 0.0 (float)
v_current_control_integral_q = 0.0 (float)
Ibus = 0.0 (float)
final_v_alpha = 0.0 (float)
final_v_beta = 0.0 (float)
Id_setpoint = 0.0 (float)
Iq_setpoint = 0.0 (float)
Iq_measured = 0.0 (float)
Id_measured = 0.0 (float)
I_measured_report_filter_k = 1.0 (float)
max_allowed_current = 60.75 (float)
overcurrent_trip_level = 67.5 (float)
acim_rotor_flux = 0.0 (float)
async_phase_vel = 0.0 (float)
async_phase_offset = 0.0 (float)
gate_driver:
drv_fault = 0 (int)
timing_log:
general = 55278 (int)
adc_cb_i = 2722 (int)
adc_cb_dc = 12846 (int)
meas_r = 19594 (int)
meas_l = 64502 (int)
enc_calib = 30714 (int)
idx_search = 11149 (int)
foc_voltage = 19178 (int)
foc_current = 61354 (int)
spi_start = 63599 (int)
sample_now = 40583 (int)
spi_end = 39950 (int)
config:
pre_calibrated = False (bool)
pole_pairs = 7 (int)
calibration_current = 10.0 (float)
resistance_calib_max_voltage = 2.0 (float)
phase_inductance = 0.0 (float)
phase_resistance = 0.0 (float)
torque_constant = 0.03999999910593033 (float)
direction = 0 (int)
motor_type = 0 (int)
current_lim = 10.0 (float)
current_lim_margin = 8.0 (float)
torque_lim = inf (float)
inverter_temp_limit_lower = 100.0 (float)
inverter_temp_limit_upper = 120.0 (float)
requested_current_range = 60.0 (float)
current_control_bandwidth = 1000.0 (float)
acim_slip_velocity = 14.706000328063965 (float)
acim_gain_min_flux = 10.0 (float)
acim_autoflux_min_Id = 10.0 (float)
acim_autoflux_enable = False (bool)
acim_autoflux_attack_gain = 10.0 (float)
acim_autoflux_decay_gain = 1.0 (float)

Your current limit is back to 10A?

Oh yeah, I ended up re-flashing my board trying to solve connection issues.

1 Like