Error 0x0030 and 0x0040

Hi all

I am testing my Odrives + actuators now with different power suplies/batteries in order to find out if there is a problem with too less power.

I have the main branch Firmware on my Odrives and connected them to a 12V car battery. So current should not be a Problem.

The current_lim is set to 80 (A)….so more than enough.

After a while, or when putting more load to the actuators, they stop working with the following error codes.

Any Ideas???

The Motor config Setting is:

In [24]: odrv0.axis0.motor.config
Out[24]:
pre_calibrated = False (bool)
pole_pairs = 7 (int)
calibration_current = 10.0 (float)
resistance_calib_max_voltage = 2.0 (float)
phase_inductance = 2.279498949064873e-05 (float)
phase_resistance = 0.030227571725845337 (float)
direction = -1 (int)
motor_type = 0 (int)
current_lim = 80.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)

Errors shown:

In [23]: odrv0.axis0
Out[23]:
error = 0x0030 (int)
step_dir_active = False (bool)
current_state = 1 (int)
requested_state = 0 (int)
loop_counter = 1142841 (int)
lockin_state = 0 (int)
config:
startup_motor_calibration = True (bool)
startup_encoder_index_search = False (bool)
startup_encoder_offset_calibration = True (bool)
startup_closed_loop_control = True (bool)
startup_sensorless_control = False (bool)
enable_step_dir = False (bool)
counts_per_step = 2.0 (float)
watchdog_timeout = 0.0 (float)
step_gpio_pin = 1 (int)
dir_gpio_pin = 2 (int)
calibration_lockin: …
sensorless_ramp: …
general_lockin: …
motor:
error = 0x0040 (int)
armed_state = 0 (int)
is_calibrated = True (bool)
current_meas_phB = -0.2634413242340088 (float)
current_meas_phC = -0.08313536643981934 (float)
DC_calib_phB = -0.8644874095916748 (float)
DC_calib_phC = -0.8028133511543274 (float)
phase_current_rev_gain = 0.02500000037252903 (float)
thermal_current_lim = 371.80548095703125 (float)
get_inverter_temp()
current_control: …
gate_driver: …
timing_log: …
config: …
controller:
error = 0x0000 (int)
pos_setpoint = 0.0 (float)
vel_setpoint = 0.0 (float)
vel_integrator_current = 0.07966150343418121 (float)
current_setpoint = 0.0 (float)
vel_ramp_target = 0.0 (float)
vel_ramp_enable = False (bool)
config: …
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()
encoder:
error = 0x0000 (int)
is_ready = True (bool)
index_found = False (bool)
shadow_count = 253968 (int)
count_in_cpr = 16 (int)
interpolation = 0.5 (float)
phase = -0.37206172943115234 (float)
pos_estimate = 253968.203125 (float)
pos_cpr = 16.24414825439453 (float)
hall_state = 3 (int)
vel_estimate = 0.0 (float)
calib_scan_response = 9258.0 (float)
config: …
set_linear_count(count: int)
sensorless_estimator:
error = 0x0000 (int)
phase = 1.829343318939209 (float)
pll_pos = 1.826624870300293 (float)
vel_estimate = -0.7174057960510254 (float)
config: …
trap_traj:
config: …
watchdog_feed()

Wickie

Hi

I had this too, I don’t know what they Mean but when racing in the racesim I’ve never had an error, I think it had something to do with it trying to hold it’s position and not being able to, but when racing in the sim, they are constantly moving and it doesn’t care if the position is not completly correct.

Cheers

Carelsbergh Stijn

Hi Wickie,
Motor Errors = ERROR_BRAKE_CURRENT_OUT_OF_RANGE = 0x0040

but NO idea what 0x0030 is.

Hope this helps
Regards Jerry :slightly_smiling_face:

You can use dump_errors(odrv0) to get readouts of the error names, which will help. Motor error 4 is what Jerry said, and axis error 3 is error 0x1 + 0x2, so

ERROR_INVALID_STATE and
ERROR_DC_BUS_UNDER_VOLTAGE

The brake current out of range error has been a bit of a problem. Its current implementation is too sensitive, and the brake resistor that ships with the ODrive is fine for basic protection but it can cause the error to throw. In certain situations where both motors are braking at full torque, you could potentially need 160A of current flowing through the brake resistor. At 12V * 0.9 for duty cycle max that means you need a 67.5mOhm or less total resistance hooked up. If you have more than 75mOhm it will require > 12V to push If you’re using the half-ohm resistor you need about 8 of them hooked up in parallel, and they will each dissipate 200 watts for a short period of time… so be careful, because those are only rated for 25 watts iirc