DNL, INL ed ENOB inaspettatamente poveri su un ADC


8

Attualmente sto cercando di caratterizzare un MCU e le sue periferiche, in particolare l'ADC di bordo. Tuttavia, eseguendo le consuete procedure di test (cioè sinusoidale per ENOB e dente di sega per DNL e INL), trovo che i risultati siano piuttosto scarsi. Per farla breve, l'ADC "è" 12 bit - il che significa che ci si aspetterebbe da circa 10 bit di risoluzione. Tuttavia, indipendentemente da ciò che provo, ENOB sembra plateau intorno a 8,5 bit. Allo stesso modo con DNL e INL - i migliori risultati che ho ottenuto sono quando il segnale è sovracampionato 64 volte. Il foglio dati a pagina 44 dice che ci si può aspettare DNL di circa ± 3 LSB - tuttavia, questo è ciò che ottengo quando eseguo un overcampionamento. Il segnale grezzo raggiunge un picco di circa 7 LSB. Ci sono alcune cose che ho provato finora:

  • Mettere un condensatore da 10 nF su input e ground ADC (che funziona in una certa misura - senza di esso ENOB è 7.5)
  • Sovracampionamento 4x, 8x e pochi altri fino a 256x. Questo, come ci si potrebbe aspettare, migliora anche i risultati, anche se non in modo significativo. Il sovracampionamento più ampio produce risultati migliori mentre il 4x è quasi identico al non sovracampionamento.
  • Rallentamento dell'orologio del modulo ADC e aumento della finestra di campionamento. Nessuno di questi è stato particolarmente efficace. L'aumento della finestra di campionamento ha avuto un piccolo impatto positivo su ENOB e DNL. Rallentare il tempo non ha avuto alcun effetto.
  • Allo stesso modo, l'uso di riferimenti esterni o interni non sembra aver prodotto un effetto, anche se non ho fatto molti esperimenti con riferimenti esterni - forse questo è il prossimo da considerare. Una piccola modifica per il riferimento di chiunque potrebbe leggerlo un giorno - l'uso di un riferimento esterno nel mio caso ha prodotto risultati peggiori. In altre parole, il riferimento interno sul mio MCU sembra essere più accurato o il riferimento esterno non è buono come mi aspettavo.

Ora, la domanda è: a che punto si accetta che l'ADC sia di scarsa qualità o in qualche modo danneggiato? Quali altri test posso provare per migliorare le caratteristiche ADC. Si noti che genera i segnali di ingresso con il generatore di funzioni. A questo punto sono solo bloccato - ovvero ho esaurito i thread del forum da leggere - e apprezzerei sinceramente qualsiasi consiglio.


Hai controllato il PS? È la modalità commutata? Se sì, puoi mettere un LDO tra PS e ADC? Hai controllato la qualità dell'orologio ADC?
Claudio Avi Chami,

Questi errori sono come previsto. La scheda tecnica dice nel peggiore dei casi 6 LSB. Potresti provare qualche calibrazione o utilizzare meglio un ADC separato per misurazioni precise.

@ClaudioAviChami Credo che il mio sia un alimentatore lineare. È fatto Rigol DG2041A. Potresti indicarmi da dove posso iniziare controllando l'orologio ADC - una rapida ricerca su Google non sembra promettente :)
fandor

1
Quale impedenza della sorgente sta alimentando l'ADC? Potrebbe essere necessario un amplificatore buffer.
Brian Drummond,

@BrianDrummond Mi assicurerò di misurarlo domani mattina quando arriverò alla mia installazione e pubblicherò qui. Grazie per il suggerimento!
fandor

Risposte:


11

Personalmente, non sono un grande fan delle regole empiriche, ma ci sono alcune regole che sono eccezionalmente accurate per le quali anche io faccio un'eccezione.

Una di queste regole è la seguente:

Le periferiche ADC del microcontrollore sono sempre terribili.

Sempre. Non il tipo di terribile che hai appena deratato. Il tipo di terribile che ti lascia piangere nella posizione fetale sotto la doccia.

Faccio un capretto, ma solo leggermente. Per rispondere alla tua domanda, sì, l'ADC è davvero così male, e sì, dovresti accettarlo. Nota il grande disclaimer che afferma "Condizioni operative applicabili". nel foglio dati.

Devi ricordare che per alcune parti (come le MCU), il foglio dati è anche materiale di marketing e le MCU generalmente competono nelle periferiche o nel consumo di energia (o in entrambi). Quindi le cifre per cose come gli ADC saranno spesso tecnicamentecorretto, purché si utilizzi l'ADC nelle stesse circostanze ridicole e impraticabili, hanno preso la misurazione per il foglio dati. Un favorito che vedo spesso è misurare ENOB con tutte le altre periferiche, nonché il vero core del processore completamente spento in un sonno profondo. Un altro sta usando una significativa post-elaborazione del software e tecniche simili come il sovracampionamento per ottenere la misurazione. Non credo di aver mai visto un foglio dati MCU che non specifichi l'ADC in termini di "questo è il migliore che tu possa mai ottenere, e potremmo o meno dirti come l'abbiamo gestito" piuttosto che 'questa è la specifica prima di provare a ripulire il segnale nel software'.

E, per essere chiari, sembra che questa parte abbia un ADC piuttosto buono, almeno rispetto a tutti gli altri terribili ADC MCU. 8,5 bit? Che opulenza! Così borghese! Il più delle volte otterrai forse 6 bit da un ADC a 10 bit in un MCU. Ricorda, quando dicono una risoluzione a 12 bit, significano che ci sono 12 bit che puoi leggere da qualche registro da qualche parte. Non c'è alcuna conseguenza che non saranno 12 bit di rumore inutile. L'unica promessa è che ci saranno 12 bit di qualcosa .

Ora, a questo punto, potresti essere un po 'scettico sul fatto che queste periferiche analogiche sarebbero invariabilmente così terribili, o per lo meno, chiediti perché alcune società di chip non rilasciano semplicemente un MCU con un front-end analogico decente a metà.

Beh, non possono. Non importa quanto sia buono il riferimento, non è un problema di stabilità. È rumore. E fisica.

È semplicemente fisicamente impossibile creare un ADC ad alte prestazioni (o davvero solo mediocre) sullo stesso stampo di silicio di un MCU. E ci vuole solo un gotchya per rovinare le prestazioni analogiche. In questo caso, non c'è un gotchya, ma diversi.

In primo luogo, solo una commutazione a transistor CMOS scaricherà tutti i tipi di armoniche e rumore direttamente in, beh, tutto e si accoppierà in (hai indovinato) tutto, quando cambia. Si tende a pensare di CMOS come bassa potenza (e lo è), ma è la pena di tenere presente che la potenza CMOS fa uso è praticamente zero - tranne quando un transistor cambia stato. E cambiano stato molto velocemente, nell'ordine delle decine a centinaia di picosecondi. Quando prendi una dozzina di milliampere consumati da qualcosa che essenzialmente non consuma energia statica, e tutta quella corrente viene trasformata interamente in intensi picchi di corrente di 100ps di letteralmente milioni di piccoli piccoli bastardiswitch, switch in aggregate ... beh, questo dovrebbe riformulare un po 'le cose. Quei pochi milliampere sono molto più sinistri di quanto sembri, almeno per cose analogiche. Bassa potenza ≠ basso rumore. CMOS è a basso consumo perché per passare è necessaria solo l'alimentazione. Ma passa più difficile di una caduta di basso dubstep.

Tutti questi picchi devono lacerare il substrato, il substrato condiviso dall'ADC, e abbastanza resistivi da causare un rimbalzo di terra localizzato nel substrato che non ha senso per i circuiti digitali, ma è davvero molto problematico per qualsiasi circuito analogico.

E non c'è davvero alcun modo per aggirare questo. Questo è solo un problema. L'altro è che in realtà è fisicamente impossibile creare un layout analogico ad alte prestazioni che possa coesistere con l'MCU, che dovrà usare anche quei pin come GPIO, e altre considerazioni che interrompono fatalmente ogni possibilità di una buona sezione analogica disposizione.

Ora, ci sono alcune MCU specializzate con ADC in qualche modo migliorate che raggiungono questo obiettivo in realtà avendo due matrici di silicio completamente separate in un unico pacchetto, collegate da fili di legame, dando così l'isolamento del substrato. Tuttavia, pagherai per questa funzione e i risultati saranno ancora più poveri di un ADC dedicato a causa della pura vicinanza.

Oh, e non ho nemmeno toccato come tutto questo presuppone che tu abbia una disposizione esterna impeccabile e una situazione di messa a terra e disaccoppiamento in tutti i modi relativi alla tua sezione analogica e digitale. Questo da solo non è banale, basta chiedere a Henry Ott .

Quindi, in conclusione, temo che l'ADC sul tuo chip sia davvero così terribile. Esattamente come ogni altro ADC MCU. Scusate. O è abbastanza buono - e per molte molte applicazioni (aiutato da qualche fonte di software piuttosto intelligente !) - lo è. È incredibile quello che si può davvero fare anche con le scarse prestazioni analogiche disponibili finché si è intelligenti. Ma l'intelligente può portarti solo così lontano. se vuoi un numero di bit freddo e efficace, devi davvero mordere il proiettile e utilizzare un ADC dedicato insieme a un accurato layout e disaccoppiamento del PCB, oppure esaminare una parte più specializzata (come i pacchetti multi-die).


3
+1 per la citazione del giorno: "Il CMOS è a basso consumo perché ha solo bisogno di energia per cambiare. Ma cambia più difficile di una caduta dei bassi dubstep."
Araho,

Prendo atto che questa parte utilizza uno stile ADC di ridistribuzione delle spese, che presenta i propri problemi specifici: analog.com/it/search.html?q=an-931
Peter Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.