informe_lab4
Short Description
Download informe_lab4...
Description
FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Laboratorio de Control
Experiencia # 4 TEMA:”Diseño 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 Sección: “N”
Lima-2011
I.
Objetivo
Diseñar un sensor para la medición de Velocidad de un motor DC, utilizando un Microcontrolador, en este caso especifico un PIC18F4550. II.
Procedimiento de Diseño
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 separación entre dos ranuras consecutivas. La ficha técnica del motor se adjunta a continuación, 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 diseñar el sensor con el Microcontrolador. Para poder diseñar el sensor, primero debemos conocer el funcionamiento físico 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 básicamente 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 lógico (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 lógico (0 Voltios). Se adjunta la siguiente imagen del esquema básico de un Encoder para que se entienda mejor el concepto.
Conociendo el principio de funcionamiento del Encoder, se nos hace más fácil el diseño del sensor, comenzamos primero en modelar este Encoder en el Proteus, el cual va a ser nuestro software de simulación 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 interrupción mayor a 7ms, por lo que nuestra interrupción 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 continuación se adjunta el Codigo para el Microntrolador PIC18F4550, asi como también la simulación en el software Proteus. III.
Código del Sensado del Motor en PIC
#include #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.
Diseño en Proteus
A continuación vamos a mostrar la simulación en Proteus para distintos valores de Frecuencia para la Fuente Clock. Comenzamos la primera simulación, dejando de lado la Fuente Clock, con esto simulación nuestro código como si el Encoder del Motor no entregase señal 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 continuación.
La segunda simulación 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 simulación nos arroja el valor correcto para la velocidad angular.
Para la tercera simulación 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 simulación nos arroja el valor correcto para la velocidad angular.
Para la cuarta simulación 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 simulación nos arroja el valor correcto para la velocidad angular.
Para la cuarta simulación 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 simulación nos arroja el valor correcto para la velocidad angular.
View more...
Comments