La mayoría de los microcontroladores (uC) tienen un convertidor de 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. Por lo general, estos ADC también se mapean en registros, lo que permite que los datos se extraigan de manera rápida y fácil.
A pesar de esta estrecha integración, aún puede comprar ADC externos. Puedo ver varios casos para estos:
- El ADC necesita estar aislado de la uC.
- La profundidad de bits de las muestras de ADC debe ser mayor que la ADC de uC.
- El voltaje a detectar está lejos del microcontrolador y las líneas analógicas largas no son aceptables.
- El voltaje a detectar se encuentra en un entorno hostil que no es adecuado para la 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, y requiere múltiples pines Vref (y, por lo tanto, múltiples ADC externos).
- El uC actual no tiene suficientes canales de ADC y el costo de poner un nuevo uC es prohibitivo.
- El ADC externo consume menos energía que el ADC de uC (necesitaría un ejemplo para creerlo).
- Los canales ADC se deben muestrear simultáneamente (escenario raro).
- El costo de la programación del 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 puede caber 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 uC, pero proporcionan una funcionalidad equivalente. Por ejemplo, puede comprar una pieza EFM32Z con un ADC de 12 bits 1Msps (con referencia interna) por aproximadamente $ 1 , o puede comprar un ADC equivalente de 12 bits a 200kps por aproximadamente $ 3.50 (mismas velocidades (ish), números de potencia relativamente iguales, etc.) y realizar la misma tarea (extraer datos de ADC).
La pregunta es: ¿hay razones de peso para que un ingeniero favorezca un ADC externo sobre el ADC de un uC cuando este último puede realizar la misma funcionalidad?
fuente
Respuestas:
Si el ADC interno de su microcontrolador realiza el trabajo que necesita, entonces no, no hay necesidad de ADC externos. Pero entonces, ese no es a quién están dirigidos.
Usted ha cubierto la mayoría de las razones para un ADC externo, pero hay algunas más y, en mi opinión, son algunas de las razones más importantes:
Para el punto 3, tome la Raspberry Pi por ejemplo. Eso no tiene ningún ADC disponible, debe agregar uno externo para hacer cualquier trabajo analógico.
fuente
Otras razones para favorecer un ADC externo:
Muchas partes externas de ADC incluyen entradas diferenciales, mientras que los convertidores integrados de 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.
Muchas partes externas de ADC incluyen una etapa de amplificador antes del convertidor en sí, permitiendo así 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. Dependiendo de la naturaleza de la señal de entrada, esto puede aumentar enormemente el tiempo de adquisición necesario para realizar mediciones precisas.
Incluso si un ADC interno tiene doce bits de ancho, eso generalmente no significa que tome lecturas precisas 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.
Integrar 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.
fuente
Otra razón para que existan algunos ADC externos: han existido mucho más tiempo que los micros con ADC internos, y se han diseñado 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 reducida 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 nuevos diseños, puede ser preferible reutilizar bloques que funcionen bien, en lugar de rediseñar una parte 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 aprobación de pruebas y reglamentaciones, aún más.
Ahora, si está comenzando desde cero, y su microcontrolador elegido tiene suficientes canales ADC que cumplen con sus requisitos, ninguno de los anteriores se aplica.
fuente
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 funcionalmente equivalente. Sin embargo, en mi experiencia, los micros de bajo costo generalmente tienen ADC bastante pésimos con deriva de temperatura, bajo conteo de bits (10-12 bits) y ruido de VCC (+/- 20mV en algunos casos) ... aunque lo inverso puede ser cierto. .. puede mejorar S / N si sobremuestrea y tiene ruido presente. En nuestras actividades de desarrollo de productos, es bastante raro basar nuestra selección de MCU en la calidad de ADC presente dentro. 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 que interfieren con otras cosas en la MCU (puertos serie de software, ISR, etc.) cuando están monopolizados para 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 drásticamente durante las operaciones. Si tiene un dispositivo de alta corriente a bordo (radio, wifi, MCU, etc.) con un gran uso de corriente transitoria, VCC podría 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 asombrosa precisión de 200 mV. 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 vref interno sólido como una roca bajo condiciones de VCC fluctuantes.
La resolución es muy 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 en el 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 una señal adecuada al ruido y las características de resolución. Incluso un MCU de 32 bits realmente agradable 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 existe cierta imprecisión inherente cuando se requieren otros micros de 8 bits para proporcionar una lectura de 12 bits de ancho y necesita 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 que la proximidad física a su transductor y el aislamiento de la MCU es importante. Algunos transductores muy sensibles requieren su propia potencia condicionada, 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 los ADC externos a altas velocidades de datos puede consumir muchos pines de E / S multiplexados valiosos y crear un diseño más complicado. Además, muchos de los ADC que hemos utilizado están basados en I2C, por lo que la velocidad de muestreo está muy limitada por la velocidad del bus I2C. Incluso a 1 mb / s, una lectura de 16 bits lleva mucho tiempo.
fuente