ADC di microcontrollore rumoroso per audio

Feb 04, 2025 Last reply: 1 anno fa 19 Replies

Ciao



in un paio di serate ho abbozzato un effetto per chitarra basato su microcontrollore ,adattando scheda che avevo fatto per tutt'altro uso.



Sto usando un STM32F410 ,un microcontrollore a 32 bit non proprio ideale per l'uso ,ma abbastanza potente :ARM CORTEX M4 ,100MHZ ,ADC e DAC a 12 bit ,32K di RAM,Floating Point unit,e anche senza scomodarla moltiplicazioni e divisioni sono fatte in hardware ,insomma niente a che vedere con Arduino Uno.



Già l'effetto funziona e suona goduriosamente ,con 12 bit non sarà lo stato dell'arte ,ma è rumoroso. L'ADC ,pilotato da un OP AMP abbastanza generico(MCP6002) introduce un bel rumore-fruscio di patatine fritte,anche se il circuito con OPAMP guadagna 1 e lo lascio inchiodato a VDD/2 =1,65V. Il rumore cala ,e di molto se aumento il tempo di campionamento (Sample and Hold ) ,da 1 ciclo a 32 cicli. Mi viene da pensare che tra un campionamento e l'altro(uso 1 solo canale ADC) la capacità interna di Sample and hold venga disconnessa e scarichi un pò da qualche parte,ma è un'idea buttata lì. Chiedo una spiegazione e qualche idea per migliorar eulteriormente Grazie


Il 04/02/2025 07:48, blisca ha scritto:

formatting link
Vedo che qui ne parlano ampiamente ,ma sono interessato a esperienze dirette Es. "lo faceva anche a me e il miglioramento grosso è stato separare massa digitale e analogica"

Il 04/02/2025 07:59, blisca ha scritto:

Non è strano che aumentando il tempo di campionamento si possa aumentare l'accuratezza dell'ADC. In base alla resistenza d'uscita della sorgente, alla capacità (anche parassita) della sorgente, alla risoluzione scelta dell'ADC, all'errore desiderato, esiste un tempo minimo di questo tempo di campionamento (che chiaramente ti limita anche la frequenza di campionamento globale).

Hai letto il paragrafo 4.2.6 del documento da te linkato?

Un bel giorno blisca digitò:

Non trascurare il rumore intrinseco dell'opamp. Non ho guardato il datasheet, ma se usi guadagni alti e magari non lo filtri nella banda audio, anche il suo contributo potrebbe non essere trascurabile.

Carino!

Io sono della corrente di pensiero che separare le masse il più delle volte sia sbagliato, ma mi rendo conto che esistono due fazioni su questo argomento. A mio parere esistono (rari) casi dove può essere utile o necessario, ma specialmente nel caso di un ADC interno di una CPU il più delle volte è controproducente.

Ovviamente questo non vuol dire che non sia necessario separare fisicamente le sezioni analogiche da quelle digitali, e di fare attenzione a dove fai passare le piste assicurandoti di non incrociare segnali analogici con segnali digitali. Questo è sicuramente fondamentale.

Il 04/02/2025 12:51, pozz ha scritto:

Si,ma non mi torna,rifarò i calcoli ma mi sono necessari più cicli di clock per sampling di quanto ho calcolato ,sperando di non aver fatto errori. Facendo riferimento alla tabella 4 con 8,5 cicli di clock dovrei avere un errore di pochi LSB, invece vedo ballare anche di + 50 bit Inoltre mi e ti chiedo ,se uso solo un canale il condensatore si S/H dovrebbe caricarsi con la tensione analogica presente a quel pin ,poi staccarsi per il campionamento e essere collegato solo all'ADC. Magari qualcosa perderà ma non è come se saltasse da un canale all'altro, per cui la situzione dovrebbe essere ancora più favorevole,no?

Il 04/02/2025 14:28, dalai lamah ha scritto:

Ciao, credo di averlo escluso,l'opamp guadagna normalmente 10,con una RIN da

100K che quindi ci mette il suo bel rumore termico,e R2 da 1Mohm || 220pF(mi pare di ricordare) ma anche facendo guadagnare l'opamp 1 o mettendo R2=1uF il rumore c'è comunque ,la VDD/2 è ben filtrata anche aggiungendo CSMD tra i pin +IN e la massa vicina non si misura miglioramento

Nel circuito da cui sono partito ,che avevo disegnato io c'era una massa ovunque con tutti i vias possibili per collegare sopra e sotto in modo che fossero tutti percorsi larghi,che non vi fossero correnti di ritorno cotrette a passare in percorsi stretti. Visto che farò un prototipo credo che separerò le masse come indica fig.

35,ma con la possibilità di riunirle con molti jumper PCB SMD a saldare

Un bel giorno blisca digitò:

Percorsi larghi o stretti importa poco, l'importante è ridurre il "loop" fra ogni traccia e la sua corrente di ritorno. Questo è il motivo per cui avere masse splittate è pericoloso.

Guarda qui:

formatting link

Se proprio vuoi passare al lato oscuro della forza, assicurati almeno che le piste che vanno da un piano all'altro passino sotto a questi jumper, altrimenti farai solo del danno.

Il 04/02/2025 16:43, dalai lamah ha scritto:

se non ho capito male anche in questo caso dei Jumper mi vuoi ricordare che il percorso delle correnti deve essere una spira di area più stretta possibile

Il 04/02/2025 16:07, blisca ha scritto:

Ma quella tabella è ricavata in una determinata condizione. Leggi questo:

Table 3 to Table 7 show examples of results for STM32H7 series obtained with RAIN = 1 kΩ, CAIN/CPCB = 2 nF, VREF+ = 2 V and FADC = 20 MHz.

Non è un mero calcolo matematico, dipende fortemente dal tuo circuito e dalle frequenze in gioco (a proposito, quali sono?)

Non so se ho compreso. Se stai campionando una sinusoide alla frequenza di campionamento di Nyquist, il tuo segnale può passare, tra un campione e l'altro, dal valore massimo a zero e poi al valore minimo. Anche rimanendo sullo stesso canale ADC.

A proposito, hai un filtro passa basso nel circuito sorgente che ti limita le frequenze alle sole che ti servono?

Il 04/02/2025 07:48, blisca ha scritto:

E' un delay per caso ?

Il 05/02/2025 08:36, pozz ha scritto:

L'impedenza di ingresso è certamente minore,c'è l'uscita di un opamp retroazionato collegata direttamente al pin quindi fino a quando siamo nelle possibilità di range tensione,slew rate e frequenze gestibili dall'operazionale, sono frazioni di ohm Le frequenze in gioco che mi interessano (che mi interesseranno)sono fino a 6-7 KHz

Vero,ammetto che non ci avevo pensato però in questo caso il rumore me lo fa anche con la sola DC dell'op amp nnon pilotato e con guadagno a 1

Il "filtro" è solo un opamp con condensatore sulla retroazione,quindi Roll off di 3dB,fino a quando non interviene il prodotto GBW dell'opamp ,comunque coi valori attuali ft=720 Hz,quindi mi mangio un pò di banda della chitarra ma a orecchio mi piace Non credo che ci sia aliasing,perchè il suono che esce è quello che entra,non sento il minimo artefatto strano

>

Il 05/02/2025 12:25, nando ha scritto:

si....volevo addirittura arrivare al reverbero...ma per ora fa un bel delay lo sto usando a rate di delay multiplo T + 1/2 T + 1/4T ecc

Il 05/02/2025 12:43, blisca ha scritto:

A che frequenza clocchi l'ADC? Può essere lì il problema?

In che senso non pilotato? Hai messo l'ingresso positivo dell'opamp a GND? A proposito, è un ingresso differenziale? Immagino di no. E immagino il range sia tutto positivo (0-Vref). Hai provato a mettere l'uscita dell'opamp fissa a Vref/2? Osservi sempre rumore?

Se il problema ce l'hai anche in continua, penso che il filtro non c'entri nulla.

Il 05/02/2025 16:32, pozz ha scritto:

Ciao,16KHz se non ricordo male

Si a volte mi spiego male.Ingresso a Vref/2 e grande condensatore sulla retroazione.Se quardo all'oscilloscopio o mando a un amplificatore audio il segnale che va all'ADc è silenzioso ,se lo prendo dall'ampli che amplifica il DAC è rumoroso.Se in debug fermo il programma del uC ho silenzio

Il 05/02/2025 17:35, blisca ha scritto:

Sicuro? Non penso sia possibile. Non sto parlando della frequenza di campionamento (numero di campioni al secondo), ma della frequenza interna di clock dell'ADC.

Però qui hai messo un'altra sezione nella catena, il DAC e l'ampli del DAC che a loro volta potrebbero avere un problema (hardware o software).

Non riesci a sputare su una seriale i valori letti dall'ADC così da essere sicuro che siano rumorosi proprio quelli? Oppure metterli in un grande buffer in RAM e poi leggerli con un debugger?

Il 06/02/2025 08:46, pozz ha scritto:

Scusa ,ho proprio frainteso ,tu sei stato chiarissimo..

25MHz con conversione eseguita in 15 cicli se non ricordo male

Il 06/02/2025 21:37, blisca ha scritto:

Sei riusciuto a risolvere in qualche modo?

Non radicalmente con questo PCB,però ho migliorato di un po' Aumento del numero di cicli di clock durante il sample, Aumento del tempo in modo wait per diminuire i consumi. Poi ho sovracampionato X4 ealla fine delle 4 volte faccio la più banale media ,nemmeno media mobile,pesata o non pesata,ma proprio media . Al momento sono soddisfattissimo anche se con un nuovo PCB,dove ci sarà meno roba alimentata che non uso,dovrei migliorare ancora di un pochino Grazie

Il 20/02/2025 12:03, blisca ha scritto:

Questa cosa alcuni micro la fanno a livello hw (vedi i SAMD20). Magari anche il tuo ST32 può fare qualcosa del genere.

Il 20/02/2025 15:41, pozz ha scritto:

No,quello che sto usando in particolare non ha questa opzione

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required