Posts: 8.708
Threads: 138
Joined: Apr 2013
Reputation:
3.606
05-19-2017, 12:54 PM
(This post was last modified: 05-19-2017, 01:22 PM by mikikg.)
Da objasnim ukratko kako se realizuje frekvencmetar sa MCU, inace i ja ovih dana se debelo vrtim onko nekih brojaca i tajmera ...
Frekvencmetar je relativno prosta stvar, on treba da izbroji tacan broj inpulsa u nekom intervalu, recimo u intervalu od 0.1, 1 ili 10s (sekundi) - to vreme se zove scan ili update rate.
Signal se dovodi na ulaz HW countera (internog u MCU), on na svaku rastucu ivicu signala poveca svoj broj i tako dokle moze (najcesce 16bit brojac, dakle moze da broji u opsegu od 0 do 65535). Posto je cesto nedovoljno ovih 16bit, neophodno je uraditi jednu prostu ISR koja na OVERFLOW tog brojaca inkrementuje jednu variablu i taj broj posle koristis kod racuna.
Da bi sa tim mogao da izvuces informaciju o frekvenciji impulsa, neophodno je uradi ovaj sled komandi:
- resetujes HW brojac na 0
- resetujes pomocnu variablu na 0 (ona koja broji OVERFLOW)
- das mu dozvolu da radi (RUN), od tog trenutka pocinju da se broje impulsi
- cekas neko tacno definisano vreme, 0.1, 1 ili 10 sekundi (moze koliko hoces, ovako je jednostavnije za racun sa "okruglim" vrednostima) - napomena: od stabilnosti ovog vremena ti zavisi tacnost ocitavanja.
- kada istekne vreme cekanja uradis STOP brojaca
- ocitas stanje HW brojaca, npr izbrojio 1234 impulsa
- preracunas frekvenciju, ako je scan rate bio 1s i imas 1234 impulsa dakle ti impulsi su frekvencije 1.234kHz
- prikazes to na LCD i tako u krug ...
Napomena 2: posto imas zahtev da brojis u 1Hz frekvencije do 100kHz, znaci treba ti brojac sa minimum 100.000, dakle ISR rutina ti je neophodna jer imas samo 65535 po jednom celom ciklusu brojaca, znaci treba ti bar dva ciklusa - to vazi za slucaj od 1 sekunde vremena update-a. Ako bi to sve isto radio samo pustio da meri 10 sekundi onda dobijas jos jednu decimalu za frekvenciju, mogao bi da ocitas u 0.1Hz i tako dalje.
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
(05-19-2017, 12:09 PM)Milan94 Wrote: Da ne otvaram novu temu postavicu pitanje ovde.
Radi se o frekvencmetru sa pic16f628 koji moze meriti frekvencije do 50MHz meni je potreban frekvencmetar koji moze meriti frekvencije od 1Hz do 900KHz sa rezolucijom 1Hz u ovim granicama se krecu smps napajanja i zbog toga mi treba takav instrument.
Predpostavljam da je moguce da se uradi nesto takvo ali mi nije jasan algoritam kako to da izvedem upotrebio bih PIC16F1827 koji je pin kompatabilan sa 16f628.
Imam jos jednu plocicu uradjenu kesatnet frekvencmetra pa bih nju iskoristio ukoliko moze da se ostane na istom konceptu oko ulaznog dela.
Prilazem semu tog frekvencmetra mozda je vecini i poznata
Imam jedno pitanje. Kako MCU koji radi na 4MHz moze da meri frekvenciju od 50MHz?
Posts: 8.708
Threads: 138
Joined: Apr 2013
Reputation:
3.606
05-19-2017, 01:43 PM
(This post was last modified: 05-19-2017, 01:54 PM by mikikg.)
Maksimalna brzina brojanja eksternih impulsa nije u relaciji sa brzinom Clock od MCU, zavisi iskljucivo od dozvoljenih limita za ulazne pinove i njihovog tajminga a obicno je to vece (brze) od tajminga Clock-a. Koliko tacno moze mora da se pogleda u specifikaciji kontrolera.
PS: Ovo pricam za slucaj bez PRESCALER-a ispred ulaza u brojac, sa preskalerom moze da se tera koliko hoces, i u GHz opseg ako imas dovoljno brze preskalere.
Posts: 556
Threads: 11
Joined: Apr 2014
Reputation:
150
05-19-2017, 01:54 PM
(This post was last modified: 05-19-2017, 01:56 PM by Milan94.)
(05-19-2017, 01:36 PM)vojinilic Wrote: (05-19-2017, 12:09 PM)Milan94 Wrote: Da ne otvaram novu temu postavicu pitanje ovde.
Radi se o frekvencmetru sa pic16f628 koji moze meriti frekvencije do 50MHz meni je potreban frekvencmetar koji moze meriti frekvencije od 1Hz do 900KHz sa rezolucijom 1Hz u ovim granicama se krecu smps napajanja i zbog toga mi treba takav instrument.
Predpostavljam da je moguce da se uradi nesto takvo ali mi nije jasan algoritam kako to da izvedem upotrebio bih PIC16F1827 koji je pin kompatabilan sa 16f628.
Imam jos jednu plocicu uradjenu kesatnet frekvencmetra pa bih nju iskoristio ukoliko moze da se ostane na istom konceptu oko ulaznog dela.
Prilazem semu tog frekvencmetra mozda je vecini i poznata
Imam jedno pitanje. Kako MCU koji radi na 4MHz moze da meri frekvenciju od 50MHz?
Iskreno iako sam sastavio taj frekvencmetar nisam ni imao cime da proverim da li moze stvarno da izmeri do 50Mhz jer nemam izvor takta sa tolikom ucestanoscu ali tako su napisali na stranici sa koje sam skinuo projekat.
Miki hvala videcu to da realizujem znaci za brojanje mogu da koristim timer1 (16bit) a za njegov takt koristim spoljni signal koji se meri i kada se desi OVERFLOW tada uvecam neku variablu koju kasnije uracunavam kao 65535 plus jos onoliko taktova koje je brojac izbrojao do kraja 1s.
Za recimo 100KHz imacu variablu uvecanu za 1 i plus iz brojaca 34.465 taktova kada to saberem imam 100.000 i to prikazem na LCD .
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
(05-19-2017, 01:43 PM)mikikg Wrote: Maksimalna brzina brojanja eksternih impulsa nije u relaciji sa brzinom Clock od MCU, zavisi iskljucivo od dozvoljenih limita za ulazne pinove i njihovog tajminga a obicno je to vece (brze) od tajminga Clock-a. Koliko tacno moze mora da se pogleda u specifikaciji kontrolera.
PS: Ovo pricam za slucaj bez PRESCALER-a ispred ulaza u brojac, sa preskalerom moze da se tera koliko hoces, i u GHz opseg ako imas dovoljno brze preskalere.
Miki,
znam da se dovodi signal na brojacki ulaz, ali nisam nikada proveravao koji su limiti. Jednostavno mi je mnogo da preko 10 puta vecu freq mozes da meris. Sada sam pogledao u PDF. 20ns je limit. To je tacno 50MHz.
Hvala.
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
[/quote]
Miki hvala videcu to da realizujem znaci za brojanje mogu da koristim timer1 (16bit) a za njegov takt koristim spoljni signal koji se meri i kada se desi OVERFLOW tada uvecam neku variablu koju kasnije uracunavam kao 65535 plus jos onoliko taktova koje je brojac izbrojao do kraja 1s.
Za recimo 100KHz imacu variablu uvecanu za 1 i plus iz brojaca 34.465 taktova kada to saberem imam 100.000 i to prikazem na LCD .
[/quote]
Nije 65535, vec 65536, posto se interapt desava pri prelazu sa 65535 na 0 i tu imas jos jedan count. Onda ces imati 65536. Rezultat mozes da posmatras i kao jedan long, pri cemu ti je gornji word od longa tvoja varijabla uvecana pri svakom overflow, a donji word vrednost TMR1 brojaca.
Posts: 556
Threads: 11
Joined: Apr 2014
Reputation:
150
Miki hvala videcu to da realizujem znaci za brojanje mogu da koristim timer1 (16bit) a za njegov takt koristim spoljni signal koji se meri i kada se desi OVERFLOW tada uvecam neku variablu koju kasnije uracunavam kao 65535 plus jos onoliko taktova koje je brojac izbrojao do kraja 1s.
Za recimo 100KHz imacu variablu uvecanu za 1 i plus iz brojaca 34.465 taktova kada to saberem imam 100.000 i to prikazem na LCD .
[/quote]
Nije 65535, vec 65536, posto se interapt desava pri prelazu sa 65535 na 0 i tu imas jos jedan count. Onda ces imati 65536. Rezultat mozes da posmatras i kao jedan long, pri cemu ti je gornji word od longa tvoja varijabla uvecana pri svakom overflow, a donji word vrednost TMR1 brojaca.
[/quote]
Moja greska tacno da 16bit ima vrednost 65536 hvala na ispravci.
Posts: 8.708
Threads: 138
Joined: Apr 2013
Reputation:
3.606
Da, tako treba da se uradi, to je ceo algoritam, prosto je ...
Informativno kada smo se dotakli te teme, za precizno merenje relativno malih frekvencija (npr <10Hz) se koristi drugi pristup, slican je ali je razlika u tome sto se izabrani HW brojac ne clock-uje spolja nego interno sa nekim Clock i onda se broje takvi impulsi izmedju dve ivice ulaznog signala (ili jedna cela perioda, izmedju dve rastuce ivice, moze da se bira).
Na taj nacin se dobije drasticno bolja rezolucija ocitavanja za tako niske frekvencije.
Posts: 556
Threads: 11
Joined: Apr 2014
Reputation:
150
05-19-2017, 03:06 PM
(This post was last modified: 05-19-2017, 03:20 PM by Milan94.)
Dovoljno ce biti prethodno opisani algoritam jer neverujem da ce mi trebati merenje toliko niskih frekvencija.
Za konacno izracunavanje rezultata koji treba da se ispisuje na LCD mislim da nece biti dovoljna variabla Word jer rezultat nemoze da se smesti neznam da li PIC16f serija podrzava variablu LONG koja se sastoji od dva word-a.
Edit:
Imam ideju kako ovo moze da se resi sada sam se setio kako se to radi u PicBasic tako da nema problema.
Posts: 8.708
Threads: 138
Joined: Apr 2013
Reputation:
3.606
Duzinu variabli odreduje kompajler, on je zaduzen da tvoje tipove prilagodi fizickoj postavci unutar MCU.
Ako je 8 bitni MCU a treba ti 32bitna variabla (da ne dodje do zabune, zgodno je da se prica u bitovima jer WORD, LONG i ostali tipovi imaju razlicitu duzinu na razlicitim tipovima MCU), to znaci da ce MCU morati da iscita/obradi tu variablu iz 4 nekih prolaza i obicno te operacije traju dosta vise nego 4x 8bitne operacije, neophodno je dodatno "muckanje" da bi se slozio 32bitni broj.
Konkretno tebi za frekvecmetar ovo muckanje sa 32bit ne predstavlja problem, nece uticati na metenje, samo na brzinu prikazivanja rezultata.
Posts: 556
Threads: 11
Joined: Apr 2014
Reputation:
150
Nasao sam ovde objasnjenje kako da realizujem 32bit variablu mora da se sluzimo trikovima
Posts: 1.244
Threads: 10
Joined: Apr 2015
Reputation:
509
Ne znam kako se radi u Basic-u. Koristim C. U C je to dosta lako:
unsigned long Brojac32Bit;
Brojac32Bit = (unsigned long)(BrojacOverflow << 16) | TMR1;
BrojacOverflow je pomocna 16bitna promenljiva koju inkrementiras na svaki interapt od TMR1, a TMR1 je trenutna vrednost tajmera (16 bit)
Posts: 1.554
Threads: 14
Joined: Jan 2014
Reputation:
784
(05-19-2017, 03:06 PM)Milan94 Wrote: Dovoljno ce biti prethodno opisani algoritam jer neverujem da ce mi trebati merenje toliko niskih frekvencija. Treba ce ti kad budes napravio generator funkcija koji ide od 0.1Hz.
Odavno se resavam da napravim jedan frekvencmetar koji ce da meri od 0.01Hz pa do nekoliko MHz, stim sto ce do 1Khz da meri periodu na nacin kako je miki opisao, a rezultate prikazuje kao frekvenciju a od 1KHz klasicno merenje frekvencije i sve to autorange. Bio bih veoma zahvalan ako bi to neko drugi odradio
Novac je sredstvo a ne cilj.
Posts: 8.708
Threads: 138
Joined: Apr 2013
Reputation:
3.606
05-19-2017, 05:33 PM
(This post was last modified: 05-19-2017, 06:03 PM by mikikg.)
Gosha, imaj u vidu da je za merenje niske frekvencije od npr 0.1Hz neophodno 10s uzorkovanje, nevezano na metodu merenja !!!
Razlicite metode mogu samo da daju bolje/losije rezultate ali je i dalje neophodno minumum 10s uzorkovanje, maximum nije limitiran, ogranicen je vasim strpljenjem na cekanje rezultata, sto duze to je precizniji rezultat.
Posts: 1.554
Threads: 14
Joined: Jan 2014
Reputation:
784
(05-19-2017, 05:33 PM)mikikg Wrote: Gosha, imaj u vidu da je za merenje niske frekvencije od npr 0.1Hz neophodno 10s uzorkovanje, nevezano na metodu merenja !!!
Razlicite metode mogu samo da daju bolje/losije rezultate ali je i dalje neophodno minumum 10s uzorkovanje, maximum nije limitiran, ogranicen je vasim strpljenjem na cekanje rezultata, sto duze to je precizniji rezultat. Tako je Miki, 0.1Hz ima periodu od 10s, dakle vreme merenja mora da traje upravo toliko, samo sto se dobije veca rezolucija posrednim merenjem, preko merenja periode.
Novac je sredstvo a ne cilj.
Posts: 1.157
Threads: 27
Joined: Oct 2014
Reputation:
313
(05-19-2017, 05:17 PM)Gosha Wrote: Odavno se resavam da napravim jedan frekvencmetar koji ce da meri od 0.01Hz pa do nekoliko MHz, stim sto ce do 1Khz da meri periodu na nacin kako je miki opisao, a rezultate prikazuje kao frekvenciju a od 1KHz klasicno merenje frekvencije i sve to autorange. Bio bih veoma zahvalan ako bi to neko drugi odradio
Gosha, za 0.01Hz će nam trebati najmanje 100s merenje. Jesi li siguran da bi išao sa tim vrednostima za opseg merenja? Nije problem da nešto skockam samo treba vremena.
Posts: 1.554
Threads: 14
Joined: Jan 2014
Reputation:
784
(05-19-2017, 07:51 PM)gorankg Wrote: (05-19-2017, 05:17 PM)Gosha Wrote: Odavno se resavam da napravim jedan frekvencmetar koji ce da meri od 0.01Hz pa do nekoliko MHz, stim sto ce do 1Khz da meri periodu na nacin kako je miki opisao, a rezultate prikazuje kao frekvenciju a od 1KHz klasicno merenje frekvencije i sve to autorange. Bio bih veoma zahvalan ako bi to neko drugi odradio
Gosha, za 0.01Hz će nam trebati najmanje 100s merenje. Jesi li siguran da bi išao sa tim vrednostima za opseg merenja? Nije problem da nešto skockam samo treba vremena. Ma ne mora, dovoljno je i od 1Hz, koj da ceka 10s a ne daj Boze 100s da bi izmerio frekvenciju koja mu mozda nikad nece zatrebati. Ako imamo 4 cifre dovoljno je izmeriti 1Hz na trecu decimalu.
Novac je sredstvo a ne cilj.
Posts: 8.708
Threads: 138
Joined: Apr 2013
Reputation:
3.606
Hajde samo malo realnije da sagledamo stvari, kao prvo sta ce vam 1 ili cak 0.1Hz recimo sinus??? Ja iskreno ne znam cemu to moze da posluzi! Trougao i pravougaoni i nekako ...
Dajlje, taj ko napravi sinusni generator sa 1 ili 0.1Hz svaka mu cast!
To je veoma tesko da se napravi sa nekim prihvatljivim perfomansama u analognoj varijanti. Za tako niske frekvencije se definitivno treba odluciti za digitalne generatore a ako tako pravite onda vam frekvencmetar za to i ne treba
Posts: 8.708
Threads: 138
Joined: Apr 2013
Reputation:
3.606
Postovi oko frekvencmetra, TCXO i Si5351 premesteni ovde:
http://forum.yu3ma.net/showthread.php?tid=700&pid=72287#pid72287
Posts: 768
Threads: 25
Joined: Mar 2016
Reputation:
383
Moj prvi osciloskop... Srecan sam kao kuce.... da imam rep mahao bi njime
Veceras idem do drugara da uporedim sa pravim osciloskopom... nadam se da je upotrebljiv...
|