Struggling with current sense saturation

I’m trying to use an odrive with a large tracked robot with a motor going through a 7:1 gear reduction. I’ve run through all of the calibration and can get decent step responses.


The problem comes from the CURRENT_SENSE_SATURATION error which is extremely common but unpredictable. I’ve looked through the firmware and think it’s the overcurrent_trip_level, but i could be wrong. I’m not really sure how to fix this problem, I tried increasing the requested current range up to 80 but that didn’t remove the problem. Would any of you guys know what could be causing this problem?

You may also notice from the image, the ringing when set back to zero, this is intermittent and only sometimes happens.
MOTOR
error = 0x0000 (int)
armed_state = 0 (int)
is_calibrated = True (bool)
current_meas_phB = 0.10042071342468262 (float)
current_meas_phC = 0.011764422059059143 (float)
DC_calib_phB = -1.0067063570022583 (float)
DC_calib_phC = -0.13252611458301544 (float)
phase_current_rev_gain = 0.012500000186264515 (float)
thermal_current_lim = 166.53347778320312 (float)
get_inverter_temp()
current_control:
p_gain = 0.022428356111049652 (float)
i_gain = 7.443442344665527 (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)
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 = 30.375 (float)
overcurrent_trip_level = 33.75 (float)
gate_driver:
drv_fault = 0 (int)
timing_log:
TIMING_LOG_GENERAL = 0 (int)
TIMING_LOG_ADC_CB_I = 2438 (int)
TIMING_LOG_ADC_CB_DC = 12862 (int)
TIMING_LOG_MEAS_R = 0 (int)
TIMING_LOG_MEAS_L = 0 (int)
TIMING_LOG_ENC_CALIB = 0 (int)
TIMING_LOG_IDX_SEARCH = 0 (int)
TIMING_LOG_FOC_VOLTAGE = 0 (int)
TIMING_LOG_FOC_CURRENT = 0 (int)
config:
pre_calibrated = True (bool)
pole_pairs = 15 (int)
calibration_current = 40.0 (float)
resistance_calib_max_voltage = 6.0 (float)
phase_inductance = 0.00022428356169257313 (float)
phase_resistance = 0.07443442195653915 (float)
direction = 1 (int)
motor_type = 0 (int)
current_lim = 40.0 (float)
current_lim_tolerance = 5.0 (float)
inverter_temp_limit_lower = 100.0 (float)
inverter_temp_limit_upper = 120.0 (float)
requested_current_range = 25.0 (float)
current_control_bandwidth = 100.0 (float)
CONTROLLER
error = 0x0000 (int)
pos_setpoint = 0.0 (float)
vel_setpoint = 0.0 (float)
vel_integrator_current = 0.0 (float)
current_setpoint = 0.0 (float)
vel_ramp_target = 0.0 (float)
vel_ramp_enable = False (bool)
config:
control_mode = 2 (int)
pos_gain = 1.0 (float)
vel_gain = 1.0 (float)
vel_integrator_gain = 0.10000000149011612 (float)
vel_limit = 1000.0 (float)
vel_limit_tolerance = 1.2000000476837158 (float)
vel_ramp_rate = 1000.0 (float)
setpoints_in_cpr = False (bool)
set_pos_setpoint(pos_setpoint: float, vel_feed_forward: float, current_feed_forward: float)
set_vel_setpoint(vel_setpoint: float, current_feed_forward: float)
set_current_setpoint(current_setpoint: float)
move_to_pos(pos_setpoint: float)
move_incremental(displacement: float, from_goal_point: bool)
start_anticogging_calibration()

What did you graph there? Velocity? How is your encoder mounted?

Apologies, the graph is requested speed against measured speed. For this application, there isn’t an encoder, it’s driving based off of the hall effect sensors. I set that up following the tutorial for the hoverboard motors.