170 likes | 430 Views
Servos. The material presented is taken from a variety of sources including: http://www.seattlerobotics.org/guide/servos.html , http://www.baldor.com/pdf/manuals/1205-394.pdf , and Parallax educational materials at http://learn.parallax.com/. Overview.
E N D
Servos The material presented is taken from a variety of sources including: http://www.seattlerobotics.org/guide/servos.html, http://www.baldor.com/pdf/manuals/1205-394.pdf, and Parallax educational materials at http://learn.parallax.com/
Overview • Servo motorsare used for angular positioning. They typically have a movement range of 180 deg but can go up to 210 deg. • The output shaft of a servo does not rotate freely. It seeks a particular angular position under electronic control. • Servos are typically rated by torque and speed. A servo rated 40 ounce-in/.21 means that at 1 inch from the hub, the servo can exert 40 ounces of force and move 60 deg in 0.21 sec.
What makes a Servo • Servo motors and are constructed out of basic DC motors, by adding: • some gear reduction • a position sensor for the motor shaft • an electronic circuit that controls the motor's operation • The basic hobby servo has a 180:1 gear ratio. The motor is typically small. • Typically, a potentiometer (variable resistor) measures the position of the output shaft at all times. • An informative link
Feed-back loop open-loop closed-loop
Control • An external controller (such as the Arduino) tells the servo where to go with a signal know as pulse proportional modulation (PPM) or pulse code modulation (which isoften confused with pulse width modulation, PWM). • PPM uses 1 to 2ms out of a 20ms time period to encode information.
PPM • A control wire communicates the angular movement. The angle is determined by the duration of the pulse on the control wire. • The servo expects a pulse every 20 millisec (.02 seconds). The length of the pulse determines how far the motor turns. • For a 1.5 millisecond pulse, the motor turns to the 90 degree position (i.e., the neutral position). • If the pulse is shorter than 1.5 ms, the motor turns the shaft to closer to 0 degrees. If the pulse is longer than 1.5ms, the shaft turns closer to 180 degrees.
PPM • Each pulse is from 1300 to 1700 microsec (μs) in duration • The pulses repeat about 50 times each second---once every 20 millisec
PPM • The amount of power applied to the motor is proportional to the distance to be traveled. • If the shaft needs to turn a large distance, the motor runs at full speed. • If it needs to turn a small amount, the motor runs at a slower speed.
Modified Servos • Servo motors can also be retrofitted to provide continuous rotation: • Remove mechanical limit (revert back to DC motor shaft). • Remove pot position sensor (no need to know position) and replace it with 2 equal-valued resistors with a combined resistance equivalent to that of the pot. Makes the servo “think” it is in the 90 deg position. Not always necessary
Modified Servos • The idea is to make the servo think that the output shaft is always at the 90 degree mark. • This is done by removing the feedback sensor, and replacing it with an equivalent circuit that creates the same readings as the sensor at 90 degrees. • Then, the control signal for 0 degrees causes the motor to turn full speed in one direction. The signal for 180 degrees causes the motor to turn full speed the other direction. • Since the feedback from the output shaft is disconnected, the servo continues in the specified direction as long as the signal remains.
Parallax Servos • The parallax servos are modified servos with the potentiometer intact. • The potentiometer (a.k.a., pot) should be adjusted to make the servo think that it is at the 90 degree mark.
Parallax Servo Connections Servo Connector: Black – ground Red – power White – signal
Calibration Program #include <Servo.h> Servo myServo; void setup() { myServo.attach(9); myServo.writeMicroseconds(1500); // Stop } void loop() { }
Demonstration Program #include <Servo.h> Servo myServo; // Create Servo object void setup() { myServo.attach(9); // Servo is connected to digital pin 9 } void loop() { myServo.writeMicroseconds(1700); // Counter clockwise delay(2000); // Wait 2 seconds myServo.writeMicroseconds(1300); // Clockwise delay(2000); myServo.writeMicroseconds(1500); // Stop delay(2000); }
Using Two Servos and Angles to Specify Movement #include <Servo.h> Servo servoLeft; // Define left servo Servo servoRight; // Define right servo void setup() { servoLeft.attach(10); // left servo on pin 10 servoRight.attach(9); // right servo on pin 9 } void loop() { forward(); // move forward delay(2000); // wait 2000 millisec reverse(); delay(2000); turnRight(); delay(2000); turnLeft(); delay(2000); stopRobot(); delay(2000); } http://www.robotoid.com
Using Two Servos and Angles to Specify Movement---continued void forward() { servoLeft.write(0); servoRight.write(180); } void reverse() { servoLeft.write(180); servoRight.write(0); } void turnRight() { servoLeft.write(180); servoRight.write(180); } void turnLeft() { servoLeft.write(0); servoRight.write(0); } void stopRobot() { servoLeft.write(90); servoRight.write(90); }