¿Cómo puedo mejorar la precisión de mi divisor de voltaje?

Estoy diseñando un software de evaluación de SoC (estado de carga) de bajo costo para una celda de batería LiFePo 4 con corriente cero (en realidad, solo una corriente baja debido a la descarga automática). Para esta aplicación peculiar, el bajo costo aquí significa que no es probable que usemos un medidor de corriente/medidor de Coulomb.

Estoy ejecutando mi software en un BeagleBone AI en el pin AIN4 que soporta un máximo de 1,8 V al que conecté mi divisor de voltaje. El pin tiene un ADC firmado de 12 bits.

El BeagleBone AI está conectado a una construcción de batería 1S24P que nominalmente proporciona un voltaje de 12 V y una capacidad de 51 A·h.

Mi divisor usa 10 kohms 100 kohms, lo que me da un factor de escala de 11 (también conocido como (10+100)/10).

Para un voltaje de lectura de 13,1 V, AIN4 lee 1384 AKA 1,217 V

v = 1384/(1<<11 - 1)*1.8 V

Que se convierte en 13.387 V una vez que se aplica la escala:

Vbat = v*11

Me doy cuenta de que la precisión no es tan buena para mi propósito, ya que uso el voltaje para que coincida con la curva de la celda de voltaje/Soc, ya que la curva tiene dos mesetas.

¿Qué debo hacer para mejorar mi precisión?

¿Calibrarlo? ¿Tolerancia más estricta de sus resistencias con menos deriva de temperatura? ¿Más bits en tu ADC?
¿Ha mirado la precisión especificada del propio ADC? Hasta que esté seguro de que el ADC tiene la precisión que necesita, no tiene sentido hablar sobre el divisor. Proporcione un enlace a las especificaciones de ADC.
¿Tiene el divisor de voltaje conectado directamente al pin de entrada ADC en su Beagle? Si es así, ¿ha considerado la corriente extraída del divisor por el Beagle en ese pin cuando realiza una conversión ADC, y qué efecto tiene eso en el divisor? Si está tomando muchas lecturas rápidas, es posible que necesite amortiguar el voltaje con un opamp, o si solo está tomando lecturas ocasionales, entonces un capacitor de tamaño razonable (probablemente mayor a 100nF) probablemente funcione lo suficientemente bien.
¿El uso del divisor de voltaje es un requisito? Hay circuitos integrados en el mercado que medirán con precisión el voltaje. También existen circuitos integrados que brindan funcionalidades de monitoreo de batería. Si es una posibilidad, consideraría una placa hija para el Beaglebone con tal funcionalidad. Proporcionará un búfer entre su batería y la placa, así como también le brindará más información con la que puede trabajar su software de administración (salud de celda individual, por ejemplo).
100% de acuerdo con @brhans... Probablemente estés descuidando la impedancia de entrada del ADC. Esperemos que su hoja de datos le diga qué es. El almacenamiento en búfer con un opamp de ganancia unitaria puede ayudar. Un condensador en el pin de entrada es "obligatorio"
Para el voltaje de entrada de 13,1 V, ¿qué voltaje mide en AIN4 (es decir, en la salida del divisor de voltaje) usando un multímetro? Por cierto, (1<<11 - 1) = 1 << 10 = 1024. Eso probablemente no es lo que quisiste decir. Pruébelo usted mismo .

Respuestas (3)

Hay varias cosas que se pueden hacer para mejorar la precisión de sus mediciones:

  1. Intente usar más del rango de escala completa del ADC. Si el máximo es 1,8 V y el voltaje máximo de la batería es 16,4 V, pruebe con un factor de escala de 9,5 en lugar de 11.

  2. Use resistencias con tolerancias más estrictas (pruebe 0.1% o mejor) y mejores especificaciones para la variación de temperatura.

  3. Calibre la salida del ADC. La mayoría de los ADC tienen una compensación y una no linealidad no ideales que puede calibrar en hardware o software. Una forma de hacer esto en el software es tomar medidas en toda la gama de entradas de ADC y hacer coincidir la curva de medidas con una función de interpolación. Luego use la función de interpolación para escalar la salida del ADC.

Recuerde que la tolerancia no es tan importante aquí como el emparejamiento ; Las redes de resistencias están disponibles con una coincidencia mucho mejor que la tolerancia, generalmente por menos dinero que obtener dos resistencias de tolerancia estrecha.
Una tolerancia del 0,1 % no tiene sentido para esta aplicación. Las baterías de litio son MUCHO menos reproducibles con respecto a V vs SoC

12 bits = 2 12 = 4096 cuentas/balanza.

Si está firmado y 0b = 0 V, entonces 1,8 V = 4096/2 = 2048 (y -1,8 V = -2048, ignorando el bit final).
1,8 V/2048 = ~88 µV/bit. Ese es el "tamaño de paso" más pequeño detectable en esta configuración (usando todo el rango dinámico disponible).

Dado que el divisor se "divide" entre 11, 88 µV/bit * 11 = 9,7 mV de voltaje de la batería, tamaño de "paso", en el mejor de los casos.

Para lograr una mayor resolución, utilice una escala completa de 0-1,8 V sin firmar si está disponible (el doble de resolución, 44 µV/bit), más bits (mejor ADC (más lento)) y/o un promedio (sobremuestreo). para sobremuestrear de todos modos, ya que el ruido será un problema mayor con estos voltajes bajos.

Puede reducir un poco el ruido de muestreo al reducir los valores de las resistencias divisoras (al menos un orden de magnitud) y cambiarlas al circuito solo cuando sea necesario. Mayor corriente divisoria = menor ruido.

Investigue también la biblioteca matemática de punto flotante utilizada en su MCU. Algunos utilizan el formato exponente-mantisa de 24 bits, lo que puede provocar errores de redondeo significativos en unas pocas operaciones. Cree una rutina de prueba para cuantificar este error.

Finalmente, medir el voltaje de la batería puede no ser el mejor indicador del estado de carga, especialmente para los tipos de litio. Investigue el "conteo de culombios" y dispositivos SoC similares. Estos rastrean / calculan la cantidad de carga en la batería al realizar un seguimiento de la energía que entra, la energía que sale e incluso la cantidad de ciclos (degeneración).

¡Gracias! Este caso de uso es solo para una solución de bajo costo, por lo tanto, el medidor de voltaje.

El BeagleBone solo usa el Vdd digital de 1,8 V como referencia, por lo que cualquier error en eso provocará un error proporcional en la lectura del ADC. Los límites de la hoja de datos a temperatura ambiente son +/-2% para eso.

Además de eso, está la tolerancia de su resistencia y cualquier error debido a la impedancia de entrada del ADC. Y los propios errores de ADC.

Podría proporcionar una referencia externa más precisa (no hay forma en el tablero para eso, pero hay un 0 Ω resistencia que se puede quitar). O proporcione un voltaje de referencia y mida eso y escale la lectura por la referencia filtrada. Por ejemplo, una referencia de 1,225 V 0,1 % .

Podría simplemente calibrar la lectura almacenando un factor de calibración de intervalo, pero eso se desviaría a medida que el LDO en el PMIC se calienta y se enfría. No veo una especificación de deriva de temperatura.

Si utiliza resistencias de película delgada de 0,1% 25ppm/°C y una referencia externa y calibra la lectura (calibración de punto único), debería poder obtener una mejora de uno o dos órdenes de magnitud para un delta de costo de las piezas de $1,50.