Jump to content
ELFORUM - Forumul electronistilor

Primul meu proiect cu ESP32: Sistem audio Bluetooth


Blacksmith

Recommended Posts

Eu zic sa citest atent datasheet-ul (care e ciudat ce-i drept) 

In datasheet ei dau exemple de clock si toate sunt mutiplu de rata de esantionare audio deci ai nevoie de o frecventa care sa fie de la un quartz pentru audio (vexi tabelul ala) 27Mhz nu e nici un mutiplu de rate de esantionare audio.

Dac-ul ala eu il suspectez de tip delta/sigma de un 1 bit din cauza asta are nevoie de un mutiplu (mare) al Fs. Cel mai simplu un cazurile astea e sa generezi MCLK-ul de la device-ul care trimite datele audio (probabil ESP32 in cazul tau) - nu stiu mainimic despre ESP32 dar ma gandesc ca are un PLL pentru audio (sincer habar n-am speculez cu brio)

RR

Edited by roadrunner
Link to comment
56 minutes ago, Blacksmith said:

Am mai studiat si se pare ca DAC-ul asta nu poate sa-si genereze singur MCLK din celelalte semnale asa ca i-am adaugat oscilator dedicat, 27Mhz.

De ce nu alegi un alt DAC care sa nu aibă nevoie de MCLK extern ?
Oricum nu vei putea face Hi-Fi cu ESP32.
Eu aș testa chiar cu DAC-ul intern al ESP32.
Ce fel de sunete vrei să redai prin BT ?

 

Edited by mihaiaurul
Link to comment

logica cu master clock-ul ala e ca datele audio la originea lor (cand au fost esantionate) au avut un Fs standard (unul din cele standardizate) iar la redare in DAC ar trebui sa respecte acelasi Fs. In timpul trasmisiei prin retele (ca date) esantionele astea nu mai respecta nici o regula audio (devin pachete de date) dar la sosire inainte de DAC ele se aduna intr-un buffer de unde sunt prezentate DAC-ului care le face reface semnalul analog cu Fs-ul original. 

Presupunerea mea e ca MCLK-ul este cel ce face drive la DAC (multiplu de FS ca e dac de 1 bit) si exista ceva fifo inainte de  DAC care preia datele din busul I2S. Nu prea imi dau seama ce face daca bufferul ala face under-run sau devine full (ca nu zic astia in datasheet) - si asta ar fi cazul asincron la care se face referire in datasheet.

Cazul sincron e cand datele I2S sunt generate folosind MCLK ca referinta si busul devine sincron cu DAC-ul in cazul asta.

RR

Edited by roadrunner
Link to comment

Ce va intreb eu si ce raspundeti voi... 🙄

Aia cu MCLK am bagat-o ca sa existe o continuitate in discute, ca voiam sa trec la alt subiect si o lasasem neterminata. Nu mai e nici un mister aici. DAC-ul are nevoie de MCLK. Si nu din ESP32, ca e murdar rau, ci dintr-un oscilator dedicat cu phase jitter mic, pe care l-am ales intentionat sa nu fie multiplu de Fs, ca DAC-ul sa functioneze in mod asincron (scrie in datasheet). Puteam sa ii pun un oscilator multiplu de Fs, dar oamenii pe net spun ca e posibil sa tot sara din modul sincron in asincron (si sa strice sunetul), pentru ca e imposibil ca frecventa aia sa stea atat de fixa...

 

Eu acum voiam sa vedem cum facem cu separarea planului de masa analogic de cel digital...

Link to comment

 

Citat

Puteam sa ii pun un oscilator multiplu de Fs, dar oamenii pe net spun ca e posibil sa tot sara din modul sincron in asincron (si sa strice sunetul), pentru ca e imposibil ca frecventa aia sa stea atat de fixa...

daca folosesti multpilu de Fs-ul original sansele sa faca "skip" sunt mult mai mici, adica se intampla mai rar sa faca "skip" de decat la o frecventa aleatorie fata de Fs. Oricum face in ambele cazuri ca nu vei putea sa fi in lock (frecventa si faza) cu Fs-ul original dar e o diferenta sa faca skip la un esantion in 1 milioane sau tot la fiecare 10 esantioane.

Dac-urile mai destepte  pot sa contracareze efectele astea si nu le auzi cand se intampla rar dar daca se intampla des nu pot face minuni.

jutter-ul de la clock-ul digital nu-ti afecteaza Fs-ul audio care e cateva ordine de marime mai mic, sa faci oscilator extern pentru asta e overkill. (mai ales de o frecventa total aiurea)

atentie cu "oamenii de pe net", unii nu au studiat chestiile astea prin scoli. (oricum tie nu-ti pasa ce zicem noi pe aici, acum cateva zile nu vroiai sa folosesti MCLK, acum vrei sa-l folosesti cu o frecventa aleatorie... laser frate)

RR

 

PS jitter-ul si frecventa diferita sunt doua lucruri separate. jitter-ul la MCLK are contributie foarte mica la calitatea iesirii dac-ului daca e DAC de un 1 bit. (delta/sigma)

 

 

Edited by roadrunner
Link to comment

Modul asincron, cu ceas "aiurea" este din datasheet. Scrie clar: pentru asincron, MCLK poate fi orice frecventa mai mare de 192 x Fs. Apoi, pentru sincron, iti da un tabel cu valori fixe ale frecventei petnru MCLK. Crezi ca isi permite ESS (se ocupa cu audiofilisme) sa recomande in datasheet chestii care fac sa apara intreruperi in semnalul audio generat ?

 

screenshot_13.thumb.png.2afb8381e681ef61f78db563c33ae374.png

Link to comment

Nu stiu daca ati observat, dar ChatGPT are o noua functie de "research complex". Ii dai tema si el cerceteaza amanuntit pentru tine despre acel lucru, nu genereaza doar un raspuns la repezeala ca de obicei. Acum i-am zis sa cerceteze despre ce fel de ceas au mai folosit altii pe net la DAC-ul asta si cu ce rezultate. Deci acum nu mai baga de la el, ci studiaza ce au facut altii. Si concluzia la care a ajuns este asta:

 

"Concluzie fermă: Construind pe experiența practică a pasionaților de audio, varianta asincronă cu oscilator extern s-a dovedit mai fiabilă și mai simplu de configurat. Ceasuri de 48–50 MHz folosite de miniDSP sau alți hobbisti și cristalul de 27 MHz menționat mai sus au funcționat excelentdiyaudio.comdiyaudio.com. S-a ajuns astfel la consens că furnizarea unui MCLK curat, continuu și puternic este cheia unei bune performanțe cu ES9023P. Modul sincron (12.288 MHz) rămâne posibil, dar necesită atenție suplimentară la compatibilitatea ratei de eșantionare și la posibile artefacte de sincronizareesp32.comdiyaudio.com. În general, comunitatea înclină spre asincron cu oscilator extern de calitate pentru cele mai stabile și mai bune rezultate sonore."

 

Si apoi i-am zis sa-mi explice cum functioneaza acest mecanism asincron:

 

Excelentă întrebare — modul asincron al DAC-ului ES9023P pare la prima vedere „magie”, dar în realitate folosește un mecanism intern bine gândit.

 

🎯 Pe scurt:

DAC-ul ES9023P are un ASRC (Asynchronous Sample Rate Converter) intern care face legătura între ceasul MCLK (oscilator extern) și fluxul de date I2S (care vine de la ESP32, posibil cu ceas nesincronizat). Astfel, chiar dacă MCLK nu este un multiplu de Fs (și deci nu este sincron), ES9023P poate totuși să funcționeze fără glitch-uri sau artefacte sonore.

 

🔍 Cum funcționează în detaliu

1. Fluxul de date I2S:

ESP32 trimite date audio prin I2S:

  • BCLK (bit clock): determină rata la care sunt transmise biții (de ex. 64 × Fs),
  • LRCK (word select / Fs): determină rata de eşantionare (ex. 44.1 kHz),
  • DATA: datele efective PCM.

Această transmisie este „masterată” de ESP32 și este complet autonomă față de MCLK-ul DAC-ului.

 

2. MCLK extern (nesincronizat):

MCLK-ul vine de la un oscilator de cristal (XO) cu o frecvență „arbitrară”, de exemplu 27 MHz, care nu este un multiplu de Fs.

 

3. ASRC-ul intern al ES9023P:

DAC-ul conține un convertor asincron de rată de eşantionare. Acesta:

măsoară frecvența efectivă a datelor care vin prin I2S (adică Fs),

compară Fs-ul de intrare cu MCLK-ul intern, care este foarte stabil (venind de la XO),

resamplează datele audio într-un nou flux sincronizat cu MCLK, dar fără să introducă zgomot audibil sau artefacte.

➡️ Asta permite DAC-ului să funcționeze corect chiar dacă ceasurile nu sunt sincronizate. Practic, DAC-ul „citește” datele pe ritmul lui propriu, folosind un buffer și apoi un filtru interpolator de înaltă performanță.

 

4. Avantaje ale modului asincron:

  • Separare completă între sursă și DAC: sursa (ESP32) poate avea jitter, variații de Fs sau instabilitate, dar DAC-ul nu este afectat.
  • MCLK este ultra stabil, pentru că vine de la un oscilator dedicat de calitate (de ex. jitter <1ps).
  • Sunet mai curat: majoritatea utilizatorilor raportează performanțe audio mai bune în modul asincron, tocmai datorită acestui ASRC integrat.

5. Când nu funcționează:

ES9023P poate intra în modul sincron automat dacă detectează că MCLK este un multiplu fix de Fs (ex: 256×Fs). În acel caz, nu se mai face ASRC, iar DAC-ul merge în regim „bit-perfect”, dar depinde de stabilitatea ceasului I2S.

Dacă ai MCLK aproape de un multiplu de Fs, dar nu exact, DAC-ul se poate comuta între modurile sincron și asincron, ceea ce poate produce glitch-uri audio. Asta e motivul pentru care mulți recomandă să alegi un MCLK clar asincron, cum e 27 MHz sau 50 MHz (nu multiplu de 44.1k/48k).

 

✅ Concluzie

ES9023P poate lucra asincron datorită ASRC-ului intern care separă complet domeniul de ceas al I2S-ului (de la ESP32) de domeniul de ceas al DAC-ului (de la MCLK). Acest mecanism oferă o soluție elegantă și stabilă pentru proiecte unde ceasurile nu pot fi sincronizate, cum este cazul A2DP + I2S cu ESP32.

Dacă vrei cea mai stabilă funcționare și calitate audio bună fără bătăi de cap, un oscilator extern la o frecvență asincronă (ex: 27 MHz, 50 MHz) este soluția ideală pentru ES9023P.

Link to comment

Prietene tot ce ai scris mai sus e un BS total din punct de vedere tehnic. Pune mana pe o carte de design digital si sau DSP daca vrei sa intelegi cum functioneaza lucrurile.

Cand ai niste esantioane care vin cu rata Fs (in sensul ca au fost esantionate cu Fs la sursa) si vrei sa le re-esantionezi la alta rata vei avea doua cazuri ai prea multe esantioane sau prea putine la un moment dat in noua rata de esantionare. Indiferent ce zice ChatGPT sau papa de la Roma (asta nou american) -acuma daca tu vrei sa ignori realitatea ce mai pot sa zic eu.

RR

 

Problema cu care te intalanesti tu aici nu e noua - tot ce circula ca date esantionate (sunet/imagine) pe net/radio e asincron fata de rata de esantionare originala si tot ce poti sa faci e pui DAC-ul sa functioneze cat mai aprope de rata initiala de esantionare (cand au fost esantionate la origine) a datelor si din cand in cand sa dublezi un esantion sau sa-l elimini. Crede-ma cu asta ma ocup (zi de zi) cu DSP-uri si circuite digitale.

De ce crezi ca s-au chinuit fabricantii de quartz-uri sa faca frecventele alea ciudate pentru echipamente audio? (de fraieri ca nu aparuse ChatGPT)

Eu ma retrag din discutia asta ca devine ca vorba aia cu "Poti sa duci calul la apa dar nu poti sa-l faci sa bea"

Edited by roadrunner
Link to comment

Tipic Elforum: cand ce stii tu nu corespunde cu ce zic altii, incepi sa jignesti.

 

Ai citit macar ce am scris, sau ma chinui degeaba sa port o conversatie ? Ti-am zis ca majoritatea celor care au folosit DAC-ul asta, au pus pe MCLK oscilator dedicat pe frecventa 27 sau 50 MHz si nu au avut nici un artefact in audio. Eu nu ma pricep de ce e asa si cum functioneaza, dar daca altii l-au testat practic si a mers, ce vrei mai mult ? Tu ai facut vreun DAC cu ES9023P ? Eu cred ca nici macar nu i-ai deschis datasheet-ul. Inteleg ca lucrezi toata ziua cu DSP, dar poate e asta mai diferit de ce stii tu.

 

 

Link to comment

ce te faci daca vin datele pe I2S cu 1Mbit in loc de o frecevnta audio standard cum asculti tu cu MCLK de 27MHz la DAC?

Tu pleci de la premisa ca datele pe I2S vin cu rata audio corecta din ESP32 (esti sigur?)

ESP-ul sufera exact de accesi problema descrisa mai sus, el nu are decat o informatie ca rata de esantionare e X (ca e in pachetele de date) si face si el ce poate sa trimita esantioane pe I2S cu rata specificata de pachetele de date (si nu poate decat daca are un PLL care are ca referinta un Quartz d-ala ciudat din datasheet-ul de la DAC-ul tau) - are ESP-ul tau asa ceva? (unele STM32 au asa ceva)

 

Citat

Eu cred ca nici macar nu i-ai deschis datasheet-ul.

cum nu i-am deschis datasheet-ul cand ti-am citat din datasheet in mesajul meu inital (am ghicit ce scrie in datasheet?) - ti-am scpus mai sus ca datasheet-ul e ciudat, eu de fapt cred ca e o gramada de minciunica in datasheet-ul ala (marketing) - faptul ca functioneza cu orice MCLK (iau de bun ce zici tu) s-ar explica prin faptul ca MCLK piloteaza asincron modulatorul delta/sigma adica partea de DAC. totusi nu are mare sens in cazul asta sa mai puna tot tabelul ala cu MCLK-uri recomandate (cere sunt clar pentru rate audio) - asta e partea misterioasa, de aceea experienta m-a invatat sa nu iau de bun tot ce scrie in datasheet (sa filtrez marketing-ul) incercand sa inteleg cum functioneaza de fapt (ca nu-i asa mare mister)

 

Citat

Tipic Elforum: cand ce stii tu nu corespunde cu ce zic altii, incepi sa jignesti.

cu ce nu corespunde?  cu chat GPT? cu convingerile unora? 

sunt eu habanist asta-i viata. Ti-am dat un like ca te-ai prins ca-s prost.

Pun un link cu un produs care l-am proiectat pentru SONY (si a luat ceva premii) - placa aia sincronizeaza 4 stream-uri video HD care fiecare stream are 24 de canale audio (embedded in datele video pe blanking) stream-urile astea sunt asincrone si vin si la rate diferite de esantionare. Toate sunt re-sincronizate intr-un stream nou. Eu am proiectat o parte din chipul digital si PCB-ul. 

https://cvp.com/pdf/harris_qs100hd-quad_datasheet.pdf?srsltid=AfmBOopxej9QDR4NvlWrsKYf28oLQ990RzWv4g9nrupuVldbQu7PPjEj

Unii (niste idioti) sunt de parere ca ma pricep la treburile astea, daca vrei sa iei in derizoriu ce-ti spun eu treaba ta.

RR

 

 

Edited by roadrunner
Link to comment

N-am zis ca esti prost, dar nimeni nu stie absolut totul despre absolut orice. Poate esti expert in ce faci tu acolo, dar poate nu ai lucrat cu DAC-ul asta ca sa stii cum functioneaza. 

 

Sa-i ia dracu si pe cei de la ESS cu datasheet-urile lor mistorioase ! Ca n-am vazut de cand sint asa porcarie de datasheet. Nici nu as fi folosit DAC-ul asta daca gaseam altceva la fel de bun si in capsula care se poate lipi.

 

Da, ESP32 trimite datele cu rata de esantionare pe care o setez eu, ca doar n-o trimite de capul lui aiurea...

Link to comment
1 oră în urmă, Blacksmith a spus:

Nici nu as fi folosit DAC-ul asta daca gaseam altceva la fel de bun si in capsula care se poate lipi.

dac-ul ala e foarte simplu (datasheet-ul scris anapoda l-a facut complicat)

 

Citat

ESP32 trimite datele cu rata de esantionare pe care o setez eu, ca doar n-o trimite de capul lui aiurea...

pai trebuie sa trimita cu rata de esantionare specificata in pachetele de date care vin din retea ca altfel va face over-run sau under-run. (asta ma tot cazneam sa-ti explic mai sus) deci daca in pachetul de date zice ca e 44KHz atunci busul de I2S trebuie sa trimita cu 44KHz ca alatfel va ramane fara date din stream (sau va avea prea multe). Problema e ca tu nu vei putea genera Fs-ul corect (ca sa eviti ce am descris mai sus) decat daca ESP-ul poate sa genereze Fs-urile astea de audio corect. (si ca sa poata trebuie musai sa plece de la o frecventa de quartz din aia ciudata de audio).

Sunt sigur ca software-ul de pe ESP o sa mai incerce sa carpeasca pe ici pe colo esantioane dar daca diferenta e mare nu mai poate si o sa ai pauze (de buffering) sau overrun adica discontinuitati. 

Din punct de vedere al ESP32 el creaza un stream de date sincron (I2S) dintr-un stream de date asincron (din retea BLE etc.) - dar pe tine probabil ca nu te intereseaza daca intelegi mecanismul sau nu atat timp cat merge, greseala mea e ca am senzatia ca cei care pun intrebari vor sa intelega cum functioneaza lucrurile astea.

RR  

Edited by roadrunner
Link to comment

Nu mai bine vorbim despre ce am intrebat initial aici ?

https://www.elforum.info/topic/163787-primul-meu-proiect-cu-esp32-sistem-audio-bluetooth/?do=findComment&comment=2270858

 

Caci asta e chiar o problema mare cu care ma confrunt si pe care nu o inteleg: Cum fac corect separare de masa analogica si digitala ?

Presupunem ca AGND de la DAC si AGND de la amplif nu sint conectati intern cu masele digitale sau de putere. Ca altfel n-ar avea sens sa mai scoti pin de AGND afara daca ar fi acelasi cu DGND.

Eu ma gandeam asa: fac o insula de GND in GND-ul general, la care conectez pinii AGND de la ambele integrate, masele circuitelor din iesirea DAC si intrarea in amplif. Iar aceasta insula o leg intr-un punct la masa mare, exact in mijlocul PCB-ului unde vin firele de alimentare.

Dar ce sa vezi ! In datasheet-ul amplifului spune: "Analog ground and power ground should be connected at the thermal pad, which should be used as a central ground connection or star ground for the TPA3136". Deci ei vor sa conectez AGND direct la padul termic de sub el. Asta inseamna ca nu mai pot sa-l conectez unde voiam eu (ca se fac 2 puncte). Si daca las conectat decat la pad-ul termic, mi se pare aiurea ca AGND-ul DAC-ului sa isi ia masa tocmai de la power pad-ul amplifului (e prea lung). Eu nu inteleg, acest power pad nu este parte din GND-ul de putere (ca doar d-aia ii zice "power") ? Sa le ia dracu de mase, ca nu le-am inteles niciodata, si am 44 de ani... 😩 

Edited by Blacksmith
Link to comment

V-am facut o schema sa intelegeti mai bine despre ce vorbesc...

Punctul rosu e locul unde conectez masa de alimentare. Cu galben e zona analogica. Iar cu albastru sint curentii din planul de masa de la toate modulele, care se intorc la punctul de alimentare. Am pus punctul de masa aproape in mijloc ca fiecare modul sa il poata accesa cat de cat direct...

Ar fi de ajuns sa las asa cum e acum, cu un singur plan de masa compact ? Pentru ca alternativa ma depaseste complet... Daca ma ajutati voi sa inteleg cum se face separarea corecta (ca sa nu-l stric mai rau), atunci eu ma bag sa o fac. Dar altfel... nu am decat sa o las asa... 🙄

 

groundplane.thumb.jpg.ae37a5c88f50146e955612aa432dcc60.jpg

Link to comment

Uite, ma gandeam sa fac asa...

Sa tai un pic planul de masa (linia neagra) ca sa indepartez curentii digitali din zona analogica...

Si sa las GND-ul din interiorul decupajului analogic sa se conecteze doar in partea de jos la punctul de alimentare...

Ce s-ar putea intampla rau in cazul asta, ca eu chiar nu vad nici o problema ?

 

groundplane2.thumb.jpg.c2f021189b534b2bc81e4e2748ec40fc.jpg

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines