Servo speed control

I have been working on an arduino uno based robotic arm for my school science olympiad team. It has been quite successful so far taking 4th place out of 40 in our last tournament. any ways enough with the bragging, lets get to my problem. I am controlling 6 servos with inputs from an rc receiver. please note that this is pwm not ppm as it is each signal that would normally go directly to a servo, not the same as ppm which some receivers allow people to read. I would like to control the speed of the servos with this not their position like normal. for example, if my range of signals in to the arduino is 0-100, when it reads 45-55 it should not move (dead zone) when i reads 40 it should go slowly backwards, and when it reads 0 it should be go very fast. obviously the same for going the other way. my current program has a set speed, which I can change by adjusting how far each servo moves before waiting and how long it waits. my question is how to get full speed variation put into this. this should allow for more precise movement, hopefully letting us score better. I will put some of my code below for reference. Thanks for the help in advance.

reading of receiver

 leftx = (pulseIn (2, HIGH, 100000))/10;  // reads pulse values and divides them by ten to get easier to use numbers between 100 and 200.

moving of one of the servos

 // if leftx is > 180 servo is not at limit turn right.  same other way.
        if(leftx > 160 && baserotatepos < 180)
          {
            baserotatepos+= 2;  //essentially how many degrees to turn before waiting 
            baserotate.write(baserotatepos);
            delay(2); // how long to wait before moving again (in milliseconds) 
          }
        if(leftx < 140 && baserotatepos > 0)
          {
            baserotatepos-= 2;
            baserotate.write(baserotatepos);
            delay(2);

Outside of varying the delay between incremental servo position commands, I'm not sure how easy that would be. I'm a bit of a newb here, but s I understand it, most servos use an internal driver to control the motor, and that is usually on or off.

That said, I'm wondering if you could control the speed by varying the input voltage to the servo. I am guessing that at it's lowest rated voltage it will turn slower than at it's highest rated voltage. Not sure how much variance this would be, but, it might give you an edge.

Two methods come to mind, driving he servo poWer from a PWM pin or building a digital pot controlled volage regulator. I'm thinking hat PWM controlling the servo power will be problematic,as the servo control circuit might not like having an interrupted power supply. But an analog power supply controlled by the arduino would be interesting.

If you really wanted to get complicated and do a bunch of hacking, you might be able to tear the servo apart. And use the servos motor control wires to send direction control signals to a PWM H bridge motor control board and have th arduino control he PWM on the same board. But at that stage, why not just bypass the internal servo control altogether? Grab the analog signal coming from the I
Servos internal POT, feed that to an analog in, and use a Motor control board to control he speed, direction and position based on command input and POT input.

There's a version of servo library with variable speed.

I can's find this version of the library. Do you have a link or something?

Varspeedservo

Alternatively, if your project could be adapted to this, the 360 degree rotation servos don't have position feedback (at least not easily) but rather are controlled just as you described. ie: Servo.write(95) is no movement but entering a number above or below that value will move it right or left at a speed determined by the offset. You could technically attach a digital compass to the servo and use that to track its movement in that case though it would most likely cost more than the servo itself.

Didn't know about the Varspeedservo library; will have to check that out.

I would use continuous rotation servos but they don't make them big enough, and the one I need are two hard to mod for continuous rotation