Motor running different speeds in different directions


#1

So the Odrive is driving a “gimbal” motor(ratings are 2.8A and 49v and it is rated for 3000rpm) it’s an industrial servo motor. I plan on getting some higher resistance shunt resistors to run it as a high current motor eventually. The problem is that SOMETIMES the motor goes faster in one direction, this is position control, it starts going the same speed both ways then it starts drifting to faster one way and slower the other, it also draws increased current when going slow. I already checked to be sure the encoder was secured to the motor. Any ideas why I could try to fix this


#2

Hm it’s a bit hard to visualise what you are describing. Maybe a video or some plots would help.


#3

Here’s a video of it slowing down in one direction, it is being driven by an arduino with serial commands. You can definitely hear the speed variations as is running.


#4

What is the base speed of the motor (kv * bus voltage), what speed are you running the motor at?
Did you change the .encoder.config.calib_range from the default?


#5

The motor is rated 3000rpm at 49v, and the Odrive supply voltage is 41v. I’m not exactly sure what speed it is but it’s around 1000-2000rpm. I haven’t touched .encoder.config.calib_range I just researched it and is the calibration precision what it changes? If so should it be changed from default.


#6

Are you running in velocity or position control mode? I assume you have a non-zero integrator gain?

Assuming velocity control, can you show a plot of this?

start_liveplotter(lambda:[odrv0.axis0.controller.vel_integrator_current, odrv0.axis0.controller.vel_setpoint, odrv0.axis0.encoder.vel_estimate/10000])

#7

I am running in position control mode, this is the graph from itFigure_2


#8

this is the graph if its in velocity mode
Figure_4


#9

Ah okay sorry the scaling isn’t very good to see what’s going on. Can you redo both plots with this command? (feel free to rescale until it fits nicely together, but then say what the command was).

start_liveplotter(lambda:[odrv0.axis0.controller.vel_integrator_current, odrv0.axis0.controller.vel_setpoint/100000, odrv0.axis0.encoder.vel_estimate/100000])