É possível combinar dois DACs de 8 bits para criar um DAC de 16 bits? Um byte da palavra de 16 bits deve ser enviado a cada um deles

16

Para dois DACs, um sendo enviado D0-D7 e outro sendo enviado D8-D15, com a fonte de alimentação sendo 5V, se 5V for adicionado à saída do 2º DAC e depois as duas saídas do DAC forem somadas, resultará em um DAC de 16 bits composto por dois DACs de 8 bits.

O único problema é que, se o segundo DAC tiver uma entrada 0x00, a adição de 5V precisará ser cancelada, o que não tenho certeza de como fazer. A soma pode ser feita somando o amplificador. O circuito precisa apenas trabalhar até alguns 10s de kHz.

Existe algo fundamentalmente errado com essa ideia?

quantum231
fonte
11
Não há nada de fundamentalmente errado com sua ideia, mas você precisará lidar com um design de relativa complexidade. Em primeiro lugar, não se trata apenas de somar os resultados em sinal analógico. Antes da soma, você precisará amplificar o MSB DAC em um fator de x256, porque cada bit do MSB DAC é equivalente a 256 bits do LSB DAC. Você precisará compensar esse valor em volts de escala completa do LSB DAC do que você pode adicionar os dois.
PDuarte 8/03/16
7
Para não mencionar o ruído, distorção, capacidade de fornecimento ...
PDuarte
4
Se fosse assim tão fácil, todos estariam fazendo isso ... Teoricamente, sim, você pode combinar dois DACs (você precisa multiplicar e não adicionar). Realisticamente, você não chegará nem perto de 16 bits, em termos de desempenho. Basta comprar um DAC de 16 bits.
22416 Ut128_t
2
A compensação é necessária se o valor multiplicado por 256x se tornar muito grande. Suponha que os DACs de 8 bits produzam 1 Volt em escala completa. Multiplique que por 256 dá 256 V. Não é tão prático ;-). É mais fácil com um DAC fornecendo corrente, então você pode simplesmente conectar as saídas de corrente em paralelo (desde que haja uma carga que mantenha a tensão no valor correto, em um aterramento virtual ou algo semelhante).
Bimpelrekkie 8/03/16
1
E se, em vez de dividir o sinal em 8 bits superior e inferior, você o implementa como uma aproximação progressiva de duas passagens (como a maneira como JPG ou PNG progressivo é renderizado), com o DAC1 fornecendo (aproximadamente) os bits pares e o DAC2 em execução meia potência com (novamente, aproximadamente) os bits de número ímpar. A matemática seria uma bagunça, mas acho que você pode obter 15 bits de precisão do sinal.
Foo Bar

Respostas:

28

É possível, mas não vai funcionar bem.

Em primeiro lugar, há o problema de combinar as duas saídas, com uma escala precisamente 1/256 da outra. (Se você atenua um em 1/256, amplifica o outro em 256 ou algum outro arranjo, * 16 e / 16 por exemplo, não importa).

O grande problema, no entanto, é que um DAC de 8 bits provavelmente será preciso para algo melhor que 8 bits: pode ter uma especificação "DNL" de 1/4 LSB e uma especificação "INL" de 1 / 2LSB. Essas são as especificações de não linearidade "Diferencial" e "Integral" e são uma medida de quão grande cada etapa entre os códigos adjacentes realmente é. (DNL fornece uma garantia entre dois códigos adjacentes, INL entre dois códigos em toda a faixa do DAC).

Idealmente, cada etapa seria precisamente 1/256 do valor da escala completa; mas uma especificação DNL 1 / 4LSB indica que as etapas adjacentes podem diferir desse ideal em 25% - esse é um comportamento normalmente aceitável em um DAC.

O problema é que um erro de 0,25 LSB no seu MSB DAC contribui com um erro de 64 LSB (1/4 de todo o intervalo) no seu LSB DAC!

Em outras palavras, seu DAC de 16 bits possui a linearidade e distorção de um DAC de 10 bits, o que para a maioria das aplicações de um DAC de 16 bits é inaceitável.

Agora, se você puder encontrar um DAC de 8 bits que garanta precisão de 16 bits (INL e DNL melhor que 1/256 LSB), vá em frente: no entanto, eles não são econômicos, portanto, a única maneira de obter um é começar com um DAC de 16 bits!

Outra resposta sugere "compensação de software" ... mapeando os erros exatos no seu MSB DAC e compensando-os adicionando o erro inverso ao LSB DAC: algo muito ponderado pelos engenheiros de áudio nos dias em que os DACs de 16 bits eram caros. ..

Em resumo, ele pode funcionar até certo ponto, mas se o DAC de 8 bits deriva com a temperatura ou a idade (provavelmente não foi projetado para ser ultra-estável), a compensação não será mais precisa o suficiente para valer a pena. complexidade e despesa.

Brian Drummond
fonte
1
Seu argumento sobre a deriva é bom e tornaria esse método impraticável para tentar obter, por exemplo, precisão de 20 bits combinando dois DACs de 8 bits. Eu acho que tentar obter 13-14 bits utilizáveis ​​de 2x8 seria viável, no entanto.
supercat
19

28=256

216=65536

Observe como isso se multiplica, não é uma adição (como aconteceria quando você soma as saídas de dois DACs de 8 bits).

Se eu pegar dois DACs de 8 bits e somar suas saídas, quais são os valores possíveis?

Resposta: 0, 1, 2, ..., 256, 257, 258, .... 511, 512 e é isso!

Um DAC de 16 bits pode fazer 0,1,2 ..., 65535, 65536, muito mais!

Teoricamente, é possível, mas você precisará multiplicar a saída de um dos DACs de 8 bits por exatamente 256 e conectar os bits LSB ao DAC 1x e os bits MSB ao DAC 256x. Mas não se surpreenda se a precisão e a linearidade sofrem!

Bimpelrekkie
fonte
Ah, entendi. Eu não sabia que ...
quantum231
1
Se alguém usa um fator de multiplicação menor que 256, pode compensar a não linearidade no software. A não linearidade diferencial será pelo menos igual ao tamanho da etapa do DAC menor, mas um usando dois DACs de 8 bits poderá gerenciar realisticamente um DAC monotônico de 14 bits se for possível determinar com precisão quais fatores de compensação aplicar
supercat
2
Você também pode multiplicar a saída de um DAC por 257/256 e somar, se você gosta do desafio matemático de descobrir quais valores enviar para qual DAC para obter uma determinada saída total. Caso contrário, os desafios são os mesmos :) #
3100 hobbs
Hobbs @: Eu não acho que isso funciona. Se um DAC gerar 0 a 65280 nas etapas de 256 e o ​​outro gerar 0 a 65535 nas etapas de 257, será possível atingir todos os valores de saída entre 65280 e 65535, mas não será possível atingir nenhum no intervalo entre, por exemplo, 32639 e 32768. Isso não está realmente se saindo muito melhor do que um único DAC de 8 bits.
Supercat 9/16
@ supercat você está certo, eu afofei as contas. Eu acho que existe uma versão que funciona se você puder ser negativo, mas não funciona da maneira que eu escrevi. De qualquer maneira, era principalmente uma tentativa de humor.
hobbs
6

A técnica é viável se a tensão de escala completa do DAC "interno" for maior que o tamanho da etapa do DAC externo e se houver um meio de medir com precisão (embora não necessariamente rapidamente) as tensões de saída geradas por diferentes códigos de saída e aplicar ajustes de linearidade adequados no software. Se a tensão de escala completa do DAC interno puder ser menor que o pior tamanho de passo entre duas tensões no DAC externo (tendo em mente que os passos raramente são absolutamente perfeitamente uniformes), pode haver tensões que não podem ser obtidas com nenhum combinação de valores DAC interno e externo. Se alguém garantir que haja sobreposição nas faixas, no entanto, o uso da correção da linearidade do software poderá permitir bons resultados.

BTW, o antigo design do chip Cypress PSOC (eu não conheço os mais novos) emula um DAC de nove bits usando dois DACs de seis bits que são dimensionados um em relação ao outro. Ele não usa correção de linearidade de software, mas está apenas tentando adicionar três bits de precisão a um DAC de seis bits. Tentar adicionar mais de 3-4 bits de precisão a qualquer tipo de DAC sem usar a compensação de software provavelmente não funcionará muito bem.

supercat
fonte
4

Há 21 anos, quando eu era um Estudante Universitário Pobre (e só podia pagar DACs de 8 bits), usei essa técnica para combinar dois DACs de 8 bits em um DAC de bit superior, sabendo que não obteria precisão de 16 bits, porque de não-linearidade integrante (INL) e a não-linearidade diferencial (DNL). O DNL no DAC de byte mais significativo é o assassino nesse caso; se você tiver INL, a saída será distorcida, mas ainda suave. DNL determina o tamanho de uma etapa do DAC para a próxima e, se variar o suficiente, você verá descontinuidades ou reversões ao cruzar os limites de 8 bits: 0x07ff <-> 0x0800 por exemplo, conforme o DAC do MSB muda de 0x07 <-> 0x08, pode mudar não pelas 256 contagens ideais do LSB DAC, mas pelas 384 ou 128 contagens (± 1/2 do seu próprio bit menos significativo). Um bom DAC terá apenas 1/2 LSB DNL, ​​um DAC medíocre terá pior DNL, ​​embora fique mais difícil quanto maior a resolução, portanto, deve ser bastante fácil encontrar 1/2 LSB DNL em um DAC de 8 bits, mas não em um DAC de 16 bits.

Não me lembro qual era a resolução efetiva no meu caso, talvez 12 ou 13 bits, e tive que ajustar o ganho do segundo estágio manualmente com um potenciômetro.

Jason S
fonte
2

Eu já vi isso na prática em um detector de HPLC UV para aumentar a faixa dinâmica. Um dos DACs é compensado pela quantidade necessária. Digamos que o 1º DAC lida com 0 a 10 V e o 2º lida com 10 a 20 Volts.

purza
fonte
1
Isso não adicionaria apenas um bit?
Szidor 9/03/16
Sim, isso adiciona apenas um bit. No entanto, em termos de áudio, pode ser um compromisso muito bem-sucedido. Um DAC "direto" tem um enorme problema em meia escala, onde todos os 16 bits são alternados de uma só vez - o MSB é ligado, todos os outros são desligados e é aí que estará o maior erro DNL único. Em um sinal de áudio, esse maior erro também está no pior lugar possível - a passagem do zero - corrompendo até os sons mais silenciosos. Agora, se um DAC lida com sinais positivos e o outro lida com sinais negativos, você pode evitar esse problema completamente. O lendário DAC Burr-Brown PCM-63 explorou isso muito bem.
Brian Drummond
0

Eu tenho uma opinião diferente sobre isso ... Basta usar um DAC de 8 bits. Você mencionou que ele precisa trabalhar apenas alguns 10s de Hz, portanto, você pode usar apenas um DAC (que provavelmente pode funcionar até 100kHz) e usá-lo como modulador. A idéia básica é produzir 256 ciclos do valor MSB mais o sinal de estouro / transporte de um bit de um acumulador de 8 bits ao qual o LSB é adicionado a cada ciclo. Você obtém apenas 254 como o MSB máximo por causa do 'bit modulador' extra do LSB, mas isso não reduz muito o alcance.

Exemplo: se você executar o ciclo em 30kHz, os 256 ciclos se repetem em 117Hz, para que você possa colocar um filtro passa-baixa de 50Hz na saída para obter um sinal bastante suave e preciso que possa atingir a taxa necessária.

A precisão desse método depende bastante do tamanho das etapas de bits, mas não mais do que qualquer outro método. Eu o usei para geração de tensão de referência no passado e funciona surpreendentemente bem.

Simon Tillson
fonte