ODrive 3.6 Problem with motor high current and low voltage

Hi,

ODrives and this kind of electronic stuff is pretty new to me and now I am struggling with my setup.

I have made linear actuators with Turnigy SK3 190kv motors. I am able to control them, but they take huge amount of current. I have limited the current to 50A, but some times it isn´t even enough to keep the actuator still and the limit is exceeded. At the same time voltage to the motors are about 4-5V. I monitored the current and the voltage with this command:

start_liveplotter(lambda:[odrv0.axis0.motor.current_control.v_current_control_integral_q,odrv0.axis0.motor.current_control.v_current_control_integral_d,odrv0.axis0.motor.current_control.Iq_measured])

My PSU is 36V and 540W. I have checked that the voltage VBus is 36V to 40V when actuators are moving.

I tried to find answer from the other topics, but I didn`t find a solution. Why the motor voltage level is so low and how to get it higher so the current draw won´t be so huge? Do you have an idea what to do next?

Because the resistance of the motor is very low (see motor.config.phase_resistance). The voltage values you’ve listed are not really useful for an end user, they’re more like debug parameters for controls engineers.

Sounds like you need bigger motors or need to increase the current limit.

Thank you for your answer.

The motor power is 2450W. Some other users use this exactly same motor and 540W PSU’s / odrive with their 6dof racing simulator like I try to do. The linear actuators rotate pretty easily with fingertips with the weight of the rig on. So I think that I am missing something else.

But if voltage is low because of the resistance of the motor, how to get all the power to use? In some point the voltage have to be about 37V and current 65A to get all the power to use, right (P=U*I) ? Of course in my case the PSU limits the power of the motor. Is the motor voltage higher with higher rpm’s? Voltage and current before are Turnigy sk3 190kv motor maximum voltage and current. I tried to read about these power and torque principles but I didn’t understand everything yet.

I’m not sure what I will do next with the rig. If you or someone have some suggestions it would be fantastic. Would it be helpful if I post my config here?

I really hope there is better solution for me than bigger motors.

You only get power when the motor is spinning fast, which is when you also have voltage. To generate torque, it’s purely current.

Yes this exactly.

If motor current is very large but the rig isn’t moving, then you have something else wrong. Either too much weight, or the wrong gear ratio, or maybe a bad encoder calibration.

Now I´m able to work with this little bit.

I took one of the actuators out from the rig and tried to investigate it. So now there isn’t weight at all. It still takes sometimes huge current to just be in closed_loop mode. Now I get current violation when I just input_position for the actuator. I did calibrate motor and encoder few times and I still have the same problem.

Checked that encoder works proberly. Iturned motor about one round and I get this:

In [117]: odrv0.axis1.encoder.shadow_count
Out[117]: -6528

In [118]: odrv0.axis1.encoder.shadow_count
Out[118]: 1942

Now the situation is that when I reboot the odrive, I can´t get it in closed_loop. Motor confiuration goes fine, but always after reboot it gives MOTOR_ERROR_UNKNOWN_PHASE_ESTIMATE. Also checked the cables and they should be fine. Motor wires are about 50cm long and 6 square mm thick.

Next I try to update it and flash the custom firmware again. Them I start everything all over again.

If you have some ideas what to do next, I am curious :slight_smile:

Try calibrating the encoder offset calibration when the motor is completely disconnected from anything, even the unloaded mechanism: just the motor. Then attach your load after calibration. Check to see if that improves things.

1 Like

Thank you for your suggestion.

I tried to do that, but before I get in to it I get another problem.

Even if my M1 channel motor is disconnected from everything, it takes huge amount of current even to calibrate itself. I limited the calibration current to 30A and it takes that 30A to calibrate. There isn´t any errors after the calibration. Motor is rotating really slowly and it feels something is breaking it even there isn´t anything. Motor is rotating freely when I rotate it by hand. It takes the limited current (25A) every time when it is rotating. I have tested two different motors and the situation is same with bought of them. In this point I calibrated motor and encoder several times without any difference.

My board version is 3.6. 56V and Firmware is now 0.5.5. I have upgraded ODrivetool to newest version (0.6.3). Should newest ODrivetool version work with ODrive 3.6 and FW 0.5.5 correctly? I tried to downgrade it, but I didn´t found solution to do that.

In [72]: odrv0.axis1.motor.config.phase_resistance
Out[72]: 0.05523667484521866

In [73]: odrv0.axis1.motor.config.phase_inductance
Out[73]: 2.2773856471758336e-05

Could my ODrive be broken or what could it be? Have anyone had same kind of problem before?

During calibration it will take 100% of calibration_current. After calibration, it will take some smaller current. Can you show the steps commands you are sending and what you see in the current after?

Now I am able to investigate this problem more.

Below is how I calibrate the motor and encoder. Right after the reboot it goes to closed_loop and I try to input a new position to the motor.


In [33]: odrv0.axis1.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

In [34]: dump_errors(odrv0)
system: no error
axis0
  axis: no error
  motor: no error
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error
axis1
  axis: no error
  motor: no error
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error

In [35]: odrv0.axis1.encoder.config.use_index = True

In [36]: odrv0.axis1.requested_state = AXIS_STATE_ENCODER_INDEX_SEARCH

In [37]: odrv0.axis1.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION

In [38]: odrv0.axis1.encoder.config.pre_calibrated = True

In [39]: odrv0.axis1.motor.config.pre_calibrated = True

In [40]: odrv0.save_configuration()

Oh no odrv0 disappeared


Reconnected to ODrive 366F386F3131 as odrv0

In [41]: odrv0.axis1.motor.current_meas_phA
Out[41]: -1.902398705482483

In [42]: odrv0.axis1.motor.current_meas_phB
Out[42]: 0.7268977761268616

In [43]: odrv0.axis1.motor.current_meas_phC
Out[43]: 1.3347551822662354

In [44]: odrv0.axis1.controller.input_pos = -5

In [45]: odrv0.axis1.motor.current_meas_phA
Out[45]: 1.0454494953155518

In [46]: odrv0.axis1.motor.current_meas_phB
Out[46]: -22.44758415222168

In [47]: odrv0.axis1.motor.current_meas_phC
Out[47]: 20.755708694458008

In [48]: odrv0.axis1.motor.current_meas_phA
Out[48]: 1.2788761854171753

In [49]: odrv0.axis1.motor.current_meas_phB
Out[49]: -22.372968673706055

In [50]: odrv0.axis1.motor.current_meas_phC
Out[50]: 20.80972671508789

In [52]: odrv0.axis1.requested_state = AXIS_STATE_IDLE

In [53]: dump_errors(odrv0)
system: no error
axis0
  axis: no error
  motor: no error
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error
axis1
  axis: no error
  motor: no error
  DRV fault: none
  sensorless_estimator: no error
  encoder: no error
  controller: no error

You can see from the phase currents that they are near the limit (25A) and they stays there till I put the motor to idle. Motor is rotating really slowly when I input a new position to it, and it feels like something is braking it really hard. Also if I try to rotate the motor when it is in closed loop and after I input new position to it, I can’t rotate it any where. Motor get stuck and it doesn´t go to the input position. If I set up a new position to it, it won´t do anything.

Before I input new position it rotates more freely but it tries to keep the position like it should do.

After I but the motor to idle, I can rotate the motor freely without any problem with my hand.

I also calibrated another odrive after the procedures above with different motors and encoders and there wasn´t any problems.

Do you have any suggestion what I can do next?

I think I figured out this problem. Encoders was slipping on both motors which I was testing. now I get them calibrated again properly, but I didn´t have time to test the rig yet.

1 Like