ATmega328P ADC extraño comportamiento al leer múltiples piezos

0

He estado trabajando en un proyecto de batería que involucra tener un pequeño microcontrolador para cada almohadilla de batería. Lo estoy construyendo usando un Arduino Nano (ATMega328P).

Actualmente estoy leyendo valores de ADC de 5 piezos. Estoy usando la biblioteca "avdweb_AnalogReadFast" para acelerar la lectura analógica: enlace El código se ve así:

analogReadFast(_sensorPin); //flush first value, wait ~25µs
_val = analogReadFast(_sensorPin);

Mi código DEBUG muestra 20 lecturas de las 5 entradas diferentes (cada fila) como se muestra a continuación:

41, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 98, 108, 129,          
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 77, 81, 91, 79,            
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,                  
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

En este ejemplo, el sensor 1 fue golpeado primero, los sensores 2 y 3 fueron golpeados más tarde y los sensores 4 y 5 no fueron tocados.

Cada piezo tiene un filtro de paso bajo para suavizar la salida con una resistencia de 10 K y una tapa de 680pF:

simular este circuito : esquema creado usando CircuitLab

El punto en el que tengo un problema es cuando golpeo con más frecuencia un sensor, lo cual ocurrirá durante el uso normal. No puedo explicar lo que está sucediendo, pero el código sigue detectando una lectura estable en el ADC:

24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 4, 3, 3, 3, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

Aquí, estaba rasguñando el primer sensor solo. Después de un tiempo, no dejará de enviar una señal atascada.

Hizo el mismo experimento con el segundo piezo, y después de un tiempo, todos los sensores se vieron afectados:

20, 20, 20, 20, 20, 21, 21, 20, 20, 21, 20, 19, 22, 21, 20, 20, 20, 20, 20, 20,
59, 59, 59, 59, 59, 60, 59, 60, 59, 59, 60, 59, 59, 59, 60, 59, 59, 60, 59, 59,
47, 48, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 47,  
35, 35, 35, 35, 35, 35, 34, 35, 35, 34, 34, 34, 34, 34, 35, 35, 35, 34, 35, 35,                                                                            
23, 23, 22, 23, 23, 23, 23, 23, 23, 22, 22, 22, 22, 23, 22, 23, 23, 22, 23, 23,

Reiniciar el microcontrolador utilizando el botón de reinicio no solucionará este problema.

Al golpear a otros sensores, eventualmente se liberará el código.

Tuve los mismos resultados:

  • Usando el analógico estándar de Arduino
  • Agregar retrasos entre mi lectura vaciada y la lectura real
  • Aumentar el retraso después de cada golpe (actualmente oscila entre 5 y 20 milis)

¡Gracias por tu ayuda!

    
pregunta woodencase01

0 respuestas

Lea otras preguntas en las etiquetas