Articole > Echipamente si constructii radio Litere mici Litere medii Litere mari     Comentati acest articol    Tipariti

Generator disciplinat GNSS cu ESP32

Adrian Florescu YO3HJV

Hai sa va prezint si eu un proiect ca sa ma laud dar si pentru ca e posibil ca si altora sa le fie util.

De ce?

Acesta este "fundul putului" (de la "din lac in put") pentru ca am pornit initial de la un controller pentru repetoare, caruia am dorit sa ii adaug detectia si generarea de CTCSS/DCS/DTMF; dupa ce am facut detectorul (bazat pe DSP pe platforma dual-core de la ESP32) am constatat ca nu am niciun mijloc la indemana sa verific acuratetea detectiei.

Standardul industriei cere precizie de sub 1% (0,5% tipic) astfel ca aveam nevoie de instrumentul de laborator cu care sa validez rezultatele decodorului.

Asa ca, dupa o sesiune de brain-storming cu mine insumi, solutia a iesit singura din fum si bere, anume un oscilator disciplinat cu GPS. Acum 20 de ani era dificil de realizat, necesitand mult, mult prea mult efort pe partea de hardware si la un cost prohibitiv.

Hei, dar acum avem placi de dezvoltare foarte capabile, pe masa avand chiar placa pe care dezvoltam repetorul. Aceeasi pe care dezvoltam si decodorul...

Pai, mi-am zis eu, de ce nu si un generator disciplinat cu semnal PPS GNSS?

Generarea semnalului, sinusoidal (ma rog, aproximativ), urma sa pice in sarcina unuia din cele doua DAC-uri disponibile pe platforma ESP32.

M-am consultat cu ChatGPT pentru a verifica daca performantele ESP32 permit implementarea unui astfel de generator si daca este posibila utilizarea unei interfete WEB pentru control (GUI) ca sa scap de accesoriile HW de tip encodere, butoane, afisaj samd...

“Dezbaterile” au fost interesante si m-au ajutat sa cristalizez directia de dezvoltare a proiectului. Chiar e bine sa ai “meciuri” cu artificiala asta, te poate ajuta sa iti pui ordine in ganduri cand o iei pe aratura!

La lucru!

Am mutat insa dificultatile dinspre hardware spre software. Pentru ca, in dezvoltare m-am lovit de un fenomen similar cu cel al dualitatii unda-particula, anume, "observarea" oscilatorului software din ESP32 introducea erori complet aleatorii si imposibil de compensat.

Pentru cei preocupati de latura aceasta, solutia a fost una aparent simpla dar care mi-a cam stors energia vreo doua zile (de vara, pana-n seara).

In loc de o masurare bazata pe diferente de timpi, timerele au fost bazate pe numararea de cicluri si acesteau fost folosite ca referinte.

Inchid paranteza prea tehnica. La fel, nu intru in detalii plictisitoare despre disciplinarea DDS-ului software pe baza impulsului primit de la receptorul GPS dar cateva aspecte tot o sa le prezint, ca deh, ma laud si eu cu ele!

Majoritatea receptoarelor furnizeaza un semnal de tip impuls cu durata de cca 100 msec, la fiecare secunda, cu precizia impusa de semnalul GNSS care, la randul sau, este furnizat de surse de ceas atomice.

Algoritmul de “disciplinare” functioneaza cam asa: timerul care sta la baza generarii de semnale furnizeaza cate un impuls la fiecare ciclu; la fiecare puls primit de la receptorul GNSS, valoarea calculata teoretic este comparata cu valoarea practica. Din diferenta este calculat un factor de corectie care este apoi aplicat.

Pare simplu dar in acest algoritm exista o serie de functii autoadaptive care asigura ca schimbarile sa fie progresive, aplicate la treceri prin zero si alte astfel de trucuri interesante, descoperite prin lovituri repetate de cate un zid in realizarea proiectului...

Cuiul din talpa

Un numar zdravan de ore am consumat intr-o serie de probleme a caror cauza nu reuseam sa o identific si care au tinut procesul pe loc.

Paradoxul: compilarea se derula fara nicio problema insa functionaltatea codului era inexistenta in anumite procese absolut necesare!

O INTrerupere refuza sa se declanseze... Uite-asa, incapatanata ca Domnul Goe! Doua zile am stat sa incerc sa inteleg ce se intampla si chiar ma gandeam ca ma apropii de cea de-a treia (in care daca problema nu se rezolva singura, proiectele trebuie abandonate)!

Ba chiar imi puneam problema daca e cazul sa ma apuc sa invat Assembly...

Pana la urma, dupa un proces intensiv de debugging hardware, concluzia a fost ca problema e intr-o librarie si o “discutie” pe aceasta tema cu ChatGPT a scos la lumina fix asta! Problema era intr-o librarie esentiala, “actualizata” chiar dar care, in acest proces de “imbunatatire” a pierdut functii utile si absolut necesare pentru proiectul meu...

Dupa revenirea la o versiune “invechita”, am depasit primul mare hop.

Verificarea

Nu a fost chiar asa simplu pe cat pare dar la un moment dat, semnalele au inceput sa fie vizibile pe osciloscop si o alta intrebare a iesit din ceata si bere: Cum naiba verific, obiectiv, ce iese pe DAC-uri?

Solutia, iarasi eleganta (zic eu), compararea unei referinte derivate (brutal de dreptunghiulare) din semnalul GPS dar cu frecventa inalta (5KHz) cu semnalele generate de DAC si cu semnalul din GPS cu ajutorul osciloscopului multicanal.

Iar rezultatul... mmmm, rezultatul a fost exceptional si incurajator, abaterile fiind dincolo de limita de observare, in limitele zgomotului semnalului! Caldura m-a tinut departe de drumul pana la laboratorul unde am si echipamente mai sofisticate dar, pentru ceva facut “pe masa”, sunt mai mult decat multumit.

Semnal DCS:

Semnal SINUS:

Interfata Web

Ochiul trebuie si el multumit cumva iar aici am implicat masiv Inteligenta Artificiala pentru ca, pe de-o parte nu stapanesc domeniul si, pe de alta parte, complexitatea interfetei grafice (GUI) si a Front-endului (partea de cod executata in browser, ce comunica cu Back-endul – programul propriu zis din ESP32) necesita interventii coordonate in multe parti de cod. Fix la ce e buna IA! Doar ca uneori are halucinatii!

Pe bune, IA, am descoperit si eu, halucineaza, motiv pentru care a facut praf deseori ceea ce, cu truda, construisem. Prilej pentru ea sa invete niste injuraturi neaose, romanesti, din alea de le zicea Pacala de-I sareau ochii din cap Dracului!

Pana la urma, din confruntare am iesit nitel mai cunoscator in aceste aspecte si macar pot sa ii dau LLM-ului (Large Language Model – IA adica) instructiuni foarte precise, care il tin treaz si in urma carora pot obtine ce doresc!

Am incercat sa fac interfata cat mai simplu de utilizat, ca un aparat de laborator – ceea ce, de fapt, si este acest proiect – dar si facil de utilizat de cine doreste sa isi transforme un ESP32 in sursa de semnal CTCSS/DCS/DTMF pentru diverse proiecte.

Utilizarea este intuitiva si este posibil sa mai fie unele bug-uri; “ochiul stapanului ingrasa vita” asa ca imi e greu tot mie sa le descopar, ramane ca utilizatorii sa strige ce nu e OK pe ici pe colo.

In principiu, interfata cu utilizatorul reflecta arhitectura interna:

Este impartita in sectiuni logic organizate ce ofera control si feedback... ce sa va povestesc eu mai mult?

Are si o interfata pentru incarcarea fisierelor necesare pentru interfata grafica, cine doreste isi poate face propria interfata!

Habar nu aveti cat m-am chinuit sa fac sa mearga incarcarea batch a fisierelor! A fost crima sa le tot incarc unul cate unul!

Cateva cuvinte despre performante:

-Acuratete in generarea de semnal CTCSS si DCS, mai buna de 1% (as zice mai buna ca 0.5%) dar nu vreau sa ma falesc prea tare! I-am atasat si un generator de ton cu frecventa intre 40 Hz si 1.2 KHz insa peste 900 Hz semnalul incepe sa se degradeze datorita limitarilor convertorului digital-analog.

-Nivel de semnal DAC1 si DAC 2:
• max 2.35 Vpp.
• med: 1.6 Vpp.
• min: 850 mVpp.

-Iesiri de semnal logic 0-3V pentru diverse semnale, disciplinate si ele cu GNSS.

Integrarea in laborator

Pentru ca proiectul sa devina un echipament de laborator, este utila conectarea unui modul GNSS care sa aiba vizibilitate spre cer. Codul nu foloseste nicio alta informatie transmisa de acest modul ci doar PPS, astfel ca un conector cu 3 fire poate sa isi faca bine mersi treaba.

Chiar si in absenta receptorului GNSS, precizia este una destul de mare, demonstrata de observarea factorului de corectie aplicat in urma semnalului de 1PPS.

In ceea ce priveste semnalul din domeniul analogic, adica iesirile, o minima filtrare pe fiecare dintre cele doua iesire ar putea imbunatati calitatea semnalului reducand posibilele artefacte produse de generarea digitala. Desi pe fiecare dintre cele doua DAC-uri exista un “volum” digital, ar fi util sa existe si potentiometri pentru reglajul fin al nivelului catre DUT (echipamentul care beneficiaza de semnal).

Un filtru trece-jos pentru frecvente mai mici de 1 KHz pentru DAC 1 si unul cu limita la 2 KHz pentru DAC 2 ar fi bine venite; in absenta lor, macar o retea de 1 Kohm si un condensator de cca 1 nF la masa ar putea sa mai reduca din artefacte cu pretul unei pierderi din semnalul util.

Generatorul poate fi integrat in reteaua WiFi existenta sau poate sa genereze propriul Access Point.

Vedeti? Asa e ca ati uitat de la ce s-a pornit?

Da, si eu am uitat; aveam nevoie de ceva care sa genereze foarte precis un ton CTCSS...

Va las link spre pagina de GitHub a proiectului unde il gasiti gata compilat, sa n va mai bateti capul cu librariile necesare: https://github.com/yo3hjv/CCTCSS_DCS_DTMF_Generator/tree/main

73 de Adrian, YO3HJV

Adrian Florescu YO3HJV

Articol aparut la 29-7-2025

1706

Inapoi la inceputul articolului

Comentarii (4)  

  • Postat de Constantin - YO7FWS (yo7fws) la 2025-07-29 11:09:02 (ora Romaniei)
  • Salut Adrian, iti multumesc pentru articolul prezentat. Desi nu se incadreaza in zona mea de interes, nu pot sa nu remarc cit de mult a crescut utilizarea inteligentei artificiale in viata de zi cu zi. Din partea ta, este prima recunoastere explicita ca inteligenta artificiala a fost folosita ca sprijin in dezvoltarea unui proiect. Cunosc persoane care nu demult invatau sa programeze si acum imi prezinta diverse aplicatii, dar evita sa recunoasca ca s-au bazat pe inteligenta artificiala. Eu folosesc inteligenta artificiala in doua moduri: ca un 'prieten de incredere' atunci cind am intrebari si ca ajutor in scrierea codului. Intreb inteligenta artificiala de fiecare data nu cunosc, nu inteleg sau cind am nevoie de o confirmare. Este mult mai eficient decit sa caut informatii pe Google, sa citesc sau sa descifrez singur. In procesul de programare, cer adesea sa mi se genereze functii, proceduri sau sa imi traduca cod din alte limbaje. Cert este ca sint mult mai productiv, desi observ o usoara comoditate din partea mea si lipsa interesului in aprofundarea unor cunostinte. Sint multe de spus despre acest subiect, dar pot spune sincer ca folosesc inteligenta artificiala in dezvoltarea proiectelor mele. Ai o minuta sus din parte mea, HI!
    73, Costi - YO7FWS

  • Postat de Tavi - YO4BKM (yo4bkm) la 2025-07-30 10:37:02 (ora Romaniei)
  • Buna, Adrian,
    Interesanta relatia folositoare cu IA. Mi-a placut cum ai redactat articolul si am inteles in ce a constat stradania ta. O singura observatie am de facut, pe care ar trebui sa o afle corect si IA: Nu Pacala a fost personajul care s-a infruntat cu Sarsaila ci Danila Prepeleac si lui Danila i-a sarit unul din ochi. Cand vei relua relatia cu IA, corecteaza informatia. Dar asta nu ma impiedica sa iti acord un “thumbs up for you”.
    Nu cred ca voi mai avea timp sa colaborez indeaproape cu IA si te intreb cum vezi acest lucru: ca un metisaj la nivel spiritual intre Homo Sapiens (regnul animal) si IA (regnul mineral)? Devine IA un alt regn prin metisaj spiritual? Sau o specie hibrida creata “dupa chipul si asemanarea omului” intr-un regn inca nedefinit? Pana unde poate merge? Te intreb deoarece, cu scuze pentru iesirea din domeniu, unul din marii profesori de utilaje tehnologice din anii ’60-’70, Emil Botez (1914-1978), era atat de pasionat de automatizarea acestora (inclusiv programarea numerica a lor) incat spunea la curs studentilor ca in viitorul cel mai apropiat totul se va face de si cu sistemele automate. Se zice ca o studenta l-ar fi intrebat “dar dragostea, cum va fi?” iar raspunsul a fost ca “asta se va face tot manual”.
    73 de Tavi YO4BKM!

  • Postat de Adrian - YO3HJV (yo3hjv) la 2025-08-01 16:04:47 (ora Romaniei)
  • Salut Tavi. Da, Danila Prepeleac, asa e, mai uita omul, ca el a scris aici nu IA... Cu siguranta ca IA stie care este personajul corect... In ceea ce priveste colaborarea, nu a fost niciun metisaj, pur si simplu, a fost un programator care cunoaste limbajele specifice pentru sarcina respectiva. Nu am timp si chef sa ma apuc de invatat Java, Ajax, HTML intr-atat incat sa le scriu "de mana" astfel ca, stiind de unde plec si unde vreau sa ajung (comunicatie backend - uC cu front-end si GUI - interfata grafica) i-am trasat niste obiective. Am pierdut mult timp stavilind initativele, care de cele mai multe ori erau inadecvate. Alteori avea "halucinatii", scapa din vedere realitatea (fisierele existente si functiile din acele fisiere) si incepea sa inventeze bazaconii. Pana la urma, a trebuit sa invat niste elemente specifice acestor limbaje de programare pentru a putea supraveghea si corecta produsul IA. E ca un student incepator care se arunca in rezolvare, fara sa tina cont uneori de niste directive foarte stricte. Este utila la corelat modificari in fisiere care gestioneaza proiectul atat pe orizontala cat si pe verticala functionalitatilor dar acele modificari trebuie cerute extrem de precis (de aici si necesitatea unor cunostinte in domeniul respectiv). Ii lipseste insa capacitatea de a face o analiza cauza-efect dincolo de evaluarea probabilitatilor, adica este lipsita de "sclipirea" care caracterizeaza cu adevarat "Inteligenta". Bunaoara, problema ISR-ului nu a rezolvat-o ea ci eu, cu rationamentul lui Sherlock Holmes: Cand ai eliminat tot ce e imposibil, ceea ce ramane, oricat de improbabil pare, trebuie sa fie adevarul. Este de ajutor? Da. Poate inlocui omul in activitatea creativa? Nu cred; inca e departe. E capabila sa inoveze? Nu am observat. E in stare sa gaseasca o acolada lipsa care da o eroare de compilare intr-un cod de 3000 de linii? Uneori da, alteori considera ca intreaga functie e gresita. De aceea nu am pus-o sa scrie ea codul backend, acolo doar i-am dat sa verifice. Chiar si asa, nu ii este foarte clara diferenta dintre sendStatusAlarmON si sendStatusAlarmOn... crede ca sunt aceeasi variabila :-). Apoi, nu toate LLM sunt create egal. Bunaoara, ChatGPT e bun la creat cod de baza in timp ce ClaudeSonnet_3.4 e bun la refactoring in timp ce ClaudeSonnet_4 de multe ori este "orb" la cautarea in fisiere multiple a unor variabile si la "intelegerea" fluxului logic pe mai mult de 3 "etaje", cum aveam eu in acest proiect. Oricum, nu sunt mare specialist dar in acest proiect, de anvergura pentru mine, am avut nevoie de ajuto. Per ansamblu, m-a ajutat. 73 de Adrian YO3HJV

  • Postat de Adrian - YO3HJV (yo3hjv) la 2025-08-01 16:22:43 (ora Romaniei)
  • @Constantin: Pai, de ce sa nu recunosc? Nu sunt profesionist in domeniul programarii iar tehnologia actuala iti lasa prea putine optiuni la indemana. Fie te duci pe un site unde angajezi un profesionist pentru proiectul respectiv si negociezi suma-dar apoi ai prea putin control asupra rezultatului, fie te apuci si inveti tu sa iti faci singur proiectul. Iar la aceasta din urma varianta, ai de ales daca spargi stanca cu ciocanul sau folosesti un pickamer. Eu am folosit pickamerul... Proiectul asta a fost "o problema de rezolvat" transformata in "ce-ar fi daca...". Asta nu inseamna ca s-a realizat singur proiectul si eu stateam si ma uitam la un LLM cum scrie randuri de cod. Dar dialogul cu IA m-a ajutat sa definesc partile componente, intai sa le creionez, apoi sa le scriu dupa care sa ii dau scenarii pentru testare, simplificand identificarea erorilor. Am descoperit ca, cerandu-i in faza de planificare IA sa imi puna intrebari relevante pentru anumite parti din proiect, asta m-a ajutat sa observ o serie de probleme inca de la inceput, luand masurile de evitare inainte de a ma confrunta cu ele ireparabil. Nu ma bazez pe IA pentru a inlocui cautarea si documentarea, am prins-o deseori ca dadea rasol asa ca studierea documentatiilor de la producatori este inca sarcina mea. Relatia cu IA ar trebui sa fie transparenta in raport cu ceilalti pentru ca, desi IA scurteaza drumul de la idee la produs finit, in cele din urma omul este esential pentru rezultat si nimeni nu ii rapeste calitatea de "autor", daca ideea este una originala. IA ne poate ajuta sa trecem de la "scrib" la "manager de proiect" si chiar cred ca este o solutie eleganta pentru amatori si hobisti, cum suntem si noi. 73 de Adrian YO3HJV

    Scrieti un mic comentariu la acest articol!  

    Opinia dumneavoastra va aparea dupa postare sub articolul "Generator disciplinat GNSS cu ESP32"
    Comentariul trebuie sa se refere la continutul articolului. Mesajele anonime, cele scrise sub falsa identitate, precum si cele care contin (fara a se limita la) atac la persoana, injurii, jigniri, expresii obscene vor fi sterse iar dupa caz se va ridica dreptul de a posta comentarii.
    Comentariu *
     
    Trebuie sa va autentificati pentru a putea adauga un comentariu.


    Opiniile exprimate în articole pe acest site aparţin autorilor şi nu reflectă neapărat punctul de vedere al redacţiei.

    Copyright © Radioamator.ro. Toate drepturile rezervate. All rights reserved
    Articole | Concursuri | Mica Publicitate | Forum YO | Pagini YO | Call Book | Diverse | Regulamentul portalului | Contact