Medidor de RPM - ffelix46.weebly.comffelix46.weebly.com/uploads/4/3/4/6/43466897/medidorrpm.pdfMotor...

12
Proyecto Final Universidad Nacional Autónoma de México Facultad de Ingeniería Medición e Instrumentación Ing. José de Jesús Vega Jiménez Gpo: 04 Medidor de RPM FÉLIX TEJEDA Fernando 22.11.2014

Transcript of Medidor de RPM - ffelix46.weebly.comffelix46.weebly.com/uploads/4/3/4/6/43466897/medidorrpm.pdfMotor...

Proyecto Final Universidad Nacional Autónoma de México Facultad de Ingeniería Medición e Instrumentación Ing. José de Jesús Vega Jiménez Gpo: 04

Medidor de RPM FÉLIX TEJEDA Fernando

22.11.2014

Proyecto Final

OBJETIVO

Realizar un sistema general de medición para medir RPM de un rodillo para una banda distribuidora.

INTRODUCCIÓN

El proyecto consiste en desarrollar un instrumento de medición basado en el sistema general de mediciones, que medirá las revoluciones por minuto de un rodillo para una cinta transportadora, utilizada para alguna proceso fabril, en la cual se requiere para la medición y control de la velocidad de la banda y por lo tanto del proceso de fabricación mismo. Sistema General de Medición (SGM): Sistema para estudiar cualquier aparato de medición, tiene que contar con los siguientes bloques para ser un SGM.

o Mensurado. Variable que va a medir. o Elemento sensor. Elemento que va a “sentir” las variables físicas. o Elemento transductor. Elemento que se encarga de convertir el tipo de energía de las señales o Elemento de manipulación de la variable transducida. Elemento que va a manipular la señal del

transductor a nuestra conveniencia. o Elemento de transmisión. Elemento que va a propagar la señal. o Elemento de presentación de datos. Elemento que va a mostrar la variable de manera presentable. o Observador. Unidad que se interpretara del SGM.

Motor de corriente directa: Dispositivo que produce movimiento y torque a expensas de otra fuente de energía, en este caso energía eléctrica en mecánica.

Cinta transportadora: Sistema para transportar una carga de un lugar a otro en una fábrica.

Proyecto Final

RPM: Se refiere a la abreviación de (Revolutions Per Minute), aunque en español (Revoluciones Por Minuto) no cambia mucho. Es una unidad de referencia para representar la velocidad angular de un objeto y son las vueltas completas que realiza un objeto en un minuto. Convertidor frecuencia/voltaje: Dispositivo electrónico que va a medir la frecuencia y como salida enviara una señal de voltaje proporcional a dicha frecuencia. LM2917: Es un circuito integrado convertidor de frecuencia a voltaje, va a recibir una señal cuadrada con cierta frecuencia y entonces el circuito integrado mandara una señal de voltaje proporcional a la frecuencia que incide.

NE555: Circuito integrado que genera una señal cuadrada, dependiendo de su conexión se puede cambiar la frecuencia y el ciclo de trabajo. Puede ser utilizado en modo astable y monoestable.

Disco codificado: Va a estar fijado en el eje rotatorio para tener una referencia con la ayuda del foto interruptor. A la salida del foto interruptor se tiene una señal pulsante con frecuencia proporcional al giro del disco y, por lo tanto, al giro de la llanta.

LM2907-N, LM2917-NSNAS555C –JUNE 2000–REVISED MARCH 2013 www.ti.com

CONNECTION DIAGRAMS

PDIP and SOIC Packages, Top Views

Figure 1. See Package Number D0008A or P0008E Figure 2. See Package Number D0008A or P0008E

Figure 3. See Package Number D0014A or Figure 4. See Package Number D0014A orNFF0014A NFF0014A

2 Submit Documentation Feedback Copyright © 2000–2013, Texas Instruments Incorporated

Product Folder Links: LM2907-N LM2917-N

Proyecto Final

Foto interruptor LED IR: Consiste en un emisor y receptor LED infrarrojo, cada vez que se interrumpa la señal por el disco codificado este dejara de mandar una señal eléctrica.

Arduino: Microcontrolador que va a interpretar las señales para así mostrar los RPMs medidos. Alambrado: Conexiones entre los elementos eléctricos. Display de 7 segmentos con 4 diígitos y ánodo común: Un arreglo de LEDs que representaran un número.

PWM (Pulse Wide Modulation): Consiste en mandar pulsos de la misma amplitud y estos se varían según su ciclo de trabajo, este método se utiliza para variar la velocidad de motores de CD.

Proyecto Final

DESARROLLO

Para el desarrollo del medidor RPM, se identificaron los bloques del SGM.

Para crear la variable a medir se armó un circuito con un motor de C.D. controlado por medio del método PWM, gracias al NE555. El circuito implementado para lograr tener control sobre la velocidad del motor se muestra a continuación.

En el bloque J1 se tiene una alimentación de 9V por parte de una fuente de alimentación externa. En J2 se tiene un potenciómetro que permite variar el ancho de pulso. En J3 es la salida del motor de DC.

Después de tener el elemento que va a crear nuestra variable a medir, se acopló el encoder a la rueda para que diera las mismas vueltas que el motor, al igual que el foto interruptor y el convertidor de frecuencia a voltaje para que pueda interpretar la señal. En el siguiente esquema de conexiones se ilustra cómo se realizo el alambrado.

Mensurado Movimiento del encoder

Sensor Fotointerruptor, LM2917

Transductor Fotointerruptor

Manipulación de la variable LM2917, Arduino

Transmisión Alambrado

Presentación de datos Display de 7 segmentos

Observador RPM

Proyecto Final

Para el convertidor de frecuencia a voltaje, el fabricante proporciona la configuración necesaria, solo se reemplazó la reluctancia magnética por el foto interruptor. El LM2917 va a recibir la señal cuadrada que va a mandar el foto interruptor y entonces la convertirá a una señal analógica de voltaje proporcional a la frecuencia de entrada sobre el integrado.

Respecto a las entradas y salidas sobre el microcontrolador, se tienen las siguientes conexiones:

Ahora que se tienen todos los elementos necesarios, se programa el microcontrolador Arduino Leonardo para que responda de la manera deseada. A continuación se muestra el código desarrollado en Arduino IDE. La última actualización de este archivo fue realizada el 21 de noviembre a las 8:00 hrs.

Selección de dígito

Salidas al display

Señal del LM2917

Proyecto Final

//VARIABLES PARA EL DISPLAY DE 7 SEGMENTOS CON 4 DIGITOS//LA LETRA CORRESPONDE AL SEGMENTO Y EL NUMERO AL PUERTO GIOint A=0;int B=1;int C=2;int D=3;int E=4;int F=5;int G=6;int DP=7;

//VARIABLES PARA ENCENDER/APAGAR LOS DIGITOS//LA LETRA CORRESPONDE AL DIGITO Y EL NUMERO AL PUERTO GIOint D1=8;int D2=9;int D3=10;int D4=11;

int Display[]={A,B,C,D,E,F,G}; //VECTOR CON LOS SEGMENTOS DEL DISPLAYint Digit[]={D1,D2,D3,D4}; //VECTOR PARA CONTROL DE DIGITOSint i=0,j=0,k=0,l=0,m=0,t=0; //VARIABLES PARA CONTADORES

double rpm; //VARIABLE DONDE SERAN ALMACENADAS LAS RPMdouble offset; //VARIABLE PARA ERROR DE OFFSETint rpmPin = 0; //ENTRADA ANALOGICA POR EL PUERTO A0int array[4]; //VECTOR PARA SEPARAR LOS VALORES EN LOS DIGITOS

void setup() { //CONDICIONES INICIALES DE OPERACION: Serial.begin(9600); //SE INICIA COMUNICACION SERIAL A 9600 BITS POR SEGUNDO for(i=0;i<7;i++){ pinMode(Display[i],OUTPUT); //SEGMENTOS DEL DISPLAY COMO SALIDA digitalWrite(Display[i],HIGH); //SEGMENTOS APAGADOS } pinMode(DP,OUTPUT); //PUNTO DECIMAL COMO SALIDA digitalWrite(DP,HIGH); //PUNTO DECIMAL APAGADO for(i=0;i<4;i++){ pinMode(Digit[i],OUTPUT); //DIGITOS COMO SALIDA digitalWrite(Digit[i],HIGH); //DIGITOS APAGADOS }}

void loop() { //FUNCION PRINCIPAL rpm = analogRead(rpmPin); //LECTURA DE LA ENTRADA ADC (SALIDA DEL LM2917) rpm = ((rpm+3.3)/256); //SE CONVIERTE LA ENTRADA DIGITAL AL VALOR DEL VOLTAJE

offset=rpm; //VARIABLE DE OFFSET SE LE DA EL VALOR DEL VOLTAJE Serial.println(rpm); //SE MUESTRA EL VALOR DEL VOLTAJE EN EL MONITOR SERIAL rpm = (2844.63*rpm-11.40795)/10; //SE CONVIERTE EL VOLTAJE A RPM Serial.println(rpm); //SE MUESTRA EL VALOR DE LAS RPM EN EL MONITOR SERIAL //PROCESO MATEMATICO PARA SEPARAR EL NUMERO DE RPM EN CADA DIGITO array[0]=rpm/10; //DIGITO 1 array[1]=rpm-(array[0]*10); //DIGITO 2 array[2]=(rpm-(array[0]*10+array[1]))*10; //DIGITO 3 array[3]=100*(rpm-((array[0]*10)+(array[1])+(array[2]*0.1))); //DIGITO 4

for(t=0;t<5000;t++){ //CADA MEDIO SEGUNDO SE MUESTRAN LAS RPM EN EL DISPLAY if(offset<=0.0129){ //SI EL VALOR DEL VOLTAJE ES MENOR O IGUAL A 0.0129 SE MUESTRA CERO digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4 NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4 digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3 digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3 digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2 NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2 digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1 NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1 }else{ //SI EL VALOR DEL VOLTAJE ES MAYOR A 0.0129 digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4 NUM(array[3]); //DIGITO CUATRO DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4 digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3 digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL NUM(array[2]); //DIGITO TRES DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3

Proyecto Final

offset=rpm; //VARIABLE DE OFFSET SE LE DA EL VALOR DEL VOLTAJE Serial.println(rpm); //SE MUESTRA EL VALOR DEL VOLTAJE EN EL MONITOR SERIAL rpm = (2844.63*rpm-11.40795)/10; //SE CONVIERTE EL VOLTAJE A RPM Serial.println(rpm); //SE MUESTRA EL VALOR DE LAS RPM EN EL MONITOR SERIAL //PROCESO MATEMATICO PARA SEPARAR EL NUMERO DE RPM EN CADA DIGITO array[0]=rpm/10; //DIGITO 1 array[1]=rpm-(array[0]*10); //DIGITO 2 array[2]=(rpm-(array[0]*10+array[1]))*10; //DIGITO 3 array[3]=100*(rpm-((array[0]*10)+(array[1])+(array[2]*0.1))); //DIGITO 4

for(t=0;t<5000;t++){ //CADA MEDIO SEGUNDO SE MUESTRAN LAS RPM EN EL DISPLAY if(offset<=0.0129){ //SI EL VALOR DEL VOLTAJE ES MENOR O IGUAL A 0.0129 SE MUESTRA CERO digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4 NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4 digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3 digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3 digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2 NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2 digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1 NUM(0); //SE MANDA EL NUMERO CERO INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1 }else{ //SI EL VALOR DEL VOLTAJE ES MAYOR A 0.0129 digitalWrite(D4,LOW); //SE ENCIENDE EL DIGITO 4 NUM(array[3]); //DIGITO CUATRO DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D4,HIGH); //SE APAGA EL DIGITO 4 digitalWrite(D3,LOW); //SE ENCIENDE EL DIGITO 3 digitalWrite(DP,LOW); //SE ENCIENDE EL PUNTO DECIMAL NUM(array[2]); //DIGITO TRES DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(DP,HIGH); //SE APAGA EL PUNTO DECIMAL digitalWrite(D3,HIGH); //SE APAGA EL DIGITO 3 digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2 NUM(array[1]); //DIGITO DOS DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2 digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1 NUM(array[0]); //DIGITO UNO DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1 } } }

//SE TOMA LA DECISION DE QUE NUMERO SE VA A MOSTAR EN EL DIGITO DEL DISPLAY//ESTE NUMERO DEPENDE DEL DIGITO DEL VALOR DE LAS RPMvoid NUM(int c){ if(c==0) ZERO(); if(c==1) EINS(); if(c==2) ZWEI(); if(c==3) DREI(); if(c==4) VIER(); if(c==5) FUNF(); if(c==6) SECHS(); if(c==7) SIEBEN(); if(c==8) ACHT(); if(c==9) NEUN();}

void ZERO(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CERO digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[E],LOW); digitalWrite(Display[F],LOW);}

void EINS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL UNO digitalWrite(Display[B],LOW);

Proyecto Final

digitalWrite(D2,LOW); //SE ENCIENDE EL DIGITO 2 NUM(array[1]); //DIGITO DOS DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D2,HIGH); //SE APAGA EL DIGITO 2 digitalWrite(D1,LOW); //SE ENCIENDE EL DIGITO 1 NUM(array[0]); //DIGITO UNO DEL VALOR DE LAS RPM INIT(); //RESET EN EL VALOR DEL DISPLAY digitalWrite(D1,HIGH); //SE APAGA EL DIGITO 1 } } }

//SE TOMA LA DECISION DE QUE NUMERO SE VA A MOSTAR EN EL DIGITO DEL DISPLAY//ESTE NUMERO DEPENDE DEL DIGITO DEL VALOR DE LAS RPMvoid NUM(int c){ if(c==0) ZERO(); if(c==1) EINS(); if(c==2) ZWEI(); if(c==3) DREI(); if(c==4) VIER(); if(c==5) FUNF(); if(c==6) SECHS(); if(c==7) SIEBEN(); if(c==8) ACHT(); if(c==9) NEUN();}

void ZERO(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CERO digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[E],LOW); digitalWrite(Display[F],LOW);}

void EINS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL UNO digitalWrite(Display[B],LOW);

digitalWrite(Display[C],LOW);}

void ZWEI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL DOS digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[E],LOW); digitalWrite(Display[G],LOW);}

void DREI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL TRES digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[G],LOW);}

void VIER(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CUATRO digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void FUNF(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CINCO digitalWrite(Display[A],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void SECHS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SEIS digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[E],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void SIEBEN(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SIETE digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW);}

void ACHT(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL OCHO digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW);

Proyecto Final

digitalWrite(Display[C],LOW);}

void ZWEI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL DOS digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[E],LOW); digitalWrite(Display[G],LOW);}

void DREI(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL TRES digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[G],LOW);}

void VIER(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CUATRO digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void FUNF(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL CINCO digitalWrite(Display[A],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void SECHS(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SEIS digitalWrite(Display[C],LOW); digitalWrite(Display[D],LOW); digitalWrite(Display[E],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void SIEBEN(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL SIETE digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW);}

void ACHT(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL OCHO digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW);

digitalWrite(Display[D],LOW); digitalWrite(Display[E],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void NEUN(void){ //SEGMENTOS NECESARIOS PARA MOSTRAR EL NUEVE digitalWrite(Display[A],LOW); digitalWrite(Display[B],LOW); digitalWrite(Display[C],LOW); digitalWrite(Display[F],LOW); digitalWrite(Display[G],LOW);}

void INIT(void){ //REINICIO DEL DISPLAY, TODOS LOS SEGMENTOS APAGADOS for(i=0;i<7;i++){ digitalWrite(Display[i],HIGH); }}

Proyecto Final

Para convertir el voltaje del LM2917 se obtiene el modelo matemático que relaciona el voltaje con la frecuencia y ésta a su vez con las RPM. Primeramente, se obtiene la relación de voltaje a frecuencia con ayuda del osciloscopio y un voltímetro se obtiene la tabla y gráficas siguientes.

f"[Hz]" V"[V]"0" 0.003"

5.708" 0.018"9.615" 0.03"17.544" 0.045"24.39" 0.071"35.461" 0.1"40.323" 0.115"48.06" 0.13"48.077" 0.135"62.5" 0.166"73.529" 0.194"

Con estos valores se obtiene la recta que caracteriza al sistema. Se hace una regresión lineal cuya ecuación y parámetros característicos se muestran a continuación.

! = 379.284 ! − 1.521

! = 0.9987!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! = 1.504 Ya que el encoder utilizado tiene 8 dientes por revolución. Se tiene que por cada ocho pulsos del encoder implican una revolución. Por lo tanto la relación para obtener las RPM es la siguiente.

!"# = 379.284 ! − 1.521 608

!"# = 2844.63 ! − 11.40795

0

10

20

30

40

50

60

70

80

0.003 0.018 0.03 0.045 0.071 0.1 0.115 0.13 0.135 0.166 0.194

Frecuencia

Voltaje

Proyecto Final

Puesta a punto

Las siguientes figuras muestran al sistema funcionando. Se arma una base para que la llanta este siempre acoplada al circuito medidor de RPM. Todos los dispositivos funcionan con forme a lo esperado. El motor está alimentado por una fuente externa, mientras que la electrónica para la medición está alimentado desde el microcontrolador.