Inesperadamente ruim DNL, ​​INL e ENOB em um ADC

8

Atualmente, estou tentando caracterizar um MCU e seus periféricos, em particular o ADC de bordo. No entanto, executando os procedimentos de teste usuais (ou seja, onda senoidal para ENOB e dente de serra para DNL e INL), acho que os resultados são bastante ruins. Para encurtar a história, o ADC "é" 12 bits - o que significa que seria de esperar cerca de 10 bits de resolução. No entanto, não importa o que eu tente, o ENOB parece ter um platô em torno de 8,5 bits. Da mesma forma com o DNL e o INL - os melhores resultados que tenho obtido são quando o sinal é super amostrado 64 vezes. A folha de dados na página 44 diz que se pode esperar um DNL em torno de ± 3 LSB - no entanto, é isso que recebo quando exagero na amostra. O sinal bruto atinge o pico em cerca de 7 LSB. Existem algumas coisas que eu tentei até agora:

  • Colocar um capacitor de 10 nF na entrada e no terra do ADC (o que funciona até certo ponto - sem ele o ENOB é 7,5)
  • Sobre-amostragem 4x, 8x e algumas outras até 256x. Isso - como se poderia esperar - também melhora os resultados, embora não seja tão significativo. Uma super amostragem maior produz melhores resultados, enquanto 4x é quase idêntico a nenhuma super amostragem.
  • Abrandar o relógio do módulo ADC e aumentar a janela de amostragem. Nenhuma delas foi particularmente eficaz. Aumentar a janela de amostragem teve um pequeno impacto positivo no ENOB e DNL. Diminuir a velocidade do relógio realmente não teve nenhum efeito.
  • Da mesma forma, o uso de referências externas ou internas não pareceu produzir um efeito, embora eu não tenha feito muitos experimentos com referência externa - talvez seja o próximo a considerar. Uma edição pequena para referência de quem pode lê-lo um dia - usando uma referência externa no meu caso produziu resultados piores. Em outras palavras, a referência interna no meu MCU parece ser mais precisa - ou a referência externa não é tão boa quanto eu esperava.

Agora, a questão é em que momento se aceita que o ADC é apenas de baixa qualidade ou de alguma forma danificado? Que outros testes posso tentar melhorar as características da ADC? Note que eu gero os sinais de entrada com o gerador de funções. Neste ponto, eu estou apenas preso - ou seja, fiquei sem tópicos do fórum para ler - e eu realmente aprecio qualquer conselho.

fandor
fonte
Você checou o PS? É o modo comutado? Se sim, você pode colocar um LDO entre PS e ADC? Você verificou a qualidade do relógio ADC?
Claudio Avi Chami
Esses erros são como o esperado. A folha de dados diz no pior dos casos 6 LSB. Você pode tentar alguma calibração ou, melhor, usar um ADC separado para medições precisas.
@ClaudioAviChami Acredito que a minha é uma fonte de alimentação linear. É marca é Rigol DG2041A. Você poderia me dica de onde eu posso começar com a verificação do relógio ADC - uma rápida pesquisa no Google não parece promissor :)
Fandor
1
Que impedância de fonte está alimentando o ADC? Você pode precisar de um amplificador de buffer.
27416 Brian Drummond
@BrianDrummond Certificarei-me de medir isso amanhã de manhã quando chegar à minha configuração e publicá-la aqui. Obrigado pela sugestão!
Fandor

Respostas:

11

Pessoalmente, eu não sou muito fã de regras práticas, mas existem algumas regras que são excepcionalmente precisas que até eu faço uma exceção.

Uma dessas regras é a seguinte:

Os periféricos ADC do microcontrolador são sempre terríveis.

Sempre. Não é o tipo de terrível que você apenas desdém. O tipo de terrível que o deixa chorando na posição fetal no chuveiro.

Eu brinco, mas apenas um pouco. Para responder sua pergunta, sim, o ADC é realmente tão ruim assim, e sim, você deve aceitá-lo. Observe o grande aviso de isenção de responsabilidade "Condições operacionais aplicáveis". na folha de dados.

Você deve se lembrar que, para certas partes (como MCUs), a folha de dados também é material de marketing, e os MCUs geralmente competem em periféricos ou no consumo de energia (ou ambos). Portanto, valores para ADCs geralmente serão tecnicamentecorreto, desde que você use o ADC nas mesmas circunstâncias ridículas e impraticáveis ​​em que eles fizeram a medição para a folha de dados. Um dos favoritos que vejo com frequência é medir o ENOB com todos os outros periféricos, bem como com o núcleo do processador completamente desligado em um sono profundo. Outro está usando o pós-processamento de software significativo e técnicas semelhantes, como a superamostragem, para obter a medição. Acho que nunca vi uma folha de dados do MCU que não especificava o ADC em termos de 'este é o melhor que você jamais alcançará, e podemos ou não dizer como o gerimos' em vez de 'esta é a especificação antes de tentar limpar o sinal no software'.

E, para deixar claro, parece que essa parte tem um ADC muito bom, pelo menos em comparação com todos os outros terríveis ADCs do MCU. 8,5 bits? Que opulência! Tão burguês! Na maioria das vezes, você obtém talvez 6 bits de um ADC de 10 bits em um MCU. Lembre-se, quando eles dizem que a resolução de 12 bits significa que existem 12 bits que você pode ler em algum registro em algum lugar. Não há implicações de que não haverá 12 bits de ruído inútil. A única promessa é que haverá 12 bits de algo .

Agora, neste ponto, você pode estar um pouco cético quanto ao fato de que esses periféricos analógicos seriam invariavelmente tão terríveis ou, pelo menos, se perguntam por que alguma empresa de chips não lança simplesmente um MCU com um front end analógico decente.

Bem, eles não podem. Não importa quão boa seja a referência, não é uma questão de estabilidade. É barulho. E física.

É simplesmente fisicamente impossível criar um ADC de alto desempenho (ou realmente, apenas medíocre) na mesma matriz de silício que um MCU. E é preciso apenas um truque para estragar o desempenho analógico. Nesse caso, não há um gotchya, mas vários.

Primeiro, apenas uma comutação de transistor CMOS despeja todos os tipos de harmônicos e ruídos diretamente em, bem, tudo, e se junta a (você adivinhou) tudo, quando é alternada. Nós tendemos a pensar de CMOS como sendo de baixa potência (e é), mas vale a pena tendo em mente que o poder CMOS faz uso é efetivamente zero - exceto quando um transistor está mudando de estado. E eles mudam de estado muito rapidamente, da ordem de dezenas a centenas de picossegundos. Quando você toma uma dúzia de miliamperes consumidos por algo que consome essencialmente nenhuma energia estática, e toda essa corrente está sendo transformada inteiramente em intensos picos de corrente de 100ps de literalmente milhões de pequenos bastardosswitches, alternando agregados ... bem, isso deve reformular as coisas um pouco. Esses poucos miliamperes são muito mais sinistros do que parecem, pelo menos para coisas analógicas. Baixa potência, baixo ruído. O CMOS é de baixa potência, porque só precisa de energia para trocar. Mas é mais difícil do que uma queda de graves no dubstep.

Todos esses espigões devem atravessar o substrato, o substrato que o ADC compartilha, e resistir o suficiente para causar quedas de terra localizadas no substrato que não fazem sentido para os circuitos digitais, mas são realmente problemáticas para qualquer circuito analógico.

E realmente não há maneira de contornar isso. Esse é apenas um problema. A outra é que é fisicamente impossível criar um layout analógico de alto desempenho que possa coexistir com o MCU, que também precisará usar esses pinos como GPIO e outras considerações que interrompem fatalmente qualquer chance de uma boa seção analógica layout.

Agora, existem alguns MCUs especializados com ADCs um pouco aprimorados que conseguem isso, na verdade, tendo duas matrizes de silício totalmente separadas em um pacote, conectadas por fios de ligação, proporcionando isolamento do substrato. Você pagará por esse recurso, porém, e os resultados ainda serão piores do que um ADC dedicado devido à grande proximidade.

Ah, e eu nem toquei em como tudo isso pressupõe que você tenha um layout externo impecável e uma situação de aterramento e desacoplamento de todas as formas relacionadas à sua seção analógica e digital. Só isso não é trivial, basta perguntar a Henry Ott .

Então, em conclusão, receio que o ADC do seu chip seja realmente tão terrível. Exatamente como qualquer outro MCU ADC. Desculpa. Ou é bom o suficiente - e para muitos aplicativos (auxiliados por alguma fonte de software bastante inteligente - trocadilho!) - é. É incrível o que realmente se pode fazer, mesmo com o fraco desempenho analógico disponível, desde que você seja inteligente. Mas inteligente só pode levá-lo tão longe. se você deseja um número rígido e duro de bits, você realmente precisa morder a bala e usar um ADC dedicado, juntamente com um cuidadoso layout e desacoplamento da PCB, ou usar uma peça mais especializada (como pacotes com múltiplas matrizes).

metacolina
fonte
3
+1 em Quote of the Day: "O CMOS é de baixa potência porque precisa apenas de energia para alternar. Mas é mais difícil do que uma queda de graves no dubstep".
Araho
I Note-se que esta parte utiliza uma ADC carga redistribuição estilo, que têm os seus próprios problemas exclusivos: analog.com/en/search.html?q=an-931
Peter Smith