Meranie frekvencie

Zápisník experimentátora

Meranie frekvencie pomocou Arduina je záležitosťou iba vhodne napísaného programu, ktorý využíva niektorý z troch počítadiel v Arduine. V tomto článku sa zameriame na podstatu merania frekvencie. Nameranú frekvenciu budeme odosielať cez sériový port do počítača.

Testovanie na NE555

Počas práce na LED svetle som si poskladal na skúšobnom poli stmievač. Stmievač je postavený okolo obvodu NE555. Poskladal som ho len s malou LED diódou, aby sa dala otestovať jeho funkčnosť. Po poskladaní sa dalo potenciometrom pekne meniť, ako silno dióda svieti.

Hneď ma ale napadla otázka, ako je možné jednoducho odmerať, na akej frekvencii to vlastne osciluje? Po krátkom pátraní bolo jasné, že aj frekvenciu je možné odmerať pomocou Arduina, čo znamená, že ju máme skoro zadarmo. Celý trik je v tom, že sa meria pomocou digitálneho pinu 5. Naň sa privedie výstup z obvodu NE555 (pin 3) a potom sa už len meria. Existuje na túto tému aj niekoľko knižníc, ktoré sa od seba líšia drobnosťami, ale po triezvom zvážení som usúdil, že to treba robiť jednoducho a stačí iba obyčajný jednorázový program, ktorý odmeria frekvenciu a pošle výsledok na sériový port. Takýto program som našiel na stránke Nicka Gammona. Na stránke sa venuje problematike podrobnejšie, tento program bol úplne prvý v poradí.

Po odmeraní môjho stmievača sa ukázalo, že osciluje medzi 900-1200 Hz.

Ako meranie funguje

Princíp merania je veľmi jednoduchý. Využíva sa fakt, že počítadlá v Arduine (UNO ich má tri) sa dajú ovládať aj internými aj externými hodinami. Timer1 je 16bitové počítadlo a práve toto sa dá napojiť na zdroj externého signálu. Ak meriame frekvenciu, nepotrebujeme ale počítať každý jeden impulz. Môžeme využiť skutočnosť, že si počítadlo počíta akoby pre seba a len raz na čas sa dozvieme kontrolnú informáciu o tom, ako to postupuje.

Takže nám stačí mať zapnuté prerušenie na počítadle a to nám samo vyvolá prerušenie raz za 65536 odmeraných impulzov. V tom okamihu iba pripočítame ku vlastnej premennej jednotku a tak postupne rátame počet prerušení.

Ku nemu potrebujeme ešte jedno počítadlo, ktoré raz za sekundu spočíta počet prerušení x 65536 a ku tomu pripočíta aktuálny stav v počítadle Timer1. A to je všetko. Už to len stále dookola opakujeme a výsledok zobrazujeme na mieste, ktoré sa nám hodí.

Aká je presnosť?

Na experimenty som si postavil ešte jeden obvod, na ktorom som otestoval presnosť merania. Obvod je schopný oscilovať medzi pár Hz - 320 kHz. Meral som to aj osciloskopom a výsledky sú potešujúce. Presnosť merania je v podstate identická. Takže možno povedať, že Arduino je v tomto smere plne použiteľné.

Ako zaujímavý doplnok experimentov je priebeh signálu na osciloskope. Pri frekvenciách okolo 300 kHz je z pôvodne pravouhlého signálu už celkom pekná spotvorenina. Ale Arduinu to neprekážalo, meralo to napriek podivným zášklbom na signáli.

Vo videu je ukážka merania.

Maximálna frekvencia

Podobne ako Nick, aj ja som dokázal odmerať 8 MHz signál s pomerne veľkou presnosťou. Program, ktorý v Arduine generuje signál s takouto frekvenciou nájdete na stránke o generovaní hodinového signálu pre iné IC.

Zdrojový kód

Na GitHub sa nachádza zdrojový kód ku tomuto experimentu.


27.05.2016


Menu