LPC2148 Problema ADC con divisor de voltaje para batería

3

editar: solución encontrada con nuestra nueva revisión de la placa; fuera de los errores por descuido, el búfer de la señal con un amplificador operacional parece haber resuelto el problema (como lo sugiere Joshua a continuación).

Estoy trabajando con una PCB personalizada utilizando el ARM LPC2148. Estoy tratando de medir el voltaje de la batería, que puede ser de hasta 4.2 V o menos, utilizando un divisor de voltaje. Sin embargo, el uso de diferentes resistencias provoca grandes cambios en la precisión de las lecturas de ADC. ¿Por qué es esto?

Detalles:

Configuré la fuente de alimentación a 3.0 V y la conecté a un pin ADC, y obtuve una lectura de 2.987V, que es lo suficientemente precisa para nuestro uso y muestra que todo funciona.

Usando el divisor de voltaje que incorporamos en el PCB con resistencias de 47K y 100K, las lecturas del ADC varían de una manera no lineal, es decir, no por un simple factor escalar (datos a continuación). p>

Construí un divisor de voltaje usando 5% 10K resistencias de 1K y 100K (se divide por 11 101), y tomé una lectura en el ADC. El software mostró 0.029V, o 0.319V después de ser escalado de acuerdo con el divisor de voltaje. Esto obviamente es incorrecto, pero la razón por la que estamos usando valores de resistencia grandes es que limita el consumo actual; La fuente de alimentación muestra que se está utilizando menos de 1 mA.

Construí otro divisor de voltaje usando resistencias de 5% mucho más pequeñas, de valores 4.7 y 8.2 (se divide por 2.745), y tomé una lectura en el ADC. El software mostró un valor de 1.071V o 2.940V después de ser escalado de acuerdo con el divisor de voltaje. Obviamente, esto es mucho mejor que el otro divisor de voltaje, y probablemente podríamos usarlo. Sin embargo, el consumo actual es de 228 mA, lo cual es inaceptable. Parece que el camino a seguir es rediseñar la placa para usar valores de resistencia más pequeños y conectar el divisor a un transistor para limitar el consumo de corriente.

ADC Vref es 2.5V.

Mi pregunta: ¿por qué el enorme cambio en la precisión de los diferentes resistores?

Datos:

power supply: voltage coming from the power supply to the board
input voltage: voltage reading taken at the voltage divider
voltage after divider: the voltage reading taken at the output of the voltage divider
raw from ADC: value from the ADC; average of a few readings
scaled by divider: value obtained by taking the ADC reading and scaling by the voltage divider (the first row is 0.28/0.32, etc)
voltage divider: resistor values for the current data set
+---------------+---------------+-----------------------+--------------+-------------------+-----------------+
| using the voltage divider on the board (47K / 47K + 100K)                                                  |
|                                                                                                            |
| power supply  | input voltage | voltage after divider | raw from ADC | scaled by divider | voltage divider |
|         3.8   |         3.80  |                 1.22  |        0.28  |             0.87  |      47,150  Ω  |
|         3.7   |         3.70  |                 1.18  |        0.29  |             0.89  |     100,000  Ω  |
|         3.6   |         3.60  |                 1.15  |        0.30  |             0.92  |         0.320   |
|         3.5   |         3.50  |                 1.12  |        0.31  |             0.95  |                 |
|         3.4   |         3.40  |                 1.09  |        0.32  |             1.00  |                 |
|         3.3   |         3.30  |                 1.06  |        0.33  |             1.04  |                 |
|         3.2   |         3.20  |                 1.02  |        0.35  |             1.08  |                 |
|         3.1   |         3.10  |                 0.99  |        0.37  |             1.15  |                 |
|         3.0   |         3.00  |                 0.96  |        0.39  |             1.21  |                 |
+---------------+---------------+-----------------------+--------------+-------------------+-----------------+
| using an external voltage divider (4.7 / 4.7 + 8.2)                                                        |
|                                                                                                            |
| power supply  | input voltage | voltage after divider | raw from ADC | scaled by divider | voltage divider |
|         3.8   |         3.79  |                 1.39  |        1.37  |             3.76  |          4.7 Ω  |
|         3.7   |         3.69  |                 1.35  |        1.33  |             3.66  |          8.2 Ω  |
|         3.6   |         3.59  |                 1.31  |        1.30  |             3.56  |         0.364   |
|         3.5   |         3.50  |                 1.28  |        1.26  |             3.47  |                 |
|         3.4   |         3.40  |                 1.24  |        1.23  |             3.37  |                 |
|         3.3   |         3.30  |                 1.21  |        1.19  |             3.27  |                 |
|         3.2   |         3.20  |                 1.17  |        1.16  |             3.17  |                 |
|         3.1   |         3.10  |                 1.13  |        1.12  |             3.07  |                 |
|         3.0   |         3.00  |                 1.10  |        1.09  |             2.98  |                 |
+---------------+---------------+-----------------------+--------------+-------------------+-----------------+
| using an external voltage divider (10K / 10K + 100K)                                                       |
|                                                                                                            |
| power supply  | input voltage | voltage after divider | raw from ADC | scaled by divider | voltage divider |
|         3.8   |         3.80  |                 0.35  |        0.35  |             3.81  |       9,820  Ω  |
|         3.7   |         3.70  |                 0.34  |        0.34  |             3.71  |      98,400  Ω  |
|         3.6   |         3.60  |                 0.33  |        0.33  |             3.63  |         0.091   |
|         3.5   |         3.50  |                 0.33  |        0.32  |             3.53  |                 |
|         3.4   |         3.40  |                 0.32  |        0.31  |             3.43  |                 |
|         3.3   |         3.30  |                 0.31  |        0.30  |             3.33  |                 |
|         3.2   |         3.20  |                 0.30  |        0.29  |             3.23  |                 |
|         3.1   |         3.10  |                 0.29  |        0.28  |             3.13  |                 |
|         3.0   |         3.00  |                 0.28  |        0.28  |             3.04  |                 |
+---------------+---------------+-----------------------+--------------+-------------------+-----------------+
    
pregunta tolos

3 respuestas

2

Según sus valores, debo asumir que está midiendo la resistencia de 10kOhm en la parte inferior. Me atrevo a suponer que su resistencia de 10kOhm es un poco alta y la resistencia de 100kOhm es un poco baja. Esto significaría que si su resistencia de 10kOhm está tomando más voltaje de lo esperado en la división de voltaje.

Hay algunos problemas en el trabajo aquí.

  1. El primero es el error de valor de resistencia. Ley de Ohm: V = I * R. Entonces, si hay un 5% de error en R, entonces para una constante I, habrá un error de% 5 en el valor esperado de V. El% de error de las tolerancias de la resistencia es el error máximo de +/-. Entonces, en realidad, podría haber una resistencia con un error de + 5% y otra con un error de -5%. Por lo tanto, hay un rango mucho más grande posible en voltajes de salida para una corriente constante.

    • Esto se puede eliminar codificando las resistencias reales en el software o agregando una tensión de referencia que sea más precisa que la resistencia o el error de cuantificación A / D. Esta tensión de referencia se usaría para obtener los valores reales de resistencia como los ve el A / D.
  2. A / Ds puede tener un error de desplazamiento. Esto realmente tiene que ser calibrado. Algunos A / D tienen esto incorporado.

  3. Los A / D también tienen un error de cuantificación. Entonces, si un voltaje cae entre dos niveles de cuantificación consecutivos, tendrá que redondearse a uno de esos dos, introduciendo un error. Hay formas de aumentar el número de bits para un A / D mediante un muestreo excesivo y promediando bloques de muestras en una muestra.

Hay otros errores que podrían estar en el trabajo, pero esos tres son los principales con los que me he topado. Si el A / D es bastante lineal, entonces medir dos voltajes precisos con el circuito A / D le permitiría crear una ecuación lineal afín para corregir los datos. Esto se basa en los problemas de 1 y 2.

Los A / D pueden aparecer lineales, pero terminan siendo muy no lineales en un rango particular. He oído hablar de algunas implementaciones que utilizan una tabla de consulta para corregir el comportamiento no lineal. Pero eso va un poco más allá de tus problemas actuales.

Editar : Un artículo más. Es una buena idea almacenar sus señales analógicas en el A / D. Hace algunas cosas, como agregar otro dispositivo para proteger el microcontrolador y limitar cualquier posible comportamiento de muestreo transitorio de la señal A / D en la señal analógica.

    
respondido por el Joshua
6

Hay 3 contribuciones de error principales

Hoja de datos de LPC2148 aquí

(1) Su resultado erróneo de 0.029V se explica completamente si su resistencia aparente de 10k es en realidad un 1k. así que 3V / 101 (en lugar de 3/11) = 0.0297 voltios.
 Su ADC parece haberlo entendido bien.

(2) Si usa un 5% de resistencias, entonces teóricamente uno puede ser Rnom + 5% y el otro puede ser Rnom - 5%, aunque esto sería raro con los modernos resistores de película de metal que tienden a agruparse en torno a los valores nominales. / p>

  • 1 / (1 + 10) = 1/11 = 0.090909

  • (1 + 5%) / ((1 + 5%) + (10-5%))
    = 1.05 / (1.05 + 9.5)
    = 1.05 / 10.55
    = 0.0995

    0.0995 / 0.090909 ~ = + 9.5% de alta!

  • Del mismo modo, hacer que el máximo de 1k y el máximo de 10k también conduzcan a un error cercano al 10%.

Usando componentes del 5%, puede esperar errores en el rango del 2% al 5%, por lo general, podría ser menos y podría ser más.

(3) Parece que se está dividiendo por una ración mucho mayor de la que se necesita.
 Vdd es presumiblemente 3.3V y el ADC permitido en max = VddA. (P32)
 Está dividiendo el voltaje de entrada de modo que Vinmaxseen < < Vibmaxallowed, por lo que están perdiendo precisión.

Como Vbattery = 4.2v max (y seguramente no será más alto que en el peor de los casos), puede admitir 4.4V max de forma segura.

No dice qué voltaje de referencia está utilizando para el ADCV.
 Se le permite 2.5 < = Vref < = VddA. (p16)

Resistencia de entrada ADC máxima "permitida" = 40 k. (fig. 9, página 34) y hay una resistencia interna de 20k (fig. 9) que está por delante del muestreador ADC, por lo que no debería tener ningún gran efecto.

Si tenía ADC Vin máx = 3,3 V y Vbattery máx = 4,4 V (como anteriormente) necesita resistencias de entrada que caen 1,1: 3,3 V = 1: 3  El ADC "ve" la resistencia paralela del divisor de resistencia de entrada.
Entonces reffectivo = 1 // 3 1 x 3 / (1 + 3) = 0.75. es decir, el valor efectivo de todo el divisor = 0.75 x la resistencia superior
 por lo que la resistencia superior puede ser Reffective x 1 / 0.75.

Un Rinmax permitido = 40k, luego Rupper puede ser 53.3k y R más bajo = 160k.
 Suministro = 4.2 / (53.3k + 160k) = ~ 20uA.

En la práctica, es casi seguro que puede tener una resistencia varias veces mayor que esta y aún así obtener una precisión aceptable.

    
respondido por el Russell McMahon
4

Verifique la especificación de impedancia de señal máxima para impulsar un pin A / D en ese micro. Estos pueden ser sorprendentemente bajos. Cuanto más rápido sea el A / D, menor será la impedancia requerida.

El motivo principal de la baja impedancia es cargar la muestra interna y mantener el condensador a tiempo para finalizar la adquisición y luego realizar la conversión dentro del tiempo más rápido especificado para el A / D. La fuga de pin es otra razón, pero generalmente es un µA o menos para una entrada CMOS.

Como no necesita alta velocidad, una solución podría ser extender el tiempo de adquisición para que el capacitor se estabilice completamente cuando se alimenta de la impedancia de la fuente más baja. No estoy familiarizado con ese micro para saber si eso es posible, pero está en muchos otros micros.

Sin embargo, la solución general "correcta" es encender el circuito de prueba de la batería solo cuando sea necesario. En este caso, necesitará un interruptor FET lateral alto. Si tuviera que cambiar el lado bajo, la tensión en el pin A / D sería la tensión de la batería cuando el interruptor estaba apagado, lo que estaría fuera de los límites permitidos.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas