interfacing servo motor with 8051 using keil c

Not rated 31,193

Circuit Image

A servo motor employs a servo mechanism, which is a closed-loop system that utilizes position feedback to accurately control the angular position of its shaft. Stepper motors, which operate as an open-loop system, can also achieve precise angular control, but servo motors are generally favored for angular motion applications, such as robotic arms. Additionally, controlling servo motors is straightforward and does not require extra hardware, unlike stepper motors. Typically, hobby servo motors consist of three wires: two (red and black) for power supply, and a third wire for the control signal that dictates angular position. The control signals are Pulse Width Modulated (PWM) waves, where the angle of rotation is determined by the pulse width at the control pin. The servo motor in this context has a rotation range from 0 to 180 degrees, with the exact angular position controlled by varying the pulse width between 1 ms and 2 ms. It is advisable to refer to the datasheet of the specific servo for details regarding angle and pulse width specifications. An 8 MHz crystal oscillator is employed to provide the necessary clock signal for the 8051 microcontroller, and 22 pF capacitors are used to stabilize the crystal's operation. A 10 kΩ resistor and a 10 µF capacitor are included to ensure the microcontroller receives the required Power-On Reset (POR). The control for the servo motor is connected to the first pin of Port 2.

The provided code snippet includes the necessary instructions for controlling the servo motor through the 8051 microcontroller. The servo motor control is initiated by setting the motor_pin to low, followed by a loop that sequentially rotates the motor to 0 degrees, 90 degrees, and 180 degrees. Each position is achieved by sending a high signal to the motor_pin for a specific duration, determined by the Delay_servo function, which introduces a delay in microseconds. The main function executes this loop indefinitely, allowing continuous operation of the servo motor. The Delay function introduces a longer delay in milliseconds, while the Delay_servo function is designed for finer control of the servo's movement timing. This setup is essential for applications requiring precise angular positioning, ensuring that the servo motor operates smoothly and accurately within its defined range.A servo motor uses servoG‚ 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. G‚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 betweenG‚1msG‚to 2ms. Before using this in your application, please refer the datasheet of your servo for angle and pulse width informations.

8MHz crystal is used to provide the required clock for 8051 microcontroller and 22pF capacitors are used to stabilize the operation of crystal. 10KG © resistor and 10G 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. #include #include #include sbit motor_pin = P0; 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_(); } } 🔗 External reference




Warning: include(partials/cookie-banner.php): Failed to open stream: Permission denied in /var/www/html/nextgr/view-circuit.php on line 713

Warning: include(): Failed opening 'partials/cookie-banner.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/nextgr/view-circuit.php on line 713