Axis error 0x40, motor error 0x0080 when put in closed loop mode


I’ve been doing testing on my 24v ODrive board, and it was working fine up until an hour ago, when it just wouldn’t go into closed loop mode. Calibration seems normal, and I don’t know what to do.

I know the axis error 0x40 is ERROR_MOTOR_FAILED and the motor error is ERROR_MODULATION_MAGNITUDE but the calibration sequence looks completely normal and I’m using C4250 560KV motor. The troubleshooting guide doesn’t say anything about my case.
Please help

Hi tuftman! The docs have a section called “Common Motor Errors” with that motor error listed

The bus voltage was insufficent to push the requested current through the motor. If you are getting this during motor calibration, make sure that motor.config.resistance_calib_max_voltage is no more than half your bus voltage.
For gimbal motors, it is recommended to set the motor.config.calibration_current and motor.config.current_lim to half your bus voltage, or less.

I’ve seen that, I’m not using gimbal motors and my resistance_calib_max_voltage is 2v and my bus voltage is 24v

Oh, I misread your original post. Modulation Magnitude error during runtime but not during calibration seems really strange. Can you check your phase_resistance from odrv.axis.motor.config?

Also, what is your calibration_current?

my phase resistance is 0.050685275346040726 and my calibration current is 10.0

here’s the rest of the motor config

pre_calibrated = False (bool)
pole_pairs = 7 (int)
calibration_current = 10.0 (float)
resistance_calib_max_voltage = 2.0 (float)
phase_inductance = 2.1762045435025357e-05 (float)
phase_resistance = 0.050685275346040726 (float)
direction = -1 (int)
motor_type = 0 (int)
current_lim = 15.0 (float)
current_lim_tolerance = 1.25 (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)

my motor’s page says it can handle up to 80 amps

Hmm, looks normal. Can you confirm your firmware version? odrv0 will print it out

hw_version_major = 3 (int)
hw_version_minor = 6 (int)
hw_version_variant = 24 (int)
fw_version_major = 0 (int)
fw_version_minor = 4 (int)
fw_version_revision = 11 (int)
fw_version_unreleased = 0 (int)