Arduino Leonardo + Celdas de carga de 3 hilos + INA125P – Rebote/ruido de señal analógica

De hecho, tengo experiencia en software, por lo que mi experiencia en ingeniería eléctrica es algo escasa. Sin embargo, he probado mi primer proyecto Arduino y, en su mayor parte, estoy bastante contento. Sin embargo, siento que podría haber una gran cantidad de mejoras que se pueden lograr con respecto a las lecturas de las celdas de carga.

Estoy construyendo una báscula digital que pesa un máximo de 40 kg. Con solo presionar un botón, la báscula envía el peso actual a una computadora conectada a través de USB. Todo funciona bastante bien, excepto que recibo muchos rebotes al leer la entrada analógica de las celdas de carga.

Tengo 4 celdas de carga de 3 hilos de 50 kg (las que normalmente se encuentran en las básculas de baño, similares a estas celdas de carga , mis cables eran de diferentes colores, azul, negro, rojo) conectadas en la siguiente configuración:

Disposición de celdas de carga de 3 hilos

Estoy usando un INA125P para amplificar la señal a mi Arduino según el diagrama a continuación:

ingrese la descripción de la imagen aquí

  • Tengo un suministro externo regulado de 9v CC que alimenta todo el sistema.
  • Estoy usando un amplificador para aumentar el voltaje a 10 V en las celdas de carga, ya que ese es el voltaje de excitación especificado. También estoy usando este suministro de 10V para el INA125P
  • He modificado un cable USB para que sea un cable solo de datos eliminando la línea de voltaje, de modo que cuando se apaga la fuente de alimentación, todo el sistema se apaga y no recibe alimentación del USB conectado.

Básicamente, seguí un montón de artículos en línea, separé una escala, leí un montón de tutoriales, un poco de prueba y error y llegué al arreglo anterior. Esto lo pude hacer por mi cuenta. He suavizado dramáticamente las lecturas analógicas en el extremo del software mediante el uso de una mediana móvil combinada con una función de promedio, pero aun así obtuve muchos rebotes.

Hay un montón de artículos en línea que son muy útiles para mostrar exactamente cómo crear una báscula usando un Arduino y el INA125P, pero no pude encontrar uno que demostrara claramente cómo aplicar un voltaje negativo al INA125P. Recuerdo haber leído en alguna parte que debería poder lograr una mejor resolución aplicando un voltaje negativo al INA125P, pero me costó entender cómo se hizo y ahora parece que no puedo encontrar dónde empezar a leerlo. Incluso si de alguna manera descubrí cómo crear el voltaje negativo y luego descubrí cómo aplicarlo al INA125P y logré usar los 10 bits completos del ADC integrado de Arduino para obtener una resolución de 1023, todavía siento como si el el rebote que estoy experimentando es inusualmente alto,

Después de muchos retoques y pruebas, descubrí el siguiente comportamiento inusual...

  • El voltaje en A0 varía ligeramente cuando cambio el USB de una computadora a otra (incluso si se quita la línea de voltaje del cable USB) y, como resultado, la lectura en la escala cambia ligeramente de una computadora a otra.
  • El voltaje en A0 aumenta si la PC conectada al USB tiene instalados los controladores Arduino Leonardo (por lo que no solo está conectado como un dispositivo HID).

Debo señalar que…

  • Cambiar el USB de PC a PC no muestra ningún cambio en el voltaje de excitación o el voltaje suministrado al INA125P desde el amplificador reductor.
  • Cambiar el USB de PC a PC no muestra cambios en el voltaje en Aref o en Vin.

Esperaba poder obtener las respuestas a las siguientes preguntas...

  1. ¿Cómo puedo modificar mi circuito para reducir el rebote y estabilizar la señal analógica del INA125P en A0?
  2. ¿Cómo creo el voltaje negativo requerido y cómo lo aplico a mi circuito para que pueda alcanzar los 10 bits completos de resolución?
  3. ¿Cómo detengo la variación de voltaje en A0 cuando estoy conectado a través de USB a diferentes PC?

Realmente aprecio cualquier ayuda que reciba en esto.

---- ACTUALIZAR ----

Después de investigar un poco más, me topé con un IC convertidor de voltaje económico (ICL7660A) que esperaba poder usar junto con dos capacitores de 10uF para crear el suministro negativo de 10V al pin V de INA125P.

La documentación para el ICL7660A se puede encontrar aquí .

¿Hay algún problema con el uso del ICL7660A para crear los 10 V negativos como se muestra en mi circuito a continuación?

¿Podría esto causar algún problema previsible con el INA125P o el resto del circuito?

Negativo 10V creado por ICL7660A

--- ACTUALIZACIÓN 2 ---

Terminé probando el circuito anterior y, de hecho, parece suministrar el pin de -10 V al V- del INA125P, sin embargo, no parece mejorar el rango de lectura analógica... Todavía obtengo lecturas entre 300 y 1023. Tenía la impresión de que al suministrar un voltaje negativo al pin V- podría obtener el rango completo de 0 a 1023.

También estoy contemplando agregar un regulador de voltaje fijo de 10 V al voltaje de excitación para ver si eso tiene un efecto estabilizador... ¿importa dónde se coloca esto? ¿Es decir, cerca de las celdas de carga o cerca del suministro de voltaje o es irrelevante?

¿A qué te refieres con rebotar?
Quiero decir que la lectura analógica sigue fluctuando y nunca parece estabilizarse. Digamos, por ejemplo, que aplico una carga a las celdas de carga y obtengo una salida de la lectura analógica en serie de alrededor de 305. No solo se asentará en 305 sino que rebotará, por ejemplo, 300,301,307,310,305, etc., etc. Es aún peor sin mi suavizado lógica en el lado del software.
¿Para qué ganancia está configurado su INA125 y cuánta ganancia hay después? El amplificador está destinado a crear ruido, por supuesto, y la mayoría de la gente usaría un voltaje de excitación extremadamente estable. Por cierto, no considero que este dispositivo dé un problema con un solo suministro. ¿Qué frecuencia de muestreo está utilizando y tiene un filtro antialias antes de su ADC?
Estoy usando un trimpot para configurar Rgain e hice esto aplicando mi carga máxima de 40 kg a la plataforma de la celda de carga y ajustando lentamente el trimpot hasta que obtuve la mejor lectura posible de 1022. Medir la resistencia con mi multímetro muestra una lectura de 72,4 ohmios, lo que me daría una ganancia de 832,7 de un rango posible de 4 a 10000 según la fórmula proporcionada en el documento INA125P.
Compré el amplificador en eBay (XL6009 DC-DC Step UP Boost) y parece proporcionar una salida de 10 V bastante estable. Dicho esto, solo estoy usando un multímetro estándar para medir esto.
Mi código toma lecturas cada 10 ms (he intentado aumentar esto y no he observado ninguna diferencia notable en la estabilidad). Estoy usando una mediana móvil de 25 muestras y luego promediando las 10 muestras más internas para obtener mi lectura y eliminar los valores atípicos. Esto está funcionando bastante bien y sin él las lecturas rebotan ridículamente. Estoy usando el ADC integrado de Arduino, a menos que haya algún filtro anti-alias integrado, no tengo nada conectado entre el A0 y el INA125P.
¿Las lecturas fluctúan de la misma manera sin carga en el plato de pesaje? ¿Ha intentado usar el mismo voltaje de referencia que el voltaje de excitación? Al menos de esta manera hace una lectura radiométrica y descarta algunos errores.
La placa de pesaje en sí obviamente tiene un peso y sin nada en la placa, las lecturas rebotan de 304 a 306. Sin placa y sin carga en las celdas de carga, las lecturas rebotan de 226 a 228.
Sin el suministro de voltaje negativo, solo puedo obtener un rango de lectura analógico de entre 304 (sin otra carga que la propia plataforma de pesaje: 0 kg) y 1023 (40 kg). Lo que significa que obtengo 40 000 g / 719 = aproximadamente 56 gramos por número entero.
Además, la limitación de Arduino solo permite un Vref máximo de 5V.
¿Cómo te fue tan lejos con tu proyecto? Hice casi lo mismo, pero usé otro AMP. En lugar del INA125P, usé un AD620. Pero lo que me sorprende es que obtengo datos no lineales al medir el peso. ¿Es necesario algún voltaje de referencia o debo establecer un voltaje negativo para el cable de señal S que va a la V-IN del amplificador AD620?

Respuestas (1)

Algunas cosas a tener en cuenta primero: con solo 10 bits, su resolución de 1 bit será (rango completo)/1023, en este caso, 40 kg/1023 = 0,0391 kg (39,1 g). El nivel de ruido de 1 bit (39,1 g) en la entrada analógica de Arduino es 5v/1023 = 4,89 mv (suponiendo un sistema Arduino de 5v). En la entrada del amplificador, el valor de voltaje de 1 bit se divide aún más por la ganancia del amplificador. Por lo tanto, cualquier ruido del sistema por encima de estos valores reducirá aún más su resolución, a menos que se utilice un filtrado adicional. También recuerde que el chip Arduino puede dañarse si la entrada A0 cae por debajo de GND o por encima de VCC. Los diodos de protección podrían ayudar aquí si no hay otro control.

La configuración de suministro de +10 y -10 solo ayuda si el chip del amplificador lo necesita y/o si lleva el voltaje a través de cada celda de carga al nivel máximo de 10v, lo que brinda la salida máxima. Pero como se mencionó anteriormente, esto también podría conducir a un voltaje negativo en A0. Por ejemplo, con un suministro +- simplemente levantar su sistema por la plataforma de pesaje podría enviar A0 negativo. (Si prueba esto, asegúrese de desconectar A0 del Arduino primero).

Para filtrar las líneas S+ y S-, puede intentar colocar resistencias en serie de bajo valor en cada línea y luego colocar una tapa paralela (no polarizada) a través de ellas (con la tapa más cerca del chip amplificador). Las resistencias de 1k y un límite de 1uf pueden ser buenos valores para probar. Una resistencia en serie del mismo valor y un límite para GND en la línea A0 también pueden ayudar (con el límite más cerca de la entrada de Arduino). Es posible que estas ideas de filtrado no ayuden mucho si el ruido de su sistema ya es demasiado alto. Las piezas adicionales de RC reducirán ligeramente el tiempo de respuesta. Si la respuesta más lenta es inaceptable, se necesitaría mucho filtrado digital.

Compruebe su ruido de punto cero. Corta S+ y S- y mira si obtienes una lectura estable cerca de cero. (Haga esto primero desconectando A0 y verifique con un DVM que A0 no se vuelve negativo). Con A0 conectado, cualquier "rebote" que vea probablemente sea ruido del sistema del amplificador o Arduino. Para reducir el ruido del amplificador, coloque límites de valor más grandes desde el pin V+ a GND y desde el pin V- a GND. (10uf a 47uf debería ser suficiente, observe la polaridad correcta). Una pequeña tapa (tal vez 0.1uf) a través de la resistencia de ganancia podría ayudar (consulte la hoja de datos del amplificador). Para reducir el ruido de Arduino, asegúrese de utilizar la función analógica que apaga el sistema digital antes de realizar una lectura. No sé si el analogRead estándar hace esto o no. La mayoría de los chips Atmel tienen esta capacidad.

Para calibrar su sistema utilice un DVM de buena resolución. Desconecte temporalmente la entrada A0 y conéctela al DVM +, con DVM - a GND (o E-). Coloque una masa de rango completo (40 kg) en la báscula, ajuste Rganancia (agregue un potenciómetro pequeño si es necesario) hasta que obtenga una lectura muy cercana, pero no superior a Vref. Luego retire la masa de 40 kg y vea si la lectura de voltaje está muy cerca de 0v. Si no está cerca de 0v, puede compensar el voltaje agregando un potenciómetro de valor muy alto (100k a 1M) conectado entre E+ y E- con el centro conectado a 100k y luego a S+ o S-. Después de ajustar el punto cero, vuelva a probar y reajuste Rganancia si es necesario.