¿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?

16

Para dos DAC, uno enviado D0-D7 y el otro enviado D8-D15, con una fuente de alimentación de 5 V, si se agregan 5 V a la salida del 2 ° DAC y luego se suman las dos salidas de DAC, debería producir 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 que no estoy seguro de cómo hacer. La suma se puede hacer sumando el amplificador. El circuito solo necesita funcionar hasta unos 10s de kHz.

¿Hay algo fundamentalmente mal con esta idea?

quantum231
fuente
11
No hay nada fundamentalmente malo en su idea, pero deberá manejar un diseño de relativa complejidad. En primer lugar, no se trata solo de sumar los resultados en señal analógica. Antes de la suma, necesitará amplificar el MSB DAC en un factor de x256 porque cada bit de MSB DAC es equivalente a 256 bits de LSB DAC. Entonces deberá compensar este valor en voltios LSB DAC de escala completa de lo que puede agregar ambos.
PDuarte
77
Sin mencionar el ruido, la distorsión, la capacidad de suministro ...
PDuarte
44
Si fuera así de fácil, todo el mundo lo estaría haciendo ... Teóricamente, sí, puedes combinar dos DAC (aunque necesitas multiplicar en lugar de sumar). Siendo realistas, no vas a llegar a ningún lado cerca de 16 bits, en cuanto al rendimiento. Simplemente compre un DAC de 16 bits.
uint128_t
2
La compensación es necesaria si el valor multiplicado de 256x es demasiado grande. Supongamos que los DAC de 8 bits dan 1 voltio a escala completa. Multiplicar eso por 256 da 256 V. No es tan práctico ;-). Es más fácil con un DAC que suministra una corriente, entonces 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 similar).
Bimpelrekkie
1
¿Qué pasa 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 puedes obtener 15 bits de precisión de señal.
Foo Bar

Respuestas:

28

Es posible, pero no funcionará bien.

En primer lugar, existe el problema de combinar las dos salidas, con una escala a 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 sea preciso a algo mejor que 8 bits: puede tener una especificación "DNL" de 1/4 LSB y una especificación "INL" de 1 / 2LSB. 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 cualesquiera en todo el rango del DAC).

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

¡El problema es que un error de 0.25 LSB en su MSB DAC contribuye con 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 la distorsión de un DAC de 10 bits, que para la mayoría de las aplicaciones de un DAC de 16 bits es inaceptable.

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), continúe: sin embargo, no son económicos, 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 meditado por los ingenieros de audio 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 la edad (probablemente no fue diseñado para ser ultraestable), la compensación ya no es lo suficientemente precisa como para valer la pena. Complejidad y gastos.

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

28=256

2dieciséis=65536

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

Si tomara dos DAC de 8 bits y sumara sus salidas, ¿cuáles son los valores posibles?

Respuesta: 0, 1, 2, ..., 256, 257, 258, ... 511, 512 y eso es todo.

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 1x DAC y los bits MSB al 256x DAC. ¡Pero no se sorprenda si la precisión y la linealidad sufren!

Bimpelrekkie
fuente
Hmm ya veo. No me di cuenta de que ...
quantum231
1
Si se usa un factor de multiplicación de menos de 256, se puede compensar la no linealidad en el software. La no linealidad diferencial será al menos igual al tamaño del paso del DAC más pequeño, pero uno que use dos DAC de 8 bits, uno podría manejar de manera realista un DAC monotónico de 14 bits si se puede determinar con precisión qué factores de compensación aplicar
supercat
2
También podría 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 dada. De lo contrario, los callenges son los mismos :)
hobbs
@hobbs: No creo que eso funcione del todo. Si un DAC emite 0 a 65280 en pasos de 256, y el otro emite 0 a 65535 en pasos de 257, uno podrá alcanzar todos los valores de salida entre 65280 y 65535, pero no podrá lograr ninguno en el rango entre, por ejemplo, 32639 y 32768. Eso realmente no funciona mucho mejor que un solo DAC de 8 bits.
supercat
@supercat tienes razón, esponjé las matemáticas. Creo que hay una versión que funciona si puedes ser negativa, pero no funciona como la escribí. Fue sobre todo un intento de humor de todos modos.
hobbs
6

La técnica es viable si el voltaje de escala completa del DAC "interno" es mayor que el tamaño del escalón del DAC externo, y uno tiene un medio para medir con precisión (aunque no necesariamente rápidamente) los voltajes de salida generados por diferentes códigos de salida y aplicar ajustes de linealidad adecuados en software. Si el voltaje de escala completa del DAC interno puede ser menor que el tamaño del escalón en el peor de los casos entre dos voltajes en el DAC externo (teniendo en cuenta que los escalones rara vez son absolutamente perfectamente uniformes) puede haber voltajes que no se pueden obtener con ninguna combinación de valores DAC internos y externos. Sin embargo, si se asegura que hay 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 del chip Cypress PSOC (no sé sobre los más nuevos) emula un DAC de nueve bits utilizando dos DAC de seis bits que se escalan uno con respecto al otro. No utiliza la corrección de linealidad del software, pero solo está tratando de agregar tres bits de precisión a un DAC de seis bits. Es probable que tratar de agregar más de 3-4 bits de precisión a cualquier tipo de DAC sin utilizar la compensación de software no funcione muy bien.

Super gato
fuente
4

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 bit 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 byte más significativo DAC 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 límites de 8 bits: 0x07ff <-> 0x0800, por ejemplo, a medida que el MSB DAC cambia de 0x07 <-> 0x08, podría cambiar no por los 256 recuentos ideales del LSB DAC, sino por 384 recuentos o 128 recuentos (± 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 fue la resolución efectiva en mi caso, tal vez 12 o 13 bits, y tuve que ajustar la ganancia de la segunda etapa manualmente con un potenciómetro.

Jason S
fuente
2

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

purza
fuente
1
¿No agregaría esto solo un bit?
Szidor
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 media escala en el que los 16 bits 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, corrompiendo 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.
Brian Drummond
0

Tengo una opinión diferente ... Solo use un DAC de 8 bits. Usted mencionó que solo necesita trabajar hasta unos 10 segundos de Hz, por lo que podría usar solo un DAC (que probablemente puede funcionar hasta 100 kHz) y usarlo como modulador. La idea básica es generar 256 ciclos del valor MSB más el indicador de desbordamiento / acarreo de un bit desde un acumulador de 8 bits al que se agrega el LSB en cada ciclo. Obtiene solo 254 como el 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 podría colocar un filtro de paso bajo de 50 Hz en la salida para obtener una señal bastante suave y precisa que pueda funcionar hasta la velocidad que necesita.

La precisión de este método depende mucho del tamaño de los pasos de bit, 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.

Simon Tillson
fuente