Arduino analógico: ruido de pin vecino en ADC incluso con gran retraso

2

Estoy leyendo dos valores de entrada analógica (sensores de luz, con resistencias desplegables) en un Arduino MEGA 2560.

Se supone que un pin informa del valor 0, mientras que otro pin reporta un valor de ~ 800. Lo sé con seguridad, porque si mi boceto lee SOLO uno de estos pines, eso es lo que obtendré.

Si intento leer ambos valores en un bucle, entonces el primer pin parece estar influenciado por el segundo pin en su lectura, y es mayor que 0. Sé que es una buena práctica llamar al comando analogRead () dos veces o para poner un pequeño retardo entre el cambio analógico- input-pin-reads para dar al ADC la oportunidad de stabilite . Pero, incluso si llamo analogRead () dos veces Y le doy un valor de retraso de 1 segundo (!!), el primer pin todavía me da una lectura más alta de lo que debería.

  

bucle solo leyendo el pin 1:
  pin 1 = 0

     

pin de lectura de bucle 1 + 2, sin demora entre llamadas:
  pin 1 = 20, pin 2 = ~ 800

     

lectura de bucle pin 1 + 2, llamando a analogRead dos veces:
  pin 1 = 6, pin 2 = ~ 800

     

pin de lectura de bucle 1 + 2, con retardo (1000):
  pin 1 = 6, pin 2 = ~ 800

Intentando entender lo que está pasando ...

Aquí está el código más simple para probar esto

int sensor[2]; 

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (int i = 0; i < 2; i++) {
    analogRead(i); // read pin twice and ignore first result
    sensor[i] = analogRead(i); 
    delay(1000);  // give long delay to let ADC stabilize
  }

  Serial.println(sensor[0]);
  Serial.println(sensor[1]);
}

Aquí hay un esquema simplificado que muestra cómo se conecta 1 sensor ( TEMT6000 foto transistor) al pin analógico . Tiene una resistencia desplegable para evitar valores flotantes aleatorios en caso de que no se conecte ningún sensor. La resistencia de bajada es tan alta (220K) para permitir lecturas con poca luz. Los cables de los sensores funcionan en paralelo con los cables que alimentan un LED. Lo he incluido, por si acaso. Pero, tenga en cuenta que en todas las pruebas enumeradas anteriormente, el LED no estaba encendido.

Ahora multiplique esa configuración por 8. Como tengo 8 unidades de sensor conectadas a 8 pines analógicos.

    
pregunta evsc

1 respuesta

5

Cuando realice la conexión analógica, la capacidad interna del MEGA 2560 está conectada al sensor y debe cargarse a la tensión correcta. Debido a que su sensor utiliza un pulldown de 220k, su sensor tiene una gran resistencia de salida y recargar las capacitancias internas puede tomar algún tiempo, especialmente cuando hay una gran diferencia entre los voltajes de dos pines de entrada ADC diferentes, pero el analógico Read solo conecta el pin y el interno. Capacitancia de ADC para algunos ciclos de reloj. Puede agregar un pequeño capacitor externo (1nF o algo así) al pin de entrada, de esa manera la capacitancia interna del ADC se puede recargar mucho más rápido desde ese capacitor. (Consulte la página 276 en la hoja de datos de ATmega2560 enlace )

La lectura de un pin de tierra ayuda porque su valor esperado es cercano a 0. Pero si el valor no es cero o está cerca de eso, entonces leer tierra primero no ayuda. Atmel quiere fuentes con una impedancia de salida de 10kOhm o menos. Su fuente tiene básicamente una impedancia de fuente de 220kOhm. ( enlace Página 5) Podría ayudar hacer más de 2 lecturas analógicas, no es necesario retrasar entre ellas y debe usar el último valor medido en la última lectura analógica.

    
respondido por el Jan Lucas

Lea otras preguntas en las etiquetas