miércoles, 24 de febrero de 2016

Micro Controladores PIC. Modulación PWM. Control Remoto de Motor

Control de Velocidad  y de Giro de un Motor de manera remota mediante el uso de un Micro controlador PIC  haciendo uso de la modulación PWM



Para controlar el Motor de manera remota pueden descargar la aplicaron  RC Bluetooth Control desde:

Google PLay:


Amazon:


Para realizar el control del motor mediante comando de voz pueden descargar  la aplicación RC Bluetooth PRO desde :

Google Play:


Amazon:


Pueden Descargar el código para programar el PIC :


//#include <16f877A.h>
#include <18F4550.h>
#device ADC=8
//#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen

// CONFIGURACIÓN DE LOS FUSES PAR EL ROGAMADO Y VELOCIDAD DEL CRISRTAL
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

// CONFIGURACIÒN VELOCIDAD DL RELOJ DEL MICROCONTROLADO
#use delay (clock = 20M )
#use fast_io(c)
// CONFIGURACIÓN VELOCIDAD DE TRANSMISIÓN SRAL Y OS PINESD TXXXY RX
#use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)

// PRIORIDAD A LAS INTERRUPCIONES
#priority rda,timer1,ad
// BIBLOTECA MODIFCADA DE LCD.H PARA QUE TRABAJE CONEL PUERTO D
#include <LCD4x16_2016.c>
//#include <LCD4x16_877A.c>

// CONFIGURACION DE LOS PUERTOS
#byte PUERTO_A=0xf80
#byte PUERTO_B=0xf81
#byte PUERTO_C=0xf82
#byte PUERTO_D=0xf83
#byte PUERTO_E=0xf84

// VARIABLE QUE CAPTURA EL CARACTER QUE SE ENVÍA POR TRANSMISION SERIAL DESDE EL TELEFONO O TABLET
char valor='$';
// VARIABLE QUE INDICA SI SE RECIBIO UN CARACTER SW=1 Y SI NO SE RECIBIO CARACTERES SW=0
int sw=0;
// STRING DEL MENSAJE DEL PIC
char dato[30]="PIC Rx=";
// STRING DEL MENSAJE DEL PIC QUE SE TRANSMITEPOR EL PUERTO SERIAL
char mensajeTx [12];
// VARIABLE PARA LA VELOCIDAD DEL MOTOR
INT velMotor=255;
// VARIABLES SENTIDO DEL GIRO
int izqMotor=0,derMotor=0;

//INTERRUPCION SI SE RECIBE POR EL PUERTO SERIAL

#INT_RDA //RS232 receive data available
void  recibido()
{
// CAPTURA EL CARATCTER QUE SE RECIBE POR TRANSMISION SERIAL
while ( kbhit())
{
valor=getc();//recibe el dato del pc y lo guarda en valor
sw=1;

}
}

void main ()

{
int i;
  Setup_adc_ports(NO_ANALOGS);
  lcd_init();
  set_tris_a(0b00000000);
  set_tris_b(0b00000000);
  set_tris_c(0b10000000);
  set_tris_d(0b00000000);
  output_low(PIN_C2); //CCP1
  setup_ccp1(CCP_PWM);
  setup_ccp2(CCP_PWM);
  setup_timer_2(T2_DIV_BY_1, 255, 1);
  lcd_init();
 lcd_gotoxy(1,1);
 printf(lcd_putc,"Modulacion PWM");
 output_a(0xFF);
 enable_interrupts(GLOBAL);
  enable_interrupts(INT_RDA);
 
  // Apago los LED conevatados al Puerto A
  output_a (255);
while(true)
{



switch(valor)
{
//SELECCIONAMOS LA VELOCIDAD DE GIRO DEL MOTOR

           case '9': velMotor=255;
           break;
           case '8': velMotor=226;
           break;
           case '7': velMotor=199;
           break;
           case '6': velMotor=170;
           break;
           case '5': velMotor=142;
           break;
           case '4': velMotor=114;
           break;
           case '3': velMotor=85;
           break;
           case '2': velMotor=57;
           break;
           case '1': velMotor=28;
           break;
           case '0': velMotor=0;
           break;
           // SELECCIONAMOS EL SENTIDO DE GIRO
case 'R': izqMotor=0;
         derMotor=velMotor;
         output_bit(PIN_A1,0);
         output_bit(PIN_A2,255);
         output_bit(PIN_A3,255);
           break;

case 'L': izqMotor=velMotor;
         derMotor=0;
         output_bit(PIN_A1,255);
         output_bit(PIN_A2,0);
         output_bit(PIN_A3,255);
           break;
           // SELECCIONAMOS APAGAR EL MOTOR
case 'X': izqMotor=0;
         derMotor=0;
         output_bit(PIN_A1,255);
         output_bit(PIN_A2,255);
         output_bit(PIN_A3,0);
           break;
case 'x': izqMotor=0;
         derMotor=0;
         output_bit(PIN_A1,255);
         output_bit(PIN_A2,255);
         output_bit(PIN_A3,0);
           break;
}


//EL MOTOE GIRA EN FUNCION DEL CARACTER RECIBIDO    
set_pwm2_duty(izqMotor);
set_pwm1_duty(derMotor);

// SE IMPRIME EL CARACTER RECIBIDO EN PANTALLA Y SE TRANSMITE UN MENSAJE POR EL PUERTO SERIAL

if (sw==1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"%S %c","Recibido=",valor);
sprintf(mensajeTX,"%s %c",dato,valor);
puts(mensajeTx);
sw=0;
//valor='$';
}



 // SE INICIALIZA LA VARIABLE RECIBIDA    

     
     

}


}

No hay comentarios:

Publicar un comentario