Motor control KYI-5T-3P

Hi everyone I am trying to control two same brushless motors with ODRIVE v3.6 by following the user manual. During the initial calibration, I have problems with phase resistance and induction values. As a result, I can’t control the rotation, all attempts fail.
The motors don`t have specifications. The exact number of pole pairs, KV and other values are unknown. Info for the KYI-5T-3P from the marketplace:

Voltage:33V MAX

Max current: 13.7A

Nominal power: 450W

Max thrust: 8.1kg

prop diameter:80mm

Weight:756g

Test date: forward thrust

12V: current: 2.7A, thrust: 1.5kg;

14V: current: 4.3A, thrust: 1.9kg;

16V: current: 5.2A, thrust: 2.4kg;

24V: current:9.3A, thrust: 5.1kg;

30V: current: 12A, thrust: 7.0kg;

33V: current: 13.7A, thrust: 8.1kg;

Test date: reverse thrust

12V: current: 3.0A, thrust: 1.2kg;

14V: current: 3.7A, thrust: 1.5kg;

16V: current: 4.5A, thrust: 2.1kg;

24V: current: 7.9A, thrust: 4.2kg;

30V: current: 10.3A, thrust: 5.8kg;

33V: current: 11.7A, thrust: 7.0kg;

Perhaps some of you have already set up a similar motor or know the number of pole pairs and KV value. Or perhaps you can direct me where to find the specification for this motor. The seller couldn`t help in any way. Thanks!

Hi there - what exact errors are you having?

Do you have a power supply with constant current mode?

1 Like

Hi!

  1. ERROR_PHASE_RESISTANCE_OUT_OF_RANGE
  2. I`m using 24V 28.0 Ah Li-ion battery.

Do you have a constant current supply? From the docs:

A good way to find the number of pole pairs is with a current limited power supply. Connect any two of the three phases to a power supply outputting around 2A, spin the motor by hand, and count the number of detents. This will be the number of pole pairs. If you can’t distinguish the detents from the normal cogging present when the motor is disconnected, increase the current.

When you’re doing this, you can also find the phase-phase resistance via V=IR (so R=V/I). Ex: if the constant current supply outputs 5V for 2A of current, the phase-phase resistance is 5V/2A = 2.5 ohm. Could you do this and let me know the resistance?

1 Like

Thank you so much!

I counted the pole pairs as follows: I took the magnet from the reed switch, attached the plus side to the motor housing and move it around the entire diameter. I counted 8 pairs.

Unfortunately, I do not have a power supply with current limiting, but I`m gonna get one and try your recommendation.

Values from the Odrivetool:

In [45]: odrv0.axis0.motor.error
Out[45]: 0

In [46]: odrv0.axis0.motor.config.phase_inductance
Out[46]: 9.725678683025762e-05

In [47]: odrv0.axis0.motor.config.phase_resistance
Out[47]: 0.2157421112060547

So you were able to successfully calibrate the motor? Or is this from a different motor?

1 Like

I have passed odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION. Now I`m trying to find the correct value for odrv0.axis 0.encoder.config.cpr = *

In [120]: odrv0.axis0.encoder.config.cpr = 10000

In [121]: odrv0.axis0.encoder.config.cpr
Out[121]: 10000

In [122]: odrv0.axis0.encoder.config.cpr = 10000

In [123]: odrv0.axis0.encoder.config.use_index = True

In [124]: odrv0.axis0.requested_state = AXIS_STATE_ENCODER_INDEX_SEARCH #PASSED

In [125]: odrv0.axis0.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION
…:

In [126]: dump_errors(odrv0)
system: not found
axis0
axis: Error(s):
AxisError.ENCODER_FAILED
motor: no error
DRV fault: not found
sensorless_estimator: no error
encoder: Error(s):
EncoderError.INDEX_NOT_FOUND_YET
controller: no error
axis1
axis: no error
motor: no error
DRV fault: not found
sensorless_estimator: no error
encoder: no error
controller: no error

It seems specifically like index search didn’t pass? Given the error was that the index wasn’t found.

What encoder are you using? it doesn’t seem like that thruster comes with an encoder, did you attach an external one?

1 Like

You are absolutely right! I missed this point. It doesn`t match.

What encoder are you using?

As you correctly noted, this engine doesn`t have an encoder. I shouldn’t have tried to calibrate it that way. Now I’m stuck on trying to get it to rotate through odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL

The engine is not responding to the odrv0.axis0.controller.input_vel =

However, the odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION passed
and the odrv0.axis0.motor.error is clean

I did it! Now I can use odrv0.axis0.controller.input_vel = as well

Sorry - what are you doing? Did you configure sensorless control?

Yes, Ive configured the basic parameters. The motor rotates to the set values. Now Im gonna practice with the control via a joystick. And then focus on remote control. So, I`m gonna need some help :slight_smile:

Hi - sorry, I’m not understanding. Does the motor have an encoder or did you add an external encoder? Or are you running it sensorless? How did you configure the sensorless control?

Hi there!

No, It`s sensorless. I configured it that way.

Now I`m trying to resolve that issue.