Controlling servo speed



By default when a servo is moved it moves at full pace, which with a robotic arm is enough to fling the object being carried across the room.

I have tried moving the servo in steps, but it ends up being a series of jerky movements which is worse in some ways as the held item gets jiggled out of grip.

i can try reducing the voltage but this will decrease the torque available and potentially increase the current - neither desirable.

Seems to me this must be a common issue for those working with robot arms - is there a solution or is it time to find another interface method/product ?


It seems you are on the right track trying to do it in steps, I think you just need to use smaller steps.

If the signal is at 1900uS and you want a slow and smooth movement to 1200uS, try decreasing the pulse time by 1uS every 5ms. That should result in a smooth movement that takes (1900 - 1200) * 5ms = 3.5 seconds to complete. You can change the loop time (5ms in this example) or the step size (1uS in this example) to adjust performance.


Thanks for the reply - the big constraint here is i’m teaching my son age 9 to program and we’re starting with Scratch, so there isn’t the level of control that would help.

i was hoping in the pivotpi firmware there might be a command like ‘Pivot set speed 50%’ and then when the servo was moved, the firmware would move in steps like you suggest above.

However I think this is wishful thinking on my part, and we’l h ave to live with the restriction until we move to a language or interface with more granular control.