¿Es posible combinar dos DAC de 8 bits para crear un DAC de 16 bits, se enviará un byte de la palabra de 16 bits a cada uno de ellos?

Para dos DAC, uno se envía D0-D7 y el otro se envía D8-D15, con una fuente de alimentación de 5 V, si se agregan 5 V a la salida del segundo DAC y luego se suman las dos salidas DAC, debería resultar en un DAC de 16 bits compuesto por dos DAC de 8 bits.

El único problema es que si el segundo DAC tiene una entrada de 0x00, entonces la adición de 5V debe cancelarse, lo cual no estoy seguro de cómo hacerlo. La suma se puede hacer mediante un amplificador sumador. El circuito solo necesita funcionar hasta unas pocas decenas de kHz.

¿Hay algo fundamentalmente erróneo en esta idea?

No hay nada fundamentalmente malo con su idea, pero deberá manejar un diseño de relativa complejidad. En primer lugar, no se trata simplemente de sumar los resultados en una señal analógica. Antes de la suma, deberá amplificar el MSB DAC en un factor de x256 porque cada bit de MSB DAC equivale a 256 bits de LSB DAC. Entonces necesitará compensar este valor en voltios LSB DAC a escala completa de lo que puede agregar ambos.
Por no hablar del ruido, la distorsión, la capacidad de suministro...
Si fuera tan fácil, todos lo estarían haciendo... Teóricamente, sí, puedes combinar dos DAC (aunque necesitas multiplicar en lugar de sumar). Siendo realistas, no vas a acercarte a 16 bits, en cuanto al rendimiento. Solo compra un DAC de 16 bits.
@PDuarte ¿Es realmente necesaria la compensación? De la forma en que lo veo, solo la ganancia de 256 a MSB DAC, seguida de agregar debería hacerlo. (y estoy de acuerdo en que el diseño tendría problemas para lograr una "fidelidad" de 16 bits)
La compensación es necesaria si el valor multiplicado por 256x se vuelve demasiado grande. Suponga que los DAC de 8 bits dan 1 voltio a escala completa. Multiplique eso por 256 da 256 V. No es tan práctico ;-). Es más fácil con un DAC que suministre una corriente, luego simplemente puede conectar las salidas de corriente en paralelo (siempre que haya una carga que mantenga el voltaje en el valor correcto, una tierra virtual o algo así).
¿Qué sucede si en lugar de dividir la señal en 8 bits superiores e inferiores, la implementa como una aproximación progresiva de dos pasos (como la forma en que se procesan JPG o PNG progresivos), con DAC1 proporcionando (aproximadamente) los bits pares y DAC2 ejecutándose en media potencia con (nuevamente, aproximadamente) los bits impares. Las matemáticas serían complicadas, pero creo que se pueden obtener 15 bits de precisión de la señal.
@FooBar No veo cómo funcionaría eso a menos que tuviera un procesador digital de 16 bits para hacer los cálculos "desordenados" al final. Procesar solo los bits pares no le brinda una buena aproximación de la señal. (Por ejemplo, dividir 1010 en 11 y 00 lo lleva de 60% a 100% + 0%). Si desea reducir a la mitad la cantidad de bits y obtener una aproximación, los elimina del final: la mejor representación de imagen analógica a progresiva es exactamente lo que se propuso originalmente.
@SarahG ¿No 'pesaría' los dígitos impares en 66% y los pares en 33%? Lo que quiero decir es que la salida dac impar contribuiría con el 66% de la señal y el par con el 33%. Tal vez me estoy perdiendo algo, pero dado esto, su ejemplo daría el resultado correcto. Subiendo a 16 bits: 1010101010101010 = 43690 y 43690/65535 = 66,66%
@RichardSmith Pruebe casi cualquier otro número. Por ejemplo, 0000000011110000 = 240. 240/65535 = 0,0037. Ambas mitades se dividen como 00001100 = 12. 12/255 = 0,047. En este ejemplo, el resultado está fuera de un orden de magnitud.

Respuestas (8)

Es posible, pero no funcionará bien.

En primer lugar, está el problema de combinar las dos salidas, con una escala exactamente 1/256 de la otra. (Ya sea que atenúe uno en 1/256, amplifique el otro en 256, o algún otro arreglo, *16 y /16 por ejemplo, no importa).

Sin embargo, el gran problema es que es probable que un DAC de 8 bits tenga una precisión superior a 8 bits: puede tener una especificación "DNL" de 1/4 LSB y una especificación "INL" de 1/2 LSB. Estas son las especificaciones de no linealidad "Diferencial" e "Integral", y son una medida de cuán grande es realmente cada paso entre códigos adyacentes. (DNL proporciona una garantía entre dos códigos adyacentes, INL entre dos códigos en todo el rango del DAC).

Idealmente, cada paso sería precisamente 1/256 del valor de escala completa; pero una especificación DNL de 1/4 LSB indica que los pasos adyacentes pueden diferir de ese ideal en un 25 %; este es un comportamiento normalmente aceptable en un DAC.

¡El problema es que un error de 0.25 LSB en su MSB DAC contribuye a un error de 64 LSB (1/4 del rango completo) en su LSB DAC!

En otras palabras, su DAC de 16 bits tiene la linealidad y distorsión de un DAC de 10 bits, lo cual es inaceptable para la mayoría de las aplicaciones de un DAC de 16 bits.

Ahora, si puede encontrar un DAC de 8 bits que garantice una precisión de 16 bits (INL y DNL mejor que 1/256 LSB), adelante: sin embargo, no son económicos de fabricar, por lo que la única forma de obtener uno es comenzar con un DAC de 16 bits!

Otra respuesta sugiere "compensación de software"... mapear los errores exactos en su MSB DAC y compensarlos agregando el error inverso al LSB DAC: algo que los ingenieros de audio consideraron durante mucho tiempo en los días en que los DAC de 16 bits eran caros. ..

En resumen, se puede hacer que funcione hasta cierto punto, pero si el DAC de 8 bits varía con la temperatura o el tiempo (probablemente no fue diseñado para ser ultraestable), la compensación ya no es lo suficientemente precisa como para valer la pena. complejidad y gasto.

Su punto sobre la deriva es bueno y haría que este método no fuera práctico para tratar de obtener, por ejemplo, una precisión de 20 bits al combinar dos DAC de 8 bits. Sin embargo, creo que tratar de obtener 13-14 bits utilizables de 2x8 sería factible.

Un DAC de 8 bits puede generar 2 8 = 256 valores diferentes.

Un DAC de 16 bits puede generar 2 dieciséis = 65536 valores diferentes.

Tenga en cuenta cómo eso se multiplica, no es una suma (como sucedería cuando suma las salidas de dos DAC de 8 bits).

Si tomaría dos DAC de 8 bits y sumaría sus salidas, ¿cuáles son los valores posibles?

Respuesta: 0, 1, 2, ..., 256, 257, 258, ....511, 512 y listo!

Un DAC de 16 bits puede hacer 0,1,2 ..., 65535, 65536 ¡eso es mucho más!

Teóricamente es posible, pero luego deberá multiplicar la salida de uno de los DAC de 8 bits por exactamente 256 y conectar los bits LSB al DAC 1x y los bits MSB al DAC 256x. ¡Pero no se sorprenda si la precisión y la linealidad sufren!

Hmm ya veo. No me di cuenta de eso...
Si uno usa un factor de multiplicación de menos de 256, entonces puede compensar la no linealidad en el software. La no linealidad diferencial será al menos igual al tamaño de paso del DAC más pequeño, pero uno que use dos DAC de 8 bits podría administrar de manera realista un DAC monótono de 14 bits si puede determinar con precisión qué factores de compensación aplicar
También puede multiplicar la salida de un DAC por 257/256 y sumarlos, si disfruta del desafío matemático de averiguar qué valores enviar a qué DAC para obtener una salida total determinada. De lo contrario, los desafíos son los mismos :)
@hobbs: No creo que eso funcione del todo. Si un DAC emite de 0 a 65280 en pasos de 256, y el otro emite de 0 a 65535 en pasos de 257, uno podrá lograr todos los valores de salida entre 65280 y 65535, pero no podrá lograr ninguno en el rango entre, por ejemplo, 32639 y 32768. Eso no funciona mucho mejor que un solo DAC de 8 bits.
@supercat tienes razón, estropeé las matemáticas. Creo que hay una versión que funciona si puedes volverte negativo, pero no funciona de la forma en que la escribí. Fue sobre todo un intento de humor de todos modos.

La técnica es factible si el voltaje de escala completa del DAC "interno" es mayor que el tamaño de paso del DAC externo, y uno tiene un medio para medir con precisión (aunque no necesariamente rápido) los voltajes de salida generados por diferentes códigos de salida y aplicar Ajustes de linealidad adecuados en el software. Si el voltaje de escala completa del DAC interno puede ser menor que el tamaño de paso en el peor de los casos entre dos voltajes en el DAC externo (teniendo en cuenta que los pasos rara vez son absolutamente uniformes), puede haber voltajes que no se pueden obtener con cualquier combinación de valores DAC internos y externos. Sin embargo, si uno se asegura de que haya una superposición en los rangos, el uso de la corrección de linealidad del software puede permitir buenos resultados.

Por cierto, el antiguo diseño de chip Cypress PSOC (no conozco los más nuevos) emula un DAC de nueve bits usando dos DAC de seis bits que se escalan entre sí. No utiliza la corrección de linealidad del software, pero solo intenta agregar tres bits de precisión a un DAC de seis bits. Intentar agregar más de 3-4 bits de precisión a cualquier tipo de DAC sin usar compensación de software probablemente no funcione muy bien.

Hace 21 años, cuando era un estudiante universitario pobre (y solo podía pagar DAC de 8 bits), usé esta técnica para combinar dos DAC de 8 bits en un DAC de bits más alto, sabiendo que no obtendría una precisión de 16 bits, porque de no linealidad integral (INL) y no linealidad diferencial (DNL). DNL en el DAC de byte más significativo es el asesino en este caso; si tiene INL, la salida está distorsionada pero sigue siendo suave. DNL dicta el tamaño de un paso DAC al siguiente, y si varía lo suficiente, verá discontinuidades o reversiones al cruzar los límites de 8 bits: 0x07ff <-> 0x0800, por ejemplo, cuando el MSB DAC cambia de 0x07 <-> 0x08, podría cambiar no por los 256 conteos ideales del LSB DAC, sino por 384 conteos o 128 conteos (±1/2 de su propio bit menos significativo). Un buen DAC tendrá solo 1/2 LSB DNL, ​​un DAC mediocre tendrá peor DNL, ​​aunque se vuelve más difícil cuanto mayor sea la resolución, por lo que debería ser bastante fácil encontrar 1/2 LSB DNL en un DAC de 8 bits, pero no en un DAC de 16 bits.

No recuerdo cuál era la resolución efectiva en mi caso, tal vez 12 o 13 bits, y tuve que ajustar la ganancia de la 2da etapa manualmente con un potenciómetro.

He visto esto en la práctica en un detector UV HPLC para aumentar el rango dinámico. Uno de los DAC se compensa con la cantidad necesaria. Digamos que el primer DAC maneja de 0 a 10 V y el segundo maneja de 10 a 20 voltios.

¿Esto no agregaría solo un bit?
Sí, esto agrega solo un bit. Sin embargo, en términos de audio, puede ser un compromiso muy exitoso. Un DAC "directo" tiene un gran problema a mitad de escala donde los 16 bits se cambian a la vez: el MSB se enciende, todos los demás se apagan, y ahí es donde estará el mayor error de DNL. En una señal de audio, este error más grande también se encuentra en el peor lugar posible: el cruce por cero, lo que corrompe incluso los sonidos más silenciosos. Ahora, si un DAC maneja señales positivas y el otro maneja señales negativas, puede evitar este problema por completo. El legendario Burr-Brown PCM-63 DAC explotó esto muy bien.

Tengo una opinión diferente... Solo usa un DAC de 8 bits. Usted mencionó que solo necesita funcionar hasta unos pocos 10s de Hz, por lo que podría usar solo un DAC (que probablemente pueda funcionar hasta 100kHz) y usarlo como modulador. La idea básica es generar 256 ciclos del valor MSB más el indicador de acarreo/desbordamiento de un bit desde un acumulador de 8 bits al que se agrega el LSB en cada ciclo. Obtiene solo 254 como MSB máximo debido al 'bit de modulación' adicional del LSB, pero esto no reduce mucho el rango.

Ejemplo: si ejecuta el ciclo a 30 kHz, los 256 ciclos se repiten a 117 Hz, por lo que puede colocar un filtro de paso bajo de 50 Hz en la salida para obtener una señal bastante suave y precisa que puede funcionar a la velocidad que necesita.

La precisión de este método depende bastante del tamaño de los pasos de bits, pero no más que cualquier otro método. Lo he usado para la generación de voltaje de referencia en el pasado y funciona sorprendentemente bien.

Es posible y se ha hecho antes. Vea esta excelente implementación en EDN.com http://www.edn.com/design/analog/4329365/Combine-two-8-bit-outputs-to-make-one-16-bit-DAC

Edite esta respuesta para al menos resumir los datos en el enlace. Las respuestas que son solo de enlace están mal vistas porque los enlaces a menudo se cortan.

Intenté usar el ESP32 para usar un DAC para la mitad positiva de un solo 0 a +3V y pasé el segundo DAC a través del opamp para dar la mitad negativa inferior del solo 0 a -3V. Esto funcionó, pero la sincronización fue muy difícil y también estaba usando DMA.