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:
Se 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:
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».
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ñé:
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.
si puedes darme mas info marichigk@gmail.com
Me gustaMe gusta
claro, solo ¿que tipo de informacion adicional buscas?
Me gustaMe gusta
hola como haria para saber si tu reparas esas maquinas de donde eres o si es imposible arreglarlas me estan vendiendo una maquina pero la dejron directa quien pudiera arreglarla
Me gustaMe gusta
Hola. Puedo reparar las máquinas que diseñé, para el caso de trías marcas, tendría que investigar acerca de su funcionamiento. Trata de ver si puedes localizar distribuidores de la marca que tienes y asesorarte con ellos, ya que tendrán las refacciones y servicio necesarios para el cuidado y mantenimiento de sus máquinas. Saludos
Me gustaMe gusta