Sensor de flujo AWM3300V

En recientes fechas he realizado diseños de circuitos para una empresa que hace máquinas de carboxiterapia. He aprendido mucho en el área de la medicina estética. No tenia idea de que son muchas las aplicaciones de la electrónica en esta área (bueno, no soy doctor ni mucho menos 😛 ).

En fin, por cuestiones de confidencialidad, no puedo poner aqui como es todo el proceso de la maquina de carboxiterapia. Pero, lo que si puedo hacer, es escribir acerca de uno de los sensores de flujo de gas/aire que he utilizado para tales fines.

El AWM3300V es un sensor de flujo de gas/aire que fabrica Honeywell. Algunas de las aplicaciones de este sensor son:

  • Analizadores de gas
  • Cromatografia de gases
  • Control de anestesia
  • Respiradores para medicina, etc.

Para este sensor las especificaciones son las siguientes:

specsSe recomienda que este alimentado con una fuente de 10Vdc pero algo entre 8 y 15 VDC funciona tambien. La salida del sensor es analogica con valores de salida que van desde 1.0Vdc hasta 5.0Vdc que representan el flujo entre 0.0 ccm y 1000.0 ccm respectivamente.

Ahora bien, una caracteristica interesante y que lo hace un poco mas dificl de trabajar, es la cuestion de su curva caracteristica, ya que el fabricante no nos brinda una ecuacion tipica (como entros sensores del mismo fabricante) que representa la curva de sensado del dispositivo. Lo que nos brinda el fabricante son puntos caracteristicos:

puntos

Incluso solo con estos puntos es posible trabajar muy bien con el sensor, ya que podemos implementar una interpolacion lineal, o bien, una polinomica. ¿Cuál es mejor? bueno, para variar, depende de lo que necesitemos hacer y la “precision” con la que queremos trabajar. Para procesos rápidos o microcontroladores de gama baja podria ser recomendable usar la interpolacion lineal por que no requiere de muchos calculos para determinar lo nuevos puntos de la “curva”.

curva

Si necesitamos “suavizar” la curva para mejorar los resultados, ademas de un buen procesador, puede ser recomendable usar la interpolacion polinomica, pero se necesita un poder mayor de procesamiento en un microcontrolador o uno con poder de punto flotante (ARM cortex M4) o bien con un buen compilador que emule el punto flotante (codevision, avr-gcc, atmel studio)

Ahora bien, imaginemos que vamos a trabajar con un AVR, que no tiene punto flotante pero si compiladores con una buena emulacion de punto flotante, la pregunta que sigue es: ¿Que algoritmo puedo usar?

Hay muchos algoritmos para hacer interpolacion polinomica, pero no todos puden correr en un microcontrolador, ya sea por espacio de programa o bien, por la cantidad de operaciones que necesita.

En lo personal uso para los microcontroladores el algoritmo de Lagrange. ya que su implementacion no requiere de muchas lineas de codigo, pero la velocidad del calculo es del orden de n^2, es decir, que para n datos a procesar (en este caso seran el numero de puntos de la curva) tardara n^2 de tiempo, lo que lo hace muy lento para valores grandes. Pero para nuestro caso con n = 11, el tiempo es mas que aceptable.

Una implementacion de la interpolacion con lagrange es:

float lagrange(float x0, float *x, float *fx, int n)
{
int k, i;
float l, p = 0.0;

for(k = 0; k < n; k++)
  {
   l = 1.0;
   for(i = 0; i < n; i++)
     {
      if(i==k)
      continue;
      l *= (x0-x[i])/(x[k]-x[i]);
     }
   p += fx[k] * l;
  }
return p;
}

Donde x0 es el punto desntro de los limmites de la curva en el cual queremos conocer su f(x0), x y fx son los puntos que se conocen de la curva; n es el numero de puntos que conocemos de la curva. Para ilustrar mejor esto, veamos el siguiente codigo usando los puntos de la curva de nuestro sensor:

//Se divide entre 1024 para un adc de 10 bits, si es de 8 bits, sera entre 256
#define FACTOR_CONVERSION  5.0/1024.0
//Usamos como x el valor del voltaje porque es lo que leemos con el ADC, y fx es el valor del flujo porque
// es lo que queremos conocer
float x[] = {1.0, 2.30, 2.96, 3.41, 3.82, 4.18, 4.42, 4.66, 4.80, 4.90, 5.0};
float fx[] = {0.0, 100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0};
float CCM_medido;
CCM_medido = lagrange( adc()* FACTOR, x, fx, 11);

Como veran, no es complicado usar el sensor, aun cuando usemos algun metodo numerico.

Aqui se puede ver el sensor instalado en la tarjeta que diseñé:

En PCB

Siento no mostrar la tarjeta completa, pero no puedo hacerlo.

Espero esto les sea de utilidad. Los manuales del sensor los pueden consultar aqui.

Sin mas por el momento…

Argos.

Anuncios

2 pensamientos en “Sensor de flujo AWM3300V

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s