Encoder interfenece problem resulting in "CURRENT_LIMIT_VIOLATION"

Hello,
I am facing a problem with my odrive 3.6 56V. My motor (6354 190kv) is equipped with incremental encoder - amt102 (8k pulses per revolution). I start the odrive and perform index search. Everything work ok at the begining. However over some time, the motor gets weaker and weaker, and the current neccessary to move or hold current setpoint increases. The degradation happens faster if I perform some movements. I have measured the force required to hold the position versus amps: initially 7.5A is needed to create 3kg force on my gantry and after some time 40A gives only 2kg. It looks like the encoder is sliiping but It is not. If it would slip on motor axis, rebooting and performing index search would not solve the problem, right? Full encoder offset search should be neccesary but rebooting and index search fixes the problem temporarily.

I also often get CURRENT_LIMIT_VIOLATION after executing motion with speed around 20, and after that the motor performs worse: less torque, more current to hold the position without any external load.
I guess it must be happening due to some interference in the encoder readings thats result in mismatch between real rotor position and what odrive thinks it is.

here is my config, maybe I should change some bandwidth?

motor/config/current_control_bandwidth: 250
motor/config/current_limit: 35
motor/config/requested_current_range:45.0
encoder/config/bandwidth: 1000

I tried to prevent this:

  • I have twisted motor cables with ferrite ring (about 0.5 m long)
  • I have a shielded encoder error (shield is connected to odrive GND and the encoder GND)
  • Motor and encoder cables are not close to each other

I swapped motor, encoder and odrive itself but it is still happening. The interesting fact is that I use second motor but smaller with 3.5m long cables and the same encoder and I did not encouter problems there.
Do you think that the problem is the mounting of my encoder? It is really close to the motor
image

Do you have any ideas how could I overcome this?

Here is an example graph of the current needed to move the motor with the carriage. I performed motion with speed around 20 rot/s and acceleration 20 rot/s2. It managed to perform 75% of the trajectory and suddenly got CURRENT_LIMIT_VIOLATION error at 3680 point:


Do I need to use some capacitors to prevent this?

It can be electrical interference, or just plain old mechanical slippage. I like your encoder setup though, seems robust?

(shield is connected to odrive GND and the encoder GND)

Which GND specifically? It should be on the encoder header GND pin

If it was plain mechanical slippage, then performing index search would not temporariliy “fix” the issue, right?
Encoder is connected to encoder header. I wish I had an oscilloscope. Do you think adding some small capacitors would solve the problem?

I made an observation that If I rotate motor quickly by hand and do few rotations, the output of axis.encoder.count_in_cpr does increase by several dozens counts even though motor returned to same position. It seems that there are some fake pulses counted? What is interesting is the fact that when I do this in the oposit direction of rotation, count remains the same :o. I don’t know what to think about it.