Filtrado de ruido en el circuito del medidor de deformación

0

Estoy haciendo un circuito de báscula de pesaje digital y actualmente tengo dificultades para entender los filtros que se usan comúnmente para reducir el ruido en este tipo de circuitos. Mi celda de carga es un puente completo con una capacidad máxima de 200 kg y una salida nominal de 2 mV / V. Con un voltaje de excitación de 5 V, solo estoy amplificando la mitad de la señal (0-5 mV) usando un amplificador AD620. Luego utilicé AD822 como amplificador de diferencia para restar un desplazamiento de 2.47V y luego amplificarlo nuevamente 4.9 para tener un giro de salida de aproximadamente 200mV a 4.8V.

Mis preguntas son:

1) ¿Es el voltaje de altura que he provisto para el ADC lo suficientemente grande o realmente pequeño? Porque leí que es una regla común proporcionar un margen para su ADC, pero no sé exactamente cuánto pagué con 200 mV. Estoy usando el ADC incorporado de arduino (resolución de 10 bits)

2) Como puede ver, estoy usando la forma básica de construir un amplificador de diferencia y un amplificador de no inversión con mi AD822. ¿Hay una manera más efectiva de hacer esto? ¿O hay algo que deba agregar para que mi salida sea más estable y precisa? Debido a que en el amplificador diferencial, en realidad tengo una salida bastante estable pero con respecto a mi amplificador no inversor, tiene algunas inexactitudes, por ejemplo. En lugar de tener una salida cercana a 196mV a 40mV de entrada (ganancia de 40mV * de 4.9 = 196mV), tengo una salida de algo así como 230mV. Y también está variando inesperadamente con la carga sin movimiento.

3) Lo siento, pero básicamente no sé algo sobre el filtro de ruido. ¿Cuáles son sus recomendaciones para mi circuito en el filtrado de ruido? Creo que debo tener que poner algo entre mi celda de carga y AD620 in-amp, y entre mi amplificador no inversor y ADC, pero no sé qué son exactamente ahora.

¡Todo tipo de ayuda es muy apreciada!

Para su información, se utilizaron tapas de desacoplamiento en cada IC, pero no se indicaron en el esquema a continuación. (0.1micro paralelo a 0.33micro)

Y si esto podría ayudar, este es mi código para probar mis valores, en realidad es el código de muestra proporcionado para suavizar los valores analógicos.

  total= total - readings[index];

  readings[index] = analogRead(inputPin);

  total= total + readings[index];

  index = index + 1;

  if (index >= numReadings)

    index = 0;

  average = total / numReadings;

  Serial.println(average); 

  delay(500);
    

2 respuestas

2

Debería aprovechar al máximo su puente para controlar directamente un amplificador diferencial. Tratar de crear la referencia separada de 2.47V con un LM324 será una fuente de error que probablemente acabará con el rendimiento de su circuito. Después de todo, hay una buena razón por la que los puentes completos están diseñados en celdas de carga.

No he visto ninguna hoja de datos para las partes que está utilizando, pero también parece que su uso de las partes ADxxx para parte del circuito y el LM324 para las referencias será otra fuente de error. Es probable que las partes LM324 y ADxxx estén en ligas completamente diferentes cuando se trata de parámetros de error como los voltajes de compensación.

Otra cosa en que pensar. Cuando obtenga su circuito todo pulido, todavía habrá un error donde la carga cero no es igual al resultado cero. Lo mejor que esperas es que el circuito total sea lo más lineal posible en todo el rango utilizable. Luego, tome lo que haya leído en "sin carga" y reste ese valor de las lecturas que realice en el momento del pesaje para obtener el peso real. Otro factor que debe agregarse a esto es que a menudo también es necesario usar software para escalar las lecturas al peso real. Esto implica tomar una lectura con el peso completo y guardarla para escalar las lecturas subsiguientes al peso real.

Si no puede lograr una buena linealidad de los circuitos analógicos en todo el rango de uso de peso, puede ser necesario calibrar adicionalmente el sistema en puntos adicionales como el rango medio o al 25%, 50% y 75% para obtener la capacidad de escalar las lecturas al peso real mediante la interpolación lineal en secciones más cortas del rango de entrada.

Por último, no descarte la importancia de la variación de temperatura que afectará a su sistema.

    
respondido por el Michael Karas
0

No miré todos los detalles, pero en mi opinión, el enfoque es bastante incorrecto: estás usando tres amplificadores operacionales diferentes y toneladas de resistencias, cada una de las cuales agrega ruido y errores. Descárgalo todo y conecta directamente tu salida AD620 a la entrada ADC de un 328 (NO un "Arduino" con tantas cosas inútiles), con los cables más cortos posibles. el único componente valioso que se agrega es alguna celda R-C (por ejemplo, 1k y .1uF) como filtro de paso bajo.

entonces lo que obtienes de la lectura de ADC es 512 + valor de ganancia *. Bastante lo mejor que jamás tendrás. Entonces necesitas eliminar el desplazamiento y ganar dentro de tu boceto. Para eso es un micro, ¿no?

La "Referencia" en el AD620 parece estar atada al suelo en la hoja de datos. ¿Por qué querría jugar con dispositivos electrónicos físicos muy imprecisos (1%) obteniendo milivoltios de ruido en todas partes cuando puede obtener una resolución de 0.000006% usando flotadores dentro de su Arduino?

Y nunca pienses que no eliminar el 2.5V significa que perdiste un poco de precisión. Eso es ruido de todos modos. Por el contrario, ganó una buena garantía de que cuando leyó 0 o 1023, su circuito está roto ;-) Y tomó la distancia necesaria de las no linealidades inherentes al hecho de que está cerca de GND o VCC. / p>     

respondido por el Chris

Lea otras preguntas en las etiquetas