Inesperadamente pobre DNL, ​​INL y ENOB en un ADC


8

Actualmente estoy tratando de caracterizar un MCU y sus periféricos, en particular el ADC incorporado. Sin embargo, al ejecutar los procedimientos de prueba habituales (es decir, onda sinusoidal para ENOB y diente de sierra para DNL e INL), encuentro que los resultados son bastante pobres. En pocas palabras, el ADC "tiene" 12 bits, lo que significa que uno esperaría alrededor de 10 bits de resolución. Sin embargo, no importa lo que intente, ENOB parece estabilizarse en torno a 8,5 bits. De manera similar con DNL e INL, los mejores resultados que he obtenido son cuando la señal se sobremuestrea 64 veces. La hoja de datos en la página 44 dice que uno puede esperar un DNL de alrededor de ± 3 LSB; sin embargo, esto es lo que obtengo cuando sobremuestreo. La señal sin procesar alcanza un máximo de aproximadamente 7 LSB. Hay algunas cosas que probé hasta ahora:

  • Poner un condensador de 10 nF a través de la entrada ADC y tierra (que funciona hasta cierto punto, sin él ENOB es 7.5)
  • Sobremuestreo 4x, 8x y algunos otros hasta 256x. Esto, como cabría esperar, también mejora los resultados, aunque no de manera tan significativa. Un sobremuestreo más grande produce mejores resultados, mientras que 4x es casi idéntico a ningún sobremuestreo.
  • Retardar el reloj del módulo ADC y aumentar la ventana de muestreo. Ninguno de estos fue particularmente efectivo. El aumento de la ventana de muestreo tuvo un pequeño impacto positivo en ENOB y DNL. Retardar el reloj realmente no tuvo ningún efecto.
  • Del mismo modo, el uso de referencias externas o internas no pareció producir un efecto, aunque no he realizado muchos experimentos con referencias externas, tal vez esa sea la siguiente a considerar. Una pequeña edición para la referencia de quien pueda leerla algún día, usando una referencia externa en mi caso arrojó peores resultados. En otras palabras, la referencia interna en mi MCU parece ser más precisa, o la referencia externa no es tan buena como esperaba.

Ahora, la pregunta es ¿en qué punto se acepta que el ADC es de mala calidad o está dañado de alguna manera? ¿Qué otras pruebas puedo intentar para mejorar las características de ADC? Tenga en cuenta que genero las señales de entrada con el generador de funciones. En este punto, estoy atascado, es decir, se quedaron sin hilos del foro para leer , y agradecería sinceramente cualquier consejo.


¿Revisaste el PS? ¿Es el modo cambiado? En caso afirmativo, ¿puede poner un LDO entre PS y ADC? ¿Verificaste la calidad del reloj ADC?
Claudio Avi Chami

Estos errores son los esperados. La hoja de datos dice en el peor de los casos 6 LSB. Podría intentar alguna calibración o mejor usar un ADC separado para mediciones precisas.

@ClaudioAviChami Creo que el mío es una fuente de alimentación lineal. Su marca es Rigol DG2041A. ¿Me podría pista sobre dónde puedo comenzar con la comprobación de que el reloj ADC - una rápida búsqueda en Google no parece prometedor :)
Fandor

1
¿Qué fuente de impedancia está alimentando el ADC? Es posible que necesite un amplificador de búfer.
Brian Drummond el

@BrianDrummond Me aseguraré de medir eso mañana por la mañana cuando llegue a mi configuración y lo publique aquí. ¡Gracias por la sugerencia!
fandor

Respuestas:


11

Personalmente, no soy un gran admirador de las reglas generales, pero hay algunas reglas que son excepcionalmente precisas y que incluso yo hago una excepción.

Una de esas reglas es la siguiente:

Los periféricos de microcontrolador ADC son siempre terribles.

Siempre. No es el tipo de terrible que simplemente derateras. El tipo de terrible que te deja llorando en posición fetal en la ducha.

Bromeo, pero solo un poco. Para responder a su pregunta, sí, el ADC es realmente tan malo, y sí, debe aceptarlo. Tenga en cuenta el gran descargo de responsabilidad que dice "Se aplican condiciones de funcionamiento" en la hoja de datos.

Debe recordar que para ciertas partes (como las MCU), la hoja de datos también es material de marketing, y las MCU generalmente compiten en periféricos o consumo de energía (o ambos). Entonces, las cifras para cosas como los ADC a menudo serán técnicamentecorrecto, siempre y cuando use el ADC en las mismas circunstancias ridículas y poco prácticas que tomaron la medida para la hoja de datos. Un favorito que veo a menudo es medir el ENOB con todos los demás periféricos, así como el núcleo del procesador real completamente apagado en un sueño profundo. Otro es utilizar un importante procesamiento posterior del software y técnicas similares como el sobremuestreo para obtener la medición. No creo haber visto nunca una hoja de datos de MCU que no especifique el ADC en términos de "esto es lo mejor que posiblemente lograrás, y podemos o no decirte cómo lo gestionamos" en lugar de 'esta es la especificación antes de intentar limpiar la señal en el software'.

Y, para ser claros, parece que esta parte tiene un ADC bastante bueno, al menos en comparación con todos los otros ADC terribles de MCU. 8.5 bits? ¡Qué opulencia! ¡Tan burgués! La mayoría de las veces obtendrá quizás 6 bits de un ADC de 10 bits en una MCU. Recuerde, cuando dicen una resolución de 12 bits, significan que hay 12 bits que puede leer desde algún registro en alguna parte. No hay implicación de que no sean 12 bits de ruido inútil. La única promesa es que habrá 12 bits de algo .

Ahora, en este punto, puede ser un poco escéptico de que estos periféricos analógicos sean invariablemente tan terribles, o al menos, preguntarse por qué alguna compañía de chips no lanza simplemente un MCU con una interfaz analógica decente a mitad de camino.

Pues no pueden. No importa cuán buena sea realmente la referencia, no es un problema de estabilidad. Es ruido. Y fisica.

Es simplemente físicamente imposible crear un ADC de alto rendimiento (o realmente, simplemente mediocre) en el mismo dado de silicio que un MCU. Y solo se necesita un gotchya para arruinar el rendimiento analógico. En este caso, no hay una gotchya, sino varias.

Primero, solo una conmutación de transistor CMOS descargará todo tipo de armónicos y ruido directamente en, bueno, todo, y se acoplará (lo adivinó) a todo, cuando cambie. Tendemos a pensar que CMOS es de baja potencia (y lo es), pero vale la pena tener en cuenta que la potencia que utiliza CMOS es efectivamente cero, excepto cuando un transistor está cambiando de estado. Y cambian de estado muy rápido, del orden de decenas a cientos de picosegundos. Cuando tomas una docena de miliamperios consumidos por algo que esencialmente no consume energía estática, y toda esa corriente se convierte por completo en picos intensos de 100 ps de literalmente millones de pequeños bastardos pequeñoscambia, cambiando en conjunto ... bueno, eso debería replantear un poco las cosas. Esos pocos miliamperios son mucho más siniestros de lo que parecen, al menos para cosas analógicas. Baja potencia ≠ bajo nivel de ruido. CMOS tiene poca energía porque solo necesita energía para cambiar. Pero cambia más fuerte que una caída de graves dubstep.

Todos esos picos deben atravesar el sustrato, el sustrato que comparte el ADC, y lo suficientemente resistente como para causar un rebote a tierra localizado en el sustrato que no tiene sentido para los circuitos digitales, pero que es muy problemático para cualquier circuito analógico.

Y realmente no hay forma de evitar eso. Ese es solo un problema. La otra es que en realidad es físicamente imposible crear un diseño analógico de alto rendimiento que pueda coexistir con el MCU, que también necesitará usar esos pines como GPIO, y otras consideraciones que perturban fatalmente cualquier posibilidad de una buena sección analógica. diseño.

Ahora, hay algunas MCU especializadas con ADC algo mejoradas que logran esto al tener dos troqueles de silicio completamente separados en un paquete, conectados por cables de enlace, lo que proporciona aislamiento del sustrato. Sin embargo, va a pagar por esta característica, y los resultados seguirán siendo más pobres que un ADC dedicado debido a la proximidad.

Ah, y ni siquiera me he referido a cómo todo esto supone que tiene un diseño externo impecable y una situación de conexión a tierra y desacoplamiento en todas las formas relacionadas con su sección analógica y digital. Eso por sí solo no es trivial, solo pregúntale a Henry Ott .

Entonces, en conclusión, me temo que el ADC en su chip es realmente tan terrible. Exactamente como cualquier otro MCU ADC. Lo siento. O bien, es lo suficientemente bueno, y para muchas aplicaciones (ayudado por una fuente de software bastante inteligente , ¡juego de palabras!), Lo es. Es sorprendente lo que realmente se puede hacer, incluso con el bajo rendimiento analógico disponible siempre que seas inteligente. Pero inteligente solo puede llevarte tan lejos. Si desea un número de bits frío y efectivo, realmente solo tiene que morder la bala y usar un ADC dedicado junto con un cuidadoso diseño y desacoplamiento de PCB, o considerar el uso de una parte más especializada (como paquetes de troqueles múltiples).


3
+1 para la cita del día: "CMOS es de baja potencia porque solo necesita potencia para cambiar. Pero cambia más fuerte que una caída de graves dubstep".
Araho

Observo que esta parte utiliza un ADC de estilo de redistribución de carga, que tiene sus propios problemas únicos: analog.com/en/search.html?q=an-931
Peter Smith
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.