Вы находитесь на странице: 1из 7

FACULTAD DE INGENIERA ELCTRICA Y ELECTRNICA

Laboratorio de Control

Experiencia # 4 TEMA:Diseo de un Sensor de Velocidad utilizando un Microcontrolador


Integrantes: Castellanos Michue, Lenin Cullanco Medina, Omar Meza Herrera, Luigi Profesor: Ing. Valenzuela de la Cruz Basilio Seccin: N

Lima-2011

I.

Objetivo

Disear un sensor para la medicin de Velocidad de un motor DC, utilizando un Microcontrolador, en este caso especifico un PIC18F4550. II. Procedimiento de Diseo

El proyecto consiste en sensar y determinar la velocidad de un motor DC, para esto partimos del modelo de un motor DC que se encuentra en el mercado, el cual viene incluido con un encoder de 400 ranuras, con lo cual obtendremos 0.9 de separacin entre dos ranuras consecutivas. La ficha tcnica del motor se adjunta a continuacin, asi como la foto del mismo. HITACHI DC MOTOR Modelo D06D401E Volts 30 Output 42W Amp 2.0 Rating Cont. RPM 2750 INS.CL B RICOH P/N Encoder 400P/R

Una vez obtenido las especificaciones del motor que vamos a utilizar, procedemos a disear el sensor con el Microcontrolador. Para poder disear el sensor, primero debemos conocer el funcionamiento fsico del Encoder del motor DC que vamos a utilizar, por lo que hemos investigado y con nuestras experiencias previas en otros cursos sabemos que el encoder al cual hacemos referencia consta bsicamente de un disco con varias ranuras, un emisor de luz y un Fotoreceptor. En el momento que el haz de luz pasa por la ranura, es detectado por el Fotoreceptor y este da un 1 lgico (5 Voltios), cuando el haz de luz choca con el disco, el foto receptor no detectara presencia de luz alguna con lo que el circuito se abre y se obtiene un 0 lgico (0 Voltios). Se adjunta la siguiente imagen del esquema bsico de un Encoder para que se entienda mejor el concepto.

Conociendo el principio de funcionamiento del Encoder, se nos hace ms fcil el diseo del sensor, comenzamos primero en modelar este Encoder en el Proteus, el cual va a ser nuestro software de simulacin para esta experiencia, para esto utilizaremos una Fuente Clock ( Reloj), el cual va a modelar la salida del Encoder, esto quiere decir que nos va a entregar los pulsos, de acuerdo a la frecuencia que le configuremos. Una vez obtenido el modelo del Encoder, nos centraremos en Programar el Microcontrolador, para esto ya tenemos definido que la cantidad de ranuras de nuestro encoder es de 400, entonces utilizamos el bloque de TIMER0 del Microcontrolador y lo configuramos como modo contador externo de pulsos, de esta manera obtendremos la cantidad de pulsos que nos d el encoder en un determinado tiempo. Definimos el tiempo que vamos a emplear para contar los pulsos, el cual es de 500ms, para determinar este tiempo de sensado utilizamos el bloque de TIMER2 del Microcontrolador, como estamos utilizando un reloj de 48Mhz para el PIC, esto no nos permite llegar a generar una interrupcin mayor a 7ms, por lo que nuestra interrupcin ser un divisor de 500ms, en este caso 5ms, esto lo repetimos 100 veces para obtener los 500ms deseados. Luego que pasen los 500ms, almacenamos la cantidad de pulsos proporcionados por el encoder y lo almacenamos en nuestra variable conta. Para obtener la velocidad el procedimiento es el siguiente:

Obtenida la velocidad en rad/s del motor, una vez obtenido y almacenado en nuestra variable wrad, este valor es enviado para que sea mostrado en una pantalla LCD. A continuacin se adjunta el Codigo para el Microntrolador PIC18F4550, asi como tambin la simulacin en el software Proteus. III. Cdigo del Sensado del Motor en PIC

#include <18F4550.h> #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,MCLR #use delay(clock=48000000) #include "flex_lcd.c" int num_timer=0; int lec_lcd=0; int16 conta=0; float wrad=0; void lcd_encoder() // Funcion para que muestre en la pantalla LCD el valor de la velocidad { if(conta==0) { lcd_gotoxy(1,2); printf(lcd_putc," Motor Inmovil "); // Si la velocidad es 0 return; } else { lcd_gotoxy(1,2); printf(lcd_putc," Wr= %frad/s ",wrad); // Caso contrario muestra la velocidad return; } }

#INT_TIMER2 void lee_encoder(void) //Funcion que se activa con la interrupcion y lee la cantidad de pulsos { if(num_timer==99){ // Se llego a los 500ms ? conta=get_timer0(); // Obtiene la cantidad de pulsos wrad= 0.031415*conta; // Se calcula la Velocidad en rad/s set_timer0(0); // El contador se vuelve a 0 para inicia la cuenta lec_lcd=1; // Se activa el flag para mostrar la velocidad en el LCD num_timer=0; // Se reinicia el multiplicador del tiempo return; // Retorna a la Funcion Principal } else{ ++num_timer; return; } } void main(void) // Funcion principal del Microcontrolador { lcd_init(); lcd_gotoxy(1,1); lcd_putc("Lab Control FIEE"); disable_interrupts(global); setup_counters(RTCC_EXT_L_TO_H,RTCC_DIV_1); // Configura el TIMER0 como contador setup_timer_2(T2_DIV_BY_16,249,15); //Configura el TIMER2 para una interrupcion de 5ms enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER2); // Se habilitan las interrupciones set_timer0(0); while(1) // Bucle infinito para el Microcontrolador { if(lec_lcd==1) { // El Flag para mostrar la velocidad en el LCD esta activo?? lcd_encoder(); // Se llama a la funcion para mostrar la velocidad en el LCD lec_lcd=0; } } }

IV.

Diseo en Proteus

A continuacin vamos a mostrar la simulacin en Proteus para distintos valores de Frecuencia para la Fuente Clock. Comenzamos la primera simulacin, dejando de lado la Fuente Clock, con esto simulacin nuestro cdigo como si el Encoder del Motor no entregase seal alguna, el resultado fue el siguiente, el PIC detecto que no hubo velocidad e indico en el LCD MOTOR INMOVIL como se puede mostrar en la figura adjuntada a continuacin.

La segunda simulacin que mostramos configuramos nuestro Frecuencia de Reloj en 200Hz y el resultado fue el siguiente, el PIC detecto la cantidad de pulsos, calculo la velocidad y la mostro en el LCD, en este caso para pulsos de 200Hz, entonces Wrad=200/400*2==3.14159, como podemos ver nuestra simulacin nos arroja el valor correcto para la velocidad angular.

Para la tercera simulacin configuramos nuestro Frecuencia de Reloj en 500Hz y el resultado fue el siguiente, al igual que la vez anterior el PIC detecto la cantidad de pulsos, calculo la velocidad y la mostro en el LCD, para pulsos de 500Hz, el valor de la velocidad angular queda determinado por Wrad=500/400*2=2.5=7.85, como podemos ver nuestra simulacin nos arroja el valor correcto para la velocidad angular.

Para la cuarta simulacin configuramos nuestro Frecuencia de Reloj en 1KHz y el resultado fue el siguiente, al igual que la vez anterior el PIC detecto la cantidad de pulsos, calculo la velocidad y la mostro en el LCD, para pulsos de 1KHz, el valor de la velocidad angular queda determinado por Wrad=1000/400*2=5=15.7079, como podemos ver nuestra simulacin nos arroja el valor correcto para la velocidad angular.

Para la cuarta simulacin configuramos nuestro Frecuencia de Reloj en 10KHz y el resultado fue el siguiente, al igual que la vez anterior el PIC detecto la cantidad de pulsos, calculo la velocidad y la mostro en el LCD, para pulsos de 10KHz, el valor de la velocidad angular queda determinado por Wrad=10000/400*2=5=157.079, como podemos ver nuestra simulacin nos arroja el valor correcto para la velocidad angular.

Вам также может понравиться