Meranie frekvencie

Meranie frekvencie
Rastislav Michalek Pridal  Rastislav Michalek
  162 zobrazení
2
 0
Rádioamatérov almanach

Väčšina jednoduchších meračov frekvencie typu home-made využíva počítanie impulzov počas jednej sekundy. Táto metóda merania frekvencie sa používa od 70-tych rokov minulého storočia. Tento článok má za cieľ priblížiť ďalšie spôsoby ktoré umožňujú presnejšie merania strednej hodnoty frekvencie. Niektoré spôsoby merania tu prezentované využívajú periférie moderných mikrokontrolérov a možno sa nebudú dať priamo použiť pri jednoduchších alebo historických čipoch.

1. Úvod

Hodnota frekvencie sínusového signálu U(t) = A*sin(2πft) je daná počtom periód za jednotku času. Pri jednotke času 1 sekunda je počet periód reálne číslo. Preto je vhodnejšie uvažovať pomer kompletných periód a času trvania respektíve merania:

(1)    f = N/TN,    kde N je počet kompletných periód a TN je doba merania

Obr.1 - Definícia strednej hodnoty frekvencie

Vzťah medzi periódou signálu a frekvenciou je nasledovný:

(2)    f = 1/T    kde T je perióda signálu

Viac o frekvencii píše napríklad [2].

Merač frekvencie (čítač, viď [3] a [4]) obvykle spracuje ľubovoľný vstupný signál, teda nielen sínusový, na impulzy pomocou takzvaného tvarovača signálu. Ďalej sa už pracuje s logickými úrovňami. Tvarovaču signálu sa tento článok nebude venovať. V blokových schémach je to blok označený “Input & Trigger”. Treba brať do úvahy, že nasledujúce metódy merania získajú strednú hodnotu frekvencie. Frekvencia signálu sa môže počas merania meniť. To súvisí so stabilitou meraného signálu. Dokonca aj v rámci jednej periódy sa frekvencia signálu môže meniť v závislosti od času. Analýza frekvenčného spektra je rovnako nad rámec tohto článku.

V článku je pre referenčný oscilátor použitá skratka TCXO čo je teplotne kompenzovaný kryštálový oscilátor. Pre meranie do 7 desatinných miest sú takéto oscilátory dostatočné. Pre požiadavky vyšších presností je vhodné použiť OCXO (vyhrievané oscilátory) alebo CSAC (chip-scale atomic clock). Pre výpočty už v tom prípade nebude postačovať použitie FLOAT aritmetiky, ale bude nutné použiť typ DOUBLE [5]. Nevhodným algoritmom je možné výrazne znížiť presnosť merania. Väčšina čítačov dokáže pracovať so vstupným signálom v jednotkách MHz až desiatkach MHz. Pre vyššie frekvencie je potrebne použiť vhodnú preddeličku. Do 200MHz sa dajú použiť štandardné obvody (napr. 74AHC1G4210 alebo 74LVC161), na vyššie frekvencie treba použiť ECL deličky.

2. Konvenčný čítač

Čítač spočíta počet impulzov počas jednej sekundy (alebo iný referenčný čas) a výsledok sa zobrazí na displeji alebo sa s ním môže ďalej pracovať. Pritom sa akceptuje fakt, že metóda merania spôsobuje zaokrúhľovanie na jednu periódu. Pri použití 10-tkových čítačov a vhodných prevodníkov z BCD na display nie je potrebné ďalšie spracovanie. Vhodné je však použitie synchrónnych čítačov kvôli “súčasnému” zápisu hodnoty do záchytného registra a resetu čítača.

Obr.2 Bloková schéma konvenčného čítača bez MCU

Pri použití čítača integrovaného v MCU je vhodné pri hrane časovej základne urobiť záchyt čítača CT1 do registra a vypočítať vždy rozdiel z predchádzajúceho stavu. To znamená, že sa nerobí reset čítača pred novým meraním. Počet impulzov je teda :

(3)    Nn = Kn - Kn-1    kde Kn je hodnota CT1 v čase n*T1s
                                 a Kn-1 je hodnota CT1 z predchádzajúcej vzorky

Obr.3 Bloková schéma konvenčného čítača pri použití MCU

Pre meranie je potrebné mať presnú časovú základňu 1s prípadne inú požadovanú. Bežne sa používa 0.1s pre rýchle meranie a 10s pre presnejšie meranie. Vtedy stačí len “presúvať” desatinnú bodku pri indikácii v ráde kHz. Pri iných časových základniach treba urobiť prepočet :

(4)    f = NCT/tM    kde NCT je počet zachytených impulzov a tM je doba merania

Časová základňa sa realizuje použitím presného kryštálového oscilátora s vhodnou preddeličkou. Na obrázku Obr.3 je to druhý čítač CT2.

Presnosť merania

Majme časovú základňu 1 sekundu. Pri frekvencii signálu 1 000 000,5Hz bude čítač zobrazovať striedavo hodnoty 1 000 000 a 1 000 001. V tomto prípade je presnosť metódy merania 1/1e6 = 0.0001% = 1ppm (part per million). Presnosť je vynikajúca aj pre pomerne presné merania a chybu merania pravdepodobne viac ovplyvňuje presnosť časovej základne ako samotná metóda merania. Majme časovú základňu 1 sekundu. Avšak meriame signál 10,542Hz. Čítač bude zobrazovať striedavo hodnoty 10 a 11. V tomto prípade je presnosť merania 1/10 = 0.1 = 10%. Presnosť metódy je veľmi nízka a v podstate meranie je vhodné len ako indikácia existencie signálu.

Obr.4 Vplyv meranej frekvencie na rozlíšenie konvenčného čítača

Obr.4 ukazuje relatívne rozlíšenie konvenčného čítača (v digitoch). Predĺžením času merania stúpne rozlíšenie (z 1Hz na 0.1Hz). Naopak pri požiadavke rýchleho merania krok stúpne na 10Hz.

Výhody a nevýhody:
+ jednoduchá realizácia
+ dá sa vytvoriť aj štandardnými logickými obvodmi bez použitia MCU
+ definovaná dĺžka merania
+ časovú základňu (1s) môže vytvárať aj low-power 32kHz oscilátor
- nepresné pri nízkych a stredných frekvenciách

3. Meranie periódy

Princíp metódy je podobný s predchádzajúcou metódou, avšak do čítača vstupujú impulzy z referenčného oscilátora (napríklad 10MHz TCXO). Čas merania je daný periódou signálu. Výsledkom merania je perióda signálu s krokom dt = 1/Fref. Periódu treba následne prepočítať na frekvenciu alebo môžeme pracovať priamo s periódou signálu. Pri konfigurácii ekvivalentnej ku Obr.5 (využitie čítača v MCU) opäť platí vzorec (3). Záchyt hodnoty je samozrejme na hranu vstupného signálu.

Obr.5 Bloková schéma jednoduchého merača periódy

Presnosť merania

Majme Fref = 10MHz a meriame 10,542Hz. Perióda T = 1/f = 0.094 858 660 59 sekúnd. Čítač napočíta T*Fref impulzov čo je 948586 alebo 948587 (krok 0.1us). Výpočtom získame údaj f = Fref/N = 10.542006Hz respektíve 10.541995Hz. Čiže meriame s rozlíšením 10uHz čo znamená 1ppm respektíve 0.0001%. Majme Fref = 10MHz a meriame 1 000 000,5Hz. Perióda T = 1/f = 0.999 999 500us (micro sekúnd). Čítač napočíta T*Fref impulzov čo je 9 alebo 10. Výpočtom získame údaj f = Fref/N = 1.000MHz respektíve 1.1111MHz. Čiže meriame s rozlíšením 100kHz čo znamená 10%.

Obr.6 Vplyv meranej frekvencie na rozlíšenie merania periódy

Výhody a nevýhody:
+ vhodné pre meranie pomalých signálov
- nepresné pri stredných a vysokých frekvenciách
- nutný prepočet
- meniaca sa dĺžka merania vo veľkom rozsahu

4. Meranie periódy s preddeličkou

Ak meranie periódy doplníme o pripínateľnú preddeličku (1:1, 1:10, 1:100 až 1:10e6) tak môžeme meranie periódy vždy dostať do rozsahu 0.1 až 1s a tým pádom meranie bude vždy vo veľkom rozlíšení. Chyba merania bude daná hlavne presnosťou referenčného signálu a prípadne vstupnými obvodmi. Samozrejme vypočítanú hodnotu frekvencie treba naviac prenásobiť faktorom deličky. Ak sa celé spracovanie vykonáva v MCU, tak je možné preddeličku použiť aj binárnu a do programu zahrnúť aj sekvenciu pre automatickú voľbu rozsahu. Samozrejme to komplikuje program.

Výhody a nevýhody:
+ vhodné pre meranie širokého rozsahu signálov
+ malé zvýšenie zložitosti oproti čistému meraniu periódy ak je možné využiť preddeličku v MCU
+ dĺžka merania sa mení, ale v menšom rozsahu
- treba riešiť rozsahy
- nutný komplikovanejší prepočet

5. Recipročný čítač

Ďalším krokom prirodzene bude snaha, aby preddelička kopírovala vstupný signál a súčasne sme merali “periódu” ako v predchádzajúcom spôsobe. Avšak nerobiť to vo dvoch krokoch štýlom automatický rozsah, ale v jednom kroku. Vstupný signál smeruje do čítača CT1 (na obr.7 je to CT32B0) a súčasne sa v druhom čítači CT2 (CT32B1) počítajú impulzy z referenčného signálu (hodiny). Oba čítače sú riadené rovnakým signálom od synchronizácie "S". Pri hrane synchronizačného pulzu sa zachytia hodnoty v CAPTURE registroch (CT32B0.CR3 a CT32B1.CR0). Čas merania je riadený pomocou komparačného (MATCH) registra CT32B1.MR1. Funguje ako mono-stabilný klopný obvod (MKO) a zabezpečuje požadovanú dĺžku merania (napríklad 1 sekunda). Štart merania sa začína hranou vstupného signálu ktorú zachytí syncho-obvod S. Po uplynutí času MKO sa povolí ukončenie merania. To však nastane až pri najbližšej hrane vstupného signálu. Teda neukončí sa okamžite, ale synchronizuje so vstupným signálom. CT1 spočíta počet impulzov a CT2 zmeria čas medzi nimi s rozlíšením 1/Fref. CT2 teda vždy nameria viac ako 1 sekundu! Pri frekvenciách nad 10Hz si užívateľ takéto predĺženie merania ani nevšimne, avšak automatizovaný systém merania s tým môže mať problém. Pri pomalých priebehoch (menej ako 1Hz) sa čas merania predlžuje automaticky podľa dĺžky periódy.

(5)    f = (N/M) * Fref    kde N je údaj z CT1 (CT32B0.CR3) a M je údaj z CT2 (CT32B1.CR0)

Obr.7 Bloková schéma recipročného čítača na MCU

Ku zachytenej hodnote z CT2 sa pripočíta 1 sekunda (pri 10MHz oscilátore je to číslo 10 000 000). Znovu platí, že CT1 aj CT2 bežia kontinuálne a pre získanie hodnoty sa využívajú záchytné registre.

(6)    Nn = Kn - Kn-1    kde Kn je hodnota CT1 v čase n
                                  a Kn-1 je hodnota CT1 z predchádzajúcej vzorky


(7)    Mn = Tn - Tn-1    kde Tn je hodnota CT2 v čase n
                                  a Tn-1 je hodnota CT2 z predchádzajúcej vzorky

Poznámka: Ak čítače na MCU umožňujú súčasne so záchytom uskutočniť aj nulovanie čítačov, netreba prepočty (6) a (7) realizovať.

Tento spôsob merania nevyžaduje prepínanie rozsahov. Ak vstupný signál ma dlhšiu periódu ako čas MKO, meranie sa automaticky predlžuje. Čas nastavenia MKO nikde vo vzorci nevystupuje. Preto pri hardvérovej realizácii MKO (napríklad RC-členom alebo externým signálom) sa môže podľa potreby meniť a pritom jeho presnosť nie je kritická. Samozrejme s dlhším časom merania sa dajú dosiahnuť vyššie presnosti. Avšak limitujúce budú pravdepodobne skôr vstupné obvody a stabilita Fref. Presnosť Fref nie je kritická, lebo sa dá kompenzovať vo výpočtoch zadaním kalibrovanej hodnoty. Vysoká stabilita je samozrejme žiadaná. Čítač CT2 treba dimenzovať s ohľadom na najnižšiu možnú frekvenciu a súčasne vo FW MCU treba sledovať pretečenie CT2 a adekvátne na tento stav reagovať.

(8)    Tmax = 2n/Fref    kde n je počet bitov CT2

Pri 32-bitovom čítači a Fref = 10MHz je to takmer 430 sekúnd.

Presnosť merania

Rozlíšenie takéhoto čítača je ±1 perióda Fref za dobu merania. Čiže 1/(Fref * T).
Rozlíšenie v digitoch (number of digits) je potom :

(9)    NOD = log(Fref * T)

a je prakticky nezávisle od samotného signálu. Pre nízke frekvencie sa však dobra merania predlžuje, takže rozlíšenie začne stúpať.

Realizácia

Recipročný čítač som realizoval na MCU od NXP, LPC1227. Obsahuje 2x 32-bitové čítače s možnosťami záchytu aj komparácie stavov. Synchronizačný obvod bol použitý 74LVC1G175. Čas merania bol pomocou CT32B1.MR1 nastavený na 1 sekundu. V prípade, že signál je odpojený alebo má periódu menšiu ako 20 sekúnd, zareaguje CT32B1.MR0 – urobí inicializáciu merania. Čítače LPC1227 umožňujú spolu so záchytom hodnôt aj nulovanie čítačov a preto netreba zakaždým prepočítavať získané hodnoty a ani CT32B1.MR1 netreba meniť.

Obr.8 Realizácia na LPC1227

Nasledujúce grafy ukazujú funkciu synchronizačného obvodu. Čas merania (MR1) je v oboch prípadoch nastavený na 1 sekundu. Reálny čas merania na Obr.9 je 1.2 sekundy a na Obr.10 dokonca 3 sekundy.

Obr.9 Signály pri meraní frekvencie 2.5Hz

Obr.10 Signály pri meraní 0.333Hz

LS – vstup, logicky signál; nábežná hrana nastavuje klopný obvod na log.1 ak nie je aktívny signál CLR (EN)

EN – signál generovaný z CT32B1; udalosťou CAPTURE CR0 sa nuluje, MATCH MR1 urobí nastavenie.

REC – riadiaci signál pre CAPTURE, preberá stav EN pri nábežnej hodnote LS; nábežná hrana REC spôsobí CAPTURE a tým pádom nulovanie signálu EN.

Výhody a nevýhody:
+ vhodné pre meranie širokého rozsahu signálov
+ netreba prakticky vôbec riešiť rozsahy (okrem prípadu externej HF preddeličky)
+ prakticky konštantná presnosť merania nezávisle od frekvencie signálu
- dĺžka merania sa netriviálne mení v závislosti od vstupného signálu
- nutná hardvérová podpora

V čase, keď som navrhoval metódu recipročného čítača som hľadal riešenie ktoré bude merať presne a súčasne bude možné realizovať ho na bežnom modernom MCU. Až následne som hľadal na internete túto metódu. Nakoniec som ju našiel v článku [1] a oddiaľ som aj nakoniec prevzal označenie „recipročný čítač“. Preto popis v tomto článku je mierne iný ako popis v [1], ide však o rovnaký typ čítača.

Zdroje

[1] Staffan Johansson, “New frequency counting principle improves resolution”, Spectracom, z originálu 10 September 2013
[2] https://en.wikipedia.org/wiki/Frequency
[3] https://en.wikipedia.org/wiki/Frequency_counter
[4] https://www.electronics-notes.com/articles/test-methods/frequency-counter-timer/what-is-a-frequency-counter-timer.php
[5] https://en.m.wikipedia.org/wiki/Single-precision_floating-point_format

Máte aj vy zaujímavú konštrukciu, alebo článok?

Máte aj vy zaujímavú konštrukciu, alebo článok a chceli by ste sa o to podeliť s viac ako 250.000 čitateľmi? Tak neváhajte a dajte nám vedieť, radi ju uverejníme a to vrátane obrazových a video príloh. Rovnako uvítame aj autorov teoretických článkov, či autorov zaujímavých videí z oblasti elektroniky / elektrotechniky.

Kontaktujte nás!


Páčil sa Vám článok? Pridajte k nemu hodnotenie, alebo podporte jeho autora.
 

     

Komentáre k článku

Zatiaľ nebol pridaný žiadny komentár k článku. Pridáte prvý? Berte prosím na vedomie, že za obsah komentára je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.
Pre komentovanie sa musíte prihlásiť.

Vyhľadajte niečo na našom blogu

PCBWay Promo

JLCPCB Promo
PCBWay Promo

JLCPCB Promo
PCBWay Promo

JLCPCB Promo
Webwiki Button