ADC de alta resolución para sensores ruidosos en condiciones variables

9

Introducción

En respuesta a esta pregunta sobre los amplificadores adaptativos , se recomendó que para tratar con condiciones variables, puede ser más económico simplemente usar un ADC con una resolución más alta para que no tenga que preocuparme por la amplificación y pueda escalar en software

Visión general

Estoy tratando de diseñar un circuito de adquisición de datos para sensores de estiramiento basados ​​en textiles montados en el cuerpo. El textil varía la resistencia a medida que se estira (aproximadamente 1 orden de magnitud, 10k -100k con 30% de estiramiento). Los rangos exactos cambiarán dependiendo de cómo se corta el textil, si está empapado de sudor, la temperatura, la antigüedad del material, cómo está montado, etc. Todo debe ser lo más pequeño posible porque está montado en la mano , por lo que minimizar el número de componentes es una gran ventaja.ΩΩ

Además, me gustaría que el circuito sea reutilizable para otras aplicaciones que pueden tener un peor rendimiento. Por ejemplo, si uso una versión más barata del textil, mi rango de resistencia puede ser tan malo como 100 a 300 .ΩΩ

Camino de señal

[textil] -> [Puente de Wheatstone] -> [paso bajo] -> [amplificador de instrumentación] -> [ADC] -> [AVR]

Requisitos

Por lo tanto, estoy buscando un ADC que cumpla con mis requisitos. El ADC debe ser:

  1. 16bits +
  2. Tan fácil de usar como sea posible: mucho mejor si ya hay un código de interfaz escrito para AVR / Arduino ...
  3. ... pero al mismo tiempo lo más completo posible: he visto algunos ADC con filtros de paso bajo y PGA incorporados, mucho mejor siempre que no dificulte la configuración
  4. 8+ canales, o si es lo suficientemente fácil de implementar, 2x 4+ canales. EDITAR: si estoy usando un puente Wheatstone, tal vez quiero 8 canales de entrada diferenciales (entonces 16 canales) ...
  5. No creo que el voltaje de operación importe ... (mejor si no es superior a 5 V)
  6. Montaje superficial
  7. No tiene que ser barato (es único)
  8. SPI vs. I2C no importa, creo ...
  9. 100+ Hz

Investigación

Hasta ahora, a través de Google, he encontrado los siguientes chips:

y los siguientes tutoriales:

¿Referencia de voltaje?

Finalmente, algunas personas han recomendado una referencia de voltaje de precisión, como la serie Analog Devices REF19x . ¿Crees que esto es necesario? La resolución es definitivamente importante para mí.

Conclusión

¡Avísame si tienes alguna recomendación! Tampoco estoy seguro de lo que estoy buscando exactamente, por lo que también se agradecen los consejos sobre cómo decidir.

terraza
fuente
Espero evitar este tipo de historia: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1264346368
terraza
@msutherl - ¿Sería un gran problema si tuviera que usar un mux para conectarse a este ADC? Te resultará difícil encontrar un ADC de 16 canales y 16 bits, pero las partes de 1 o 2 canales son bastante fáciles ...
Kevin Vermeer
1
Los bits por sí solos no determinan el rango dinámico. Los convertidores de 24 bits en teoría podrían tener un rango dinámico de 144 dB, pero los convertidores reales son de 100-120 dB más o menos. ¿Estás seguro de que necesitas tanta resolución para un sensor de estiramiento? ¿Estás tratando de manejar muchos sensores de estiramiento diferentes de diferentes valores? Sería mejor usar un amplificador de ganancia variable, creo, y ajustarlo para cada uno. Tendrás que hacer esa calibración en algún lugar de todos modos.
endolito
1
¿Necesita 100Hz + para cada sensor o para todos ellos? Con los ADC multicanal, con frecuencia obtienes 1 ADC y un mux, por lo que tendrás que dividir el SPS por el recuento de canales (o más si el par mux / adc no puede cambiar de canal muy rápido).
jpc
1
@msutherl Sí, un potenciómetro de ganancia manual o un amplificador de ganancia programable. Algo así como un PGA116 podría manejar muestrear todos sus sensores en modo round-robin con diferentes ganancias para cada uno, con todo hecho en software.
endolito

Respuestas:

7

ADS1256 de TI tiene ocho canales de 24 bits de un solo extremo con buffer de entrada de alta impedancia y PGA. El proyecto OpenEXG tiene un código PIC para interconectarlo (usan la versión ADS1255 de dos canales, pero debería ser la misma).

Si desea entradas diferenciales, existe ADS1298 , con 8 canales, PGA y A / D, referencia interna, más circuitos de ECG / EEG que puede ignorar. Sin embargo, no estoy seguro de que pueda encontrar ningún código de ejemplo para este.

Si está buscando resolución, entonces es imprescindible una referencia precisa y de bajo ruido.

Jaroslav Cmunt
fuente
5

Una idea quizás poco convencional, tengo curiosidad por lo que ustedes piensan al respecto:

Un orden de magnitud parece un cambio lo suficientemente grande como para medirlo directamente en un circuito divisor de voltaje.

Luego, podría usar un ADC más pequeño y variar la corriente a través del sensor. Una fuente de voltaje PWM filtrada + un seguidor de voltaje (puede ser un transistor NPN si tiene el muslo en el espacio) puede mejorar drásticamente su rango dinámico.

Puede usar uno o dos de estos y cambiar el voltaje al medir diferentes sensores.

jpc
fuente
No es nada convencional. De hecho, si quiere usar un microcontrolador pequeño de 8 bits, de esta manera puede evitar tratar con valores de 24 bits y la complejidad puede ser menor que la interfaz de estos ADC sofisticados. El rango dinámico puede ser la suma de los rangos dinámicos de ADC y PWM en el caso ideal. Por otro lado, parece que para muchas personas los diseños analógicos son más difíciles que los digitales, por lo que el uso de ADC de 24 bits puede ser más simple. Además, el rango dinámico de ADC se puede aumentar mediante sobremuestreo y filtrado digital ... bueno, ya no es simple.
Jaroslav Cmunt
@Jaroslav Gracias. 1. Él ya tiene un puente Wheatstone, así que supongo que no le teme totalmente a la parte analógica. :) 2. Se puede lograr 1 o 2 bits de resolución adicional mediante un simple filtro de suma de ejecución.
jpc
1
¡En efecto! Aquí hay un enlace para OP: http://www.dspguide.com/ch15.htm
Jaroslav Cmunt
3

Si su principal preocupación es tener un amplio rango dinámico para cualquier "sensor" dado, puede considerar usar DAC (o incluso solo fuentes de voltaje controladas por pin MPU) para ajustar la compensación / ganancia del amplificador para alterar el rendimiento del sistema para diferentes materiales.

También puede seguir esta etapa de ganancia variable con un circuito de integración de carga para que pueda obtener una sensibilidad de señal fina ajustando el período de "exposición".

Constructor de juguetes
fuente
0

Si tiene suficiente potencia de cálculo para la frecuencia de muestreo que necesita, considere el filtrado digital. Un filtro Savitzky-Golay , f / ex.

  • Puede cambiar los algoritmos más fácilmente que las partes;
  • Al insertar parte del filtrado en el software, probablemente pueda usar una parte con especificaciones más bajas que si la parte en sí tuviera que ser más tolerante al ruido o hacer todo el filtrado;
  • Aprenderá un montón más sobre sus entradas y lo que necesita de ellas y puede hacer una elección de piezas mejor informada, si de hecho, necesita una parte de mayor especificación.
  • ¡El software y las habilidades se transfieren fácilmente a sus otras aplicaciones!
JRobert
fuente
todo el filtrado se realizará en una PC en un entorno de procesamiento de señal en tiempo real.
terraza
0

¿Por qué no subirlo a 11 y usar el TI ADS1262 ? ¡Es un ADC de 32 bits, con 11 entradas y un PGA!

ADS1262

Con 32 bits, puedes probar casi cualquier cosa. Y ni siquiera es tan caro. Además, si solo está haciendo uno de estos, simplemente obtenga una muestra gratis .


Otra opción es usar un PSoC. Estos son microcontroladores que contienen bloques analógicos y digitales reconfigurables, que puede utilizar para crear todo tipo de funciones. ¡Puede elegir uno con un ADC de 16 bits, un PGA, un DAC y un filtro digital, para hacer su propio rango automático, recorte automático, sobremuestreo, filtrado digital, ADC!

PSoC38xx

Programar estas cosas es un juego de niños, ya que simplemente dibuja el esquema que desea, eligiendo funciones predefinidas de una lista. Luego escribe un código C y estarás ausente.

Rocketmagnet
fuente