Microcontroladores: Control de dos servomotores con el PIC16F887.

Comparte en tus redes sociales.

Un servomotor funciona mediante la implementación del pwm (Modulación de Ancho de Pulso). 

Los servomotores tienen tres cables:

Cable rojo: Este cable es para la alimentación(positivo). 

Cable negro: Esta cable se utiliza para la conexión a tierra. 

Cable blanco: Es la línea de control por donde se le envía la señal de pulso.

cables de servomotor
Figura 1. Cables de servomotor

Partes de un servomotor

Sistema eléctrico: Permite generar el movimiento mediante el eje. 

Sistema de regulación: Este sistema está conformado por medio de engranajes, que permiten regular la velocidad y el torque. 

Sistema de control: Es el sistema que controla el movimiento del motor por medio de los pulsos eléctricos.

Potenciómetro: El potenciómetro es una resistencia variable. Con este elemento, es posible identificar el ángulo del eje del motor. 

partes del servo
Figura 2. Partes del servomotor

Giros en grados de un servomotor.

Grados servomotor
Figura 3. Grados servomotor

Hay servomotores en donde su eje gira a 360. El más común es cuando su eje gira a 180.

Programa: Controlar el giro de dos servomotores

Análisis.

Funciones: 

#include <16F887.h>: Librería utilizada para el microcontrolador PIC16F887

#use delay(clock=4000000): Habilita la frecuencia del sistema a 4MHZ.

#fuses XT,NOWDT,NOPROTECT: Son los que permiten la configuración del microcontrolador. 

#fuses XT: Habilita el oscilador del sistema.

#fuses NOWDT: Deshabilita el Watch Dog Timer.

#FUSES NOPROTECT: Deshabilita la protección contra lectura de la FLASH.

#byte PORTC=7 / #byte PORTC=0X07: Se define puerto C , que se sitúa en la dirección 0X07 de la memoria RAM. 

#byte PORTA=5 / #byte PORTA=0X05: Se define puerto A , que se sitúa en la dirección 0X05 de la memoria RAM. 

#byte TRISA=85 / #byte TRISA=0X85: Define el  TRISA, que se sitúa en la dirección 0X85 de la memoria RAM. 

#byte TRISC=87 / #byte TRISC=0X87: Define el TRISC que se sitúa en la dirección 0X87 de la memoria RAM. 

TRISC=0 : Define los pines del puerto C como salidas digitales.

TRISA=255 : Define los pines del puerto A como entradas digitales.

bit_clear(puerto,pin): Pone en 0 lógico el bit de puerto definido. 

bit_set(puerto,bit): Pone en 1 lógico el bit puerto definido.

bit_test(puerto,bit): Se evalúa si está activado( 1 lógico) el bit del puerto definido. 

//Librería para el pic 16f887
#include <16F887.h>
//Bit de configuración para habilitar o deshabilitar lo que se necesita para el microcontrolador
#fuses XT,NOWDT,NOPROTECT
//Configurar la frecuencia del reloj del sistema
#use delay(clock=4000000)

//Define los registros que se situan en la memoria RAM

#byte PORTC=0X07
#byte TRISC=0X87
#byte PORTA=0X05
#byte TRISA=0X85

void main(){
//Los tris automáticamente define los pines como digitales
//Definir como salida digital el puerto C
TRISC=0;
//Definir como entrada digital el puerto A
TRISA=255;


while(1){
//Prueba el estado del bit cero del puerto A, devuelve un uno
 if(bit_test(PORTA,0)==1)
 {
//Pone en uno el bit cero del puerto c
     bit_set(PORTC,0);
//Retardo
     delay_us(1600);
//Pone en cero el bit cero del puerto c
     bit_clear(PORTC,0);
     delay_us(600);
 }
   else
   {
//Pone en uno el bit cero del puerto c
     bit_set(PORTC,0);
//Retardo
     delay_us(400);
//Pone en cero el bit cero del puerto c
     bit_clear(PORTC,0);
     delay_us(1800);
   }
//Prueba el estado del bit cero del puerto A, devuelve un uno   
if(bit_test(PORTA,1)==1){
//Pone en uno el bit uno del puerto c
     bit_set(PORTC,1);
     delay_us(1600);
//Pobe en cero el bit uno del puerto C
     bit_clear(PORTC,1);
     delay_us(600);
    }
      else{
//Pone en uno el bit uno del puerto C
        bit_set(PORTC,1);
        delay_us(400);
//Pone en cero el bit cero del puerto c
        bit_clear(PORTC,1);
        delay_us(1800);
      }
 }
}


CIRCUITO.
circuito
Figura 4. Circuito controlador de servos.

VIDEO DE FUNCIONAMIENTO.

CONTENIDOS RELACIONADOS.

 

CONTENIDOS MÁS RELEVANTES.

 

 

soy el administrador del sitio web. si tienes alguna duda, no dudes en contactarme

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *