Convertidor de A a D principiante

2

Estoy tratando de entender las lecturas que recibo del convertidor analógico a digital (ADC).

Estoy usando un microcontrolador integrado uIceblue2 . El microcontrolador en el circuito es un 18F4550. En el manual del microcontrolador uIceblue2 dice que un rango analógico de 0 to 3.3v +/-0.8V . Es un ADC de 10 bits.

La página 16 del manual muestra las especificaciones del voltaje analógico. enlace

EDITAR: Me di cuenta de que no estaba leyendo mi ADRESH. Así que cuando recibí 1V, mis lecturas de ADC se ubicaron en 1070 o 1090.

A continuación se muestran algunas lecturas que recibo del ADC cuando aplico un voltaje determinado a la entrada analógica. Estoy usando Docklight para leer mis resultados en decimal. Recibo salidas para cada resultado, que creo que coordina con el ADRESH y el ADRESL. El primer grupo de tres dígitos es el ADRESH y el segundo grupo de dígitos es el ADRESL.

  • 0.055V - > 000 020 a 000 031
  • 1V - > 001 070 a 001 090
  • 2V - > 002 139 a 002 160
  • 3.3V - > 003 255
  • 3.4V - > 003 255
  • 3.5V - > 003 255

Mis preguntas son:

  1. ¿Por qué hay tanta variabilidad en el rango del voltaje? Pensé que la resolución de 10 bits era bastante alta y que los números deberían ser constantes. Por ejemplo, esperaría obtener una lectura fija de 90 en una fila, o una variación de como máximo 1 en el valor, entre 89 y 91.

  2. Estoy usando la siguiente fórmula para convertir la lectura de nuevo al voltaje, pero no creo que sea correcto para calcular el voltaje de la lectura de ADC.

  3. ¿Es posible que ya se esté convirtiendo a voltios?

  4. ¿Debo publicar mi código?

$$ Input \, Voltage = Digital \, Reading \ times \ frac {Voltage \, Range} {Number \, of \, Bits} $$

¿Alguien me podría guiar a la fórmula correcta?

    
pregunta user3385015

3 respuestas

3

La fórmula correcta es \ $ V_ {IN} = \ $ \ $ D \ cdot V_ {REF} \ sobre 2 ^ {NBITS} \ $ donde D es el valor digital. NBITS es 10, por lo que el denominador es 1024. Eso asumiendo que Vref (-) es 0V.

Si la referencia es 3.3V / 0V, se esperaría que una entrada de 1V produzca una palabra digital de 310 base 10, por lo que algo está muy mal. Le sugiero que lea detenidamente el capítulo del manual de referencia sobre el ADC de 10 bits como aquí . La hoja de datos es generalmente incompleta en el funcionamiento de muchas cosas.

Como lo señala @Ignatio Vasquez-Abrams, es muy importante una adecuada \ $ T_ {AD} \ $.

    
respondido por el Spehro Pefhany
2

Los números de ADC que está dando no tienen sentido, es un ADC de 10 bits. ¿Por qué un número convertido es mayor que 1024? Dice que con 1V obtiene 1070 O 1090. Bueno, tampoco son números válidos y parece que 1V proporciona 1070 O 1090 y ningún valor intermedio.

Debería ser aproximadamente 310, por lo que definitivamente estás haciendo algo mal en tu código, ¿pero qué?

Soy consciente de que esta no es una respuesta definitiva.

    
respondido por el Andy aka
1

Una cosa que puede hacer que un ADC PIC de 10 bits devuelva resultados por encima de 1023 es si la conversión se establece para un resultado justificado a la izquierda. Es decir, el bit 7 en el registro ADCCON2 se establece en cero según la página 231 en PIC18F4550 Hoja de datos . Para ver si ese es el caso, puedes probar algo como el siguiente código que usé en algo recientemente:

    ADCON2=0xBE;  // Slowest conversion time, right justified
    
respondido por el PeterJ

Lea otras preguntas en las etiquetas