Rumore ADC STM32 2


9

Ho appena testato il mio secondo progetto con STM32F2, ora è STM32F207ZFT6, il comportamento ADC è lo stesso della mia prima applicazione: forte rumore in ADC.

Parte essenziale degli schemi della scheda

Rumore dell'ingresso di corrente senza segnale collegato:

segnale ricevuto con pin mobile

Nota: nei grafici dei segnali sopra, l'asse verticale è in bit ADC, non in volt !; non essere confuso dalla sua legenda "[V]", per questo test abbiamo usato il nostro programma modificato per vedere dati ADC approssimativi.

Lo stesso rumore appare anche quando il pin analogico della CPU è in cortocircuito verso GND, come mostrato qui: segnale di ingresso con pin in corto a terra

A mio avviso, ci sono picchi permanenti su 30 LSB e oltre nel segnale campionato, anche se non dovrebbero superare i 5-10 LSB.

Un altro dettaglio:

  • PCB a 2 lati, sul lato inferiore ci sono altri collegamenti, ma la maggior parte di esso è riversata con segnale GND - comune sia per digitale che analogico, la terra analogica non è separata. Poiché il consumo della scheda è minimo, inferiore a 100 mA, penso che non dovrebbe causare tale rumore.

  • riferimento di tensione VREF 3.3V bufferizzato da opamp, bloccato da 100nF e tantallio 10uF in parallelo, lo stesso con VREF / 2; ciascuno dei pin di alimentazione del processore è bloccato con un cappuccio da 100nF

  • nella nostra vecchia applicazione abbiamo usato lo stesso concetto di design, ma il processore utilizzato era AduC834; ha anche ADC a 12 bit e il rumore del segnale era solo di diversi LSB, non c'erano problemi; la differenza principale era che veniva usato il riferimento di tensione interno di AduC, nessuno esterno

  • abbiamo testato per scollegare il pin di terra analogico del processore dalla GND comune della scheda e per collegarlo con un filo aggiuntivo direttamente alla massa VREF di riferimento di tensione, nessun effetto

  • è un dispositivo di misurazione della rete trifase, ci sono 3 canali di tensione analogici e tre canali di corrente con preamplificatore di guadagno commutabile; l'oscillatore della CPU 25 MHz, il clock interno 120 MHz tramite PLL, il clock ADC è 30 MHz (in conformità con i dispositivi tecnici), abbiamo testato per rallentare il clock interno principale (quindi anche tutti i clock secondari) fino a un quarto, ma senza alcun effetto

  • L'ADC campiona periodicamente il segnale in ingresso con frequenza 128 conversioni per periodo di rete di 50 Hz, ovvero ogni 156 usec; i risultati vengono trasferiti da DMA nella RAM interna; i dati dalla RAM vengono trasferiti tramite RS485 isolato (su un'altra scheda) e visualizzati nel nostro programma. Abbiamo cercato di prolungare i tempi di conversione al massimo, nessun effetto

  • esclusa la CPU, ci sono solo 3 opam, 2 interruttori analogici, termometro I2C e tre interruttori ULN (non utilizzati durante il test), alimentati dallo stabilizzatore lineare LF33, normalmente alimentati da 5 V CC dallo switcher su un'altra scheda, ma durante il test lo switcher era disconnesso e l'LF33 era alimentato da una chiara alimentazione CC da 5 V di laboratorio. Non sono sicuro che l'oscillatore del processore possa oscillare sulla scheda.

  • controllando il segnale con l'oscilloscopio non si ottengono risultati decisivi, il segnale è troppo debole

Qualcuno con questa esperienza di prestazioni ADC della famiglia di processori?

Per quanto riguarda la potenza del segnale: anche se l'ingresso analogico è in cortocircuito, vedo un rumore di 5-10 mV (picco-picco) sull'oscilloscopio - misurato con un cavo coassiale con una lunghezza minima del filo di terra saldato alla scheda. Con la sonda standard, il rumore era circa due volte superiore a causa probabilmente di una messa a terra peggiore (rumore EMC generale?).

Questa è un'immagine della mia tavola: immagine della scheda assemblata

E il fondo del tabellone: immagine del fondo del tabellone

Come ho riportato sopra, anche se il segnale è collegato a terra, il rumore di circa 30 LSB persiste ancora nei dati convertiti ADC.


Dici che il segnale è troppo debole, quanto è debole?
Kortuk,

Ho segnalato il mio problema anche nel forum ST, ci sono tutti i link (inclusa la foto della board) lì: my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/…
Milano,

2
Non vedo nessun punto di bypass abbastanza vicino su quella scheda per farmi stare comodo, e sono tutti abbastanza lontani dalla parte.
Connor Wolf,

2
@Fake Name - Milano non usa in modo improprio il termine, il riferimento a "x LSB" si riferisce a x volte il valore lineare del bit meno significativo. Tuttavia, "x bit di rumore" potrebbero riferirsi a 2 ^ x LSB.
Chris Stratton,

3
@ Chris Stratton - Non sono d'accordo. "x bit of noise" è sinonimo di "x LSBs". Pertanto, dire "x volte il valore LSB" significherebbe x volte il valore lineare del bit meno significativo. Tuttavia, x LSB indica i bit x meno significativi o un intervallo lineare di 2 ^ x.
Connor Wolf,

Risposte:


4

Direi che l'ADC ha un quarto input oltre ai tre citati da Fred: il suo orologio. Almeno per alcuni tipi di ADC, il rumore di jitter o di fase sull'orologio può influire sulle misurazioni ADC.

Dici di avere un oscillatore a 25 MHz ma stai eseguendo l'ADC a 30 MHz, quindi hai qualche PLL coinvolto nella generazione del suo clock. Se ciò non funziona bene, la sua irregolarità potrebbe essere una fonte di rumore di conversione. Puoi provare a cambiare la configurazione del software (anche temporaneamente) per non usare il PLL e scappare da un clock di input o dividerlo da esso?

Credo che alcuni microcontrollori abbiano anche un meccanismo per sospendere la maggior parte dei circuiti digitali durante la lettura di un ADC al fine di ridurre il rumore. Potresti cercare di vedere se qualcosa del genere è possibile.


2

Ci sono molte possibili ragioni per il rumore che stai vedendo. È importante capire che un ADC ha TRE input:

  1. I pin di ingresso (quello progettato per essere l'ingresso del segnale)
  2. Ingresso / i di riferimento (Dout = 2 ^ n * Vin / Vref)
  3. I pin di alimentazione (supply + gnd)

Il rumore su uno di questi potrebbe creare il rumore che stai vedendo, e supponendo che l'ADC stesso non sia difettoso, il rumore deve entrare attraverso uno di quei tre percorsi.

È possibile ottenere prestazioni ADC decenti utilizzando lo stesso terreno per analogico e digitale, ma è necessario disporre con cura il PCB in modo che tutte le correnti del loop digitale siano isolate dai loop analogici.

In questo contesto, un circuito è l'intero percorso corrente che un segnale o una linea di alimentazione (che dovrebbe essere considerata un segnale di "rumore" in questo contesto) assume sul PCB. Quindi per una linea di alimentazione sarebbe da dove l'energia entra nella scheda, lungo la traccia fino a raggiungere il pin di alimentazione, attraverso tutti i transistor nell'IC, fuori dal pin di terra, quindi lungo il percorso di minor resistenza dove il potere entra nel tabellone. Questo è un circuito di alimentazione.

Ma se fai un buon lavoro con il bypass dell'alimentazione, non ci sarà molta corrente AC in quel loop, perché avrai un loop molto più piccolo e più localizzato del lato dell'alimentazione del cappuccio del bypass al pin di alimentazione al pin di terra e di nuovo a terra lato del cappuccio di bypass. Se tutti i materiali di consumo digitali sono strettamente bypassati, il circuito di alimentazione sarà per lo più pulito e tutti i rumori digitali vincolati ai circuiti di protezione da bypass corti.

I loop di segnale (incluso il loop Vref) funzionano allo stesso modo: il segnale entra, si dirige verso l'ADC, esce dall'ADC GND e torna alla massa del segnale (si spera nella stessa posizione da cui è iniziato il segnale). Se quel loop attraversa un loop digitale, è possibile iniettare rumore. Quindi in genere un buon design a segnale misto che utilizza un GND per analogico e digitale manterrà il digitale da un lato e l'analogico da un altro, con GND alla fine della scheda nel punto di divisione. Di solito non è così semplice, devi scendere a compromessi, ma questa è l'idea.

La tua menzione "Poiché il consumo della scheda è minimo, inferiore a 100 mA, penso che non dovrebbe causare tale rumore". Ha più a che fare con quanto bene viene bypassato il sistema. Un sistema da 100 mA con bypass insufficiente produrrà un rumore digitale molto maggiore nel piano di massa rispetto a un sistema da 1000 mA con un bypass corretto.

Spero che sia di aiuto...


1

Il design della scheda in realtà non rispetta le regole generali consigliate.

Lo abbiamo testato nuovamente. Il rumore tipico della scheda standard è in Fig1 all'indirizzo http://imgur.com/a/TU9RQ .

Per confermare che il problema è causato da una messa a terra errata, abbiamo apportato le seguenti modifiche:

  • messa a terra comune rinforzata (scheda modificata su Fig2 e rumore adeguato su Fig 3)
  • separazione della terra analogica da quella digitale e loro reciproca interconnessione sul pin del processore VSSA (Fig 4).

Nessuno di loro ha aiutato. Quindi temo piuttosto che il problema possa ripresentarsi anche dopo la riprogettazione del PCB a 4 strati ...

Per testare l'influenza del PLL, l'abbiamo spento e il core è stato sincronizzato solo da un cristallo esterno da 25 MHz. Il rumore è diminuito (Fig 5), ma sembra che sia stato causato solo da un clock di sistema inferiore (normalmente, il core è sincronizzato dai 120 MHz del PLL), non da PLL arrestato, perché quando siamo tornati al PLL a 25 MHz, il rumore era lo stesso di quello senza il PLL in esecuzione.

L'unico effetto evidente è stato raggiunto misurando il segnale VREF / 2 tramite il singolo pin del processore contemporaneamente a ciascuna coppia di tensione e corrente utilizzando il terzo processore ADC e sottraendolo dai segnali di tensione e corrente - quindi il rumore modulato viene ridotto a circa la metà (a http : //imgur.com/a/EeqUo , grafico rosso superiore = segnale standard, grafico blu inferiore = segnale dopo la sottrazione del rumore misurata). Ma non posso usare il terzo ADC per la misurazione del rumore, ne ho bisogno per un altro compito, quindi questa non è una soluzione per me.


1
Questa non è una risposta e quindi non avrebbe dovuto essere pubblicata come tale. Detto questo, l'ingresso del clock PLL sull'ADC a 1: 1 dell'oscillatore di input è probabilmente molto più pulito rispetto a un suo rapporto dispari. Se sospetti un rumore di modo comune, devi guardare le cose che tutti i canali hanno in comune ...
Chris Stratton,

Normalmente, osc 25 MHz esterno è diviso internamente a 1 MHz e questa frequenza viene utilizzata per controllare PLL; il suo clock di sistema a 120 MHz è diviso per 4 per ottenere un clock ADC a 30 MHz. Durante il test, l'orologio di sistema era di 25 MHz (sia diretto da ext osc che usando PLL) e l'ADC era guidato direttamente da esso (preimpostato impostato su 1), cioè funzionava allo stesso 25 MHz. Per quanto riguarda la tua seconda idea, intendi probabilmente cambiare il core in modalità sleep durante la conversione ADC; Gli ADC sono gestiti da DMA che non possono essere semplicemente disattivati. Ma, sebbene non utilizzabile nella nostra applicazione, sono d'accordo che sarebbe interessante provarlo.
Milano,

Precisando il mio commento precedente: ho dimenticato che c'è un divisore sull'output PLL; quindi, infatti, normalmente il PLL funziona a 240 MHz e diviso per due per ottenere il clock di sistema; durante il test, il PLL funziona a 200 MHz e diviso per otto per ottenere un clock di sistema di 25 MHz.
Milano,

@ChrisStratton sembra dettagliare come ha risolto il problema, non sembra una risposta?
Kortuk,

2
@Kortuk "Nessuno di loro ha aiutato. Quindi temo piuttosto che il problema possa ripresentarsi anche dopo la riprogettazione del PCB a 4 strati ..." Per me, penso che questa risposta debba essere aggiunta come modifica alla domanda originale. La sua seconda risposta sembra descrivere come ha risolto il problema.
m.,

1

Ho ridisegnato il PCB su 4 livelli. E - che sorpresa - il rumore è spento! Ulteriori dettagli qui .


4
Siete fuori di testa! Un URI di carattere 319 (!), Senza nemmeno un corretto collegamento ipertestuale?
Stevenvh,

1
Il collegamento è interrotto, penso che sia qui ora - community.st.com/thread/19850
ogurets

1
@ogurets Ed è di nuovo rotto. Odio le risposte ai link e i forum dei fornitori. "La pagina che stavi cercando è stata spostata o non esiste."
Navin,

1
@Navin Sento così il tuo dolore ... Googled da "STM32F2 ADC Signal Noise", post data 28 ottobre 2011 (per la prossima volta che lo spostano): community.st.com/s/question/0D50X00009XkaFz/…
Ogurets

@ogurets Grazie! Ero curioso del retroscena.
Navin,
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.