Callibration issue when motor magnets aren't alligned with coils

Hello everyone,

I am using a 56V V3.6 odrive. The motor I am working with is an L8308 90Kv eaglepower BLDC. it has 40 magnets (so 20 pole pairs). The encoder that I am using is an AMT102-V encoder with a cpr of 8192. The motor shaft is well connected to the encoder so slip is no issue.

When I try callibrating the motor, sometimes it is succesfull and sometimes it only does the rotation in one direction and then stops.
I have noticed that, most of the time when the callibration fails, the motor first does a small rotation (not a 360° rotation, more like 1° or so) before the actual callibration rotation starts. To me this seems like that is the alligning of the magnets with the coils (because current starts flowing trough them).
Everytime when the callibration is succesfull, the motor doesn’t do that small turn, so I think that in that situation the magnets are already alligned with te coils.

Could the problem that sometimes causes the failed callibration be that the magnets and coils are not alligned when the callibration starts? And if so, how do I fix this?

Kind regards
C.M.

The default calib_dis parameter in encorder is 14*Pi which means to rotate a half circle for 14 pole-pair motor. Maybe you can increase the value to see if it works

Make sure there is no load attached to the motor when you do the calibration. The calibration has to assume that the rotor always aligns with the stator field, and any load (even a small one such as friction in a gearbox) will cause an offset.
If that’s a problem for you (i.e. you cannot easily disconnect the load), then you should be using absolute encoders.

Thanks for the answer! The motor doesn’t have any load on it tho when i performed the callibrations so i don’t think that is the problem.

It’s possible that the motor has a very high cogging torque? If so, try increasing motor.config.calibration_current

hmm the calibration current is already set to 15A and when there is no current flowing trough the motor it is very easy to turn it so I don’t think that is the problem

But I have made some changes so that it uses the index signal from the encoder. So now when i start the odrive, the motor spins untill it has found the index and then I can set it to closed loop controll without calibrating. So that is a good thing haha

It’s normal for the motor to move slightly before the calibration starts - it will move from the cogging position to wherever the field is at the start of the calibration.
It is possible that the calibration current is too high then - if the initial movement is too violent then it could oscillate about that point a bit and throw off the calibration.

So there isn’t really anything I can do about it then? just make sure that the magnets are prefectly alligned with the coils before starting callibration?

No, you can try reducing the calibration current.
You could also increase encoder.config.calib_scan_distance to dilute the contribution of this small error.
If it’s still a problem, as a workaround, you can increase encoder.config.calib_range - but this would reduce the accuracy of the commutation and would reduce efficiency / controllability etc.

1 Like

Thanks! I will try what you are suggesting.

kind regards
CM