ADCs em cascata para obter maior resolução


11

Suponha que eu tenha um par de ADCs de 12 bits, posso imaginar que eles possam ser colocados em cascata para obter uma saída <= 24 bits.

Eu posso pensar em simplesmente usar um para a faixa positiva e outro para a faixa negativa, embora provavelmente haja alguma distorção na região de transição. (suponha que possamos ignorar alguns bits de erro ou, talvez, colocar um terceiro ADC para medir o valor em torno de 0 volts).

Outra opção em que eu estava pensando é usar um único ADC de alta velocidade e alternar as tensões de referência para obter uma resolução mais alta em velocidade mais baixa. Também deve haver uma maneira de obter um resultado real com o uso de um ADC de referência fixa e, em seguida, alternar os arefs do conversor secundário para obter um valor mais preciso no meio.

Quaisquer comentários e sugestões são bem-vindos.

Presumo que um chip quad de 8 bits (ou dois de 12 bits) seja mais barato que um único chip de 24 bits.


2
Sim, é possível em teoria e em 0,01% dos casos reais, onde as partes têm "Número de bits efetivos" igual a "Número de bits de dados", com o restante das especificações chegando a 5 ordens de magnitude de precisão adicionais. O que não é verdade para 99,99% das peças.

4
212

Respostas:


11

Muitas coisas na sua pergunta. Então, vamos levá-los um por um.

Suponha que eu tenha um par de ADCs de 12 bits, posso imaginar que eles possam ser colocados em cascata para obter uma saída <= 24 bits. Eu posso pensar em simplesmente usar um para a faixa positiva e outro para a faixa negativa, embora provavelmente haja alguma distorção na região de transição. (suponha que possamos ignorar alguns bits de erro ou, talvez, colocar um terceiro ADC para medir o valor em torno de 0 volts).

Na verdade não - você obteria uma resolução de 13 bits. Pode-se descrever a operação do conversor de 12 bits como decidir em qual das 4096 posições (2 ^ 12) a tensão de entrada é. Dois ADCs de 12 bits forneceriam 8192 compartimentos ou resolução de 13 bits.

Outra opção em que eu estava pensando é usar um único ADC de alta velocidade e alternar as tensões de referência para obter uma resolução mais alta em velocidade mais baixa.

Na verdade, é assim que o conversor sucessivo de aproximação funciona. Basicamente, o conversor de um bit (também conhecido como comparador) é usado com o conversor digital para analógico que produz tensão de referência variável de acordo com o algoritmo de aproximação sucessivo para obter amostra digitalizada da tensão. Observe que os conversores SAR são muito populares e a maioria dos ADCs no uC é do tipo SAR.

Também deve haver uma maneira de obter um resultado real com o uso de um ADC de referência fixa e, em seguida, alternar os arefs do conversor secundário para obter um valor mais preciso no meio.

Na verdade, é muito parecido com o funcionamento dos ADCs de pipeline . No entanto, em vez de alterar a referência do ADC secundário, o erro residual após o primeiro estágio é amplificado e processado pelo ADC do próximo estágio.

Quaisquer comentários e sugestões são bem-vindos. Presumo que um chip quad de 8 bits (ou dois de 12 bits) seja mais barato que um único chip de 24 bits.

Na verdade, há uma razão para isso, pois ter um conversor de 24 bits não é tão simples quanto organizar em alguma configuração quatro conversores de 8 bits. Há muito mais nisso. Eu acho que o principal mal-entendido aqui é pensar que é possível "adicionar" um número de bits. Para ver por que isso está errado, é melhor pensar no ADC como um circuito que está decidindo a qual tensão de entrada "bin" pertence. O número de posições é igual a 2 ^ (número de bits). Portanto, o conversor de 8 bits terá 256 posições (2 ^ 8). O conversor de 24 bits terá mais de 16 milhões de compartimentos (2 ^ 24). Portanto, para ter o mesmo número de posições que no conversor de 24 bits, seria necessário mais de 65 mil conversores de 8 bits (na verdade 2 ^ 16).

Para continuar com a analogia do compartimento - suponha que o seu ADC tenha uma escala completa de 1V. Em seguida, o "bin" do conversor de 8 bits é de 1V / 256 = ~ 3.9mV. No caso do conversor de 24 bits, seria 1V / (2 ^ 24) = ~ 59,6nV. Intuitivamente, fica claro que "decidir" se a tensão pertence a uma caixa menor é mais difícil. De fato, esse é o caso devido ao ruído e a várias não-idealidades do circuito. Portanto, não apenas um precisaria de mais de 65 milhares de conversores de 8 bits para obter uma resolução de 24 bits, mas também esses conversores de 8 bits teriam que ser capazes de resolver em uma lixeira de 24 bits (o seu conversor de 8 bits normal não seria bom o suficiente, pois é capaz de resolver para ~ 3.9mV bin não 59.6nV bin)


O intervalo em que um conversor de 8 bits funcionaria é 256 * 59.6nV = 15.26uV. Eu nunca fizeram referência tensões que a baixa e precisa :)
Hans

14

1212121212 1213

VREF2

Não existe almoço grátis.

editar
Parece haver um mal-entendido sobre oversampling, eo fato de que não são ADCs de áudio 1-bit que pode lhe dar resolução de 16 bits.
Se sua entrada for um nível DC fixo, digamos 0,2V em uma faixa de entrada de 1V, sua saída será sempre a mesma. Com um ADC de 1 bit, este valor será zero para o nosso exemplo (o nível é menos da metade da referência). Agora será assim, se você amostrar 1 amostra por segundo ou 1000. Portanto, a média não muda isso. Por que ele funciona com o ADC de áudio ?, porque a tensão varia o tempo todo (ruído), que, segundo Einstein (relatividade, você sabe ;-)) é o mesmo que manter a tensão constante e variar a referência. E entãovocê obtém várias leituras diferentes durante a amostragem excessiva, que você pode calcular para obter uma boa aproximação do seu nível real.
O ruído deve ser forte o suficiente para ultrapassar o (s) limiar (es) do ADC e deve atender a certas restrições, como a distribuição gaussiana (ruído branco). No exemplo de 1 bit, não funcionou porque o nível de ruído é muito baixo.


Leitura adicional:
nota de aplicação Atmel AVR121: Aprimorando a resolução ADC por superamostragem


Não sei se entendi seu pensamento sobre isso. Certamente, se você dividir + e -, poderá obter amostras de 0v a + 4.096v em 12 bits e de 0v a -4.096v em 12 bits, totalizando 24 bits em toda a faixa?
Majenko

1
@ MattJenkins, seria o mesmo que um sinal. Pense nisso. Se eu amostrar 0-10V com 12 bits e 0 - (- 10V) com 12 bits, preciso apenas de um bit para dizer se o sinal foi negativo ou positivo.
21411 Kortuk

Isso é verdade - portanto, embora você possa ter uma amostra de 24 bits, poderá obter exatamente a mesma resolução com apenas 13 bits.
Majenko 20/07

8V2V=228V1V=23

@ MattJenkins, você pode usar 1 codificação quente e levar 1024 bits em vez de 10. A realidade física é que o engenheiro pode fazer o que quiser, basta dizer ao cliente que você está apenas com 3dB, e não com 10kW.
21411 Kortuk

3

Sim, em teoria, você pode fazer o que quiser, mas apenas se tiver algum equipamento totalmente irrealista disponível.

Os vários outros comentários feitos até agora sobre precisão extra limitada estão corretos, infelizmente.

Considerar. Meça uma tensão com um ADC de 12 bits e diga 111111000010 Você sabe que o valor real está em algum lugar na faixa de 1 bit +/- 0,5 bits em ambos os lados desse valor.

Se o seu ADC tinha precisão de 24 bits, mas fornecia apenas 12 bits, está relatando que o vaklue está dentro de +/- meio bit de 111111000010 000000000000. Se esse fosse o caso, você poderia usar um ADC de 12 bits com um +/- Intervalo de 1/2 bit, centralize-o em 111111000010000000000000000 e leia o resultado. Isso daria a diferença entre o sinal real e o valor aDC, conforme desejado. QED.

No entanto, o ADC de 12 bits é, por si só, preciso com cerca de meio bit. A soma total de seus vários erros faz com que ele declare um determinado resultado quando o resultado real é de cerca de metade, mas é mais ou menos diferente.

Enquanto você gostaria

111111000010 significa 111111000010 000000000000

na verdade, pode significar 111111000010 000101101010 ou qualquer outra coisa.

Portanto, se você pegar um segundo ADC e medir os 12 bits inferiores e ASSUMIR que eles são relativos a um limite exato de 12 bits, na verdade eles são relativos ao valor incorreto acima. Como esse valor é essencialmente um erro aleatório, você adicionaria uma nova figura de 12 bits inferiores a 12 bits de ruído essencialmente aleatório. Preciso + aleatório = novo aleatório.

EXEMPLO

Use dois convetores que podem medir um intervalo e dar um resultado em 1 de 10 etapas. Se escalados para 100 volt FS, eles fornecem ge 0 10 20 30 40 50 60 70 80 90

Se escalados para 10 volts de escala completa, eles fornecem 1 2 3 4 5 6 7 8 9

Você decide usar esses dois conversores para medir uma faixa de 100 volts com precisão de 1 volt.

O conversor 1 retorna 70V. Você mede a tensão em relação a 70V e obtém -3V. Então, você conclui que o valor real, ou seja, + 70V - 3V = 67V.

No entanto, o resultado de 70V poderia, de fato, ser um dos 65 66 67 68 69 70 71 72 73 74

Somente se o 1º conversor for PRECISO para 1V em 100, mesmo que mostre etapas de 10V em 100V, você poderá obter o que deseja.

Então, o resultado real é 67V +/- 5 volts = algo entre 62V e 72V. Então você não está melhor do que antes. Seu centro mudou, mas pode ser localizado aleatoriamente.

Você poderá obter melhorias modestas dessa maneira, pois um conversor geralmente é provavelmente um pouco mais preciso do que os bits que ele retorna (você espera); portanto, seu segundo conversor faz algum uso disso.


Um sistema que de fato funciona foi mencionado com uma omissão importante. Se você amostrar um sinal N vezes e adicionar + / _ meio ruído gaussiano, espalhará o sinal "por todo o intervalo possível" e o valor médio será agora log (N) mais preciso do que antes. Esse esquema possui anzóis e qualificações e você não pode obter apenas um número extra arbitrário de bits, mas oferece algumas melhorias.


No primeiro caso acima, mencionei o ADC de 12 bits com precisão de 24 bits. Você pode obter algo desse tipo usando um ADC de 12 bits e lendo seu valor assumido com um conversor de 24 bits, por exemplo, delta sigma. Se o sinal era estável o suficiente para permanecer no mesmo intervalo de bits, você pode usar um segundo ADC para ler os segundos 12 bits no sinal estável.

Alternativa - basta ler o sinal de 24 bits inicialmente com o sigma delta, travar nesse ponto e depois medir sucessivamente em relação a ele com o 2º ADC. Enquanto o sinal permanecer dentro do alcance do 2º ADC, você obterá um resultado muito mais rápido.


Hummm. Um voto positivo. Um voto negativo. Dado o que passa por respostas OK aqui [tm] :-) eu estaria interessado em saber quem achou que essa resposta foi tão terrível que merecesse uma votação baixa e por quê?
Russell McMahon

1

Existe algo chamado supersampling que pode ser usado para aumentar a resolução de muitos tipos de ADC.

Funciona adicionando ruído ao sinal. Embora o ruído reduza a resolução, é necessário fazer com que os dados se dividam em vários bits. (Eu não sou do ramo de processamento de sinais - é assim que eu entendo.) Seu ruído pode ser de apenas 1 ou 2 bits, mas precisa estar lá. Se você coletar uma amostra de 12 bits, possui 12 bits. Se você coletar 4 amostras, juntá-las e dividir por duas, obterá uma amostra de 13 bits. (Cada bit adicional requer 4 amostras, devido ao Nyquist.)

Uma maneira simples de fazer isso é adicionar ruído à tensão de referência. Eu uso isso para aumentar um ADC de 12 bits em um dsPIC33F para 16 bits para obter uma resolução mais alta. Antes, configurei um timer assíncrono em alta frequência e uso o DMA para enfileirar uma sequência de números PRNG na captura de saída, o que fornece uma fonte de ruído relativamente limpa. A saída de ruído influencia a tensão de referência em cerca de 0,1% (divisor de 1k-1Meg). O ruído é bidirecional, afundando e alimentando. Eu uso o DMA do dsPIC33F para enfileirar amostras, para que isso possa ser feito com pouca intervenção da CPU. Obviamente, a taxa máxima de amostragem cai para cerca de 1/32 da taxa normal, mas isso não é um problema para o meu aplicativo.

Como o ruído nem sempre é distribuído uniformemente, calibro as entradas em todas as unidades enviadas, embora a diferença provavelmente seja de apenas 1 ou 2 LSB.


Como você sabe que o ruído adicionado tem o espectro certo (é o ruído branco)? Como você decide a amplitude? Se o seu ruído não for bom, você terá mais resolução, mas não mais precisão.
Federico Russo

@Federico Claro - para mim, é tentativa e erro. O ruído branco pode ser simulado usando um PRNG e, para apenas 32 amostras, funciona bem o suficiente. Se eu fosse um engenheiro eletrônico de verdade, saberia como fazê-lo corretamente.
Thomas O

Aqui está um artigo na Analog Devices que pode ajudar a explicar isso: analog.com/library/analogdialogue/archives/40-02/adc_noise.html
DarenW:

@ ThomasS, eu usei essa técnica com termistores para adicionar 8 bits de precisão. Não com barulho, porém, usamos aquecimento.
21411 Kortuk

@ DarenW Isso parece familiar - acho que é de onde tirei minha ideia.
Thomas O

1

Usando o amplificador de soma, você pode somar as duas saídas DAC. Você pode usar R1 = 100k, R2 = R3 = 100 Ohm. Desta forma, a saída será Vout = - (V1 + V2 / 1000). Você precisará de alimentação dupla e, se quiser, não invertido, precisará colocar outro amplificador inversor com ganho = 1. Então, digamos que você tenha DAC de 12 bits com 2 saídas e referência 4.096V. Então (se você tiver o segundo amplificador inversor), um incremento do DAC 1 aumentará a saída em 1uV e um incremento do DAC 2 aumentará a saída em 1mV. Isso não é de 24 bits no total. São cerca de 22 bits. Em teoria, você pode escolher R1 como 4096 vezes maior que R2 e R3 e obter 24 bits, mas você não obterá melhores resultados. Você terá muitos problemas de ruído na faixa de microvolts, mesmo se escolher um bom opamp de baixo ruído.

Atualização Eu acho que é uma pergunta sobre o DAC porque eu estava procurando por DACs. Aqui está como você aplica princípios semelhantes aos ADCs. Em vez de somar, você deve subtrair o resultado do ADC1 e multiplicar por 1000 antes da medida com o ADC2.

Resolução ADC dupla

Correção - ADC3 deve estar no VGnd (Vref / 2), não no Vref para corresponder à fórmula do resultado

Em vez do AZ431, você pode usar qualquer outra referência de 2,5V ou outra referência ajustável com passivos adequados para obter exatamente 4,096V. Quanto menor o desvio de temperatura da referência, melhores os resultados. Também tem que ser baixo ruído. Observe que, como está, provavelmente não é preciso o suficiente. Vai ser bom colocar trimpot de múltiplas voltas de 500 ohm entre R7 e R8 com limpador na entrada de referência e ajustá-lo para Vref = 4.096V exatamente. Também será necessário um trimpot (2) entre R1 e R2 com limpador para entrada positiva U1. Ajustá-lo para 2.048V em VGnd. U1 é qualquer opamp de baixo ruído. (O BT4 AZ431 é péssimo para o trabalho. Coloquei porque tinha o símbolo).

É muito crítico que U2, U3 e U4 sejam amplificadores de chopper com deslocamento zero. O U2 é mais importante porque se multiplica por 100. a cada 1 microvolt chega a 100 microvolts. Se você usar o OP07 e zerá-lo corretamente e a temperatura mudar em 10 graus, você obtém um deslocamento de 13 uV, que se traduz em 1,3 mV na saída do U4. São 13 mV na saída ADC, o que torna o ADC2 quase inútil.

Também o U3 deve ser capaz de atingir 6.048V - isso é VGnd (2.048V) + 2xVinmax (2x2V = 4V). Essa é a idéia de ter uma fonte de alimentação Vcc = + 12V. Vcc pode ser tão baixo quanto 6,5V quando MAX44252 é usado. Como o MAX44252 é um trilho para trilho, o fornecimento negativo pode ser pulado e Vss do opamp pode ser conectado ao terra. Isso é verdade para qualquer opamp que pode chegar a 48mV em sua saída.

O MAX44252 possui tensão de deslocamento de 2-4uV (típica) e desvio de temperatura de 1 a 5 nV. É US $ 2,64 em digikey em quantidades de 1 e é quadopamp, então apenas um chip fará o trabalho.

Como funciona? Vamos ter um DAC de 10 bits, por exemplo. A resolução é 4.096 / 1024 = 4mV. O sinal de entrada deve ser relativo ao VGnd, que é metade do Vref. O ADC1 mede a tensão de entrada normalmente. Em seguida, gera o valor via DAC1. A diferença entre Vin e DAC1 é o erro que você precisa para amplificar, medir e adicionar ao resultado ADC1. U2 amplifica a diferença Vin - DAC1, em relação a DAC1, com ganho de 100. U4 amplifica essa diferença em 10 e também subtrai DAC1, em relação a VGnd. Isso torna ADC2 = (Vin - DAC1) * 1000, em relação ao VGnd. Em outras palavras, se você tiver 1,234567V no Vin, em relação ao VGnd. ADC1 medirá o valor de 821porque a resolução é 4mV e (2.048 + 1.234567) /0.004 = 820.64175. Portanto, o valor DAC será definido como 309, que é 309 * 0,004V = 1,236V. Agora o ADC2 receberá 1,234567-1,236 = -0,001433 * 1000 = -1,433V em relação ao VGnd (idealmente). Esse é o modo comum 2.048-1.433 = 0.615V. 0,615V / 0,004 = 153,75. Assim valor ADC2 = 154. É mais fácil calcular o valor em microvolts para evitar o uso de flutuação. para converter ADC2 em mV, precisamos multipy o valor por 4: VADC1 = 821 * 4 = 3284mV. Para converter para uV, precisamos multiplicar por 1000. Ou esse é o valor ADC1 multiplicado por 4000. 821 * 4000 = 3284000. Portanto, a tensão ADC1 em relação a VGnd é 3284000-2048000 = 1236000uV. O ADC2 já está multiplicado por 1000, portanto, precisamos multiplicar apenas por 4: VADC2 = 154 * 4 = 616. Para obter a tensão relativa ao VGnd, precisamos subtrair o VGnd: 616-2048 = -1432uV. Agora, o VADC1 e o VADC2: 1236000 + (-1432) = 1234568uV ou 1.234568V

Claro que isso é apenas sonhos, porque quando você lida com microvolts, haverá todos os tipos de problemas horríveis - ruído opamp, ruído de resistores, deslocamento de tensão, variação de temperatura, erro de ganho ... Mas se você usar peças decentes, pelo menos 1% de resistores e você anula programaticamente o deslocamento e corrige o ganho para obter um resultado razoavelmente bom. Claro que você não pode esperar ver uma entrada estável para o último dígito. talvez você possa limitar a resolução a 10uV (divida o resultado por 10). Também a multiplicação por 4 pode ser feita somando 4 resultados sequenciais para obter alguma média.

Lembre-se de que nada disso é testado. Simulei apenas o estágio do amplificador sem levar em consideração o ruído e o deslocamento do opamp. Se alguém decidir construí-lo, escreva os resultados nos comentários.


A pergunta é feita sobre AD C. Você fala sobre DA C.
dim perdeu a fé no SE

Eu sinto Muito. Eu procurei pelo DAC e encontrei esta pergunta. Escrevi sem ler atentamente. Vou compensar sugerir como aplicar o mesmo princípio ao ADC.
NickSoft 10/01

Eu removi meu voto negativo, pois sua postagem agora está relacionada à pergunta. Mas não acho que essa solução possa funcionar na prática. Receio que haja muitas imprecisões.
dim perdeu a fé em SE

Claro que vai funcionar. No entanto, a precisão depende das peças usadas. Existem amplificadores de chopper com deslocamento de 0,1uV e desvio de 1-5nV / degC. Eles também têm nanovolts 0,1-10Hz pp de ruído. Combinado com uma boa referência, pode obter uma saída estável de até 10s de uV. Mas isso pode funcionar com peças mais baratas se você quiser obter um dígito extra. Por exemplo, o ADC de 10 bits é com a referência 4.096V com resolução de 4mV. Eu acho que com este circuito pode ser melhorado para resolução de 0.1uV com facilidade (talvez com melhor referência). Isso é +/- 20000 contagens. É claro que precisará de calibração de software para deslocamento e ganho.
NickSoft

Isso é tudo teoria. O fato de sua leitura do ADC2 depender da configuração do DAC (e do deslocamento do opamp, mas essa não é a parte mais crucial), que depende da leitura do ADC1 (e de todas essas tolerâncias), levará ao fato de que você certamente venceu pode até garantir a operação monotônica do seu sistema (mesmo se você estiver dentro dos limites de sua precisão calculada).
dim perdeu a fé em SE

0

log2(a lot)

editar: veja os comentários para correções na minha matemática.


Foi o que pensei também, mas considere o seguinte: faixa de entrada de 1V, entrada de 0,2V, ADC de 1 bit. Não importa o quão alto seja o excesso de amostragem, você sempre lerá 0, média = 0, e não 0,2.
stevenvh

Uma super amostragem como essa exigirá algum "ruído" no sinal. Como stevenvh apontou. Às vezes, o sinal em si tem "ruído" suficiente para fazer isso sem nada de novo. Outras vezes, você precisa injetar algum ruído de alta frequência no sinal - mas o ruído será filtrado no pós-processamento que você fará posteriormente.

Certo, bem, "dependendo da natureza do seu sinal". A pergunta não diz se ele está lendo a temperatura de um termistor colado na lateral de um tijolo de chumbo ou se está amostrando a saída do misturador para SDR. Então ele tem outra opção. Se alguém puder fornecer um ponteiro para as propriedades matemáticas exatas que o sinal precisa para que a superamostragem seja válida, eu estaria realmente interessado, btw. (E isso parece que seria uma adição útil, em vez de, desculpe, as correções que são apenas um pouco menos ondulado mão do que a minha declaração original.)
Jay Kominek

log2(alot)2

Meu interesse principal é por sinais de áudio, por isso, embora os conversores de 24 bits sejam muito caros e não existam muitos deles, posso estar em cascata. Os conversores disponíveis mais amplamente funcionarão. Obrigado a todos pela explicação detalhada. Parece possível a princípio, não é? :)
errordeveloper
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.