jueves, 14 de septiembre de 2017

Medición de nivel por medio de un sensor de presión


       Este proyecto esta en proceso, voy a ir poniendo según vaya avanzando los circuitos electrónicos y las partes de que va a constar.
       Quiero que trabaje un display 16x2 para ver los resultados del sensor de presión, un teclado matricial para interactuar con el display y resultados obtenidos del sensor de presión, también estoy considerando dejar disponible un puerto de comunicación por si requiero extender o enviar la información a otro dispositivo y además dejar disponible algunos pines del pic para activar o desactivar relays. Todo lo voy a ir desarrollando paso a paso.

Partes.

1.- Fuente simétrica estable de 14.8,-14.8 y fuente de 5 volts
2.- Sensor y amplificador de instrumentación
3.- Acondicionamiento de la señal para tome lectura el pic16f877
4.- Microcontrolador pic 16f877 definición de puertos
5.-Display
6.-Teclado
7.- Indicadores y relays
8.- Comunicación


Diagrama de flujo

Pendiente de subir el diagrama de flujo, aun no defino bien lo último.



1.- Fuente simétrica estable +-14.8 volts y 5 volts

             La fuente de voltaje no me complique en desarrollar una conmutada, ya sería otro tema, es una fuente regulada simétrica estable con el lm337 y lm317 y para los 5 volts un regulador lm7805, lo importante es que es estable, el circuito lo tome de su hoja de datos y solo ajuste para que me entregue el voltaje que necesito. El voltaje que necesito lo definí en base al voltaje de alimentación del sensor de presión MPX2050 que trabaja en el rango de 10 a 16 volts y toma sensado de 0 a 50kPa (7.5psi).

        Primero arme el circuito electrónico en protoboard para ajustar y obtener el voltaje de +-14.8 volts y ya luego lo pase a placa, esto lo logre con el zener de 12volts y el arreglo de resistencias en paralelo que tiene.

Circuito fuente de voltaje





Fuente de voltaje armada y funcionando


Archivos de la fuente de voltaje (circuito y layout)

https://mega.nz/#!vUhnVDKI!O_WaaPFv6X3c1B1HnicWD_PAqgs61TTEZFnGIQvvBjQ


2.- Sensor y amplificador de instrumentación

          Esta parte toma el voltaje del sensor MPX2050 y lo amplifica, rechazando las interferencias y ruido, esto es gracias al amplificador de instrumentación.
       El voltaje del sensor es de  40mvolts de su presión máxima medible, como es un amplificador diferencial puede darnos voltaje negativo o voltaje positivo dependiendo si la presión es negativa o positiva, según su manual tiene un rango de -40mvolts a 0 en succión y de 0 a 40mvolts cuando es presión positiva, esto es dentro de su rango de 50Kpa. Pero puede soportar hasta 200Kpa pico, así que da lecturas mayores a los 40mvolts pero pierde su linealidad en su respuesta y con posibilidad de dañar el sensor.
     Por que elegí este sensor hasta 50Kpa, esto se debio a que es el optimo para medir la presión de un tanque cilíndrico vertical de 5 mts de alto, esto es que requiero a lo mucho unos 45Kpa para tomar la lectura cuando el tanque este lleno en su totalidad.
     Esto se calcula con P = pgh donde, P es la presión de un fluido estático, p es la densidad del fluido en este caso el fluido tiene una densidad casi igual a la del agua, g es la constante de aceleración de la gravedad y h es la altura del nivel del líquido.

     Ya teniendo definido el sensor, amplifico la señal en el amplificador de instrumentación calculando que me entregue 14 volts cuando el sensor registre 40mvolts, y cuando de voltaje negativo el sensor no el amplificador me de 0 volts, esto lo logro con un diodo como medida de protección, para no tener voltajes de salida negativos.

Circuito electrónico


Por el momento solo tengo armado en protoboard la etapa de amplificación y el acondicionamiento de señal. Posterior mente comparto su layout y como quedaría armado.

3. Acondicionamiento de señal

      ¿Por que el acondicionamiento de señal? si con el amplificador de instrumentación puedo tener en su salida ya el voltaje adecuado para el pic. Se me presento un problema y le encontré una solución creativa. El problema es que el pic solo tiene una resolución de 10 bits, esto quiere decir que puede tomar 1024-1 lecturas, entonces si yo tengo un tanque vertical de 36000 litros de 5 metros de altura cada lectura leída por el microcontrolador va ser de 36000/1023=35.19 lts, esto quiere decir que va a tomar las medidas en múltiplos de 35 lts, es una resolución pobre. la única manera de solucionar esto es que el convertidor analógico a digital sea de más bits, pero para eso tendría que comprar otro microcontrolador que tenga la opción de más bits, hay de 12 y de 16 bits o conseguir un ADC aparte.
       La solución que se me ocurrió fue de emplear 4 adc del microncontrolador de 10 bits cada uno, en suma me darían 4092 lecturas, unos 12 bits. Ya con esa resolución tendría 36000lts/4092= 8.7lts, esto es un poco más de un milimetro de cambio de su nivel, ya que cada variación de un centimetro en el tanque equivale a 72lts, (36000lts/500cm=72lts por cm). Ya con esta resolución ofrece poderse emplear.
       La idea es que el voltaje de salida del amplificador de instrumentación se parta en cuatro (divide y vencerás), esto se logra mediante un divisor de voltaje con cuatro resistencias, como no podemos conectar directo al microcontrolador ya que sería mucho voltaje usamos 3 restadores con amplificadores operacionales, así tendríamos 4 voltajes no mayores a 4 volts que serían los voltajes que van a tomar lectura los adc del microcontrolador y ya por software trabajamos el valor de la señal adquirida del sensor.

Circuito acondicionamiento de señal


      Por el momento hasta aquí he llegado, ya lo simule y lo arme en protoboard y funciona bien, tengo pendiente hacer su layout y armarlo ya formalmente para pasar a lo siguiente.
     Quiero ver si no es muy pesado el circuito en una sola tarjeta poner el sensor, amplificado operacional, el acondicionamiento de señal y el microcontrolador, y aparte poner el teclado, display y relays.
    Pienso que lo más complicado va ser la programación del microcontrolador, quiero programarlo todo en ensamblador para que sea rápida la toma de lecturas con el mínimo de memoria empleada.


Continuación del proyecto.

Ya arme todo el circuito en una tarjeta, y lo estoy probando directamente en un tanque contenedor de 20, 000 lts. Se me han presentado diversos problemas que e ido corrigiendo, en listo lo que ha pasado y como he solucionado.

1.- Falla en el pic
al hacer el layout no me di cuenta que los pines de alimentación del pic estaban configurados en el proteus como vcc y gnd, y yo emplee +5 y gnd como fuente de alimentación de los demás componentes, así que me considero como otra fuente, tuve que improvisar y hacer la conexión directa con un cable, en el layout lo corregí también.
2.-La resistencia que utilice en el amplificador de instrumentación para la ganancia, no fue la adecuada, ya que me entregaba más amplificación. Lo que sucede es que el amp de instrumentación lo alimente con 14.8 y - 14.8, pero al amplificar la señal en su salida como máximo solo me puede entregar 12.5 volts, yo no tenia considerado ese límite considere los 14.8 como máximo de salida, así que tuve que cambiar la resistencia de amplificación para adecuar el rango del sensor con respecto a la salida del amp de instrumentación.
3.- Como fue más baja la salida de amplificación tuve que cambiar igual la resistencia del diodo zener, de donde tomo el voltaje de referencia para el ADC, para poder ocupar el mayor rango posible del ADC.
4.- En un proyecto anterior se daño la entrada RA0 de mi pic, así que tuve que hacer un cambio en el programa para utilizar otra entrada de ADC, el layout no lo modifico aún, hice un puente físicamente en la placa que ya tenía hecha y modifique el programa.
5.- Funciono relativamente bien los primeros días, solo que variaba de 100 hasta 200 litros la respuesta que se observaba en el LCD, me di cuenta que empezó a bajar las lecturas al paso de los días con el mismo contenido en el tanque. Me di cuenta que el amplificador de instrumentación empezó agregar voltaje de milivolts al sensor, como que perdió el acoplamiento, verifique lo que pude para reparar pero no encontré el porque del comportamiento, así que como solución compre un ADC INA129 que viene en su placa, los que se emplean para arduino e instale cortando unas pistas y conectando lo. Actualmente esta trabajando y estoy monitoreando, bajo por mucho su variación y se ha vuelto más estable, esta en un rango de 20 lts de más y menos con un mismo contenido.
6.- De la programación puedo decir que no soy muy experto, así que hice muchas modificaciones y me apoye en diversas rutinas ya hechas. El problema que tenía que se perdía el programa, su secuencia, descubrí que mi programa fue mayor que la pagina uno, así que tuve que ver como hacer brincos entre paginas del pic para que todo mi programa funcione, también me pase de variables declaradas, así que busque la manera de reducirlas y re usar las que tenia para no pasarme del banco uno de variables.

Adelanto lo que he hecho, expongo que aun estoy desarrollando el proyecto, por lo que estoy haciendo modificaciones según voy necesitando.






En el menu, para el pass es presionar 2 y 5 para que entre a calibración, ya teniendo la calibración puesta a 16 mili volts en el sensor de presión, equivalente a 20,000pascales se presiona A y se graba ese valor como referencia. Ya calibrado podemos tomar lecturas muy cercanas a los valores de litros, kilogramos, presión y altura hidrostática, eso gracias a las fórmulas que utilice dentro del programa del pic.

Todos los archivos con los que estoy trabajando, enlace.

https://mega.nz/#!LZw3UBaS!QOBSxHh1Q7qmYDNL0OWTwKN204QDqzl4fNpAGmSmaSs

Voy a modificar el proyecto para hacerlo más simple, ya vi que el calor, las interferencias hacen que no se estabilice hasta el punto donde yo quiero, quiero tener una precisión y estabilidad de unos pocos litros en mi display. Compre el ADC MAX1416 y estoy empleando el INA128 como amp de instrumentación, junto con el pic, con su display y teclado. Por el momento voy a dejar lo que hice aun principio para trabajar en el proyecto simplificado. Al menos el primer proyecto me dio muchas experiencias y vi que el adc a 12 bits si trabaja.