Turnigy Aerodrive SK3 - 4250-350kv

Hey!

Im using the Aerodrive Turnigy SK3 - 4250-350kv Motor with the AMT102-V Encoder.

I’ve managed to calibrate the motor a few days ago (not the encoder, Imstruggling with that one on a whole different level)- but now it stopped working consistently, if at all.

During the odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL calibration I now get the beep an most of the time a rotation in one direction, sometimes not even that. No other commands seem to work after calibration, it wont move to a set point.

I cant figure out where I’m calibrationg it wrong… these are my values:

Encoder problems, please check the encoder circuit and configuration and index

Okay so I’ve learned a lot and figured a lot of my previous issues out!

Encoder seems to work fine now, as well as the calibration.
It doesnt show me any errors after a full calibration.
However, as soon as I go into AXIS_STATE_CLOSED_LOOP_CONTROL and touch the motor ever so slightly it will freak out and shut off and gives me these errors:

dump_errors(odrv0)^M
…:
axis0
axis: Error(s):
ERROR_CONTROLLER_FAILED
motor: Error(s):
ERROR_CONTROL_DEADLINE_MISSED
encoder: no error
controller: Error(s):
ERROR_OVERSPEED

I can reboot and recalibrate fine- but I cant seem to find what is causing this issue!

These are my motor and encoder values:
odrv0.axis0.motor
Out[469]:
error = 0x0000 (int)
armed_state = 0 (int)
is_calibrated = True (bool)
current_meas_phB = -0.0031413733959198 (float)
current_meas_phC = -0.05141142010688782 (float)
DC_calib_phB = -0.3596027195453644 (float)
DC_calib_phC = 0.13180579245090485 (float)
phase_current_rev_gain = 0.02500000037252903 (float)
thermal_current_lim = 135.91555786132812 (float)
get_inverter_temp()
current_control:
p_gain = 0.0023307488299906254 (float)
i_gain = 6.409842014312744 (float)
v_current_control_integral_d = -0.21043384075164795 (float)
v_current_control_integral_q = -0.9467928409576416 (float)
Ibus = 0.4909997582435608 (float)
final_v_alpha = 0.9636579155921936 (float)
final_v_beta = 0.13029392063617706 (float)
Iq_setpoint = -10.0 (float)
Iq_measured = -8.584746360778809 (float)
Id_measured = 1.273858666419983 (float)
I_measured_report_filter_k = 1.0 (float)
max_allowed_current = 60.75 (float)
overcurrent_trip_level = 67.5 (float)
gate_driver:
drv_fault = 0 (int)
timing_log:
TIMING_LOG_GENERAL = 0 (int)
TIMING_LOG_ADC_CB_I = 2582 (int)
TIMING_LOG_ADC_CB_DC = 12854 (int)
TIMING_LOG_MEAS_R = 6606 (int)
TIMING_LOG_MEAS_L = 6606 (int)
TIMING_LOG_ENC_CALIB = 6938 (int)
TIMING_LOG_IDX_SEARCH = 0 (int)
TIMING_LOG_FOC_VOLTAGE = 6886 (int)
TIMING_LOG_FOC_CURRENT = 7114 (int)
config:
pre_calibrated = True (bool)
pole_pairs = 7 (int)
calibration_current = 10.0 (float)
resistance_calib_max_voltage = 2.0 (float)
phase_inductance = 2.3307487936108373e-05 (float)
phase_resistance = 0.06409841775894165 (float)
direction = -1 (int)
motor_type = 0 (int)
current_lim = 30.0 (float)
inverter_temp_limit_lower = 100.0 (float)
inverter_temp_limit_upper = 120.0 (float)
requested_current_range = 60.0 (float)
current_control_bandwidth = 100.0 (float)

odrv0.axis0.encoder
Out[475]:
error = 0x0000 (int)
is_ready = True (bool)
index_found = True (bool)
shadow_count = -1095 (int)
count_in_cpr = 7097 (int)
interpolation = 1.0 (float)
phase = -0.07473278045654297 (float)
pos_estimate = -1094.00634765625 (float)
pos_cpr = 7097.97509765625 (float)
hall_state = 1 (int)
vel_estimate = 1.25 (float)
calib_scan_response = 9418.0 (float)
config:
mode = 0 (int)
use_index = True (bool)
find_idx_on_lockin_only = False (bool)
pre_calibrated = False (bool)
zero_count_on_find_idx = True (bool)
cpr = 8192 (int)
offset = -4591 (int)
offset_float = 0.06299999356269836 (float)
enable_phase_interpolation = True (bool)
bandwidth = 100.0 (float)
calib_range = 0.019999999552965164 (float)
calib_scan_distance = 50.26548385620117 (float)
calib_scan_omega = 12.566370964050293 (float)
idx_search_unidirectional = False (bool)
ignore_illegal_hall_state = False (bool)
set_linear_count(count: int)

Got an Idea which changes could help my hyperactive motor calm down?

Your gains are probably all set to high. To make the ODrive work correctly in your setup you have to configure the positioning algorithm so it knows how to move the motors in your system. The relevant information is here under the heading “Tuning Parameters”. Sounds like you should start by reducing all of your gain levels by around half until the motor is stable and then configuring them according to the instructions.