I am using FPGA board and servo, I read that with PWM I can control where the servo will rotate. If the duty cycle in PWM is 1.5 ms it goes to the center, if it is 2 ms it goes to clockwise and if it is 1 ms it rotates to counter-clockwise. But, I couldn’t find any clue on how to control the speed of the servo. Can you help me please?
3 Answers
Vary the voltage to the servo. If your servo operates full power at 5V at 2.5V it will operate at half speed.
If your FPGA can output an analogue signal you could use that to drive the motor speed, otherwise you'll need to put in a DAC to get the analogue signal.
Many of the dedicated servo-controlling boards include an option to set the speed for each servo. I know for a fact that the Pololu Maestro boards do (as I've used those myself), and I'd expect that the Lynxmotion and Adafruit branded boards also have that feature. But, FPGA boards don't have it built in. You'll need to create your own function to send a signal for incremental movements at an interval.
Lowering the voltage can work, but I believe that it lowers the torque as well, so that may not be ideal for your situation.
The main application of servos is to move to a position, not at a constant speed, but in order to change the speed while maintaining the torque, you can simply slowly change the pwm duty cycle from one value to another (eg 1500 to 2000) and the servo will slowly move. If you would like to control the velocity precisely, then a motor with an encoder output would be better.