Setting the absolute speed of a continuous rotation servo

Hello everyone,

I am doing a project which requires a servo to spin accurately at a specific speed.

My first thought was to use a position servo (the "normal" servo whose position can be set by PWM signals) and programme the delay between each increment of the position.

However, I have just come across the "continuous rotation servo" whose speed can be set directly. I learned that we can use values from 0-180 to set the speed (90 being stop), but these values do not set the absolute speed (say, 30 degrees per second) of the spin. Does anyone know if there is any way of doing it?

Thanks a lot!


It will vary depending on the servo you use. The Arduino has no way to tell how fast it is rotating. It may well vary somewhat even with servos that are "identical".

All you can do is to find out by experiment what different values cause the servo to do.

Most people use a shaft encoder to measure the rotation rate, then set motor power accordingly.

I glued a hall sensor to a continuous servo and a small magnet on the rotating horn. Read the pulses....

What is called a "continuous rotation servo" is not a servo of any kind. It used to be a servo, then the feedback
mechanism was stripped out leaving a tiny open-loop motor controller.

You are asking for a servomotor proper, ie a motor with free rotation, motor controller and velocity feedback.

Stepper motors are ideal for this task.

Thanks everyone for your kind help! I finally decided to use a proper servo motor!