Sari la conținut
ELFORUM - Forumul electronistilor

Frecventmetru direct si reciproc


darius_bv

Postări Recomandate

Se mai gasesc second hand, ieftine. Am cumparat chiar de pe acest forum cu 30lei, verzi, acum vreo trei ani... Nu cred ca sunt prea cautate, avand in vedere ca trebuie conceput un soft ca sa le aprinzi. 

Link spre comentariu
La 03.12.2024 la 21:17, darius_bv a spus:

avand in vedere ca trebuie conceput un soft ca sa le aprinzi. 

daca le aprinzi numai cu hardware ce are? ca ai pornit de la numai hardware si de la ce ai prin sertare si ai ajuns sa-ti calci pe principiile pe care le-ai enuntat din start, sau ai renuntat la principiile alea?

 

RR

Editat de roadrunner
Link spre comentariu

Nu are legatura cu principiile, ci cu acuratetea masuratorilor. Frecventmetrul este hardware, microcontrolerul asteapta dupa numarator, apoi proceseaza datele si afiseaza numai dupa finalizarea numararii impulsurilor. Nicio rutina soft nu e mai rapida decat portile logice. In schimb, intre doua masuratori, este timp berechet pentru procesare si afisare. 

De cand am inceput sa lucrez cu afisajul matriceal, am renuntat la cele clasice cu decodificator. Au multe avantaje: afisezi caractere, cifre, orice doresti intr-o matrice de 5x7 pixeli, poti regla intensitatea luminoasa in limite largi, nu "tremura", consuma putin. In alt proiect la amplificatoare cu lampi am facut cu aceste afisaje un aparat de masura a curentilor anodici ai finalelor, combinat cu VU-metru "analogic", verde si rosu, de exemplu. 

Daca va uitati la schemele postate, n-o sa vedeti afisaje cu 7 segmente. Nu mi-am propus sa reinventez roata cu acest proiect.

Toate cele bune!

Link spre comentariu
La 03.12.2024 la 23:17, darius_bv a spus:

Se mai gasesc second hand, ieftine. Am cumparat chiar de pe acest forum cu 30lei, verzi, acum vreo trei ani... Nu cred ca sunt prea cautate, avand in vedere ca trebuie conceput un soft ca sa le aprinzi. 

Da, de la mine. inca mai am

Link spre comentariu
Acum 13 ore, darius_bv a spus:

Nu are legatura cu principiile, ci cu acuratetea masuratorilor.

nu cred ca decodoarele de la afisaje au treaba cu acuratetea masuratorilor,

Nu-mi plac oamenii cu principii puternice, care le enunta, le apara, dupa care se rasucesc 180 de grade si din nou le enunta si le apara pe astea noi. (poate si din cauza ca e lumea plina de oameni d'astia se cheama politicieni)

 

Citat

Nicio rutina soft nu e mai rapida decat portile logice.

Timerele din MCU moderne numara fara probleme 200MHz pe intrarile dedicate ma indoiesc ca ce ai tu prin sertare e asa rapid.

 

Ai nevoie numai de o intrerupere hardware a bazei de timp care sa opreasca/culeaga rezultatul/reseteze/repornesca counterul  (il programezi merge singur) 

Totul se face cu maxim 10 instructiuni care sunt in rutina de intrerupere a bazei de timp. 

 

Problemele la solutiile pur hardware (fara mcu) apar cand trebuie sa transformi din binar in BCD sau te forteaza sa folosesti numaratoare BCD, plus ca trebuie sa ai registrii shadow sa  nu afisezi in timp ce numara si da faci un mic automat de stare (tot cu un numarator) care sa faca tot ce ma descris mai sus. Treaba se complica si mai tare daca ai prescalere selectabile care trebuie sa lucreze  cu diverse baze de timp.

 

Nu prea ne-ai aratat cum il faci reciproc (sa numere invers) in hardware fara MCU cu ce ai prin sertare. (sau ai sertarele pline cu numaratoare reversibile BCD)

 

Citat

Nu mi-am propus sa reinventez roata cu acest proiect.

ne-am prins.

 

Spor la treaba (indiferent de solutia aleasa)

RR

 

PS - ma gandeam sa te "combat constructiv" construind exact ce faci tu acolo dar in HDL (adica numai din porti si registrii) ca sa vada lumea cum se face in 100% hardware. (asta era si motivul pentru care citeam thread-ul) in ideea ca poate vrea cineva sa vada (si poate sa invete) cum se face 100% in hardware, la fel ca si cand ti-ai construi circuitul integrat propriu.

Editat de roadrunner
Link spre comentariu
Citat

Ai nevoie numai de o intrerupere hardware a bazei de timp care sa opreasca/culeaga rezultatul/reseteze/repornesca counterul  (il programezi merge singur) 

Totul se face cu maxim 10 instructiuni care sunt in rutina de intrerupere a bazei de timp.

 

greşit. Nu este nevoie de nici o instrucţiune în timpul măsurării duratei unui impuls cu timerele. Totul se face automat cu hardwarele microcontrolerului. De instrucţiuni este nevoie pentru a programa timerul şi intrarea folosită la măsurătoare şi apoi, de alt set de instrucţiuni este nevoie după ce impulsul a comandat oprirea timerului. Iar astea nu mai au legătură cu măsurarea impulsului ci cu prelucrarea datelor.

 

Singura dată când este nevoie de instrucţiuni în timpul măsurării (dar care nu afecteaza deloc numărătorea timerului chiar dacă semnalul de măsurat comandă oprirea numărării în timpul efectuării acestor instrucţiuni), este atunci când durata măsurătorii depăşeşte capacitatea de numărare a timerului. Atunci, apare întrerupere de depăşire timer şi fiecare depăşire trebuie contorizată separat (este nevoie doar de 3 instrucţiuni pentru a face asta), dar asta se face fără a opri timerul. Când impulsul de măsurat comandă oprirea timerului, e foarte simplu: pentru fiecare depăşire se adună valoarea maximă a timerului iar la sfârşit se adună şi cât a cronometrat timerul. Dacă se foloseşte un uC din familia Z80, nu mai este nevoie de artificiile astea deoarece astea au timere pe 32 şi chiar 64 biti. Iar acum am văzut că au apărut şi alte uC care au timere de 24 sau chiar 32 biţi. 

 

Singura chestie care trebuie făcută neapărat este un adaptor dacă semnalul de măsurat nu e compatibil cu intrările uC sau un etaj pentru a proteja intrarea uC folosită pentru măsurătoare şi a mări şi mai mult impedanţa de intrare a uC.

 

Editat de cimitavita
Link spre comentariu
1 oră în urmă, cimitavita a spus:

Nu este nevoie de nici o instrucţiune în timpul măsurării durate unui impuls cu timerele.

exact asta am afirmat si eu, ce e gresit? (ca s-o lamurim: frecventmetrele numara impulsuri nu durate)

unde am zis eu ca ai instructiuni in timpul masurarii? baza de timp e complet automata (cu alt timer)

 

Trebuie sa opresti numaratorul (timer in mod counter) sa sa tragi rezultatul pentru ca numaratorul asta e asincron si asta o faci in rutina de intruepere a bazei de timp dupa ce l-ai oprit  (baza de timp care e facuta cu un alt timer evident, care e sincron cu MCU) dupa care-l resetezi si pornesti alt ciclu de numarare.

Daca folosetsti timerul ca numarator cu semanl din exterior (care asincron cu MCU)  singurul mecanism de gating al impulsurilor externe este enable/disable la numarator ca esti obligat sa folosesti intrarile dedicate care se duc direct la counter-ul respectiv. (de obicei sunt notate cu T0/T1 etc. si au trigger schmitt dedicat )

si nu exista alt mecanism de gating.

Incertitudinea la orice frecventmetru (indiferent daca e HW sau cu MCU) vine de la mecanismul de gating al counter-ului care e bazat pe baza de timp care e complet asincrona cu impulsurile care vin din afara sistemului. Exista solutii si la problema asta daca in sistemul sincron ai clock-ul mult mai mare decat frecventa inpulsurilor masurate si le re-esantionezi  intern cu frecventa sistemului sincron (le re- sincronizezi)  incertitudinea e de un impuls, iar daca le resincronizezi e zero.

 

1 oră în urmă, cimitavita a spus:

Iar acum am văzut că au apărut şi alte uC care au timere de 24 sau chiar 32 biţi. 

da, acum 20 de ani (toate ARM-urile sunt de 32 biti)

RR

Editat de roadrunner
Link spre comentariu

am spus durată impuls, deoarece cel care a iniţiat topicul, darius_bv, vrea să regleze cât mai precis frecvenţa cuarturilor ceasurilor RTC (32.768KHz) şi cel mai simplu mod e prin ieşirea de control RTC.
Majoritatea RTC au acea ieşire de 1Hz şi pentru el ar fi mult uşor şi mai precis dacă ar măsura durata acestui semnal în ns sau chiar ps, decât să măsoare frecvenţa lui. Cam toate uC au un pin special pentru a măsura foarte precis durata unui semnal exterior cu ajutorul timerelor. Acesta poate fi programat să pornească şi să oprească singur numărătoarea unui timer. Impulsurile CLK sunt generate intern de către oscilatorul uC. Apoi se poate calcula precis frecvenţa în Hz cu zecimalele de rigoare dar mi se pare mai uşor afişarea duratei în ns 
Şi ca bonus: multe RTC au calibrare internă, au funcţii de încărcare a acumulatorilor şi chiar termostatare. Trebuie doar de pornit termostatul intern şi de ales temperatura de termostatare dacă consumul în plus (care este destul de mare) nu deranjează.

 

 

 

Editat de cimitavita
Link spre comentariu
La 20.10.2024 la 23:39, darius_bv a spus:

Pe functia de frecventmetru reciproc masor durata semnalului de 1Hz al secundelor ceasului, precizia fiind de 0,01Hz. Ca frecventmetru va avea domeniile de masurare de 100KHz, 1MHz, 10MHz si la sugestia prietenului @sesebe o sa-i adaug si un divizor de mare viteza, ca sa extind domeniul de masura la 100MHz.

ok, daca tu crezi ca poti sa-l faci masurand durata unei periode de 10MHz (adica 100ns) suficient de precis cu un timer dintr-un MCU folosind clock-ul intern al MCU eu nu te opresc. (oricum nu ma pricep la chestiile astea digitale) poate pui pseudo-codul ca sa invatam si noi incepatorii.

Citat

Hz şi pentru el ar fi mult uşor şi mai precis dacă ar măsura durata acestui semnal în ns sau chiar ps, decât să măsoare frecvenţa lui.

super misto, cum masori cu precizie de ns/ps cand rezolutia e clock-ul mcu si evenimentul asta (frontul semnalului de 1Hz) e complet asincron cu MCU care mai are si durata de raspuns la intreruperea asta externa variabila? S-auzim cum se face? (mai invatam unii de la altii)

 

RR

 

PS - o chestie care m-a facut sa zambesc in topicu asta 

Citat

masor durata semnalului de 1Hz al secundelor ceasului, precizia fiind de 0,01Hz

0.01Hz la 1Hz inseamna 1% (cel mai prost quartz de ceas e pe la 50ppm - adica 0.005%

cum calibrezi ceva care e 0.005% precis din start cu scule de precizie 1%? mister total.

RR

Editat de roadrunner
Link spre comentariu

Nu ai văzut deloc cum funcționează timerele unui uC. Acestea au mai multe funcții. Una dintre acestea se referă la măsurarea cu precizie foarte mare a unei perioade de timp. Pe o intrare a unei porți interne a timerului se poate aplica semnal de frecvență mare chiar de la oscilatorul intern sau de la un oscilator extern. Pe cealaltă intrare a porții, se aplică semnalul de măsurat. Aici se poate stabili ca intrarea să fie activă pe high, pe low sau pe un ciclu complet high-low. 

Dacă ai un CLK de 10MHz, atunci pentru un semnal cu frecvența de 1Hz numărătorul va avea pe el 10.000.000.

Pentru un conținut al contorului de 9.999.999, frecvența măsurată este de 1,00000010000001 Hz.

Dacă conținutul numărătorului va avea 10.000.001, atunci frecvența măsurată este 0,9999999000000099 Hz. Iar dacă numărătorul că avea pe el 10.000.002, atunci frecvența este de 0,9999998000000399 Hz.

Cu cât frecvența măsurată e mai mică, cu atât precizia e mai mare. Cu un frecvențmetru normal, e imposibil să măsori un semnal de frecvență mică cu precizia asta. 

Link spre comentariu
Acum 46 minute, cimitavita a spus:

Nu ai văzut deloc cum funcționează timerele unui uC.

normal ca n-am vazut , ca atunci cand proiectez circuite integrate digitale tin ochii inchisi.

 

Citat

Pe cealaltă intrare a porții, se aplică semnalul de măsurat.

arata-mi un datashhet care exista asa o poarta cu care sa faci gating la semnalul extern MCU cu un semnal intern sa vad si eu.  

 

nu e nici un gate e un event generat (capture) - deci ai o intrerupere ca sa iei valoarea (mai jos e mecanismul de la ARM) - in realitate nu e nici un GATE ca ar crea hazard (frontul semnalului extern e asincron cu clock-ul timer-ului - fronturile celor doua pot fi oriunde unul fata de celalalt)

la un semnal de 1Hz e clara treaba  (gradinita) problemele apar cand ai perioade mici si nu mai merge cu fenta 1/T

 

Zi cum masori 10MHz fara sa numeri impulsurile? (nu mai merge fenta cu masurat perioada) ca vad ca tot ignori intrebarea 

 

 

Citat

Cu un frecvențmetru normal, e imposibil să măsori un semnal de frecvență mică cu precizia asta. 

ma rog, eu am unul "anormal" in cazul asta.

Credeam cam stabilit ca nu masori perioade cu frecventmetrul, da, pot sa-o faci indirect 1/T la frecvente mici cu MCU dar cel care a pornit thread-ul construieste un Frecventmetru (chiar revesibil cica) facut cu numaratoare discrete. si cu creintele din enunt 10MHz reversibil etc.

A zis ca foloseste MCU numai pentru decodificatorul (generatorul de carctere + mux) cu MCU.

 

Citat

Cu cât frecvența măsurată e mai mică, cu atât precizia e mai mare. Cu un frecvențmetru normal, e imposibil să măsori un semnal de frecvență mică cu precizia asta. 

cand construiesti ceva  care masoara nu-l faci sa mearga numai pentru un caz particular il faci sa masoare de la 0.00001 Hz pana la XX MHz in functe de cat de rapide sunt circuitele la indemana.

Se pot obtine rezolutii mari si cu MCU de sutimi/miimi de Hz (lungind baza de timp_ dar esti limitat de Fmax. 

 

Dupa ce termina @darius_bv proiectul il fac pe un cip (de la zero) direct in hardware la 300MHz 

Editat de roadrunner
Link spre comentariu
Acum 53 minute, roadrunner a spus:

cand construiesti ceva  care masoara nu-l faci sa mearga numai pentru un caz particular il faci sa masoare de la 0.00001 Hz pana la XX MHz in functe de cat de rapide sunt circuitele la indemana.

Cite asemenea produse cunoasteti sa existe in acest moment?

Link spre comentariu
Acum 7 ore, roadrunner a spus:

Nu prea ne-ai aratat cum il faci reciproc (sa numere invers) in hardware fara MCU cu ce ai prin sertare. (sau ai sertarele pline cu numaratoare reversibile BCD)

"Iar te-ai cufundat in stele

Si in nori, si-n ceruri'nalte..."

 

"Frecventemtru reciproc" inseamna altceva decat ce stii tu: masoara perioada unui semnal de joasa frecventa (pana in 100KHz) si, calculand o functie de transfer, afiseaza frecventa acelui semnal. 

 

Colegul @cimitavita a intuit corect: masor perioada semnalului de 1Hz al RTC si afisez frecventa cuartului, respectiv 32768.00Hz. Il aduc cat mai aproape de aceasta frecventa (prin selectarea cuartului, prin trimere externe in paralel cu condensatoarele de compensare, sau prin diode varicap cuplate capacitiv cu un pin al cuartului. Din acest punct, fac compensarea termica a cuartului din softul RTC. Ar trebui sa obtin o precizie foarte buna la finalul procesului, avand in vedere ca precizia aparatului meu este data de cuartul termostatat (circa 10 la puterea -9, in teorie).

 

Nu am prin sertare procesoare cu frecventa de 200MHz; nu m-au interesat, sincer. 

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări