The motor can't reach half of its maximum speed

Please help me.

Environment :

Motor: RS PRO 536-6030
Encoder: AS5601
ODrive: 24V odrive 3.6v

I have set the maximum speed of the motor as follows

odrv0.axis0.controller.config.vel_limit = 50

Position control of the motor has been performed.

odrv0.axis0.controller.input_pos = 0
odrv0.axis0.controller.input_pos = 100

However, the motor only moves very slowly.
I monitored the speed with liveplotter. The maximum speed was only 8 [turns per second].

The performance of the motor seems to be good enough at 4000 rpm.

I tried with other motors, encoders, and ODrive, but the same thing happened.

Ok and you have it set for 8 pole_pairs and appropriate encoder .cpr? Did you set the current_limit? Are you using INPUT_MODE_PASSTHROUGH?

What voltage are you giving the odrive?

Thank you kindly ! ! !
Now I checked these setting.

pole pairs => 4 # The data sheet says the motor has 8 poles, so I entered half that value.
encoder cpr => 64 # I wrote the value as described in the encoder's support page. 
current_lim => 20
input_mode => 1 # INPUT_MODE_PASSTHROUGH
Supply voltage => 21.19 [V]

So, Now I run this command,


And, set the configs

odrv0.axis0.controller.config.vel_limit = 20
odrv0.axis0.motor.config.current_lim = 20
odrv0.axis0.encoder.config.cpr =  64 # I wrote the value as described in the encoder's support page. 
odrv0.axis0.motor.config.pole_pairs = 4 # The data sheet says the motor has 8 poles, so I entered half that value.
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.torque_constant = 8.27 / 4000 * 24 
odrv0.config.enable_brake_resistor = True
odrv0.axis0.controller.config.pos_gain = 20
odrv0.axis0.controller.config.vel_gain = 0.0016
odrv0.axis0.controller.config.vel_integrator_gain = 0

Then, I save, calibrate, and set the loop control.

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

There is no error.

These appear to have worked, so I used the position command to rotate the motor.

odrv0.axis0.controller.input_pos = 50

However, the speed seemed slow. So, I used liveplotter to display the speed.


The value was roughly 7.8.

What should I try next?

Why did you do this? That will probably cause it to run really poorly. You need to increase the vel_gain and make the integrator gain non-zero…

I have the same problem with my 6374 motor, I’m using trajectory input mode but the maximum speed during coasting is 464 rpm(7.7 r/s).

odrv0.axis0.trap_traj.config.vel_limit = 15
odrv0.axis0.trap_traj.config.accel_limit = 2
odrv0.axis0.trap_traj.config.decel_limit = 2
odrv0.axis0.motor.config.torque_constant = 8.27 / 170
odrv0.axis0.controller.config.vel_limit = 20
odrv0.axis0.controller.config.pos_gain = 20
odrv0.axis0.controller.config.vel_gain = 0.3
odrv0.axis0.controller.config.vel_integrator_gain = 0.4

Power supply is 24V 10A

odrv0.axis0.motor.config.current_lim = 10