Conversión diferencial de señales analógicas usando Arduino Uno

5

Necesito realizar una conversión A / D para una señal diferencial usando Arduino Uno. He probado un método de software donde conecto una entrada a A0 y otra a A1, leo ADC para ambos canales y luego lo resto en el código. Pero el tiempo de 100 ms para convertir las señales analógicas está causando algunos errores, ya que no es perfectamente una conversión de señal diferencial (es decir, hay un cierto retraso entre las dos muestras tomadas y, por lo tanto, no es exactamente una señal diferencial).

Ahora no estoy seguro de esto, pero ¿puedo conectar una de las entradas analógicas al pin Arduino Uno GND y luego realizar una conversión para la otra señal, es decir, una entrada a tierra de Arduino, otra a A0 de Arduino y luego realizar Conversión A / D para A0. ¿Sería esto correcto? ¿Provocaría daños desde la perspectiva de un circuito?

    
pregunta user45620

4 respuestas

3

Dado su requerimiento de medir una señal de 20 mV por encima de 2.5V, una solución para esto es usar un amplificador de instrumentación. Para obtener una precisión de 10 bits de una señal de 20 mV, necesita una estabilidad de 20 uV. Una opción, solo disponible en un paquete MSOP8 bastante pequeño, sería el AD8237. Use la ganancia máxima posible que no dará como resultado ninguna saturación posible (del amplificador o del rango excesivo del ADC). De esa manera, puede obtener una resolución de unos 10 bits en lugar de unos pocos bits, tal vez 200-250 veces mejor.

Podría usar un amplificador de diferencia de rendimiento más bajo, pero comprometería mucho la medición.

    
respondido por el Spehro Pefhany
1

simular este circuito : esquema creado usando CircuitLab

Si miras la Hoja de datos de ATMega328p verá que el ADC solo admite mediciones de voltaje de extremo único. Para algunos otros chips Atmel (por ejemplo, ATTiny45 ) puede cambiar el pin negativo usado por el ADC configurando el registro ADMUX. Por ejemplo

ADMUX |= _BV(MUX0);

debería establecer ADC1 como la entrada negativa.

Si nos fijamos en la fuente de Arduino para analogRead ( wiring_analog .c ) verás que este método restablece el registro ADMUX, por lo que deberías escribir tu propia función si quisieras usar una medición diferencial con un chip compatible.

    
respondido por el 32bits
0

Debería usar una de estas soluciones (hardware)

  • amplificador operacional en circuito diferencial (LM358 - op-amp barato y popular de ferrocarril a ferrocarril)
  • ADC diferencial externo (MCP3421 - i2c, diferencial, lento, preciso, fácil de usar pero lento)

para medir la señal diferencial con ATmega328, porque este microcontrolador ADC no tiene función diferencial.

Tratar de conectar su fuente de señal puede ser una muy mala idea (dependiendo de su fuente de señal).

Si su señal puede muestrearse más lentamente, puede agregar algunos filtros RC para hacer que los cambios de voltaje sean lo suficientemente lentos para obtener la diferencia al medir 2 canales uno tras otro.

    
respondido por el Kamil
0

Puedes usar Arduino Leonardo, que se basa en AtMega32U4, que admite la entrada diferencial de ADC. Sin embargo, la biblioteca Arduino no parece admitir este modo, por lo que es posible que deba manipular los registros directamente.

Aquí hay un pequeño ejemplo: enlace

    
respondido por el HITMAnsOFT

Lea otras preguntas en las etiquetas