La salida del multiplexor es inestable e inexacta. ¿Qué estoy haciendo mal?

3

Tengo un proyecto Arduino que toma tres entradas de voltaje variable (en el rango de 0.43V a 0.63V) a un multiplexor 4051 (FAIRCHILD SEMICONDUCTOR CD4051BCN). Cada entrada se selecciona secuencialmente y se pasa a través de un OpAmp al Arduino y en la PC para el registro y análisis. DC5V se toma del Arduino.

Puedo controlar los voltajes de entrada del multiplexor con bastante precisión para propósitos de prueba con una resistencia variable y un multímetro, también puedo probar que el OpAmp funciona bien y es estable.

Mi problema es que la salida del multiplexor es irremediablemente inestable y varía en un +/- 20% o más con respecto al voltaje de entrada y no se estabiliza con el tiempo.

He intentado cambiar la velocidad de muestreo y permitir más tiempo para que la salida se estabilice antes de leerla, ¡pero no está bien!

Como novato en electrónica, es posible que haya elegido el multiplexor incorrecto. Parece que hay una gran cantidad de productos disponibles pero no está claro cuál es el mejor para mi aplicación.

Cualquier percepción u orientación apreciada.

    
pregunta Andrew

2 respuestas

2

Esta es solo una técnica general que podría aplicarse aquí. Una cosa que los principiantes suelen hacer es intentar iniciar y finalizar una conversión en una sola pasada. Por ejemplo,

start the conversion
kill some time
read the input
use the data

El problema con esto es que necesita esperar el tiempo suficiente para que las entradas se estabilicen, pero no quiere esperar demasiado porque al hacerlo se come la franja de tiempo de su periódico. La solución habitual es cambiar las cosas, así -

read the input
use the data
start a conversion

mira hacia atrás, pero lo que hace es dejar que el hardware haga su trabajo durante todo el periódico. Por ejemplo, digamos que una conversión toma 50 usec (por el bien del argumento, combina el tiempo para seleccionar una entrada y el tiempo ADC), y estás intentando leer el dispositivo cada 1 ms. La primera forma, suponiendo que espere el mínimo de 50 usec, se desperdicia el 5% de cada intervalo de 1 ms, y el hardware tiene solo el tiempo de establecimiento mínimo permitido. Hecho de la segunda forma, cuando lees la entrada, el hardware ha tenido un milisegundo completo para hacer su trabajo, los datos están disponibles inmediatamente al comienzo del periódico y el procesador puede volver a hacer lo que sea que haga entre los tiempos. sin ciclos perdiendo los bucles de retardo.

Por supuesto que tomas un golpe de latencia de esta manera; en el ejemplo, todos sus datos tienen 1 ms de antigüedad, pero generalmente la latencia que se genera de esta manera es aceptable. A cambio, tiende a obtener una entrada más estable y un uso más eficiente de la CPU.

    
respondido por el JustJeff
1

Tengo algunas sugerencias generales, basadas en el uso que hace mi empresa del 74HC4051.

  • Asegúrese de que está cambiando las líneas de dirección en una sola operación, si es posible. Si todas las líneas de direcciones están en el mismo puerto físico micro I / O, puede hacerlo con bastante facilidad.
  • Asegúrese de que bajo condiciones de no haya una señal de entrada más alta que la del IC, o debajo de la tierra. Use divisores de resistencia y abrazaderas de diodo schottky para mantener las señales bajo control.

También usamos un pequeño filtro 10R + 33pF en la salida.

    
respondido por el Adam Lawrence

Lea otras preguntas en las etiquetas