A servo motor uses servo mechanism, which is a closed loop mechanism that uses position feedback to control the precise angular position of the shaft. Stepper Motors, which is an open loop system can also be used for precise angular control. But Servo Motors are preferred in angular motion applications such as robotic arm. Moreover controlling of servo motors are very simple, easy and needs no extra hardware like stepper motor. Usually hobby circuit servo motors have three wires. Two of them are red and black which is used to give power to the motor and the third wire is used to provide control signal for angular position. It uses Pulse Width Modulated (PWM) waves as control signals. The angle of rotation is determined by the width of the pulse at the control pin. The servo motor used here is having angle of rotation from 0 to 180 degrees. We can control the exact angular position by varying the pulse between 1ms to 2ms. Before using this in your application, please refer the datasheet of your servo for angle and pulse width informations.
Circuit Diagram
8MHz crystal is used to provide the required clock for 8051 microcontroller and 22pF capacitors are used to stabilize the operation of crystal. 10KΩ resistor and 10μF capacitor is used to provide the required Power On Reset (POR) to the microcontroller. Control of Servo Motor is connected to first pin of Port 2.
Keil C Code
#include<reg52.h> #include<stdio.h> #include <intrins.h> sbit motor_pin = P2^0; void Delay(unsigned int); void Delay_servo(unsigned int); void main() { motor_pin = 0; do { //Turn to 0 degree motor_pin = 1; Delay_servo(50); motor_pin = 0; Delay(1000); //Turn to 90 degree motor_pin=1; Delay_servo(82); motor_pin=0; Delay(1000); //Turn to 180 degree motor_pin=1; Delay_servo(110); motor_pin=0; Delay(1000); }while(1); } void Delay(unsigned int ms) { unsigned long int us = ms*1000; while(us--) { _nop_(); } } void Delay_servo(unsigned int us) { while(us--) { _nop_(); } }
Download Here
You can download Keil C files and Proteus files here…