Sudden motor current spike on deceleration or reversal, sensorless T500 (ODrive Pro 0.6.10)

Configuration:

axis0.active_errors = 16777216
axis0.commutation_mapper.config.approx_init_pos = 0.000000
axis0.commutation_mapper.config.approx_init_pos_valid = false
axis0.commutation_mapper.config.circular = true
axis0.commutation_mapper.config.circular_output_range = 1.000000
axis0.commutation_mapper.config.index_gpio = 7
axis0.commutation_mapper.config.index_offset = 0.000000
axis0.commutation_mapper.config.index_offset_valid = false
axis0.commutation_mapper.config.offset = 0.000000
axis0.commutation_mapper.config.offset_valid = true
axis0.commutation_mapper.config.passive_index_search = false
axis0.commutation_mapper.config.scale = 1.000000
axis0.commutation_mapper.config.use_endstop = false
axis0.commutation_mapper.config.use_index_gpio = false
axis0.commutation_mapper.n_index_events = 0
axis0.commutation_mapper.pos_abs = 0.000000
axis0.commutation_mapper.pos_rel = 0.000000
axis0.commutation_mapper.status = 0
axis0.commutation_mapper.vel = 0.000000
axis0.commutation_mapper.working_offset = 0.000000
axis0.config.I_bus_hard_max = inf
axis0.config.I_bus_hard_min = -inf
axis0.config.I_bus_soft_max = inf
axis0.config.I_bus_soft_min = -inf
axis0.config.P_bus_soft_max = inf
axis0.config.P_bus_soft_min = -inf
axis0.config.anticogging.calib_bidirectional = true
axis0.config.anticogging.calib_coarse_integrator_gain = 10.000000
axis0.config.anticogging.calib_coarse_tuning_duration = 60.000000
axis0.config.anticogging.calib_end_vel = 0.150000
axis0.config.anticogging.calib_fine_dist_scale = 1.000000
axis0.config.anticogging.calib_fine_tuning_duration = 120.000000
axis0.config.anticogging.calib_start_vel = 1.000000
axis0.config.anticogging.enabled = false
axis0.config.anticogging.max_torque = 0.150000
axis0.config.calib_range = 0.020000
axis0.config.calib_scan_distance = 8.000000
axis0.config.calib_scan_vel = 2.000000
axis0.config.calibration_lockin.accel = 3.183099
axis0.config.calibration_lockin.current = 10.000000
axis0.config.calibration_lockin.ramp_distance = 0.500000
axis0.config.calibration_lockin.ramp_time = 0.400000
axis0.config.calibration_lockin.vel = 6.366198
axis0.config.can.bus_voltage_msg_rate_ms = 50
axis0.config.can.encoder_msg_rate_ms = 50
axis0.config.can.error_msg_rate_ms = 50
axis0.config.can.heartbeat_msg_rate_ms = 100
axis0.config.can.input_torque_scale = 1000
axis0.config.can.input_vel_scale = 1000
axis0.config.can.iq_msg_rate_ms = 50
axis0.config.can.node_id = 1
axis0.config.can.powers_msg_rate_ms = 0
axis0.config.can.temperature_msg_rate_ms = 50
axis0.config.can.torques_msg_rate_ms = 50
axis0.config.can.version_msg_rate_ms = 0
axis0.config.commutation_encoder = 4
axis0.config.commutation_encoder_bandwidth = nan
axis0.config.dir_gpio_pin = unknown_type
axis0.config.enable_error_gpio = false
axis0.config.enable_step_dir = false
axis0.config.enable_watchdog = true
axis0.config.encoder_bandwidth = 1000.000000
axis0.config.error_gpio_pin = unknown_type
axis0.config.general_lockin.accel = 20.000000
axis0.config.general_lockin.current = 10.000000
axis0.config.general_lockin.finish_distance = 100.000000
axis0.config.general_lockin.finish_on_distance = false
axis0.config.general_lockin.finish_on_vel = false
axis0.config.general_lockin.initial_pos = 0.000000
axis0.config.general_lockin.ramp_distance = 3.141593
axis0.config.general_lockin.ramp_time = 0.400000
axis0.config.general_lockin.vel = 40.000000
axis0.config.index_search_at_target_vel_only = false
axis0.config.init_pos = nan
axis0.config.init_torque = 0.000000
axis0.config.init_vel = 0.000000
axis0.config.load_encoder = 4
axis0.config.motor.acim_autoflux_attack_gain = 10.000000
axis0.config.motor.acim_autoflux_decay_gain = 1.000000
axis0.config.motor.acim_autoflux_enable = false
axis0.config.motor.acim_autoflux_min_Id = 10.000000
axis0.config.motor.acim_gain_min_flux = 10.000000
axis0.config.motor.acim_nominal_slip_vel = 2.340000
axis0.config.motor.bEMF_FF_enable = false
axis0.config.motor.calibration_current = 10.000000
axis0.config.motor.current_control_bandwidth = 1000.000000
axis0.config.motor.current_hard_max = 63.500000
axis0.config.motor.current_slew_rate_limit = 10000.000000
axis0.config.motor.current_soft_max = 43.500000
axis0.config.motor.direction = 1.000000
axis0.config.motor.ff_pm_flux_linkage = 0.000000
axis0.config.motor.ff_pm_flux_linkage_valid = false
axis0.config.motor.fw_enable = false
axis0.config.motor.fw_fb_bandwidth = 500.000000
axis0.config.motor.fw_mod_setpoint = 0.778643
axis0.config.motor.motor_model_l_d = 0.000000
axis0.config.motor.motor_model_l_dq_valid = false
axis0.config.motor.motor_model_l_q = 0.000000
axis0.config.motor.motor_type = 0
axis0.config.motor.phase_inductance = 0.000041
axis0.config.motor.phase_inductance_valid = true
axis0.config.motor.phase_resistance = 0.073503
axis0.config.motor.phase_resistance_valid = true
axis0.config.motor.pole_pairs = 7
axis0.config.motor.power_torque_report_filter_bandwidth = 8000.000000
axis0.config.motor.resistance_calib_max_voltage = 2.000000
axis0.config.motor.sensorless_observer_gain = 500.000000
axis0.config.motor.sensorless_pll_bandwidth = 500.000000
axis0.config.motor.sensorless_pm_flux_linkage = 0.000000
axis0.config.motor.sensorless_pm_flux_linkage_valid = false
axis0.config.motor.torque_constant = 0.045440
axis0.config.motor.wL_FF_enable = false
axis0.config.sensorless_ramp.accel = 31.830988
axis0.config.sensorless_ramp.current = 10.000000
axis0.config.sensorless_ramp.finish_distance = 15.915494
axis0.config.sensorless_ramp.finish_on_distance = false
axis0.config.sensorless_ramp.finish_on_vel = true
axis0.config.sensorless_ramp.initial_pos = 0.000000
axis0.config.sensorless_ramp.ramp_distance = 0.500000
axis0.config.sensorless_ramp.ramp_time = 0.400000
axis0.config.sensorless_ramp.vel = 14.000000
axis0.config.startup_closed_loop_control = true
axis0.config.startup_encoder_index_search = false
axis0.config.startup_encoder_offset_calibration = false
axis0.config.startup_homing = false
axis0.config.startup_max_wait_for_ready = 3.000000
axis0.config.startup_motor_calibration = true
axis0.config.step_dir_always_on = false
axis0.config.step_gpio_pin = unknown_type
axis0.config.torque_soft_max = inf
axis0.config.torque_soft_min = -inf
axis0.config.watchdog_timeout = 0.250000
axis0.controller.autotuning.frequency = 0.000000
axis0.controller.autotuning.pos_amplitude = 0.000000
axis0.controller.autotuning.torque_amplitude = 0.000000
axis0.controller.autotuning.vel_amplitude = 0.000000
axis0.controller.autotuning.vel_burst_factor = 0
axis0.controller.autotuning_phase = 0.000000
axis0.controller.config.absolute_setpoints = false
axis0.controller.config.circular_setpoint_range = 1.000000
axis0.controller.config.circular_setpoints = false
axis0.controller.config.commutation_vel_scale = 1.000000
axis0.controller.config.control_mode = 2
axis0.controller.config.enable_gain_scheduling = false
axis0.controller.config.enable_overspeed_error = true
axis0.controller.config.enable_torque_mode_vel_limit = true
axis0.controller.config.enable_vel_limit = true
axis0.controller.config.gain_scheduling_width = 0.001000
axis0.controller.config.homing_speed = 0.250000
axis0.controller.config.inertia = 0.000000
axis0.controller.config.input_filter_bandwidth = 20.000000
axis0.controller.config.input_mode = 1
axis0.controller.config.pos_gain = 20.000000
axis0.controller.config.spinout_electrical_power_bandwidth = 20.000000
axis0.controller.config.spinout_electrical_power_threshold = 1000.000000
axis0.controller.config.spinout_mechanical_power_bandwidth = 20.000000
axis0.controller.config.spinout_mechanical_power_threshold = -1000.000000
axis0.controller.config.steps_per_circular_range = 1024
axis0.controller.config.torque_ramp_rate = 0.010000
axis0.controller.config.use_commutation_vel = false
axis0.controller.config.use_load_encoder_for_commutation_vel = false
axis0.controller.config.vel_gain = 0.166667
axis0.controller.config.vel_integrator_gain = 0.333333
axis0.controller.config.vel_integrator_limit = inf
axis0.controller.config.vel_limit = 50.000000
axis0.controller.config.vel_limit_tolerance = 1.054054
axis0.controller.config.vel_ramp_rate = 3.330000
axis0.controller.effective_torque_setpoint = 0.000000
axis0.controller.input_pos = 0.000000
axis0.controller.input_torque = 0.000000
axis0.controller.input_vel = 0.000000
axis0.controller.pos_setpoint = 0.000000
axis0.controller.spinout_electrical_power = 0.000000
axis0.controller.spinout_mechanical_power = 0.000000
axis0.controller.torque_setpoint = 0.000000
axis0.controller.trajectory_done = true
axis0.controller.vel_integrator_torque = 0.000000
axis0.controller.vel_setpoint = 0.000000
axis0.current_state = 1
axis0.disarm_reason = 16777216
axis0.disarm_time = 3.013750
axis0.enable_pin.config.debounce_ms = 50
axis0.enable_pin.config.enabled = false
axis0.enable_pin.config.gpio_num = unknown_type
axis0.enable_pin.config.is_active_high = false
axis0.enable_pin.config.offset = 0.000000
axis0.enable_pin.state = false
axis0.interpolator.config.dynamic = true
axis0.interpolator.interpolation = 0.000000
axis0.interpolator.status = 0
axis0.is_armed = false
axis0.is_homed = false
axis0.last_drv_fault = 0
axis0.max_endstop.config.debounce_ms = 50
axis0.max_endstop.config.enabled = false
axis0.max_endstop.config.gpio_num = unknown_type
axis0.max_endstop.config.is_active_high = false
axis0.max_endstop.config.offset = 0.000000
axis0.max_endstop.state = false
axis0.mechanical_brake.config.gpio_num = unknown_type
axis0.mechanical_brake.config.is_active_low = true
axis0.min_endstop.config.debounce_ms = 50
axis0.min_endstop.config.enabled = false
axis0.min_endstop.config.gpio_num = unknown_type
axis0.min_endstop.config.is_active_high = false
axis0.min_endstop.config.offset = 0.000000
axis0.min_endstop.state = false
axis0.motor.acim_estimator.phase_offset = 0.000000
axis0.motor.acim_estimator.rotor_flux = 0.000000
axis0.motor.acim_estimator.slip_vel = 0.000000
axis0.motor.acim_estimator.stator_phase = 0.000000
axis0.motor.acim_estimator.stator_phase_vel = 0.000000
axis0.motor.alpha_beta_controller.I_bus = 0.000000
axis0.motor.alpha_beta_controller.Ialpha_measured = 0.000000
axis0.motor.alpha_beta_controller.Ibeta_measured = 0.000000
axis0.motor.alpha_beta_controller.current_meas_phA = nan
axis0.motor.alpha_beta_controller.current_meas_phB = nan
axis0.motor.alpha_beta_controller.current_meas_phC = nan
axis0.motor.alpha_beta_controller.current_meas_status_phA = 4
axis0.motor.alpha_beta_controller.current_meas_status_phB = 4
axis0.motor.alpha_beta_controller.current_meas_status_phC = 4
axis0.motor.alpha_beta_controller.max_measurable_current = 121.500000
axis0.motor.alpha_beta_controller.n_evt_current_measurement = 8605354
axis0.motor.alpha_beta_controller.n_evt_pwm_update = 2
axis0.motor.alpha_beta_controller.power = 0.000000
axis0.motor.dc_calib.a_0 = 8183.681152
axis0.motor.dc_calib.a_1 = 8175.136230
axis0.motor.dc_calib.a_2 = 8127.144043
axis0.motor.dc_calib.b_0 = 8135.963379
axis0.motor.dc_calib.b_1 = 8189.914062
axis0.motor.dc_calib.b_2 = 8182.442383
axis0.motor.dc_calib.c_0 = 8117.427734
axis0.motor.dc_calib.c_1 = 8072.333984
axis0.motor.dc_calib.c_2 = 8126.730469
axis0.motor.effective_current_lim = 43.500000
axis0.motor.electrical_power = 0.000000
axis0.motor.fet_thermistor.temperature = 32.251129
axis0.motor.foc.I_measured_report_filter_k = 1.000000
axis0.motor.foc.Id_measured = 0.000000
axis0.motor.foc.Id_setpoint = 0.000000
axis0.motor.foc.Iq_measured = 0.000000
axis0.motor.foc.Iq_setpoint = 0.000000
axis0.motor.foc.Vd_setpoint = 0.000000
axis0.motor.foc.Vq_setpoint = 0.000000
axis0.motor.foc.final_v_alpha = 0.000000
axis0.motor.foc.final_v_beta = 0.000000
axis0.motor.foc.i_gain = 73.503204
axis0.motor.foc.mod_d = 0.000000
axis0.motor.foc.mod_q = 0.000000
axis0.motor.foc.p_gain = 0.040945
axis0.motor.foc.phase = 0.000000
axis0.motor.foc.phase_vel = 0.000000
axis0.motor.foc.v_current_control_integral_d = 0.000000
axis0.motor.foc.v_current_control_integral_q = 0.000000
axis0.motor.input_id = 0.000000
axis0.motor.input_iq = 0.000000
axis0.motor.loss_power = 0.000000
axis0.motor.mechanical_power = 0.000000
axis0.motor.motor_thermistor.config.beta = 0.000000
axis0.motor.motor_thermistor.config.enabled = false
axis0.motor.motor_thermistor.config.gpio_pin = unknown_type
axis0.motor.motor_thermistor.config.r_ref = 0.000000
axis0.motor.motor_thermistor.config.t_ref = 25.000000
axis0.motor.motor_thermistor.config.temp_limit_lower = 100.000000
axis0.motor.motor_thermistor.config.temp_limit_upper = 120.000000
axis0.motor.motor_thermistor.temperature = nan
axis0.motor.resistance_calibration_I_beta = 0.000000
axis0.motor.sensorless_estimator.phase = 0.000000
axis0.motor.sensorless_estimator.phase_vel = 0.000000
axis0.motor.sensorless_estimator.pll_pos = 0.000000
axis0.motor.torque_estimate = 0.000000
axis0.observed_encoder_scale_factor = nan
axis0.pos_estimate = nan
axis0.pos_vel_mapper.config.approx_init_pos = 0.000000
axis0.pos_vel_mapper.config.approx_init_pos_valid = false
axis0.pos_vel_mapper.config.circular = false
axis0.pos_vel_mapper.config.circular_output_range = 1.000000
axis0.pos_vel_mapper.config.index_gpio = 7
axis0.pos_vel_mapper.config.index_offset = 0.000000
axis0.pos_vel_mapper.config.index_offset_valid = false
axis0.pos_vel_mapper.config.offset = 0.000000
axis0.pos_vel_mapper.config.offset_valid = false
axis0.pos_vel_mapper.config.passive_index_search = false
axis0.pos_vel_mapper.config.scale = 0.142857
axis0.pos_vel_mapper.config.use_endstop = false
axis0.pos_vel_mapper.config.use_index_gpio = false
axis0.pos_vel_mapper.n_index_events = 0
axis0.pos_vel_mapper.pos_abs = nan
axis0.pos_vel_mapper.pos_rel = 0.000000
axis0.pos_vel_mapper.status = 8
axis0.pos_vel_mapper.vel = 0.000000
axis0.pos_vel_mapper.working_offset = 0.000000
axis0.procedure_result = 3
axis0.requested_state = 0
axis0.step_dir_active = false
axis0.steps = 0
axis0.task_times.acim_estimator_update.end_time = 0
axis0.task_times.acim_estimator_update.length = 0
axis0.task_times.acim_estimator_update.max_length = 364
axis0.task_times.acim_estimator_update.start_time = 0
axis0.task_times.can_heartbeat.end_time = 0
axis0.task_times.can_heartbeat.length = 0
axis0.task_times.can_heartbeat.max_length = 0
axis0.task_times.can_heartbeat.start_time = 0
axis0.task_times.controller_update.end_time = 0
axis0.task_times.controller_update.length = 0
axis0.task_times.controller_update.max_length = 796
axis0.task_times.controller_update.start_time = 0
axis0.task_times.current_controller_update.end_time = 0
axis0.task_times.current_controller_update.length = 0
axis0.task_times.current_controller_update.max_length = 172
axis0.task_times.current_controller_update.start_time = 0
axis0.task_times.current_sense.end_time = 0
axis0.task_times.current_sense.length = 0
axis0.task_times.current_sense.max_length = 0
axis0.task_times.current_sense.start_time = 0
axis0.task_times.endstop_update.end_time = 0
axis0.task_times.endstop_update.length = 0
axis0.task_times.endstop_update.max_length = 216
axis0.task_times.endstop_update.start_time = 0
axis0.task_times.motor_update.end_time = 0
axis0.task_times.motor_update.length = 0
axis0.task_times.motor_update.max_length = 464
axis0.task_times.motor_update.start_time = 0
axis0.task_times.open_loop_vector_generator_update.end_time = 0
axis0.task_times.open_loop_vector_generator_update.length = 0
axis0.task_times.open_loop_vector_generator_update.max_length = 234
axis0.task_times.open_loop_vector_generator_update.start_time = 0
axis0.task_times.pwm_update.end_time = 0
axis0.task_times.pwm_update.length = 0
axis0.task_times.pwm_update.max_length = 0
axis0.task_times.pwm_update.start_time = 0
axis0.task_times.sensorless_estimator_update.end_time = 0
axis0.task_times.sensorless_estimator_update.length = 0
axis0.task_times.sensorless_estimator_update.max_length = 802
axis0.task_times.sensorless_estimator_update.start_time = 0
axis0.task_times.thermistor_update.end_time = 0
axis0.task_times.thermistor_update.length = 0
axis0.task_times.thermistor_update.max_length = 142
axis0.task_times.thermistor_update.start_time = 0
axis0.trap_traj.config.accel_limit = 0.500000
axis0.trap_traj.config.decel_limit = 0.500000
axis0.trap_traj.config.vel_limit = 2.000000
axis0.vel_estimate = 0.000000
bootloader_version = 0
can.config.baud_rate = 250000
can.config.data_baud_rate = 10000000
can.config.protocol = 1
can.config.tx_brs = 0
can.error = 0
can.n_restarts = 0
can.n_rx = 352
commit_hash = 3621886066
config.dc_bus_overvoltage_trip_level = 55.000000
config.dc_bus_undervoltage_trip_level = 12.500000
config.dc_max_negative_current = -43.500000
config.dc_max_positive_current = 43.500000
config.enable_uart_a = false
config.gpio0_mode = 17
config.gpio10_mode = 17
config.gpio11_mode = 17
config.gpio12_mode = 17
config.gpio13_mode = 17
config.gpio14_mode = 17
config.gpio15_analog_mapping.endpoint = unknown_type
config.gpio15_analog_mapping.max = 0.000000
config.gpio15_analog_mapping.min = 0.000000
config.gpio15_mode = 17
config.gpio16_analog_mapping.endpoint = unknown_type
config.gpio16_analog_mapping.max = 0.000000
config.gpio16_analog_mapping.min = 0.000000
config.gpio16_mode = 17
config.gpio17_mode = 17
config.gpio18_mode = 17
config.gpio1_mode = 17
config.gpio2_mode = 17
config.gpio3_mode = 17
config.gpio4_mode = 17
config.gpio5_mode = 17
config.gpio6_mode = 17
config.gpio7_mode = 17
config.gpio8_mode = 17
config.gpio8_pwm_mapping.endpoint = unknown_type
config.gpio8_pwm_mapping.max = 0.000000
config.gpio8_pwm_mapping.min = 0.000000
config.gpio9_mode = 17
config.gpio9_pwm_mapping.endpoint = unknown_type
config.gpio9_pwm_mapping.max = 0.000000
config.gpio9_pwm_mapping.min = 0.000000
config.inverter0.current_hard_max = 150.000000
config.inverter0.current_soft_max = 100.000000
config.inverter0.drv_config = 0
config.inverter0.mod_magn_max = 0.865159
config.inverter0.shunt_conductance = 1999.999878
config.inverter0.temp_limit_lower = 83.959999
config.inverter0.temp_limit_upper = 103.110001
config.max_regen_current = 0.000000
config.motor_fan.enabled = false
config.motor_fan.lower = 70.000000
config.motor_fan.upper = 80.000000
config.odrv_fan.enabled = false
config.odrv_fan.lower = 70.000000
config.odrv_fan.upper = 80.000000
config.uart0_protocol = 3
config.uart_a_baudrate = 115200
config.usb_cdc_protocol = 3
config.user_config_0 = 0
config.user_config_1 = 0
config.user_config_2 = 0
config.user_config_3 = 0
config.user_config_4 = 0
config.user_config_5 = 0
config.user_config_6 = 0
config.user_config_7 = 0
control_loop_hz = 8000
debug.hal_ticks = 1085449
encoder_estimator0.pos_estimate = 0.000000
encoder_estimator0.status = 13
encoder_estimator0.vel_estimate = 0.000000
encoder_estimator1.pos_estimate = 0.000000
encoder_estimator1.status = 13
encoder_estimator1.vel_estimate = 0.000000
fw_version_major = 0
fw_version_minor = 6
fw_version_revision = 10
fw_version_unreleased = 0
hall_encoder0.abs_pos_max = 0.000000
hall_encoder0.abs_pos_min = 0.000000
hall_encoder0.config.edge0 = nan
hall_encoder0.config.edge1 = nan
hall_encoder0.config.edge2 = nan
hall_encoder0.config.edge3 = nan
hall_encoder0.config.edge4 = nan
hall_encoder0.config.edge5 = nan
hall_encoder0.config.edges_calibrated = false
hall_encoder0.config.enabled = false
hall_encoder0.config.hall_polarity = 0
hall_encoder0.config.hall_polarity_calibrated = false
hall_encoder0.config.ignore_illegal_hall_state = false
hall_encoder0.hall_cnt = 255
hall_encoder0.raw_hall_state = 0
hall_encoder0.status = 14
hall_encoder1.abs_pos_max = 0.000000
hall_encoder1.abs_pos_min = 0.000000
hall_encoder1.config.edge0 = 0.520020
hall_encoder1.config.edge1 = 0.000000
hall_encoder1.config.edge2 = 0.000000
hall_encoder1.config.edge3 = 0.000000
hall_encoder1.config.edge4 = 0.000000
hall_encoder1.config.edge5 = 0.000000
hall_encoder1.config.edges_calibrated = false
hall_encoder1.config.enabled = true
hall_encoder1.config.hall_polarity = 0
hall_encoder1.config.hall_polarity_calibrated = false
hall_encoder1.config.ignore_illegal_hall_state = false
hall_encoder1.hall_cnt = 255
hall_encoder1.raw_hall_state = 0
hall_encoder1.status = 0
hw_version_major = 4
hw_version_minor = 4
hw_version_revision = 0
hw_version_variant = 58
ibus = 0.000000
ibus_report_filter_k = 1.000000
identify = false
inc_encoder0.config.cpr = 8192
inc_encoder0.config.enabled = false
inc_encoder0.pos_max = 0.000000
inc_encoder0.pos_min = 0.000000
inc_encoder0.pos_residual = 0.000000
inc_encoder0.raw = unknown_type
inc_encoder0.status = 14
inc_encoder1.config.cpr = 8192
inc_encoder1.config.enabled = false
inc_encoder1.pos_max = 0.000000
inc_encoder1.pos_min = 0.000000
inc_encoder1.pos_residual = 0.000000
inc_encoder1.raw = unknown_type
inc_encoder1.status = 14
issues.length = 0
misconfigured = false
n_evt_control_loop = 8704490
n_evt_sampling = 8704879
onboard_encoder0.raw = 0.494812
onboard_encoder0.status = 0
oscilloscope.pos = 0
oscilloscope.recording = false
oscilloscope.rollover = false
oscilloscope.size = 16384
reboot_required = false
rs485_encoder_group0.config.mode = 0
rs485_encoder_group0.raw = 0.000000
rs485_encoder_group0.raw32 = 0
rs485_encoder_group0.status = 10
rs485_encoder_group1.config.mode = 0
rs485_encoder_group1.raw = 0.000000
rs485_encoder_group1.raw32 = 0
rs485_encoder_group1.status = 10
serial_number = 0
spi_encoder0.config.baudrate = 1687500
spi_encoder0.config.biss_c_bits = 18
spi_encoder0.config.delay = 0.000000
spi_encoder0.config.max_error_rate = 0.005000
spi_encoder0.config.mode = 0
spi_encoder0.config.ncs_gpio = 17
spi_encoder0.inject_errors = false
spi_encoder0.n_errors = 0
spi_encoder0.raw = 0.000000
spi_encoder0.status = 14
spi_encoder0.warning = false
spi_encoder1.config.baudrate = 1687500
spi_encoder1.config.biss_c_bits = 18
spi_encoder1.config.delay = 0.000000
spi_encoder1.config.max_error_rate = 0.005000
spi_encoder1.config.mode = 0
spi_encoder1.config.ncs_gpio = 17
spi_encoder1.inject_errors = false
spi_encoder1.n_errors = 0
spi_encoder1.raw = 0.000000
spi_encoder1.status = 14
spi_encoder1.warning = false
system_stats.i2c.addr = 0
system_stats.i2c.addr_match_cnt = 0
system_stats.i2c.error_cnt = 0
system_stats.i2c.rx_cnt = 0
system_stats.max_stack_usage_axis = 716
system_stats.max_stack_usage_comms = 580
system_stats.max_stack_usage_startup = 332
system_stats.max_stack_usage_uart = 3764
system_stats.min_heap_space = 56240
system_stats.prio_axis = 3
system_stats.prio_comms = 0
system_stats.prio_startup = 0
system_stats.prio_uart = -3
system_stats.stack_size_axis = 2048
system_stats.stack_size_comms = 4096
system_stats.stack_size_startup = 2048
system_stats.stack_size_uart = 4096
system_stats.uptime = 1091309
system_stats.usb.rx_cnt = 0
system_stats.usb.tx_cnt = 0
system_stats.usb.tx_overrun_cnt = 0
task_timers_armed = false
task_times.control_loop_checks.end_time = 0
task_times.control_loop_checks.length = 0
task_times.control_loop_checks.max_length = 572
task_times.control_loop_checks.start_time = 0
task_times.control_loop_misc.end_time = 0
task_times.control_loop_misc.length = 0
task_times.control_loop_misc.max_length = 196
task_times.control_loop_misc.start_time = 0
task_times.current_sense_wait.end_time = 0
task_times.current_sense_wait.length = 0
task_times.current_sense_wait.max_length = 800
task_times.current_sense_wait.start_time = 0
task_times.dc_calib_wait.end_time = 0
task_times.dc_calib_wait.length = 0
task_times.dc_calib_wait.max_length = 15156
task_times.dc_calib_wait.start_time = 0
task_times.encoder_update.end_time = 0
task_times.encoder_update.length = 0
task_times.encoder_update.max_length = 888
task_times.encoder_update.start_time = 0
task_times.sampling.end_time = 0
task_times.sampling.length = 0
task_times.sampling.max_length = 256
task_times.sampling.start_time = 0
test_property = 0
thermistor0 = 32.159393
user_config_loaded = 5559
vbus_voltage = 48.163647

ODrive Pro module version: 0.6.10
Power supply input: 48V battery pack (no brake resistor)
Thruster configuration: T500 thruster from BlueRobotics with customized propeller
Firmware/driver: commands sent over CAN, Set_Input_Vel streamed at 30-50 Hz

Graph 1 → velocity setpoint and vel_estimate
Graph 2 → iq_measured (motor current)
Graph 3 → fet_temperature

As seen in the attached screenshot, during steady operation the motor current stays around 15 to 20 A and tracking is good. Whenever the velocity command decelerates or reverses, the motor current suddenly spikes to current_soft_max (43.5 A) for a few hundred milliseconds. Most of the time it recovers on its own, but sometimes the drive disarms with CURRENT_LIMIT_VIOLATION and the thruster stops mid operation.

We tried lowering dc_max_negative_current to -26 A and running motor calibration on the unit (measured phase resistance 0.080 ohm against the configured 0.0735). That eliminated the CURRENT_LIMIT_VIOLATION trips on a bench reproduction, but the braking energy now trips DC_BUS_OVER_VOLTAGE instead (max_regen_current = 0, pack rests near 49 V against the 51 V trip level).

Could you please help us identify the possible root cause of this issue?