INA226 Measurement Offset/Nonlinearity Problems

Hola a todos, estoy construyendo un probador de baterías DIY / carga electrónica usando un ESP32, una pantalla TFT y otros componentes interesantes. El núcleo del proyecto es un sumidero de corriente con un lazo de retroalimentación, con un punto de ajuste de control digital. Aunque tengo algunas ideas para mejorar el diseño (reconozco que hice algunas elecciones poco apropiadas), el problema más doloroso en este momento está en la medición de corriente del INA226.

Descripción del problema:

Cuando el voltaje de entrada del terminal de la PCB es bajo (por ejemplo, alrededor de 4V) e intento aumentar la corriente, encuentro que la lectura del INA226 es menor que la corriente real (verificada con un multímetro digital) y es no lineal. Esta desviación se vuelve más pronunciada a medida que aumenta la corriente establecida.

  • El problema aparece cuando la corriente excede aproximadamente 50mA;
  • Cuando el voltaje de entrada es alto (aproximadamente 18V), el problema casi desaparece;
  • Curiosamente, el valor establecido del lazo de retroalimentación está muy cerca de la corriente real, normalmente con un error dentro de ±0.5mA.

Así que, en esencia, mi carga funciona como se espera, pero el INA226 parece “subreportar” los valores de corriente a bajo voltaje.

Preguntas:

  1. ¿Alguien ha experimentado este comportamiento con el INA226 a bajo voltaje de bus bajo carga?
  2. ¿Podría estar relacionado con la caída de voltaje en la derivación, el timing del I2C u otros factores?
  3. ¿Qué sugerencias hay para obtener lecturas estables o mejorar la precisión de medición en este escenario?

Si necesitan más información, puedo compartir más fotos, diagramas de cableado, fragmentos de código o los archivos completos del proyecto KiCad. ¡Muchas gracias de antemano por su orientación o por compartir experiencias similares!

¿Has considerado los problemas de estabilidad que podría causar la interacción entre C1 y R4? Esto introduciría un retraso en la entrada inversora del amplificador operacional, y sumado al retraso introducido por el transistor Darlington, podría ser suficiente para causar oscilaciones o algún fenómeno de ringing.

Admito que no había considerado esto antes. Mi razonamiento era que, dado que el voltaje de la batería es estable, no se necesita un ajuste rápido, y el uso de un filtro RC de paso bajo puede reducir el ruido/oscilación. Definitivamente revisaré este problema con un osciloscopio.

Además, se me olvidó mencionar que Q1 ya ha sido reemplazado de 2N2222 a BD139.

El filtro RC de paso bajo (C1 y R4) en tu lazo de retroalimentación podría ser el culpable, como se mencionó en la respuesta. A bajos voltajes de entrada, el retardo del lazo (del RC y el transistor Darlington Q1) podría causar desplazamientos de fase, lo que lleva a una regulación inestable de corriente y, por tanto, lecturas distorsionadas del INA226. Intenta reducir la constante de tiempo del RC—usa un capacitor C1 más pequeño (por ejemplo, de 100nF a 10nF) o el resistor R4—para acelerar la respuesta de retroalimentación. Además, dado que reemplazaste Q1 con BD139, asegúrate de que su excitación de base sea suficiente; una excitación insuficiente puede hacer que el transistor opere en la región lineal, aumentando la no linealidad de corriente. Usa un osciloscopio para observar la forma de onda del voltaje del shunt—si hay ringing u oscilación, agregar un pequeño capacitor snubber (por ejemplo, 10pF) en paralelo con el resistor shunt podría ayudar a estabilizar la señal.

Primero desglosemos el fenómeno:

  1. El lazo de corriente en sí no tiene problemas (valor de consigna ≈ valor medido), lo que indica que el lazo cerrado con MOSFET, amplificador operacional y DAC funciona correctamente;

  2. Solo el “valor reportado” del INA226 es bajo, y ocurre específicamente cuando VBUS es bajo y la corriente es alta;

  3. A 18 V casi no se observan errores.

Esto apunta casi directamente a un error de medición a nivel de dispositivo causado por “voltaje de modo común demasiado bajo en los extremos de la resistencia de derivación”, y no al código o la temporización I²C.

  1. Modo común demasiado bajo, el PGA interno comienza a “funcionar de forma perezosa”
    El etapa de entrada del INA226 es un ADC tipo ΔΣ, con un array de capacitores conmutados de 2 MHz en el pre-amplificador. Cuanto menor es el voltaje de modo común, más evidente es el desajuste de inyección de carga del muestreo y retención interno, y el offset equivalente se amplifica. El datasheet es claro: VCM = 0 V tiene un offset típico de 50 µV, VCM ≥ 1 V reduce a un orden de magnitud de 10 µV. Con 4 V de entrada, 50 mA de corriente, si la resistencia de derivación es 50 mΩ, entonces VBUS se ve realmente reducido a 4 V – 2.5 mV ≈ 3.9975 V, el modo común sigue siendo “bajo”, pero lo más grave es que el voltaje de derivación es solo 2.5 mV, ya del mismo orden de magnitud que el voltaje de offset; cuando la corriente aumenta más, las lecturas comienzan a “venir cortas”.

  2. Efecto termopar de las trazas Kelvin/pads de la resistencia de derivación
    En condiciones de bajo voltaje y alta corriente, 1 µΩ de resistencia metálica adicional causará un error de 1 µV. Si el cobre de la capa superior se ha “comido” mucho, o si el punto de muestreo está demasiado lejos del pad, el Vshunt real aplicado al INA226 será menor que lo medido con el multímetro.

  3. Rebote de tierra (ground bounce) en la placa
    Si la tierra de potencia, la tierra digital y el GND del INA226 comparten un trazo delgado, los picos de conmutación de 50 mA pueden generar una diferencia de tierra de varios cientos de µV, que se superpone directamente a la medición diferencial.

  4. Temporización/ruido I²C
    Este tipo de errores generalmente son “saltos” o “parpadeo de valores”, en lugar de ser sistemáticamente bajos, por lo que su prioridad se reduce.

Lista de mejoras (ordenadas por relación coste-beneficio)

A. Mover la resistencia de derivación al “lado alto”
Permitir que el pin VBUS del INA226 se conecte directamente al positivo de la batería, de modo que el modo común ≈ 4 V, mucho mayor que la “zona de confort” de 1 V, y el offset del dispositivo se reduce inmediatamente en un orden de magnitud. La medición en lado alto requiere:
– Mover la resistencia de derivación al terminal positivo;
– La alimentación V+ del INA226 puede ser 3.3 V, porque el modo común permite hasta 36 V;
– Tenga en cuenta que las nuevas trazas deben ser Kelvin y separadas de la ruta de potencia.

B. Aumentar el voltaje de derivación
Si la corriente máxima es 1 A, cambiar los 50 mΩ por 100 mΩ, escala completa 100 mV, el LSB sigue siendo 2.5 µV, pero la relación señal/offset se duplica. La disipación es 100 mW, aceptable para una aplicación de 1 A.

C. Calibrar el “offset cero”
Realizar una muestra de “corriente cero” en el código (relé desconectado o DAC=0), almacenar el resultado en EEPROM y restarlo antes de cada prueba formal. El INA226 tiene un registro Calibration, pero solo es válido para cálculos de potencia/corriente, no para el voltaje de derivación crudo; por lo que leer directamente el Shunt Voltage Register y restar el offset es lo más directo.

D. Cirugía menor de re-diseño de placa
– Dividir tierra de potencia y tierra digital, conectar en un solo punto;
– Hacer una capa de cobre “tierra analógica” completa bajo el INA226, uniéndose a tierra de potencia solo en un punto a través de una resistencia de 0 Ω o un pin;
– Colocar dos pares de vías Kelvin en el interior de los pads de la resistencia de derivación, trazas diferenciales paralelas en capa interna, longitud <15 mm.

E. Filtrado de software
Muestrear 64 veces para promediar, luego suavizar el resultado con un filtro IIR de segundo orden, puede reducir el ruido aleatorio por debajo de 0.2 LSB, pero es ineficaz para offset sistemático, solo debe usarse junto con A/B/C.

Métodos de verificación rápida

  1. Usar temporalmente una fuente de laboratorio en serie con una resistencia de 1 Ω para elevar VBUS artificialmente por encima de 8 V, ver si el error se reduce inmediatamente;

  2. Inyectar directamente 1 mV, 5 mV, 10 mV a los pines diferenciales del INA226 con una fuente de milivoltios precisa (o DAC+divisor), leer el Shunt Voltage Register, trazar la curva “entrada-valor de código”, se puede ver de inmediato la zona lineal del dispositivo.

Normalmente, después de completar los tres elementos A+B+C, el error en el punto de 4 V/1 A puede suprimirse a menos de ±0.5 %FS, el resto es solo un problema de calibración de software. ¡Buena suerte con la depuración!

Basado en su descripción, el problema del INA226 que muestra lecturas de corriente inferiores a las reales y no lineales en voltajes de entrada bajos (por ejemplo, 4V) con corrientes grandes, mientras que el problema desaparece en voltajes altos (18V), puede analizarse y abordarse de la siguiente manera:

1. Voltaje de modo común y caída de voltaje en la resistencia shunt

El rango de voltaje de modo común del INA226 es crítico. Requiere V- ≤ VCM ≤ V+ (donde V- es tierra y V+ es típicamente el voltaje del bus). Sin embargo, la caída de voltaje a través de la resistencia shunt (I×Rshunt) altera el voltaje de muestreo. Cuando el voltaje de entrada es bajo (por ejemplo, 4V), el aumento de la corriente hace que el voltaje de modo común en el terminal de muestreo se acerque o caiga por debajo del voltaje mínimo de operación de modo común del INA226, lo que lleva a una precisión de medición reducida y no linealidad.

Por ejemplo, si su resistencia shunt es 0.02Ω (inferido de R5=0.02Ω en el esquemático), la caída de voltaje es 10mV a 500mA. Con un voltaje del bus de 4V, el voltaje de modo común en el punto de muestreo disminuye debido a esta caída, acercándose al límite inferior del rango de modo común del INA226, causando así desviaciones en la medición. A 18V, la caída en la shunt es insignificante, por lo que el voltaje de modo común permanece dentro del rango normal.

2. Disipación de potencia y deriva térmica de la resistencia shunt

La resistencia shunt se calienta bajo corrientes grandes, lo que lleva a un cambio de resistencia con la temperatura (deriva térmica), lo que causa mediciones no lineales. Especialmente en voltajes bajos y corrientes grandes, la disipación de potencia (I²×R) de la resistencia shunt es significativa, lo que resulta en un incremento de temperatura y variación de resistencia notorios, haciendo que el valor de corriente calculado a partir del voltaje de muestreo se desvíe del valor real.

3. Temporización I2C y estabilidad de comunicación

Aunque el lazo de retroalimentación funciona normalmente, la comunicación I2C del INA226 puede tener desviaciones de temporización bajo suministro de bajo voltaje. Verifique si el voltaje de alimentación del INA226 (3.3V del AMS1117 en el esquemático) es estable en voltajes bajos del bus. Además, las resistencias pull-up del I2C y la velocidad de comunicación (por ejemplo, excediendo la tasa soportada por el dispositivo) también pueden afectar la precisión en la lectura de datos, lo que lleva a desviaciones en la lectura.

4. Diseño del circuito e interferencia de ruido

La inductancia parasita o resistencia en el cableado de la resistencia shunt, o la diafonía con otros circuitos de alta frecuencia (como la pantalla TFT y las señales de alta frecuencia del ESP32), también pueden afectar la precisión de muestreo. Especialmente en escenarios de bajo voltaje y señales pequeñas, el impacto del ruido se amplifica.

Sugerencias para lecturas estables y mejora de precisión

  • Optimización del voltaje de modo común: Asegúrese de que el voltaje de modo común del INA226 esté siempre dentro de su rango de especificación. Intente ajustar el valor de la resistencia shunt (por ejemplo, eligiendo una resistencia menor para reducir la caída de voltaje, mientras balancea potencia y resolución) o limite la corriente máxima en escenarios de bajo voltaje para evitar un voltaje de modo común excesivamente bajo.
  • Selección de la resistencia shunt: Use resistencias de aleación con bajo coeficiente de temperatura (como aleación de manganina) y asegúrete de un margen de potencia suficiente (al menos el doble del consumo de potencia real) para reducir el impacto de la deriva térmica. Mientras tanto, optimice el diseño de disipación de calor de la resistencia shunt, como aumentar los pads térmicos o áreas de cobre.
  • Optimización de la comunicación I2C: Reduzca la velocidad de comunicación I2C (por ejemplo, de 400kHz a 100kHz), verifique si el valor de la resistencia pull-up coincide (típicamente alrededor de 4.7kΩ para sistemas de 3.3V), y asegúrese de que la temporización I2C entre el ESP32 y el INA226 cumpla estrictamente con el manual del dispositivo. También puede agregar condensadores de desacoplo (como poner en paralelo condensadores de 10μF y 0.1μF en el pin V+ del INA226) para mejorar la estabilidad del suministro.
  • Mejora del diseño del circuito: Mantenga las líneas de muestreo de la resistencia shunt lo más cortas y gruesas posible para reducir los parámetros parasitas; coloque el INA226 lejos de fuentes de interferencia de alta frecuencia (como los circuitos de control de pantalla TFT), y apantalle las líneas de muestreo o use conexión a tierra de punto único si es necesario.
  • Calibración y compensación por software: Establezca una tabla de calibración para escenarios de bajo voltaje en el código, y compense las lecturas del INA226 basándose en el voltaje de entrada y la corriente establecida. Por ejemplo, mida la desviación en diferentes voltajes y corrientes con un multímetro digital, ajuste una función de compensación, y corríjala en tiempo real en el software.