Casos de uso para un ADC externo

La mayoría de los microcontroladores (uC) tienen un convertidor analógico a digital (ADC) como parte de su conjunto periférico, lo cual es fenomenal ya que integra dos componentes en un solo paquete. Estos ADC también suelen estar registrados en mapas, lo que permite que los datos se extraigan de forma rápida y sencilla.

A pesar de esta estrecha integración, aún puede comprar ADC externos. Puedo ver varios casos para estos:

  • El ADC debe estar aislado del uC.
  • La profundidad de bits de las muestras de ADC debe ser mayor que la del ADC de uC.
  • El voltaje para detectar está lejos del microcontrolador y las líneas analógicas largas no son aceptables.
  • El voltaje para detectar se encuentra en un entorno hostil que no es adecuado para el uC.
  • El ADC externo muestrea mucho más rápido que el ADC de uC.
  • El voltaje de referencia para algunas muestras es diferente al de otras, lo que requiere múltiples pines Vref (y, por lo tanto, múltiples ADC externos).
  • El uC actual no tiene suficientes canales ADC y el costo de instalar un uC nuevo es prohibitivo.
  • El ADC externo consume menos energía que el ADC de la uC (necesitaría un ejemplo para creerlo).
  • Los canales ADC deben muestrearse simultáneamente (escenario raro).
  • El costo de programar el firmware en el momento de la fabricación supera el costo de la parte ADC más costosa (poco probable).
  • El PCB tiene limitaciones de espacio y no cabe ningún uC (poco probable).

Todo esto está muy bien, pero lo que me parece extraño es que los ADC externos suelen ser un poco más caros que sus homólogos de uC, pero ofrecen una funcionalidad equivalente. Por ejemplo, puede comprar una pieza EFM32Z con un ADC de 12 bits y 1 Msps (con referencia interna) por alrededor de $ 1 , o puede comprar un ADC equivalente de 12 bits y 200 ksps por alrededor de $ 3.50 (mismas velocidades, números de potencia relativamente iguales, etc.) y realizar la misma tarea (extracción de datos ADC).

Entonces, la pregunta es: ¿existen razones convincentes por las que un ingeniero preferiría un ADC externo sobre un ADC de uC cuando este último puede realizar la misma funcionalidad?

El muestreo simultáneo es en realidad un escenario bastante común en algunos espacios de aplicación, como el procesamiento de señales.

Respuestas (4)

Si el ADC interno de su microcontrolador realiza el trabajo que necesita, entonces no, no hay necesidad de ADC externos. Pero entonces, eso no es a lo que están dirigidos.

Ha cubierto la mayoría de las razones de un ADC externo, pero hay algunas más y, en mi opinión, son algunas de las razones más importantes:

  1. Necesita una tecnología de muestreo diferente; por ejemplo, el ADC interno es SAR, pero necesita hacer Delta Sigma.
  2. El ADC interno, debido a que es interno y comparte el mismo troquel que la MCU principal, nunca estará 100% libre del ruido del resto de la MCU, por lo que sería posible hacer uno externo con un ruido ultrabajo.
  3. Su microcontrolador/SoC/FPGA de elección no tiene ADC. Los dos últimos son los más probables: los SoC y FPGA más comunes no tienen ningún ADC. Sí, puede obtener los que lo hacen, pero muchos no. Entonces agregas uno externo.

Para el punto 3, tome el Raspberry Pi por ejemplo. Eso no tiene ADC disponible en absoluto, debe agregar uno externo para hacer cualquier trabajo analógico.

Eso es interesante. Cuando se trata de ruido, en lugar de pagar para obtener un ADC externo, ¿se lograría el mismo resultado obteniendo un ADC uC de mayor profundidad de bits e ignorando los bits menos significativos del resultado muestreado (esto obviamente asume que el tiempo de conversión adicional de los bits adicionales no son un factor de impedimento).
El procesamiento de la señal a posteriori solo puede ayudar con el ruido de los procesos que son independientes de la sincronización de la muestra (y, por lo tanto, contribuyen al ruido "aleatorio"). Gran parte del ruido en un sistema de procesador será el resultado de variaciones en la fuente de alimentación y la carga de tierra que están algo sincronizadas con el proceso de muestreo; la única forma de evitarlos es hacer que el ADC use sus propios rieles de suministro separados. Tenga en cuenta que el aislamiento total no es necesario, ya que muchos ADC pueden tolerar fácilmente 100 mV o más entre VDD/VSS analógico y digital.

Otras pocas razones para favorecer un ADC externo:

  1. Muchas partes externas de ADC incluyen entradas diferenciales, mientras que los convertidores incorporados de los microcontroladores a menudo no lo hacen. En los casos en que las entradas tienen mucho ruido de modo común, eso puede ser muy importante.

  2. Muchas partes externas del ADC incluyen una etapa de amplificación antes del propio convertidor, lo que permite que el convertidor mida directamente una señal de alta impedancia. En muchos microcontroladores, el acto de muestrear una señal de entrada puede perturbarla. Según la naturaleza de la señal de entrada, esto puede aumentar enormemente el tiempo de adquisición necesario para realizar mediciones precisas.

  3. Incluso si un ADC interno tiene doce bits de ancho, eso generalmente no significa que toma lecturas con una precisión de una parte en 4096. Un ADC externo típico a menudo tendrá mejores especificaciones que uno interno, incluso cuando ambos tienen la misma profundidad de bits anunciada.

La integración de un ADC en un microcontrolador es fácil. Integrar un buen ADC es mucho más difícil. Adivina cuál es más común.

Los ADC SAR sufren un poco por la inyección de carga, porque conectar momentáneamente la matriz de capacitores de muestreo a la entrada interrumpe lo que se está midiendo. Si la fuente de entrada no se recupera lo suficientemente rápido, esto provoca un error de medición. Más resolución generalmente requiere una capacitancia de muestreo interna más grande. La resolución delta-sigma solo depende de extender un contador digital. (Aunque las buenas especificaciones INL/DNL de alta resolución no son triviales de lograr).
@supercat: nunca había considerado una etapa de amplificación como parte de la conversión. Esto abre interesantes vías de muestreo de circuitos.
@MarkU: he observado el problema de inyección de carga en algunos circuitos. Curiosamente, algunos convertidores parecen intentar cargar la entrada hacia el valor muestreado anterior (de la entrada que se muestreó en último lugar), algunos intentan cargarla hacia cero, y al menos uno parece cargarla arbitrariamente ("al azar") hacia un valor más alto. o voltaje más bajo que encontré bastante molesto. No entiendo por qué una parte haría lo último; incluso si tuviera que cargar hacia algo, cargar hacia cero constantemente sería mejor que cargar hacia algún valor "aleatorio".

Otra razón para que existan algunos ADC externos: han existido durante mucho más tiempo que los micros con ADC internos y están diseñados en muchos productos. Posiblemente 20 o 30 años más. (Probablemente no sea el caso de la parte SOIC vinculada, aunque puede ser una variación modernizada y encogida de una parte clásica)

Cuando el ADC no tiene una resolución, precisión o velocidad estelares, pero tiene un precio superior, esta puede ser la razón.

Incluso para diseños nuevos, puede ser preferible reutilizar bloques que funcionan bien, en lugar de volver a diseñar en torno a una pieza más nueva (incluso si la integración resultante reduce el costo de la lista de materiales). Esa reingeniería puede ser costosa; el proceso de pruebas y aprobaciones regulatorias, aún más.

Ahora, si está comenzando desde cero y su microcontrolador elegido tiene suficientes canales ADC que cumplen con sus requisitos, nada de lo anterior se aplica.

Me doy cuenta de que esta es una pregunta muy antigua, pero es una pregunta que debatimos internamente con bastante frecuencia.

Tiene razón, sería inusual elegir un ADC externo si la versión externa fuera exactamente equivalente funcionalmente. Sin embargo, en mi experiencia, los micros de bajo costo generalmente tienen ADC bastante malos con deriva de temperatura, conteo de bits bajo (10 - 12 bits) y ruido de VCC (+/- 20mV en algunos casos)... aunque lo contrario puede ser cierto. .. puede mejorar S/N si realiza un muestreo excesivo y tiene ruido presente. En nuestras actividades de desarrollo de productos, es bastante raro basar nuestra selección de MCU en la calidad del ADC presente en su interior. Por lo general, se trata más de la cadena de herramientas, el costo, el firmware existente, etc. Los ADC internos generalmente se limitan a tareas no críticas como leer el voltaje de la batería.

Con varios micros, también puede haber problemas con los temporizadores compartidos que deben monopolizarse para tiempos de muestreo rápidos, pero interfieren con otras cosas en la MCU (puertos serie de software, ISR, etc.) cuando están monopolizados por el ADC.

Además, ¿qué es VREF? Si está utilizando VCC como referencia en el firmware, incluso si calibra al VCC "real", ese valor puede fluctuar bastante dramáticamente durante las operaciones. Si tiene un dispositivo de alta corriente a bordo (radio, wifi, MCU, etc.) con un gran uso de corriente transitoria, VCC puede caer a 4.8 voltios durante una transmisión y si su muestra ocurre durante esa ventana, y convierte ingenuamente el 0-1023 Valor de lectura de ADC a voltaje con ADC_VAL / 1023 * 5.0: ha perdido la friolera de 200 mV de precisión. O, si tiene diferentes modos de alimentación (USB, Wall wart, batería), VCC en la MCU puede cambiar (especialmente con USB). Los ADC externos (incluso con el mismo número de bits) pueden proporcionar una vref interna sólida como una roca en condiciones de VCC fluctuantes.

La resolución es bastante importante. Me imagino que hay algún uso (en el mundo real) para 10-12 bits de resolución, pero para cualquier tipo de aplicación del mundo real (detección de gas, medición acústica, medición de acelerómetro, medición de temperatura de precisión, etc.) 16 bits suele ser la resolución mínima para lograr las características de señal/ruido y resolución adecuadas. Incluso un MCU de 32 bits realmente bueno como el SAMD de Atmel está limitado a ADC internos de 12 bits.

La fluctuación del reloj también es un problema y también hay cierta imprecisión inherente cuando se requieren otros micros de 8 bits para proporcionar una lectura de 12 bits de ancho y se necesitan al menos 2 ciclos de reloj para manipular un valor de 12 bits, lo que puede no ser cierto. con un ADC externo (ya que pueden tener osciladores internos).

También hay momentos en los que es importante la proximidad física a su transductor y el aislamiento de la MCU. Algunos transductores muy sensibles requieren su propia potencia acondicionada, planos de tierra aislados y amplificadores chopper de transimpedancia extremadamente sensibles con 0,01 % de pasivos.

Sin embargo, a veces hay razones convincentes para usar los ADC internos. DMA es una razón... la frecuencia de muestreo es otra. La facilidad de sobremuestreo es otra. La interfaz de ADC externos a altas velocidades de datos puede consumir una gran cantidad de valiosos pines de E/S multiplexados y hacer que el diseño sea más complicado. Además, muchos de los ADC que hemos usado están basados ​​en I2C, por lo que la frecuencia de muestreo está muy limitada por la velocidad del bus I2C. Incluso a 1 Mbits/seg, una lectura de 16 bits lleva mucho tiempo.

Esta es una excelente idea! A medida que pasaron los años (y mi experiencia creció), tendría que estar de acuerdo: los ADC MCU internos pueden ser bastante malos.