Newbe question (M0 vibrates)

Hi, I am new to odrive and I tried to follow the “getting started”-guide word by word. However,
I cannot get the Motor connected to M0 to stop vibrating. The same motor connected to M1 works fine. I switched the motors ( I have 2 D6374 150KV) and the encoders (CUI AMT102). It always seems to be the motor connected to M0. Switched motor-cables, encoder-cables and rearranged the cables to make sure nothing is overlapping.

The configuration for both controllers are identical.

In [20]: odrv0.axis1.controller
Out[20]:
error = 0x0000 (int)
input_pos = 0.0043659210205078125 (float)
input_vel = 0.0 (float)
input_torque = 0.0 (float)
pos_setpoint = 0.0043659210205078125 (float)
vel_setpoint = 0.0 (float)
torque_setpoint = 0.0 (float)
trajectory_done = True (bool)
vel_integrator_torque = 0.0 (float)
anticogging_valid = False (bool)
config:
  gain_scheduling_width = 10.0 (float)
  enable_vel_limit = True (bool)
  enable_current_mode_vel_limit = True (bool)
  enable_gain_scheduling = False (bool)
  enable_overspeed_error = True (bool)
  control_mode = 3 (int)
  input_mode = 1 (int)
  pos_gain = 20.0 (float)
  vel_gain = 4.999999873689376e-05 (float)
  vel_integrator_gain = 0.0 (float)
  vel_limit = 20000.0 (float)
  vel_limit_tolerance = 1.2000000476837158 (float)
  vel_ramp_rate = 10000.0 (float)
  torque_ramp_rate = 0.009999999776482582 (float)
  circular_setpoints = False (bool)
  circular_setpoint_range = 1.0 (float)
  homing_speed = 0.25 (float)
  inertia = 0.0 (float)
  axis_to_mirror = 255 (int)
  mirror_ratio = 1.0 (float)
  load_encoder_axis = 1 (int)
  input_filter_bandwidth = 2.0 (float)
  anticogging: ...
move_incremental(displacement: float, from_input_pos: bool)
start_anticogging_calibration()


In [19]: odrv0.axis0.controller
Out[19]:
error = 0x0000 (int)
input_pos = -0.017759323120117188 (float)
input_vel = 0.0 (float)
input_torque = 0.0 (float)
pos_setpoint = -0.017759323120117188 (float)
vel_setpoint = 0.0 (float)
torque_setpoint = 0.0 (float)
trajectory_done = True (bool)
vel_integrator_torque = 0.0 (float)
anticogging_valid = False (bool)
config:
  gain_scheduling_width = 10.0 (float)
  enable_vel_limit = True (bool)
  enable_current_mode_vel_limit = True (bool)
  enable_gain_scheduling = False (bool)
  enable_overspeed_error = True (bool)
  control_mode = 3 (int)
  input_mode = 1 (int)
  pos_gain = 20.0 (float)
  vel_gain = 4.999999873689376e-05 (float)
  vel_integrator_gain = 0.0 (float)
  vel_limit = 20000.0 (float)
  vel_limit_tolerance = 1.2000000476837158 (float)
  vel_ramp_rate = 10000.0 (float)
  torque_ramp_rate = 0.009999999776482582 (float)
  circular_setpoints = False (bool)
  circular_setpoint_range = 1.0 (float)
  homing_speed = 0.25 (float)
  inertia = 0.0 (float)
  axis_to_mirror = 255 (int)
  mirror_ratio = 1.0 (float)
  load_encoder_axis = 0 (int)
  input_filter_bandwidth = 2.0 (float)
  anticogging: ...
move_incremental(displacement: float, from_input_pos: bool)
start_anticogging_calibration()

Odrive Serial Number:
35722209414477

Firmware Version: 0.5.1
HW Version: 3.6
Variant: 24V

Am I missing something?
how much vibration is ok? I can feel it, when I touch it. I can also hear it slightly, but I don’t feel nor hear anything on M1.

That much vibration is probably fine. All servos will “vibrate” about the final target point, as you don’t have infinite resolution. Since it’s not the same on each axis, it could be a little bit of inductive or capacitive coupling to the encoder or current sensors, especially if it’s two different encoders. You can try adding a ferrite ring to the motor wires to help with this.

the ferrite ring did not change anything in the behavior. I bought another odrive board and that one works fine. Cable-setup is the same.

is there a way to get a replacement?

Please email info@odriverobotics.com with your information and a link to this thread.