Vai al contenuto
PLC Forum


Esp32 con microfono e amplificatore... Funziona male finchè non lo tocco con la mano


Alomor

Messaggi consigliati

Ciao a tutti, cerco un aiuto su un problema su cui sto sbattendo la testa da una settimana.

Ho una scheda esp32 s3 devkit c a cui ho collegato un microfono inmp441, un amplificatore max98357a (con relativo speaker) e un buzzer piezoelettrico.

La mia intenzione è di usarlo come assistente vocale per Home Assistant, tramite Esphome: https://esphome.io/components/voice_assistant.html
L'assistente si attiva quando pronuncio una specifica parola (wakeword), emette un segnale acustico con il buzzer per farmi capire che ha rilevato la parola, e comincia ad ascoltare quello che gli chiedo.
Funzionare funziona, solo che è inaffidabile, nel senso che spesso non riesce a rilevare la wakeword. Ascoltando le registrazioni del microfono ho sentito che c'è un rumore di fondo abbastanza forte, tipo "statico", quasi come se ci fosse un loop di massa. 

Inzialmente pensavo fosse dovuto a interferenze elettromagnetiche, quindi per collegare i componenti all'esp, invece di usare dei cavetti, mi sono fatto produrre un PCB a cui ho saldato direttamente i componenti, sperando che le tracce di rame avrebbero raccolto meno interferenze rispetto ai cavi. Uno dei lati del PCB è interamente coperto da uno strato di rame che funge piano di massa per tutti i componenti. Il tutto è alimentato da una singola presa usb, e ho anche messo dei condensatori sulle tracce di alimentazione di ogni componente.
Purtroppo anche con il PCB il funzionamento, sebbene sia un po' migliorato, non è ottimale e fa fatica a riconoscere la wakeword.

Una cosa strana che ho notato è che se avvicino la mano al PCB senza toccarlo le interferenze aumentano di molto, mentre se invece con la mano tocco qualsiasi parte metallica (per esempio il case metallico di un chip, oppure anche la parte metallica della presa usb) magicamente tutto funziona perfettamente, non c'è più nessun rumore di fondo e le interferenze spariscono.

Siccome di elettronica e di interferenze elettromagnetiche capisco poco, secondo voi da cosa dipende questo problema e cosa potrei fare per risolverlo?

Grazie mille

Link al commento
Condividi su altri siti


28 minuti fa, Alomor ha scritto:

Siccome di elettronica e di interferenze elettromagnetiche capisco poco, secondo voi da cosa dipende questo problema e cosa potrei fare per risolverlo?

Mettendo il PCB che hai realizzato in una scatoletta metallica collegata a massa (parte metallica della USB)

con un foro in corrispondenza del microfono.

Modificato: da NovellinoXX
Link al commento
Condividi su altri siti

1 ora fa, Alomor ha scritto:

magicamente tutto funziona perfettamente, non c'è più nessun rumore di fondo e le interferenze spariscono.

 

Molto probabilmente il tuo apparato necessita di schermatura e messa a terra.

Altra cosa da verificare è l'alimentazione.

Dovresti pubblicare lo schema elettrico, completo di alimentazione.

Link al commento
Condividi su altri siti

4 ore fa, Livio Orsini ha scritto:

 

Molto probabilmente il tuo apparato necessita di schermatura e messa a terra.

Altra cosa da verificare è l'alimentazione.

Dovresti pubblicare lo schema elettrico, completo di alimentazione.

Evito di postare lo schema elettrico che ho fatto su Kicad perchè essendo il mio primo progetto in assoluto, è tutto incasinato e non si capirebbe. I collegamenti di base sono questi: 
image.thumb.png.d9ffc88d87a666d8c6e93f835125bbd0.png

 

Io ho solamente aggiunto un condensatore da 1 microfarad all'ingresso dell'alimentazione dei 3 componenti. Poi c'è il buzzer che ha una gamba collegata a un pin dell'esp e una gamba a massa. E poi ci sono i pad per massa e +5V che sono collegati alla presa usb. Comunque il piano di massa è lo stesso per tutti i componenti. 

 

Proverò a creare una schermatura temporanea con la carta stagnola, vediamo se magari migliora. Io ho la sensazione che le interferenze provengano non dall'esterno ma dal circuito stesso, eppure online è pieno di persone che hanno usato i miei stessi collegamenti con i cavi dupont (come avevo fatto all'inizio).

Link al commento
Condividi su altri siti

6 ore fa, Livio Orsini ha scritto:

Quindi lo alimenti da USB collegata a PC. E così?

Sì, oppure da un comune caricabatterie da cellulare. Praticamente la usb crea una linea +5V che va all'amplificatore e all'esp, l'esp a sua volta crea una linea +3.3V che va al microfono (in quanto questo non può lavorare a 5V).Ho verificato che l'assorbimento anche con l'altoparlante al massimo è di 0,3A quindi da quel punto di vista sono a posto

Modificato: da Alomor
Link al commento
Condividi su altri siti

Probabilmente è questo tipo di alimentazione a creare problemi di rumore.

Specialmente se l'alimentatore non ha capacità sufficiente per la fornitura di corrente.

Anche per il 3.3V al microfono io userei un lineare esterno.

Link al commento
Condividi su altri siti

1 ora fa, Livio Orsini ha scritto:

Probabilmente è questo tipo di alimentazione a creare problemi di rumore.

Specialmente se l'alimentatore non ha capacità sufficiente per la fornitura di corrente.

Anche per il 3.3V al microfono io userei un lineare esterno.

No no, dal punto di vista dell'assorbimento non ci sono problemi, nell'utilizzo normale assorbe 0,2A, i caricabatterie che ho casa sono da 3A.

Comunque, l'esp a bordo già di suo ha un regolatore lineare 3.3v che se non sbaglio è un AMS1117. Dici che sarebbe meglio utilizzarne uno esterno per alimentare il microfono? Magari tenendolo lontano dalle altre tracce?

Link al commento
Condividi su altri siti

13 ore fa, Alomor ha scritto:

Dici che sarebbe meglio utilizzarne uno esterno per alimentare il microfono?

 

Prima di tutto, per applicazioni che coinvolgono dispositivi analogici per segnali deboli, non userei comunque alimentatori di tipo USB; spesso non sono molto filtrati ed hanno emissioni piuttossto "abbondanti". Personalmente preferisco usare un alimentatore dedicato per la parte analogica, filtrando esternamente ulteriormente la tensione.

 

Usare il 3,3V generati dalla scheda ESP32, può essere una soluzione valida per dispositivi che non debbano elaborare segnali analogici deboli, soprattutto per il microfono.

Link al commento
Condividi su altri siti

Per me il punto interessante è che:

 

On 9/21/2024 at 2:02 PM, Alomor said:

se invece con la mano tocco qualsiasi parte metallica (per esempio il case metallico di un chip, oppure anche la parte metallica della presa usb) magicamente tutto funziona perfettamente, non c'è più nessun rumore di fondo e le interferenze spariscono

 

Che significa che i valori di alimentazione (tensioni e correnti) vanno bene, ma che probabilmente c'è un forte accoppiamento capacitivo a livello di alimentatore. Facile da verificare alimentando il tutto a batteria. Se fosse così, il collegamento a terra risolverebbe il problema (sempre che non si creino altri loop di terra).

 

Link al commento
Condividi su altri siti

1 ora fa, Claudio F ha scritto:

Che significa che i valori di alimentazione (tensioni e correnti) vanno bene

 

Il problema dell'alimentatore non è la stabilità in tensione o la capacità di erogazione di corrente, ma la rumorosità.

Bisogna sempre ricordare che le schede basate su ESP32/8266, similmente a quelle di arduino, hanno un'immunità ai disturbi irradiati e condotti, praticamente nulla. in questo caso è probabile che si tratti di disturbi irradiati. Il tocco della mano è suffciente per abbatterli.

Quindi il rpimo rimedio è ridurre o eliminare i disturbi alla fonte poi, se non basta, si procede alle schermature e messe a terra.

Link al commento
Condividi su altri siti

Il 23/09/2024 alle 10:07 , Livio Orsini ha scritto:

 

Il problema dell'alimentatore non è la stabilità in tensione o la capacità di erogazione di corrente, ma la rumorosità.

Bisogna sempre ricordare che le schede basate su ESP32/8266, similmente a quelle di arduino, hanno un'immunità ai disturbi irradiati e condotti, praticamente nulla. in questo caso è probabile che si tratti di disturbi irradiati. Il tocco della mano è suffciente per abbatterli.

Quindi il rpimo rimedio è ridurre o eliminare i disturbi alla fonte poi, se non basta, si procede alle schermature e messe a terra.

Ho creato una gabbia metallica per isolare il pcb, connessa al piano di massa, ma non ho ottenuto nessun risultato. A questo punto credo che il rumore provenga effettivamente dall'alimentatore. L'unica soluzione sembra prendere un alimentatore lineare, ma costano un bel po'. Nel frattempo ho aggiunto un induttore in serie al positivo, non so se è un effetto placebo ma mi sembra che un po' sia migliorato

 

 

Modificato: da Alomor
Link al commento
Condividi su altri siti

2 ore fa, Alomor ha scritto:

connessa al piano di massa, ma non ho ottenuto nessun risultato

 

Ma hai collegato il tutto ad un efficiente linea di terra? Se non metti a terra gli schermi la gabbia di farady ha poco effetto .

Poi non bisogna dimenticare che la via non è solo il pcb, ma che i collegamenti tra le schede hanno funzione antenna; dovresti racchiudere tutto tranne l'alimentatore e mettere dei fitlri, all'interno della gabbia, sulla linea che porta il 5V.

 

Solo un induttore fa poco, devi fare almeno un L-C, meglio un pi greco

Invece di usare un alimentatore da USB, meglio un alimentatore da 8v seguito daun Lm7805 e, magari, un lm7803 per l'alimentazione a 3,3V

Link al commento
Condividi su altri siti

  • 3 weeks later...

Ho fatto progressi... Ho ordinato un nuovo pcb in cui c'è all'ingresso dell'alimentazione un filtro pi greco. Poi ho due regolatori lineari xc6203 che alimentano uno l'amplificatore e uno l'esp32 (tramite il pin 3.3V). Sulla linea del microfono c'è un ulteriore condensatore e una perlina di ferrite. 

L'amplificatore viene alimentato direttamente dalla linea 5v, oltre al pi greco anche qui c'è un altro condensatore e una perlina di ferrite.

Poi c'è il buzzer che ha una gamba a massa e una su un pin dell'esp.

Inoltre sul nuovo pcb ho usato dei pin i2s separati per il microfono e per l'amplificatore e ho aggiunto il piano di massa anche sull'altro lato.

 

Devo dire che con questa nuova pcb il rumore si è ridotto di molto, ma non è completamente scomparso e devo ancora usare la riduzione del rumore via software. Ho notato che il rumore statico viene emesso debolmente dal buzzer (se avvicino molto l'orecchio si sente ed è un rumore identico a quello che sento nelle registrazioni), e diminuisce se inserisco nella configurazione il pulldown interno del pin quando il buzzer non è attivo. In questo modo, quando il buzzer non è attivo, fra questo pin e la massa misuro 11 ohm con il multimetro, segno che comunque una minima tensione tra le gambe del buzzer c'è. Nella mia ignoranza, facendo queste prove, mi è venuto in mente che forse il buzzer non sta riproducendo il rumore che gli arriva dall'esp, ma che sia esso stesso a generarlo e "immetterlo" nel circuito visto che un minimo è sempre alimentato. Però non so se questo è possibile...

Link al commento
Condividi su altri siti

11 minuti fa, Alomor ha scritto:

quando il buzzer non è attivo, fra questo pin e la massa misuro 11 ohm con il multimetro, segno che comunque una minima tensione tra le gambe del buzzer c'è.

???

Scusa ma non ti bastava misurare la tensione anziché la resistenza?

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...