Selection Criteria The basic requirement for the project is to use some kind of a motor in order to rotate both the arms. Two types of motors are considered in order to perform this job. • Stepper Motor • Servo Motor A stepper motor works with permanent magnets, which are attached to the output shaft. Around the body of the motor is a series of coils that create a magnetic field that interacts with the permanent magnets. When these coils are turned on and off the magnetic field causes the rotor to move. As the coils are turned on and off in sequence the motor will rotate forward or reverse. A servo is basically controlled by sending them a pulse of variable widths, which move the output shaft accordingly. Differences Various differences can be pointed out between both the motors, but the solid reason for bending towards a servo is due to its position feedback control. Usually a stepper motor easily serves the purpose of a servo in these kind of robotic arms, as high rotations per min (rpm) is not required. The stepper motor would probably be better than a servo for a general robotic arm, where high speed is not a priority due to its high holding torque nature and a comparatively cheaper cost. Therefore, even though a stepper motor would be a better choice for a non-industrial robotic arm, where high acceleration is not a priority, the servo motor is considered for our project as it operates similar to a stepper motor at low speeds but also provides positional feedback. Option Chosen: Servo (due to its position feedback ability)
Servo A servo consists of several internal main parts: • The motor • Gearbox • Position Sensor • Error Amplifier • Motor Driver • Circuit to decode the requested position
Servo Motor Block Diagram Outside the casing, all we see is, three wires coming out. • Red – Power (+5V) • Black - Ground • White/Yellow (depending on the servo) – Coded Signal
How Servo works
Servo Wires
The servo consists of an output shaft. This shaft can be positioned to specific angular positions by sending the servo a coded signal. As long as the coded signal exists on the input line, the servo will maintain the angular position of the shaft. As the coded signal changes, the angular position of the shaft changes.
This coded signal is a pulse of varying length approximately every 20 msec. The length of the pulse is usually 1 or 2 milliseconds. Where does the coded signal come from? The signal controlling a servo can be supplied by the microcontroller in two ways: • Pulse Width Modulation (PWM) • Timers Usually, PWM generators are most commonly used due to less complexity in software algorithms. But in our case, it won’t be so useful due to the usage of multiple servos. This increases the complexity in the hardware, as we would have to share one PWM generator between several servos, which would require switching components outside the microcontroller. The PWM generator is designed to generate an accurate pulse between 0% and 100% duty cycle, but we need something in the order of 5% to 10% duty cycle (1ms/20ms to 2ms/20ms). If a typical PWM generator is 8 or 10 bits, then we can use only a small fraction of the bits to generate the pulse width we need and so we loose a lot of accuracy. Therefore, using simple timers and software interrupts would be the apt method for our case. How does the shaft move? The control wire is used to communicate the angle. The angle is determined by the duration of a pulse that is applied to the control wire. This is called Pulse Coded Modulation. The servo expects to see a pulse every 20 milliseconds (.02 seconds). The length of the pulse will determine how far the motor turns. A 1.5-millisecond pulse, for example, will make the motor turn to the 90-degree position (often called the neutral position). If the pulse is shorter than 1.5 ms, then the motor will turn the shaft to closer to 0 degrees. If the pulse is longer than 1.5ms, the shaft turns closer to 180 degrees.
Pulse variation for servo control How is pulse width converted to voltage? The control pulse is fed to a pulse width to voltage converter. This circuit charges a capacitor at a constant rate while the pulse is high. When the pulse goes low, the charge on the capacitor is fed to the output via a suitable buffer amplifier. This essentially produces a voltage related to the length of the applied pulse. The circuit is tuned to produce a useful voltage over a 1ms to 2ms period. The output voltage is buffered and so does not decay significantly between control pulses. How do we know the current position of the servo? A sensor, usually a potentiometer, reads the current rotational position of the output shaft, which produces a voltage that is related to the absolute angle of the output shaft. The position sensor then feeds its current value into the Error Amplifier, which compares the current position with the commanded position from the pulse width to voltage converter. In order to record the current position of the servo, all we need to do is to connect a wire to the potentiometer to read the voltage values at all positions. These readings can be sent to the ‘tracking’ arm to move accordingly.
Torque Calculation The approximate torque required at each joint has to be calculated initially to choose the best servo required. The servos available in the market are usually denoted in the units ‘oz-in’ or ‘Kg-cm’. If we consider a basic light servo with 3.2 Kg-cm; it means that if there was
a horizontally oriented weightless robot arm 1cm long and a 3.2 Kg weight applied on the end, the servo could keep the arm straight. If it was a load of 3.1Kg, the servo could accelerate the arm with 0.1 Kgcm. of torque. If it was a 3.3 Kg weight, it would move downwards with a torque of 0.1 Kg-cm, despite the servo's best efforts. If gravity is not a factor (ie, not lifting against gravity), it would accelerate the mass at a rate of Torque / (mass x distance^2) rotations/second. Gravity pulls down against any rotational arm with a torque of mass x length of arm. So, take the torque provided by the motor, subtract the torque created by gravity, and if the number is still greater than zero the arm will move in the direction the motor is turning. So in our case, we will need different servos at each joint of the arm, i.e., two similar servos for both the arms at each joint. The gripper would need the lightest servo, only depending on the weight of the object lifted by the arm. But when it comes to the second joint from the gripper, it should be powerful enough to carry everything above it including the object, gripper and the weight of the material above it. So in order to achieve this, that joint would require a stronger servo compared to the one used at the gripper. It goes for the rest of the joints below. The base servo would have to be the strongest in the entire arm, while the gripper has the lightest. Approximate Parameters · Gripper Servo 1 (Gripping) Total weight: 200g - Object to be lifted – 200g (maximum) · Gripper Servo 2 (Rotating the wrist) Total weight: 300g - Gripping servo 1 – 50g - Object to be lifted – 200g - Gripper – 50g · Joint Servo Total weight: 450g - Gripper servo 1 – 50g - Gripper servo 2 – 50g - Object to be lifted –200g - Gripper – 50g - Material – 100g (includes body and servo brackets) · Base Servo 1 (Moving Up and Down) Total weight: 550g - Gripper servo 1 – 50g - Gripper servo 2 – 50g - Gripper – 50g - Object to be lifted – 200g - Joint servo – 50g - Material – 150g (includes body and servo brackets)
· Base Servo 2 (Moving Sideways) Total weight: 650g - Gripper servo 1 – 50g - Gripper servo 2 – 50g - Gripper – 50g - Object to be lifted – 200g - Joint servo – 50g - Base servo 1 - 100g - Material – 150g (includes body and servo brackets) Length of link 1: 5 inches Length of link 2: 8 inches Acceleration required: Gripper Servo 2: 50 deg/sec^2 Joint Servo: 50 deg/sec^2 Base Servo 1: 50 deg/sec^2
Rough Sketch of the Arm where, W1: W2: W3: W4: W5: W6:
Weight Weight Weight Weight Weight Weight
of of of of of of
the the the the the the
Base servo 1 = 0.98 N joint = 0.98 N Joint servo = 0.49 N joint = 0.98 N Gripper servos (Rotating & Gripping) = 0.98 N object lifted + Gripper = (2 + 0. 49) N
L1: Length of the joint 1 = 6 inches = 15.24 cm L2: Length of the joint 2 = 8 inches = 20.32 cm M0: M1: M2: M3:
Base servo 2 (Sideways movement) Base servo 1 (Upwards movement) Joint servo Gripper servos (Rotating & Gripping)
Static Torque Joint 0: M0 = 0 N.m (as it is not affected by gravity) Joint 1: M1 (Tracking arm) = L1/2 * W2 + L1 * W3 + (L1 + L2/2) * W4 + (L1 + L2) * (W5+W6) = (15.24/2)(0.98) + (15.24)(0.49) + (15.24 + 20.32/2)(0.98) + (15.24 + 20.32)(0.98 + 2.45) = 1.6180 N.m = 16.5 Kg-cm = 229 oz-in Joint 1: M1 (User-controlled arm) = L1/2 * W2 + L1 * W3 + (L1 + L2/2) * W4 + (L1 + L2) * (W5+W6) = (15.24/2)(0.98) + (15.24)(0.49) + (15.24 + 20.32/2)(0.98) + (15.24 + 20.32)(0.98 + 0.49) = 1.02 N.m = 10.44 Kg-cm = 145 oz-in The torque for the 'user-controlled' arm at Joint 1 is lesser than the 'tracking arm' as it is not lifting the object. But in order to simplify the calculations, similar servos are used in both the arms at Joint 1. Joint 2: M2 = L2/2 * W4 + L2 * (W5+W6) = (20.32/2)(0.98) + (20.32)(0.98 + 2.45) = 0.7965 N.m = 8.12 Kg.cm = 112.78 oz-in
Joint 3: M3 = 0 N.m (distance is 0) Dynamic Torque It is too complicated to calculate the dynamic torque, as the arm does not denote a specific shape. So an approximation was done in order to calculate the total torque required.
Proposed Servos Gripper: Hitec HS-322HD Standard Heavy Duty Servo (http://www.robotshop.ca/hitec-hs-322hd-servo.html) - $11.30 • Speed: 0.15 sec @ 60° • Torque: 3.7 kg/cm – 51.38 oz/in • Size: 40x20x36.5 mm • Weight: 43 g - 1.51 oz • Karbonite Gear Wrist: Hitec HS-322HD Standard Heavy Duty Servo Link (http://www.robotshop.ca/hitec-hs-322hd-servo.html) - $11.30 • Speed: 0.15 sec @ 60° • Torque: 3.7 kg/cm – 51.38 oz/in • Size: 40x20x36.5 mm • Weight: 43 g - 1.51 oz • Karbonite Gear Elbow: Hitec HS-755HB Giant Scale Servo Link (http://www.robotshop.ca/hitec-hs755hb-servo.html) - $31.34 • Speed (sec/60o): 0.23 • Torque (Kg-cm/Oz-in): 13.2/183 • Size (mm): 59 x 29 x 50 • Weight (g/oz): 110 /3.88 Base: Hitec HS-805HB Giant Scale Servo Link (http://www.robotshop.ca/hitec-hs805BB-servo-motor.html) $44.77 • Speed (sec/60o): 0.14 • Torque (Kg-cm/Oz-in): 24.7/343 • Size (mm): 66x30x58 • Weight (g/oz): 152/5.26
Base (rotating): Hitec HS-805HB Giant Scale Servo Link (http://www.robotshop.ca/hitec-hs805BB-servo-motor.html) $44.77 • Speed (sec/60o): 0.14 • Torque (Kg-cm/Oz-in): 24.7/343 • Size (mm): 66x30x58 • Weight (g/oz): 152/5.26 Total servo cost for each arm (approx.) = $150