UNIVERSIDAD NACIONAL DEL CALLAO FACULTAD DE INGENIERIA ELÉCTRICA Y ELECTRÓNICA DISEÑO DE UN SENSOR DE CAUDAL AISLADO CON CONTROL ELECTRÓNICO DE TRANSDUCCIÓN OPTOCINEMÁTICA DE ALTA PRECISIÓN Ing. JULIO CÉSAR CASQUERO ZAIDMAN PERIODO 01/06/2011 AL 31/05/2012 RESOLUCIÓN RECTORAL No 640-211-R DEL 22DE JUNIO DEL 2011 INDICE ÍNDICE …………………………………………………………………………………………..………. RESUMEN CAPÍTULO 1: INTRODUCCIÓN……………………………………………………..…..….... 1. Introducción………………………………………………………………………………….….. CAPÍTULO 2: PARTE TEÓRICA ………………………………………………………..……... 2. Parte teórica………………………………………………………………………………….…. 2.1 Teorías relacionadas al módulo mecánico………….……………………….. 2.1.1 Campo magnético……………………………………………………………….. 2.2.2 Las turbinas de acción ………………………………………………………… 2.1.3 Permeabilidad magnética……………………………………………….….. 2.2 Teorías relacionadas al módulo electrónico ……………………………..… 2.2.1 El sensor +óptico de barrera……………………………………………….. 2.2.2 El encoder absoluto…………………………………………………………….. 2.3 Conocimientos relacionados al controlador digital……………………... CAPÍTULO 3: MATERIALES Y MÉTODOS…………………………………………..…….. 3. Materiales y métodos……………………………………….……………………………….. 3.1 Materiales…………………………………………………………………………………… 3.1.1 El grabador de PICs……………………………………………………………… 3.1.2 El entrenador basado en el PIC 16F876A……………………………… 3.1.3 La tarjeta de control………..………………………………………………….. 3.1.4 La carcasa acondicionada………………………………………………….… 3.1.5 El transductor electrónico………………………………………………….… 3.1.6 Banco de pruebas con el prototipo del sensor……………………... 3.2 Métodos………………………………………………………………………………………… CAPÍTULO 4: RESULTADOS …………………………………………………………….......... 4. Resultados……………………………………………………………………………………….… CAPÍTULO 5: DISCUSIÓN……………………………………………………………….……….. 5. Discusión…………………………………………………………………………………………… 5.1.1 Discusión respecto al alcance de la investigación……………….. 5.1.2 Discusión respecto al material desarrollado …………………….… 5.1.3 Discusión respecto al procesamiento de la información……... 5.1.4 Discusión respecto a la utilidad de la presente investigación CAPÍTULO 6: REFERENCIAS ……………………………………………………………….…... 6. Referencias bibliográficas……………………………………………………………….… APÉNDICE ……………………………………………………………………………………….….... ANEXOS ……………………………………………………………………………………………..... - 1 - Pág. 1 2 3 3 5 5 5 5 6 7 8 8 9 10 16 16 16 16 16 17 18 19 21 22 23 23 24 24 24 24 24 24 26 26 27 28 RESUMEN El presente tema de investigación está enmarcado dentro del universo de los transductores y de los sensores de caudal y tiene como propósito la comprobación de la factibilidad del diseño e implementación de un prototipo de un sensor de caudal aislado con control electrónico de transducción optocinemática de alta precisión El sistema contiene un transductor mecánico cuya señal de ingreso es el caudal de agua que ingresa al transductor y como señal de salida es la velocidad rotacional del eje, provisto de un imán en su extremo, que es movido por una hélice al ser impactada por el flujo. El sistema también contiene un transductor electrónico cuya señal de ingreso es la velocidad rotacional de su eje que recibe movimiento del eje del transductor mecánico por arrastre magnético, el cual contiene un disco que también gira con el eje provisto de marcas que son leídas por un sensor de barrera electrónico obteniéndose una pulsación proporcional a las revoluciones del eje. El sistema adicionalmente contiene un controlador electrónico integral digital y programable (PIC), el cual se ha programado de modo que toma la pulsación del sensor indicado y realiza el procesamiento de modo que presenta en la pantalla el caudal correspondiente. La síntesis del presente trabajo se refleja en haber comprobado en principio la eficacia de la implementación del prototipo del sensor y en segundo lugar haber comprobado que para una medición de 0.3 litros/segundo, la precisión en la lectura supera el 97% de precisión en el caudal medido en un banco de pruebas que se ha acondicionado para poder realizar las pruebas. - 2 - CAPÍTULO 1 INTRODUCCIÓN 1 INTRODUCCIÓN La estructura de la presenta introducción está basada en los siguientes pilares: a) El diseño e implementación del transductor mecánico que ha requerido la realización las siguientes tareas: Diseñar y fabricar el cuerpo del transductor mecánico Diseñar y fabricar el rotor Diseñar y fabricar el eje de arrastre principal con extremo imantado Diseñar y fabricar la tapa del cuerpo b) El diseño e implementación del transductor electrónico que ha requerido la realización las siguientes tareas: Diseñar y fabricar el soporte del transductor electrónico Seleccionar e implementar el encoder acoplado a eje secundario con extremo imantado Seleccionar e implementar transductor de barrera óptico Diseñar y fabricar la tapa del transductor electrónico c) El diseño e implementación del controlador electrónico que ha requerido la realización las siguientes tareas: Seleccionar y adquirir el microcontrolador Diseñar la tarjeta electrónica de control principal Programar el microcontrolador Probar el programa y el controlador electrónico d) La integración del transductor mecánico, electrónico con el controlador lo que hizo necesario la realización de las siguientes tareas: - 3 - Acabar la fabricación del prototipo del transductor electrónico Instalar el sensor en el banco de pruebas Preparar protocolo de pruebas e) Obtener el costo de producción y haber estimado el tiempo de fabricación El presente trabajo muestra que en primer lugar se ha comprobado la eficacia de las tareas realizadas al haber obtenido el prototipo del sensor de caudal aislado con control electrónico de transducción optocinemática de alta precisión y en segundo lugar muestra la manera como se ha comprobado la eficiencia en la medición del caudal con una alta precisión. El punto de medición ha sido de 0.3 litros/segundo y el rango de la precisión de control ha sido 3%. - 4 - CAPÍTULO 2 PARTE TEÓRICA 2 PARTE TEÓRICA Los conceptos teóricos lo presentamos en tres grupos, los relacionados al módulo mecánico, al módulo electrónico y al controlador digital: 2.1 TEORÍAS RELACIONADAS AL MÓDULO MECÁNICO 2.1.1 Campo magnético El campo magnético representa una región del espacio en la que una carga eléctrica puntual de valor q, que se desplaza a una velocidad , experimenta los efectos de una fuerza que es perpendicular y proporcional tanto a la velocidad v como al campo B. Así, dicha carga percibirá una fuerza descrita con la siguiente ecuación. donde F es la fuerza, v es la velocidad y B el campo magnético, también llamado inducción magnética y densidad de flujo magnético. (Nótese que tanto F como v y B son magnitudes vectoriales y el producto vectorial tiene como resultante un vector perpendicular tanto a v como a B). El módulo de la fuerza resultante será La existencia de un campo magnético se pone de relieve gracias a la propiedad (la cual la podemos localizar en el espacio) de orientar un magnetómetro (laminilla de acero imantado que puede girar libremente). La presencia de las líneas de campo magnético se muestra en la figura No 2.1. - 5 - Figura No 2.1 LÍNEAS DE CAMPO MAGNÉTICO EN UN IMÁN 2.1.2 Las turbinas de acción Son aquellas en que el fluido no sufre ningún cambio de presión a través de su paso por el rodete. La presión que el fluido tiene a la entrada en la turbina se reduce hasta la presión atmosférica en la corona directriz, manteniéndose constante en todo el rodete. Su principal característica es que carecen de tubería de aspiración. La principal turbina de acción es la que trabaja con el flujo tangencial. Se caracterizan por tener un número específico de revoluciones bajo. El cambio de momento de una turbina tipo hélice se aprovecha, por ejemplo, en los medidores de caudal utilizados en las mediciones domiciliarias que se muestra en la figura No 2.2. En este caso el eje giratorio acciona una caja de engranajes la cual mueve las ruletas numeradas. Figura No 2.2 MEDIDOR DE CAUDAL MECÁNICO Se ha aprovechado la carcasa del medidor mecánico y la parte de la hélice que gira al ingresar el caudal y tiene adosado un eje en cuyo extremo se coloca un imán. En la figura No 2.3 se muestra esquematizado el giro de la hélice por acción del agua que ingresa al medidor. - 6 - Figura No 2.3 GIRO HORARIO PRODUCIDO POR ACCIÓN DEL CHORRO DE AGUA SOBRE UNA HÉLICE QUE GIRA SOBRE UN EJE Si se adosa un imán en uno de los extremos del eje se dispondrá da un campo magnético capaz de mover un metal o imán que se encuentra en su cercanía. 2.1.3 Permeabilidad magnética En física se denomina permeabilidad magnética a la capacidad de una sustancia o medio para atraer y hacer pasar a través de los campos magnéticos, la cual está dada por la relación entre la inducción magnética existente y la intensidad de campo magnético que aparece en el interior de dicho material. La magnitud así definida, el grado de magnetización de un material en respuesta a un campo magnético, se denomina permeabilidad absoluta y se suele representar por el símbolo μ: donde B es la inducción magnética (también llamada densidad de flujo magnético) en el material, y H es intensidad de campo magnético. - 7 - Los materiales que son permeables al magnetismo permiten encerrar la hélice provista de un imán de modo que cuando gire por la acción del golpe tangencial del agua, dicho imán pueda mover otro que se encuentra fuera la superficie encerrada. En la figura No 2.4 se muestra la manera como el imán A que está anclado al eje del rotor arrastra al imán B que está anclado al encoder. Entre ambos imanes es necesario colocar un material permeable al magnetismo. Figura No 2.4 MOVIMIENTO DEL IMAN B POR ACCIÓN DEL IMAN A HABIENDO UN MATERIAL MAGNÉTICO PERMEABLE ENTRE ÉLLOS 2.2 TEORÍAS RELACIONADAS AL MÓDULO ELECTRÓNICO 2.2.1 El sensor óptico de barrera El sensor de barrera está compuesto por un transmisor realizado a partir de un diodo emisor de luz y un receptor realizado a partir de un fotodiodo y/o un fototransistor. Al incidir la luz emitida por el transmisor el fotodiodo y/o fototransistor permite el paso de la corriente a tierra, cuando se interrumpo el paso de la luz se impide el paso de la corriente poniendo en estado alto relativo a la línea utilizada como señal de salida, la cual servirá como señal de control. En la figura No 2.5 se muestra el esquema de un sensor óptico de barrera. - 8 - Figura No 2.5 CIRCUITO DEL SENSOR DE BARRERA ÓPTICO 2.2.2 El encoder absoluto El encoder absoluto está constituido por un disco que está marcado en su periferia con señales intermitentes periféricas, las cuales son leídas con un sensor de barrera de modo que cuando las encuentran emiten una serie de pulsos. Con esto se puede tener una sucesión de pulsos proporcional a las revoluciones con las cuales gira el disco del encoder. Las salidas pueden ser de por lo menos un canal, habiendo de dos, tres, y cincos canales (AB, ABZ, ABZAB). En la figura 2.6 se muestra la manera como se conectar las resistencias de 47K en los canales A y B del encoder de modo que se disponga de las entradas A y B que van al microcontrolador. - 9 - Figura No 2.6 FORMA DE INSTALAR EL ENCODER DE DOS CANALES Se las señales en A o en B es alta son detectadas, entonces las salidas serán “1” y en caso contrario las salidas serán “0”. La sucesión de pulsos generada se muestra en la figura No 2.7. Figura No 2.7 PULSOS DEL CANAL A DEL ENCODER 2.3 CONOCIMIENTOS RELACIONADOS AL CONTROLADOR DIGITAL El controlador usado es un circuito integrado programable conocido como PIC el cual usa un juego de instrucciones tipo RISC, cuyo número puede variar desde 35 para PICs de gama baja a 70 para los de gama alta. Las instrucciones se clasifican entre las que realizan operaciones entre el acumulador y una constante, entre el acumulador y una posición de memoria, instrucciones de condicionamiento y de salto/retorno, implementación de interrupciones y una para pasar a modo de bajo consumo llamada sleep. El fabricante proporciona un entorno de desarrollo freeware llamado MPLAB que incluye un software simulador y un ensamblador. - 10 - a) Arquitectura central La arquitectura del PIC es sumamente minimalista. Esta caracterizada por las siguientes prestaciones: Área de código y de datos separadas (Arquitectura Harvard). Un reducido número de instrucciones de longitud fija. La mayoría de las instrucciones se ejecutan en un solo ciclo de ejecución (4 ciclos de clock), con ciclos de único retraso en las bifurcaciones y saltos. Un solo acumulador (W), cuyo uso (como operador de origen) es implícito (no está especificado en la instrucción). Todas las posiciones de la RAM funcionan como registros de origen y/o de destino de operaciones matemáticas y otras funciones.1 Una pila de hardware para almacenar instrucciones de regreso de funciones. Una relativamente pequeña cantidad de espacio de datos direccionable (típicamente, 256 bytes), extensible a través de manipulación de bancos de memoria. El espacio de datos está relacionado con el CPU, puertos, y los registros de los periféricos. El contador de programa esta también relacionado dentro del espacio de datos, y es posible escribir en él (permitiendo saltos indirectos). A diferencia de la mayoría de otros CPU, no hay distinción entre los espacios de memoria y los espacios de registros, ya que la RAM cumple ambas funciones, y esta es normalmente referida como "archivo de registros" o simplemente, registros. b) Espacio de datos (RAM) Los microcontroladores PIC tienen una serie de registros que funcionan como una RAM de propósito general. Los registros de propósito específico para los recursos de hardware - 11 - disponibles dentro del propio chip también están direccionados en la RAM. La direccionabilidad de la memoria varía dependiendo la línea de dispositivos, y todos los dispositivos PIC tienen algún tipo de mecanismo de manipulación de bancos de memoria que pueden ser usados para acceder memoria externa o adicional. Las series más recientes de dispositivos disponen de funciones que pueden cubrir todo el espacio direccionable, independientemente del banco de memoria seleccionado. En los dispositivos anteriores, esto debía lograrse mediante el uso del acumulador. Para implementar direccionamiento indirecto, se usa un registro de "selección de registro de archivo" (FSR) y uno de "registro indirecto" (INDF): Un número de registro es escrito en el FSR, haciendo que las lecturas o escrituras al INDF serán realmente hacia o desde el registro apuntado por el FSR. Los dispositivos más recientes extienden este concepto con post y preincrementos/decrementos para mayor eficiencia al acceder secuencialmente a la información almacenada. Esto permite que se pueda tratar al FSR como un puntero de pila. La memoria de datos externa no es directamente direccionable excepto en algunos microcontroladores PIC 18 de gran cantidad de pines. c) Tamaño de palabra El tamaño de palabra de los microcontroladores PIC es fuente de muchas confusiones. Todos los PICs (excepto los dsPIC) manejan datos en trozos de 8 bits, con lo que se deberían llamar microcontroladores de 8 bits. Pero a diferencia de la mayoría de las CPU, el PIC usa arquitectura Harvard, por lo que el tamaño de las instrucciones puede ser distinto del de la palabra de datos. De hecho, las diferentes familias de PICs usan tamaños de instrucción distintos, lo que hace difícil comparar el tamaño del código del PIC con el de otros microcontroladores. Por ejemplo, un microcontrolador tiene 6144 bytes de memoria de - 12 - programa: para un PIC de 12 bits esto significa 4096 palabras y para uno de 16 bits, 3072 palabras. d) Programación del PIC Para transferir el código de un ordenador al PIC normalmente se usa un dispositivo llamado programador. La mayoría de PICs hoy en día incorporan ICSP (In Circuit Serial Programming, programación serie incorporada) o LVP (Low Voltage Programming, programación a bajo voltaje), lo que permite programar el PIC directamente en el circuito destino. Para la ICSP se usan los pines RB6 y RB7 (En algunos modelos pueden usarse otros pines como el GP0 y GP1 o el RA0 y RA1) como reloj y datos y el MCLR para activar el modo programación aplicando un voltaje de 13 voltios. Existen muchos programadores de PICs, desde los más simples que dejan al software los detalles de comunicaciones, a los más complejos, que pueden verificar el dispositivo a diversas tensiones de alimentación e implementan en hardware casi todas las funcionalidades. Muchos de estos programadores complejos incluyen ellos mismos PICs preprogramados como interfaz para enviar las órdenes al PIC que se desea programar. Uno de los programadores más simples es el TE20, que utiliza la línea TX del puerto RS232 como alimentación y las líneas DTR y CTS para mandar o recibir datos cuando el microcontrolador está en modo programación. El software de programación puede ser el ICprog, muy común entre la gente que utiliza este tipo de microcontroladores. Entornos de programación basados en interpretes BASIC ponen al alcance de cualquiera proyectos que parecieran ser ambiciosos. e) Prestaciones y dispositivos especiales de los PIC16F87X. · Procesador de arquitectura RISC avanzada · Juego de solo 35 instrucciones con 14 bits de longitud. Todas ellas se ejecutan en un ciclo de instrucción, menos las de salto que tardan dos. · Hasta 8K palabras de 14 bits para la Memoria de Programa, tipo FLASH - 13 - en los modelos 16F876 y 16F877 y 4KB de memoria para los PIC 16F873 y 16F874. · Hasta 368 Bytes de memoria de Datos RAM. · Hasta 256 Bytes de memoria de Datos EEPROM. · Pines de salida compatibles para el PIC 16C73/74/76/77. · Hasta 14 fuentes de interrupción internas y externas. · Pila de 8 niveles. · Modos de direccionamiento directo e indirecto. · Power-on Reset (POP). · Temporizador Power-on (POP) y Oscilador Temporizador Start-Up. · Perro Guardián (WDT). · Código de protección programable. · Modo SLEEP de bajo consumo. · Programación serie en circuito con dos pines, solo necesita 5V para programarlo en este modo. · Voltaje de alimentación comprendido entre 2 y 5,5 V. · Bajo consumo: < 2 mA valor para 5 V y 4 Mhz 20 A para 3V y 32 M < 1 A en standby. El PIC 16F876A utilizado tiene la distribución de pines mostrada en la figura No 2.8 - 14 - Figura No 2.8 DISTRIBUCIÓN DE PINES DEL PIC 16F876A - 15 - CAPÍTULO 3 MATERIALES Y MÉTODOS 3.1 MATERIALES Los materiales que se han utilizado son: El grabador de PICs El módulo de desarrollo El Banco de pruebas con el prototipo del sensor 3.1.1 El grabador de PICs El grabador de PICs utilizado se muestra en la figura No 3.1. Este grabador fabricado siguiente los lineamiento que ofrece la empresa Microchip, permite usar el PIC 16F876A. Figura No 3.1 EL GRABADO DE PICs 3.1.2 El entrenador basado en el PIC 16F876A El entrenador utilizado se muestra en la Figura No 3.2 - 16 - Figura No 3.2 ENTRENADOR UTILIZADO BASADO EN EL PIC 16F876A 3.1.3 La tarjeta de control Se ha diseñado y fabricado el prototipo de la tarjeta controladora. En la figura No 3.3 se muestra las pistas y guías de la ubicación de los componentes del lado posterior del mismo y en la figura No 3.4 se muestra lo correspondiente al lado anterior. Figura No 3.3 ESQUEMA DEL LADO POSTERIOR DEL PROTOTIPO DE LA TARJETA CONTROLADORA - 17 - Figura No 3.4 ESQUEMA DEL LADO ANTERIOR DEL PROTOTIPO DE LA TARJETA CONTROLADORA En la figura 3.5 se muestran el prototipo de la tarjeta de control que se ha desarrollado. Figura No 3.5 PROTOTIPO DE LA TARJETA CONTROLADORA 3.1.4 La carcasa acondicionada El prototipo del sensor se fabricó en base a la adaptación de la carcasa de un medidor de caudal mecánico al cual se le ha adaptado el transductor electrónico basado en el encoder que gira por erraste de su eje debido al efecto magnético que se le aplica. En - 18 - la figura No 3.6 se muestra el acondicionamiento de la carcasa mecánica ya instalada en el banco de prueba. Figura No 3.6 ACONDICIONAMIENTO DE LA CARCASA 3.1.5 El transductor electrónico En la figura No 3.7 se muestra los componentes del transductor electrónico desarrollado. Figura No 3.7 COMPONENTES DEL TRANSDUCTOR ELECTRÓNICO En la figura No 3.8 se muestra el transductor electrónico ensamblado. - 19 - Figura No 3.8 TRANSDUCTOR ELECTRÓNICO DESARROLLADO En la figura No 3.9 se muestra el transductor electrónico ensamblado conjuntamente con la tapa que sirve para fijarlo en el cuerpo del sensor. Figura No 3.9 TRANSDUCTOR ELECTRÓNICO Y TAPA DE SUJECIÓN En la figura No 3.10 se muestra la manera como queda instalado el transductor electrónico en el cuerpo del sensor. - 20 - Figura No 3.10 TRANSDUCTOR MECÁNICO Y TRANSDUCTOR ELECTRÓNICO ENSAMBLADOS CONJUNTAMENTE 3.1.6 Banco de pruebas con el prototipo del sensor Se ha acondicionado un banco de pruebas que permite regular el caudal manualmente. Se ha instalado el caudalímetro en el banco tal como se muestra en la figura No 3.11. Figura No 3.11 BANCO DE PUREBA CON EL SENSOR INCORPORADO - 21 - 3.2 MÉTODOS En principio el método de investigación empleado ha sido el hipotético, deductivo y basado en comprobación experimental. En cuanto al procedimiento para lograr el resultado del presente proyecto ha sido el siguiente: 1º Se ha fabricado el grabador del PIC. 2º Se ha fabricado el entrenador de PICs. 3º Se ha acondicionado la carcasa del transductor mecánico. 4º Se ha ensamblado el transductor electrónico. 5º Se ha realizado la programación del PIC. 6º Se ha acondicionado el prototipo del sensor en el banco de prueba. 7º Se ha realizado las pruebas y las mediciones habiendo estabilizado el flujo que pasa por la tubería del banco de prueba en el caudal nominal de 0.3 litros/segundo. Las pruebas se han hecho experimentalmente. - 22 - CAPÍTULO 4 RESULTADOS 4.1 RESULTADOS Los resultados se han obtenido de la siguiente manera: a) Luego de haber diseñado e implementa el transductor mecánico se ha obtenido la relación que existe entre el caudal en [litros/segundo] y las RPM del eje principal de arrastre, para el punto de medición. b) Luego de haber diseñado e implementado el transductor electrónico se ha obtenido la relación que existe entre la la velocidad del eje secundario de arrastre [RPM] y la frecuencia de pulsos [pulsos/rev], para el punto de medición. c) Luego de haber diseñado e implementado el controlador electrónico se ha obtenido la relación que existe entre la frecuencia de pulsos [pulsos/rev] y el caudal mostrado en la pantalla o medido [litros/s], para el punto de medición. El resultado final obtenido se indica en la tabla No 4.1 TABLA No 4.1 RESULTADOS FINALES OBTENIDOS FRECUENCIA DE CAUDAL QUE FRECUENCIA DE PULSACIÓN LECTURA INGRESA AL VELOCIDAD DEL VELOCIDAD DEL PULSACIÓN EFECTUADA [Ciclos/segundo] SENSOR [lt/s] EJE PRINCIPAL EJE SECUNDARIO [Ciclos/minuto] [lt/s] EN ESTADO (RPMp) (RPMs) ESTABEL 0.3 100 98 784 13.067 0.294 Existe un resbalamiento en el arrastre del eje secundario esto hace variar la lectura en el del 2%. Para el caso de una lectura en estado estable, la corrección es factible hacerla vía software. Los costos de toda la investigación ha sido el siguiente: Item 1 2 DESCRIPCIÓN Materiales para elaboración de transductores Servicios transporte, comunicación, movilidad, programación Total S/. Todo ha sido totalmente financiado por el autor del presente proyecto - 23 - MONTO (S/.) 3,900-00 1,200.00 5,100.00 CAPÍTULO 5 DISCUSIÓN 5.1 DISCUSIÓN 5.1.1 DISCUSIÓN RESPECTO AL ALCANCE DE LA INVESTIGACIÓN El alcance de la presente investigación ha sido fijado mediante la fabricación del prototipo del sensor de caudal optocinemático, su instalación en un banco para medir caudales y la determinación de la verificación e la precisión en la lectura si supera el 97% de precisión al medir un caudal de 0.3 litros/segundo. Tal como se muestra documentado en los puntos anteriores se ha llegado al cumplir la meta trazada. 5.1.2 DISCUSIÓN RESPECTO AL MATERIAL DESARROLLADO El material desarrollado para alcanzar el objetivo ha sido el apropiada. Es necesario mencionar que aún habiendo utilizado un encoder con una resolución de 8 pulsos/rev, se ha podido obtener apreciaciones importantes. 5.1.3 DISCUSIÓN RESPECTO AL PROCESAMIENTO DE LA INFORMACION En principio se ha acondicionado un banco de pruebas el cual cuenta con una regulación manual del caudal y una tina calibrada de modo que se puede fijar el funcionamiento estable del sensor. La programación del PIC juega un papel importante ya que mediante una programación apropiada se puede mostrar en la pantalla el caudal deseado. Esto hace evidente la necesidad de recomendar que todo sensor digital debe ser contrastado para garantizar sus registros de lectura. 5.14. DISCUSIÓN RESPECTO A LA UTILIDAD DE LA PRESENTE INVESTIGACIÓN La utilidad de la presente investigación radica en lo siguiente: - 24 - a) Muestra que el sensor propuesto constituye una nueva alternativa para diseñar sensores de caudal. El modelo presentado es original y novedoso. b) Muestra que para un caudal específico la precisión en la medición es alta y confiable. c) El seguir desarrollándolo conducirá a conseguir un producto innovador. d) También permite contar con la experiencia para emprender estudios para poder desarrollar caudalímetros útiles no sólo en un rango predefinido sino también cuando se producen cambios rápidos en el caudal. e) Obliga a perfeccionar la habilidad de programar los PICs f) Permite recomendar que la Facultad de Ing. Eléctrica y Electrónica de la UNAC cuente con un banco de pruebas para la medición de caudal con diversos tipos de caudalímetros. - 25 - CAPÍTULO 6 REFERENCIAS 6. REFERENCIAS BIBLIOGRÁFICAS Las referencias bibliográficas utilizadas han sido las siguientes: Creus, Antonio. INSTRUMENTACIÓN INDUSTRIAL, España: Alfaomega edición.1997 Marcombo, 6ta Villalobos, Gustavo. MEDICIÓN DE FLUJO, México: Noriega Limusa, 1 ra edición.1999 Rizzoni, Giorgio. PRINCIPIOS Y APLICACIONES DE INGENIERÍA ELÉCTRICA, Bogotá-Colombia: Mc Graw Hill, 3ra edición. 2002 Cuenca, Eugenio. MICROCONTROLADORES PIC, España: Thomson, 1ra edición. 2003 Pérez, Miguel. INSTRUMENTACIÓN ELECTRÓNICA, España: Thomson, 2 da edición. 2004 Garza Garza, Juan Ángel. SISTEMAS DIGITALES Y ELECTRONICA DIGITAL, México: Pearson Educación, 1ra edición. 2006 Palacios, Enrique. MICROCONTROLADOR PIC16F84, México: Alfaomega, 2 da edición. 2006 Tokheim, Roger. ELECTRÓNICA DIGITAL, México: McGraw-Hil Interamericana, 7ma edición. 2008 - 26 - APENDICE El diagrama medios-fines constituye el cuadro de trabajo de la investigación que ha servido de referente para establecer la deducción indicada en el punto 4.1 Esta referencia ha sido seguida rigurosamente durante la investigación lo que constituye el trabajo auditado por el Ing. Julio César Casquero Zaidman - 27 - ANEXOS ANEXO No 1: ARTIFICIOS DE PROGRAMACIÓN DESARROLLADOS DURANTE LA INVESTIGACIÓN ;-------------------------------------------------------------------;* CAUDALIMETRO ;-------------------------------------------------------------------LIST P=16F876A INCLUDE <P16F876A.INC> __CONFIG 0x1F31 ;-------------------------------------------------------------------;* SE DEFINEN PINES DEL PORTA ;-------------------------------------------------------------------rs e dat0 dat1 EQU EQU EQU EQU 1 2 3 5 ; COMANDO/CARACTER ; ENABLE LCD ; D4 LCD ; D5 LCD ;-------------------------------------------------------------------;* SE DEFINEN PINES DEL PORTB ;-------------------------------------------------------------------cpz fil3 fil2 fil1 EQU EQU EQU EQU 0 1 2 3 ; CRUZE POR CERO ; TECLADO: FILA 2 ; TECLADO: FILA 3 ; TECLADO: FILA 4 col1 col2 col3 col4 EQU EQU EQU EQU 4 6 7 5 ; TECLADO: COLUMNA 1 ; TECLADO: COLUMNA 2 ; TECLADO: COLUMNA 3 ; TECLADO: COLUMNA 4 ;-------------------------------------------------------------------;* SE DEFINEN PINES DEL PORTC ;-------------------------------------------------------------------dat2 dat3 buzz actv EQU EQU EQU EQU 0 1 3 6 ; D6 LCD ; D7 LCD ; BUZZER - 28 - fil4 EQU 7 ; TECLADO: FILA 1 ;-------------------------------------------------------------------;* SE DEFINEN FLAGS DEL REGISTRO RFLAG ;-------------------------------------------------------------------key fin dsp EQU EQU EQU 0 1 2 ; FLAG DE TECLADO ; TEMPORIZACION ;-------------------------------------------------------------------;* REGISTROS GENERALES DE LA MEMORIA RAM ;-------------------------------------------------------------------CBLOCK 0x20 RKEY1 RKEY2 RKEY3 RKEY4 RKEY5 RKEY6 ; TECLA 1 ; TECLA 2 ; TECLA 3 ; TECLA 4 ; TECLA 5 ; TECLA 6 TEMP,CNTSEG,OVFLW,CNT_LCD,CHAR,RFLAG UNID,DEC,CENT,MIL,DMIL RM3,RM2,RM1,MULT1,MULT2,MULT3,CNT4,CNT2,CNT1 PCLATH_TEMP,ST_TEMP,W_TEMP TIMESEG,MCNT,CNT_AD RG_TIME,TP_H,TP_L,TM_H,TM_L CNTP_H,CNTP_L,RPP1,RPP2,REMB0,DREG,CONT0 ACCB5,T_TIME,CNT_D,CNT_G,TH_H,TH_L,TL_H,TL_L RPWM,TKEY,RFLAG1 TP1_H,TP1_L DIVISORHH,DIVISORHL,DIVISORLL,DIVIDENDOHH DIVIDENDOHL,DIVIDENDOLL,RESTOHH,RESTOHL RESTOLL,ACCDHH,ACCDHL,ACCDLL ENDC CBLOCK 0x71 RKY1,RKY2,RKY3,RKY4,RKY5,RKY6 RUNID,RDEC,RCENT,RMIL,RDMIL - 29 - ENDC ;-------------------------------------------------------------------;* SE DEFINEN ABREVIATURAS ;-------------------------------------------------------------------#DEFINE #DEFINE #DEFINE #DEFINE buzz_on buzz_off actv_on actv_off bsf bcf bcf bsf PORTC,buzz PORTC,buzz PORTC,actv PORTC,actv ;-------------------------------------------------------------------;* MACROS ;-------------------------------------------------------------------;* MACRO DE DETECCION DE TECLA MARCADA ;-------------------------------------------------------------------tec1 MACRO bcf btfss goto btfss goto btfss goto btfss goto bsf a,b,c,d,e PORTC,a PORTB,col1 b PORTB,col2 c PORTB,col3 d PORTB,col4 e PORTC,a ; SE COLOCA EN BAJO LA FILA ; Y SE PREGUNTA A LAS ; CORRESPONDIENTES COLUMNAS ; SE COLOCA EN ALTO LA FILA ENDM ;-------------------------------------------------------------------;* MACRO DE DETECCION DE TECLA MARCADA ;-------------------------------------------------------------------tec2 MACRO bcf btfss goto btfss goto btfss goto btfss goto bsf a,b,c,d,e PORTB,a PORTB,col1 b PORTB,col2 c PORTB,col3 d PORTB,col4 e PORTB,a ; SE COLOCA EN BAJO LA FILA ; Y SE PREGUNTA A LAS ; CORRESPONDIENTES COLUMNAS ; SE COLOCA EN ALTO LA FILA - 30 - ENDM ;-------------------------------------------------------------------;* MACRO DE GRABACION EN LA RAM DE LA TECLA MARCADA ;* SE USA DIRECCIONAMIENTO INDIRECTO (FSR,INDF) ;-------------------------------------------------------------------rkey MACRO a,b movlw a movwf INDF call alarm call ms_20 clrwdt btfss PORTB,b goto $-2 call ms_20 bsf RFLAG,key goto ret ENDM ;-------------------------------------------------------------------;* MACRO DE MENSAJES ;-------------------------------------------------------------------msj MACRO a,b movlw a call send_cmd clrf CNT_LCD call b call send_char incf CNT_LCD,F movlw .16 xorwf CNT_LCD,W btfss STATUS,Z goto $-6 ; 20 CARACTERES ENDM ;-------------------------------------------------------------------;* MACRO DE MENSAJES ;-------------------------------------------------------------------msj1 MACRO a,b - 31 - movlw a call send_cmd clrf CNT_LCD bsf PCLATH,3 call b clrf PCLATH call send_char incf CNT_LCD,F movlw .16 xorwf CNT_LCD,W btfss STATUS,Z goto $-8 ; 16 CARACTERES ENDM ;-------------------------------------------------------------------;* INICIALIZA VECTOR DE RESET ;-------------------------------------------------------------------ORG 0x000 nop nop goto inicio ; VA AL PROGRAMA PRINCIPAL ;-------------------------------------------------------------------;* RUTINA DE INTERRUPCION DEL TECLADO ;-------------------------------------------------------------------ORG 0x004 ; VECTOR DE INTERRUPCION goto r_int ; RUTINA DE INTERRUPCION ;-------------------------------------------------------------------;* RUTINAS ;-------------------------------------------------------------------;* RUTINA DE CONVERSION A CODIGO ASCII ;-------------------------------------------------------------------conv_asc retlw retlw retlw retlw retlw retlw addwf PCL,F '0' '1' '2' '3' '4' '5' - 32 - retlw retlw retlw retlw '6' '7' '8' '9' ;-------------------------------------------------------------------;* RUTINA DE TIT 1 ;-------------------------------------------------------------------tit1 movfw CNT_LCD addwf PCL,F DT " PROYECTO DE " ;-------------------------------------------------------------------;* RUTINA DE TIT 2 ;-------------------------------------------------------------------tit2 movfw CNT_LCD addwf PCL,F DT "INVESTIGACION 01" ;-------------------------------------------------------------------;* RUTINA DE TIT 3 ;-------------------------------------------------------------------tit3 movfw CNT_LCD addwf PCL,F DT " PROYECTO " ;-------------------------------------------------------------------;* RUTINA DE TIT 4 ;-------------------------------------------------------------------tit4 movfw CNT_LCD addwf PCL,F DT " CAUDALIMETRO " ;-------------------------------------------------------------------;* RUTINA DE TIT 5 ;-------------------------------------------------------------------tit5 movfw CNT_LCD addwf PCL,F - 33 - DT " PROGRAMAR .... " ;-------------------------------------------------------------------;* RUTINA DE TIT 6 ;-------------------------------------------------------------------tit6 movfw CNT_LCD addwf PCL,F DT " CAUDAL REF. " ;-------------------------------------------------------------------;* RUTINA DE TIT 7 ;-------------------------------------------------------------------tit7 movfw CNT_LCD addwf PCL,F DT " 0.00 lt/s " ;-------------------------------------------------------------------;* RUTINA DE TIT 8 ;-------------------------------------------------------------------tit8 movfw CNT_LCD addwf PCL,F DT " CAUDAL MAX. " ;-------------------------------------------------------------------;* RUTINA DE TIT 9 ;-------------------------------------------------------------------tit9 movfw CNT_LCD addwf PCL,F DT " 0.4 lt/s " ;-------------------------------------------------------------------;* RUTINA DE TIT 8 ;-------------------------------------------------------------------tit10 movfw CNT_LCD addwf PCL,F DT " PRESIONAR .... " ;-------------------------------------------------------------------- 34 - ;* RUTINA DE TIT 9 ;-------------------------------------------------------------------tit11 movfw CNT_LCD addwf PCL,F DT " CLEAR - 2ND ? " ;-------------------------------------------------------------------;* RUTINA DE TIT 12 ;-------------------------------------------------------------------tit12 movfw CNT_LCD addwf PCL,F DT "FUERA DE RANGO !" ;-------------------------------------------------------------------;* ACLARA PINES DEL LCD ;-------------------------------------------------------------------clrbits bcf bcf bcf bcf PORTA,dat0 PORTA,dat1 PORTC,dat2 PORTC,dat3 return ;-------------------------------------------------------------------;* ACLARA FILAS ;-------------------------------------------------------------------clrfilas bcf bcf bcf bcf PORTB,fil1 PORTB,fil2 PORTB,fil3 PORTC,fil4 return ;-------------------------------------------------------------------;* ENVIA CARACTER AL MODULO ;-------------------------------------------------------------------send_char goto bsf $+2 PORTA,rs ; CARACTER ;-------------------------------------------------------------------;* ENVIA COMANDO AL MODULO - 35 - ;-------------------------------------------------------------------send_cmd bcf PORTA,rs movwf CHAR call ms_2 call clrbits btfsc bsf btfsc bsf btfsc bsf btfsc bsf CHAR,4 PORTA,dat0 CHAR,5 PORTA,dat1 CHAR,6 PORTC,dat2 CHAR,7 PORTC,dat3 bsf nop bcf PORTA,e call clrbits ; COMANDO PORTA,e btfsc bsf btfsc bsf btfsc bsf btfsc bsf CHAR,0 PORTA,dat0 CHAR,1 PORTA,dat1 CHAR,2 PORTC,dat2 CHAR,3 PORTC,dat3 bsf nop bcf PORTA,e PORTA,e return ;-------------------------------------------------------------------;* PONE EN CERO REGISTROS DE TIEMPOS ;-------------------------------------------------------------------tau0 movlw .39 movwf TMR0 clrf OVFLW clrf CNTSEG return - 36 - ;-------------------------------------------------------------------;* RUTINA DE CONTEO ;-------------------------------------------------------------------;* FREC.= 2 MHz, PREESCALADOR TMR0 = N = 256, PTMR0= 0,555 ms ;-------------------------------------------------------------------conteo clrwdt movfw TMR0 btfss STATUS,Z return decf TEMP,F movlw .39 movwf TMR0 incf OVFLW,F movlw .9 xorwf OVFLW,W btfss STATUS,Z return clrf OVFLW incf CNTSEG,F return ;-------------------------------------------------------------------;* RUTINA DE RETARDO 2 ms ;-------------------------------------------------------------------ms_2 clrf TMR0 clrwdt movlw .4 xorwf TMR0,W bnz $-4 ; 4 * 0.555 ms = 2.22 ms return ;-------------------------------------------------------------------;* RUTINA DE RETARDO 20 ms ;-------------------------------------------------------------------ms_20 clrf TMR0 clrwdt movlw .36 xorwf TMR0,W bnz $-4 ; 36 * 0.555 ms = 19.98 ms return ;-------------------------------------------------------------------- 37 - ;* RUTINA DE RETARDO DE TIEMPO DE MEDIO SEG. ;* TEMP * 0.555 ms * 200 = RETARDO ;-------------------------------------------------------------------mdseg movlw .5 movwf TEMP call conteo movfw TEMP btfss STATUS,Z goto $-3 return ;-------------------------------------------------------------------;* RUTINA DE RETARDO N SEGUNDOS ;-------------------------------------------------------------------t_nsg movwf call call movfw xorwf btfss goto TIMESEG tau0 conteo TIMESEG CNTSEG,W STATUS,Z $-4 return ;-------------------------------------------------------------------;* RUTINA DE INICIALIZACION DEL MODULO DISPLAY LCD ;-------------------------------------------------------------------LCD_inc bcf PORTA,rs bcf bcf bsf bcf PORTC,dat3 PORTC,dat2 PORTA,dat1 PORTA,dat0 bsf nop bcf PORTA,e PORTA,e ;-------------------------------------------------------------------movlw 0x28 call send_cmd movlw 0x0C call send_cmd - 38 - movlw 0x06 call send_cmd movlw 0x01 call send_cmd return ;-------------------------------------------------------------------;* RUTINA DE DESCOMPOSICION DE NUMEROS ;* DESCOMPONE UN NUMERO HEXADECIMAL (RM2:RM1) ;* EN 5 REGISTROS DMIL,MIL,CENT,DEC,UNID ;* QUE REPRESENTAN EN DECIMAL A DICHO NUMERO ;-------------------------------------------------------------------hex_bcd clrf clrf clrf clrf clrf DMIL MIL CENT DEC UNID d_dmil movlw subwf btfss goto btfsc goto movwf movlw subwf btfss decf incf goto d8 movlw subwf btfss goto movwf clrf incf goto d_mil 0x27 RM2,W STATUS,C d_mil STATUS,Z d8 RM2 0x10 RM1,F STATUS,C RM2,F DMIL,F d_dmil 0x10 RM1,W STATUS,C d_mil RM1 RM2 DMIL,F d_cent ; H'2710' = D'10000' movlw 0x03 subwf RM2,W btfss STATUS,C goto d_cent btfsc STATUS,Z goto d9 - 39 - d9 movwf RM2 movlw 0xE8 subwf RM1,F btfss STATUS,C decf RM2,F incf MIL,F goto d_mil movlw 0xE8 subwf RM1,W btfss STATUS,C goto d_cent movwf RM1 clrf RM2 incf MIL,F d_cent movlw .100 movf RM2,F btfsc STATUS,Z goto d10 subwf RM1,W btfss STATUS,C decf RM2,F movwf RM1 incf CENT,F goto d_cent d10 movlw .100 subwf RM1,W btfss STATUS,C goto d_dec incf CENT,F movwf RM1 goto d10 d_dec movlw .10 subwf RM1,W btfss STATUS,C goto d_unit incf DEC,F movwf RM1 goto d_dec d_unit movfw RM1 movwf UNID return ;-------------------------------------------------------------------;* ACLARA REGISTROS DEL TECLADO ;-------------------------------------------------------------------- - 40 - borrar clrf clrf clrf clrf clrf clrf RKEY1 RKEY2 RKEY3 RKEY4 RKEY5 RKEY6 return ;-------------------------------------------------------------------;* ALARMA ;-------------------------------------------------------------------alarm movlw .4 movwf CNT1 inc movlw .125 movwf CNT2 call tono_1 decfsz CNT2,F goto $-2 decfsz CNT1,F goto inc return tono_1 clrwdt movlw .20 movwf CNT4 buzz_on clrwdt decfsz CNT4,F goto $-2 movlw .20 movwf CNT4 buzz_off decfsz CNT4,F goto $-2 return ;-------------------------------------------------------------------;* RUTINA LEE UN DATO DE EEPROM ;-------------------------------------------------------------------lee_1d bsf STATUS,RP0 - 41 - bcf bsf bcf EECON1,EEPGD EECON1,RD ; EMPIEZA A LEER STATUS,RP0 ; BANK 2 return ;-------------------------------------------------------------------;* RUTINA GRABA UN DATO EN EEPROM ;-------------------------------------------------------------------grb_1d bsf STATUS,RP0 ; BANK 3 bcf EECON1,EEPGD bsf EECON1,WREN ; HABILITANDO ESCRITURA movlw 0x55 ; DATO DE CONTROL movwf EECON2 movlw 0xAA ; DATO DE CONTROL movwf EECON2 bsf EECON1,WR ; SE INICIA ESCRITURA clrwdt btfsc EECON1,WR ; VERIFICA FIN DE ESCRITURA goto $-2 bcf EECON1,WREN ; DESABILITA ESCRITURA bcf STATUS,RP0 ; BANK 2 return ;-------------------------------------------------------------------;* RUTINA QUE LEE DATOS GUARDADOS EN MEMORIA ;-------------------------------------------------------------------lee_datbsf STATUS,RP1 clrf EEADR call lee_1d movlw 0xFF xorwf EEDATA,W btfsc STATUS,Z clrf EEDATA movfw EEDATA movwf RKY1 incf EEADR,F call lee_1d movlw 0xFF xorwf EEDATA,W btfsc STATUS,Z clrf EEDATA movfw EEDATA movwf RKY2 ; BANK 2 ; 00 ; 01 - 42 - incf EEADR,F call lee_1d movlw 0xFF xorwf EEDATA,W btfsc STATUS,Z clrf EEDATA movfw EEDATA movwf RKY3 incf EEADR,F call lee_1d movlw 0xFF xorwf EEDATA,W btfsc STATUS,Z clrf EEDATA movfw EEDATA movwf RKY4 incf EEADR,F call lee_1d movlw 0xFF xorwf EEDATA,W btfsc STATUS,Z clrf EEDATA movfw EEDATA movwf RKY5 ; 02 bcf STATUS,RP1 ; BANK 0 movfw movwf movfw movwf movfw movwf movfw movwf movfw movwf RKY1 RKEY1 RKY2 RKEY2 RKY3 RKEY3 RKY4 RKEY4 RKY5 RKEY5 ; 03 ; 04 return ;------------------------------------------------------------------------;* RUTINA DE MULTIPLICACION ;* RM3_RM2_RM1 = MULT3_MULT2 * MULT1 ;* MULTIPLICA 16 * 8 bits = 24 bits ;------------------------------------------------------------------------mult clrf clrf RM3 RM2 - 43 - clrf movlw movwf bcf mult1 clrwdt rrf btfss goto movfw addwf btfsc incf movfw addwf mult2 rrf rrf rrf decfsz goto RM1 .8 MCNT STATUS,C MULT1,F STATUS,C mult2 MULT2 RM2,F STATUS,C RM3,F MULT3 RM3,F RM3,F RM2,F RM1,F MCNT,F mult1 return ;-------------------------------------------------------------------;* RUTINA QUE CALCULA EL CONTADOR CNT2:CNT1 ;-------------------------------------------------------------------calc1 clrf clrf CNT1 CNT2 movlw movwf movlw movwf movfw movwf 0x27 MULT3 0x10 MULT2 RKEY1 MULT1 call mult movfw movwf movfw movwf RM2 CNT2 RM1 CNT1 movlw movwf movlw movwf movfw 0x03 MULT3 0xE8 MULT2 RKEY2 - 44 - movwf MULT1 call mult movfw addwf btfsc incf movfw addwf RM1 CNT1,F STATUS,C CNT2,F RM2 CNT2,F clrf movlw movwf movfw movwf MULT3 .100 MULT2 RKEY3 MULT1 call mult movfw addwf btfsc incf movfw addwf RM1 CNT1,F STATUS,C CNT2,F RM2 CNT2,F clrf movlw movwf movfw movwf MULT3 .10 MULT2 RKEY4 MULT1 call mult movfw addwf btfsc incf RM1 CNT1,F STATUS,C CNT2,F movfw addwf btfsc incf RKEY5 CNT1,F STATUS,C CNT2,F return ;-------------------------------------------------------------------;* RUTINA DE CONVERSION ANALOGO DIGITAL - 45 - ;-------------------------------------------------------------------conv_ad bsf ADCON0,ADON movlw .200 movwf CNT_AD clrwdt decfsz CNT_AD,F goto $-2 bsf ADCON0,GO clrwdt btfsc ADCON0,GO goto $-2 bcf ADCON0,ADON return ;-------------------------------------------------------------------;* RUTINA QUE MIDE Y PRESENTA VELOCIDAD DEL MOTOR ;-------------------------------------------------------------------v_motor movwf movlw movwf movlw movwf ; ; movlw 0x39 DIVIDENDOHH 0x38 DIVIDENDOHL 0x70 DIVIDENDOLL movlw movwf movfw movwf movfw movwf 0x00 DIVISORHH TMR1H DIVISORHL TMR1L DIVISORLL call dividir movfw movwf movfw movwf movfw movwf movlw movwf DIVIDENDOHH RM3 DIVIDENDOHL MULT3 DIVIDENDOLL MULT2 .40 MULT1 call call mult hex_bcd ; DIVIDENDO:3750000 ; DIVISOR - 46 - return ;-------------------------------------------------------------------;* RUTINA DE DIVISION 16/8 ;* DIVIDE: ;* {(RPP2_RPP1)/DREG} = {(RPP2_RPP1)/DREG} + (REMB0/DREG) ;-------------------------------------------------------------------divide clrwdt clrf REMB0 movlw .8 movwf CONT0 loop_a rlf rlf movf subwf btfsc goto addwf bcf RPP2,W REMB0,F DREG,W REMB0,F STATUS,C uok68a REMB0,F STATUS,C uok68a rlf decfsz goto clrf movlw movwf RPP2,F CONT0,F loop_a TEMP .8 CONT0 loop_b rlf rlf rlf movf subwf clrf clrw btfss incfsz subwf btfsc goto movf addwf clrf clrw btfsc incfsz RPP1,W REMB0,F TEMP,F DREG,W REMB0,F ACCB5 STATUS,C ACCB5,W TEMP,F STATUS,C uok68b DREG,W REMB0,F ACCB5 STATUS,C ACCB5,W - 47 - addwf TEMP,F bcf STATUS,C uok68b rlf RPP1,F decfsz CONT0,F goto loop_b return ;-------------------------------------------------------------------;* ;-------------------------------------------------------------------prom_10 movlw .20 movwf CNT1 clrf clrf pm1 ;call call CNTP_L CNTP_H ms_2 conv_ad movfw ADRESH movwf RPP2 bsf STATUS,RP0 movfw ADRESL bcf STATUS,RP0 movwf RPP1 ;* ; BANK1 ; BANK0 movfw RPP1 addwf CNTP_L,F btfsc incf STATUS,C CNTP_H,F movfw RPP2 addwf CNTP_H,F decfsz CNT1,F goto pm1 ;-------------------------------------------------------------------;* SE TERMINO DE SUMAR 10 CONVERSIONES ;* SE CALCULA EL PROMEDIO ;-------------------------------------------------------------------movfw CNTP_H movwf RPP2 - 48 - movfw movwf movlw movwf CNTP_L RPP1 .20 DREG call divide movfw RPP2 movwf MULT3 movfw RPP1 movwf MULT2 movlw .46 movwf MULT1 call mult return ;-------------------------------------------------------------------;* DIVISION : DIVIDENDO(24 BITS)/DIVISOR(24 BITS)->DIVIDENDO(24 BITS) ;* CON RESTO EN RESTOHH & RESTOHL & RESTOLL (24 BITS) ;-------------------------------------------------------------------dividir clrwdt movlw movwf movf movwf movf movwf movf movwf clrf clrf clrf clrf clrf clrf .24 ; PARA 24 DESPLAZAMIENTOS TEMP DIVIDENDOHH,W ACCDHH DIVIDENDOHL,W ACCDHL DIVIDENDOLL,W ACCDLL DIVIDENDOHH DIVIDENDOHL DIVIDENDOLL RESTOHH RESTOHL RESTOLL dloop bcf rlf rlf rlf rlf rlf rlf STATUS,C ACCDLL,F ACCDHL,F ACCDHH,F RESTOLL,F RESTOHL,F RESTOHH,F movf DIVISORHH,W subwf RESTOHH,W ; COMPRUEBA SI DIVISOR>RESTO - 49 - btfss goto STATUS,Z nochk movf subwf btfss goto DIVISORHL,W RESTOHL,W STATUS,Z nochk movf DIVISORLL,W subwf RESTOLL,W nochk btfss goto STATUS,C nogo ; COMPRUEBA SI DIVISOR>RESTO ; SI MSB ES IGUAL COMPROBAR LSB ; CARRY A UNO SI RESTO>DIVISOR movf subwf btfss decf DIVISORLL,W ; RESTO-DIVISOR A RESTO RESTOLL,F STATUS,C RESTOHL,F movf subwf btfss decf DIVISORHL,W RESTOHL,F STATUS,C RESTOHH,F movf DIVISORHH,W subwf RESTOHH,F bsf STATUS,C nogo rlf rlf rlf decfsz goto DIVIDENDOLL,F DIVIDENDOHL,F DIVIDENDOHH,F TEMP,F dloop return ;-------------------------------------------------------------------;* SUENA EL BUZZER 3 VECES ;-------------------------------------------------------------------buzzer btfsc RFLAG,key return ; buzz_on movlw .2 call t_nsg buzz_off movlw .1 - 50 - ; ; ; ; ; ; ; ; ; ; ; call t_nsg buzz_on movlw .5 call t_nsg buzz_off movlw .1 call t_nsg buzz_on movlw .1 call t_nsg buzz_off return ;-------------------------------------------------------------------;*********** RUTINA DE INTERRUPCION PARA EL TECLADO ************** ;-------------------------------------------------------------------r_int movwf swapf clrf movwf movfw movwf clrf W_TEMP STATUS,W STATUS ST_TEMP PCLATH PCLATH_TEMP PCLATH btfsc goto INTCON,RBIF tecld ; PUSH ;-------------------------------------------------------------------;* TEMPORIZACION TMR1 TMR1H:TMR1L ;-------------------------------------------------------------------clrf btfsc goto CNT4 RFLAG,fin tt0 clrf clrf bcf bcf TMR1L TMR1H PIR1,TMR1IF RFLAG,dsp bsf bsf T1CON,TMR1ON RFLAG,fin bcf INTCON,INTF goto ret1 ; ACLARA REGISTROS DE TIEMPO ; HABILITA TMR1 - 51 - tt0 ret1 bcf bcf bsf T1CON,TMR1ON RFLAG,fin RFLAG,dsp call v_motor bcf INTCON,INTF movfw movwf swapf movwf swapf swapf PCLATH_TEMP ; POP PCLATH ST_TEMP,W STATUS W_TEMP,F W_TEMP,W retfie ;-------------------------------------------------------------------;************************ RUTINA DE TECLADO *********************** ;-------------------------------------------------------------------tecld n1 n2 n3 nup n4 n5 n6 ndown n7 n8 n9 n2nd nclr n0 bsf bsf bsf bsf PORTB,fil1 PORTB,fil2 PORTB,fil3 PORTC,fil4 tec2 tec2 tec2 tec1 fil1,n1,n2,n3,nup fil2,n4,n5,n6,ndown ; DIGITO 4,5,6 o DOWN ? fil3,n7,n8,n9,n2nd ; DIGITO 7,8,9 o 2ND ? fil4,nclr,n0,nhlp,nent ; DIGITO CLEAR,0,HELP o ENTER ? goto ret ; NINGUNA TECLA rkey rkey rkey rkey rkey rkey rkey rkey rkey rkey rkey rkey rkey rkey .1,col1 .2,col2 .3,col3 .12,col4 .4,col1 .5,col2 .6,col3 .13,col4 .7,col1 .8,col2 .9,col3 .14,col4 .10,col1 .0,col2 ; SE PRESIONO DIGITO 1 ; SE PRESIONO DIGITO 2 ; SE PRESIONO DIGITO 3 ; SE PRESIONO DIGITO UP ; SE PRESIONO DIGITO 4 ; SE PRESIONO DIGITO 5 ; SE PRESIONO DIGITO 6 ; SE PRESIONO DIGITO DOWN ; SE PRESIONO DIGITO 7 ; SE PRESIONO DIGITO 8 ; SE PRESIONO DIGITO 9 ; SE PRESIONO DIGITO 2ND ; SE PRESIONO DIGITO CLEAR ; SE PRESIONO DIGITO 0 - 52 - nhlp nent rkey rkey .11,col3 .15,col4 ret call clrfilas ; SE PRESIONO DIGITO HELP ; SE PRESIONO DIGITO ENTER movfw INDF movwf TKEY bcf INTCON,RBIF movfw movwf swapf movwf swapf swapf PCLATH_TEMP ; POP PCLATH ST_TEMP,W STATUS W_TEMP,F W_TEMP,W retfie ;-------------------------------------------------------------------;********************** PROGRAMA PRINCIPAL ************************ ;-------------------------------------------------------------------inicio buzz_off actv_off bsf ; STATUS,RP0 ; BANK 1 movlw movwf movlw movwf movlw movwf movlw movwf movlw movwf B'00000000' TRISA B'11110001' TRISB B'00100000' TRISC B'00000110' ADCON1 B'01000111' ; N=256, TIMER, PULLUP:ON OPTION_REG bsf PIE1,TMR1IE bcf STATUS,RP0 ; HABILITA INT. CALENDARIO ; BANK 0 buzz_off actv_off ; ; bsf bsf INTCON,PEIE ; INT. PERIFERICAS INTCON,INTE ; INT. FLANCOS - 53 - bcf bcf INTCON,INTF PIR1,TMR1IF movlw B'00110000' movwf T1CON ; CONFIGURA TMR1 ;-------------------------------------------------------------------;* INICIALIZACION ;-------------------------------------------------------------------;* CONFIGURA EL MODULO DISPLAY LCD: MODO 4 BITS ;-------------------------------------------------------------------- m0 call LCD_inc bcf bcf INTCON,GIE INTCON,RBIF ; CONFIGURA EL DISPLAY LCD ; DESABILITA INT. actv_off buzz_off movlw 0x20 movwf FSR ; clrf RFLAG call bsf bcf clrfilas INTCON,RBIE INTCON,RBIF call ms_20 movlw 0x28 call send_cmd ;-------------------------------------------------------------------;* PRESENTACION DE MENSAJES INICIALES ;-------------------------------------------------------------------;* PRESENTACION DE TITULO 1 ;-------------------------------------------------------------------msj msj FILA 1 0x01,tit1 0xC0,tit2 movlw .3 call t_nsg msj msj 0x01,tit3 0xC0,tit4 ; " PROYECTO " ; " CAUDALIMETRO " - 54 - m1 actv_off buzz_off goto f1 movlw .3 call t_nsg msj msj 0x01,tit5 0xC0,tit6 ; " PROGRAMAR .... " ; " CAUDAL REF. " movlw .3 call t_nsg msj msj 0x01,tit8 0xC0,tit9 ; " CAUDAL MAX. " ; " 20000 RPM " movlw .3 call t_nsg msj msj 0x01,tit6 0xC0,tit7 call lee_dat movlw 0xC3 call send_cmd ; " CAUDAL REF. " ; " 00000 RPM " ; DIRECCION movfw RKEY1 call conv_asc call send_char movfw RKEY2 call conv_asc call send_char movfw RKEY3 call conv_asc call send_char movfw RKEY4 call conv_asc call send_char movfw RKEY5 call conv_asc call send_char movlw 0x0D call send_cmd movlw 0xC3 ; PARPADEA CARACTER ; DIRECCION - 55 - call m2 m3 ; send_cmd movlw 0x20 movwf FSR ; RKEY1 bcf bsf ; HABILITA GLOBAL INTERRUPCCION INTCON,RBIF INTCON,GIE clrwdt btfss RFLAG,key goto $-2 bcf INTCON,GIE bcf RFLAG,key movfw INDF xorlw 0x0A bz m1 movfw INDF xorlw 0x0E bz rn0 movlw subwf btfsc goto .10 INDF,W STATUS,C m3 ; PRESIONARON UNA TECLA ? ; NO ; SI, DESAB. INTERRUP. ; PRESIONARON CLEAR ? ; PRESIONARON START ? ; SOLO NUMEROS 0,1,.......,9 movfw INDF call conv_asc call send_char incf FSR,F ; ENVIA CARACTER ; INCREMENTA FSR movlw xorwf btfss goto ; PREGUNTA SI LLEGO AL FINAL 0x25 FSR,W STATUS,Z m3 movlw 0x0C call send_cmd ; DEJA DE PARPADEA CARACTER movlw .2 call t_nsg m4 ; msj msj 0x01,tit10 0xC0,tit11 ; " PRESIONAR .... " ; " CLEAR - 2ND ? " bcf bsf INTCON,RBIF INTCON,GIE ; HABILITA GLOBAL INTERRUPCCION - 56 - clrwdt btfss RFLAG,key goto $-2 bcf INTCON,GIE bcf RFLAG,key movfw INDF xorlw 0x0A bz m1 movfw INDF xorlw 0x0E bnz m4 goto ; PRESIONARON UNA TECLA ? ; NO ; SI, DESAB. INTERRUP. ; PRESIONARON CLEAR ? ; PRESIONARON 2ND ? rn0b ;-------------------------------------------------------------------;************************* PRESIONARON RUN ************************** ;-------------------------------------------------------------------;* CALCULA TEMPERATURA DE REFERENCIA Y TIEMPO PROGRAMADO ;-------------------------------------------------------------------rn0 movlw xorwf btfss goto 0x20 FSR,W STATUS,Z rr1 movfw RKY1 movwf RKEY1 goto rn0b rr1 movlw xorwf btfss goto 0x21 FSR,W STATUS,Z rr2 movfw RKY2 movwf RKEY2 goto rn0b rr2 movlw xorwf btfss goto 0x22 FSR,W STATUS,Z rr3 movfw RKY3 movwf RKEY3 - 57 - rr3 goto rn0b movlw xorwf btfss goto 0x23 FSR,W STATUS,Z rr4 movfw RKY4 movwf RKEY4 goto rn0b rr4 movfw RKY5 movwf RKEY5 ;-------------------------------------------------------------------;* VERIFICA CAUDAL PROGRAMADO ;-------------------------------------------------------------------;* MAXIMO 20000 RPM ;-------------------------------------------------------------------rn0b movlw 0x0C call send_cmd ; DEJA DE PARPADEA CARACTER movlw subwf btfss goto .2 RKEY1,W STATUS,C dsc1 ; CAUDAL CORRECTO movlw xorwf btfss goto .2 RKEY1,W STATUS,Z rn0a ; movfw RKEY2 btfss STATUS,Z goto rn0a ; movfw RKEY3 btfss STATUS,Z goto rn0a ; movfw RKEY4 btfss STATUS,Z goto rn0a ; movfw RKEY5 btfss STATUS,Z goto rn0a ; - 58 - ;-------------------------------------------------------------------;********************* TEMPERATURA CORRECTA *********************** ;********************* TP_H:TP_L *********************** ;-------------------------------------------------------------------dsc1 call calc1 movfw movwf movfw movwf CNT2 TP_H CNT1 TP_L goto rn1 ; CALCULA CAUDAL REF. ;******************************************************************** ;-------------------------------------------------------------------;************************** DATO INVALIDO ************************** ;-------------------------------------------------------------------rn0a msj msj 0x01,tit12 0xC0,tit7 movlw 0xC3 call send_cmd ; "FUERA DE RANGO !" ; " 00000 RPM " ; DIRECCION movfw RKEY1 call conv_asc call send_char movfw RKEY2 call conv_asc call send_char movfw RKEY3 call conv_asc call send_char movfw RKEY4 call conv_asc call send_char movfw RKEY5 call conv_asc call send_char goto m1 ;******************************************************************** ;-------------------------------------------------------------------;************ DATOS CORRECTOS SE SALVA PROGRAMACION *************** ;-------------------------------------------------------------------- 59 - rn1 movfw movwf movfw movwf movfw movwf movfw movwf movfw movwf RKEY1 RKY1 RKEY2 RKY2 RKEY3 RKY3 RKEY4 RKY4 RKEY5 RKY5 ;-------------------------------------------------------------------;* GRABA PROGRAMACION EN MEMORIA EEPROM ;-------------------------------------------------------------------bsf STATUS,RP1 movfw movwf clrf call movfw movwf incf call movfw movwf incf call movfw movwf incf call movfw movwf incf call RKY1 EEDATA EEADR grb_1d RKY2 EEDATA EEADR,F grb_1d RKY3 EEDATA EEADR,F grb_1d RKY4 EEDATA EEADR,F grb_1d RKY5 EEDATA EEADR,F grb_1d bcf STATUS,RP1 ; BANK 2 ; BANK 0 ;-------------------------------------------------------------------;****************** MEDIDA Y CONTROL DE CAUDAL ******************** ;-------------------------------------------------------------------f1 nop msj 0x01,tit4 - 60 - msj1 0xC0,tit14 goto md1 ;-------------------------------------------------------------------;***************** MUESTRA CAUDAL DE REFERENCIA ******************* ;-------------------------------------------------------------------movlw 0x87 call send_cmd movfw RKEY1 call conv_asc call send_char movfw RKEY2 call conv_asc call send_char movfw RKEY3 call conv_asc call send_char movfw RKEY4 call conv_asc call send_char movfw RKEY5 call conv_asc call send_char ; DIRECCION ;-------------------------------------------------------------------;* MIDE RPM ;-------------------------------------------------------------------md1 md2 ; ; bcf bsf bcf bcf bcf RFLAG,dsp INTCON,INTE ; INT. FLANCOS INTCON,INTF PIR1,TMR1IF T1CON,TMR1ON bsf INTCON,GIE call call btfsc goto btfsc goto btfsc goto movlw xorwf tau0 conteo RFLAG,key md5 RFLAG,dsp md4 PIR1,TMR1IF md3 .1 CNTSEG,W ; PRESENTACION - 61 - btfss goto STATUS,Z md2 ;-------------------------------------------------------------------;* NO DETECTA PULSO O EL PULSO DEMORO MAS DE UN SEGUNDO ;-------------------------------------------------------------------md3 bcf INTCON,GIE actv_off movlw 0xC7 call send_cmd ; DIRECCION movlw '0' call send_char movlw '.' call send_char movlw '0' call send_char movlw '0' call send_char call mdseg goto md1 ;-------------------------------------------------------------------;* DETECTO 2 FLANCOS DE SUBIDA ;* Y NO SUPERO TMR1H:TMR1L: 65536 ;* APROXIMADAMENTE 1 Hz 60 RPM ;* PRESENTACION LCD ;-------------------------------------------------------------------md4 bcf INTCON,GIE movlw 0xC7 call send_cmd ; DIRECCION movlw '0' call send_char movlw '.' call send_char movlw '0' call send_char movfw DMIL call conv_asc call send_char - 62 - ; ; ; movfw UNID call conv_asc call send_char movlw .3 subwf CENT,W btfss STATUS,C actv_off btfsc STATUS,C actv_on call mdseg goto md1 ;-------------------------------------------------------------------;* PRESENTARON UNA TECLA ;-------------------------------------------------------------------md5 bcf INTCON,GIE bcf RFLAG,key movfw INDF xorlw 0x0A btfsc STATUS,Z goto m1 ; SI, DESAB. INTERRUP. goto ; FALSA ALARMA md2 ; PRESIONARON CLEAR ? ; RESET ;-------------------------------------------------------------------;* PAGINA 1 ;-------------------------------------------------------------------ORG 0x800 ;-------------------------------------------------------------------;* RUTINA DE TIT 13 ;-------------------------------------------------------------------tit13 movfw CNT_LCD addwf PCL,F DT "CD REF:00000 RPM" ;-------------------------------------------------------------------;* RUTINA DE TIT 14 ;-------------------------------------------------------------------- - 63 - tit14 movfw CNT_LCD addwf PCL,F DT "CAUDAL:0.00 Lt/s" END - 64 -