Meranie frekvencie

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. Na tejto stránke nájdete:
  • Meranie frekvencie a odosielanie na sériový port - Toto bol pôvodný experiment na stránke, ktorý testoval frekvenciu stmievača LED diód, založeného na obvode NE555.
  • Meranie frekvencie a zobrazovanie na displeji Nokia 5110 - Toto je návod na poskladanie merača frekvencie pomocou ATmega328P na plošnom spoji, ktorý je možné používať samostatne. Moja verzia je poskladaná na veroboarde, ale nič vám nebráni v tom, aby ste si to navrhli aj na normálnom plošnom spoji.

If you came here from Youtube

If you are looking for source code, you need to to download frequency_counter_nokia.ino from this page and nokia5110.zip from page Nokia 5110.

Testovanie na NE555

Počas práce na LED svetle som si poskladal na prototypovej doske 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.

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.

Výstup na displeji Nokia 5110

Aby som nebol obmedzený len na pripojenie ku počítaču, poskladal som si Arduino na plošnom spoji a skombinoval ho s displejom Nokia 5110. Arduino pracuje na 5 V, displej na 3,3 V, preto bolo potrebné na päť dátových vodičov doplniť level shifter.
https://sites.google.com/site/arduinoslovakia/meranie-pomocou-arduina/meranie-frekvencie/nokia5110_frequency_counter.pdf?attredirects=0
Cez konektor P1 sa to pripojí na +5 V. Pomocou 78L33 sa vyrába 3,3 V, ktoré potrebuje displej. ATmega328P-Pu je poskladaná ako klasické Arduino na 16 Mhz. V schéme nie je zakreslený ISP konektor, cez ktorý sa programuje. Programovanie je ale v tomto prípade jednorázová záležitosť, takže sa môžete slobodne rozhodnúť, či to tam dať alebo nedať. Všetky dátové vodiče idú cez CD4505BE, ktorý zabezpečí konverziu logických úrovní. Zdroj obdĺžnikového signálu sa pripája na P2.
Programuje sa v Arduino IDE a je to v podstate len modifikácia pôvodného programu frequency_counter.ino. Zmenil som tam len zobrazenie zo sériového portu na displej a predĺžil som interval merania na 1000 ms. Program je v súbore frequency_counter_nokia.ino. Na jeho skompilovanie je potrebné stiahnuť si knižnicu Nokia5110.zip.
Obvod sa dá používať nasledovnými spôsobmi:
  • Cez ISP konektor a USBAsp je plošný spoj pripojený k počítaču k prvému USB. Ku druhému USB je pripojené Arduino UNO, na ktorom sa nachádza nejaký program, ktorý generuje TTL signály. Napríklad klasické PWM. Spolu sú prepojené jedným konektorom, cez ktorý sa signály prenášajú do merača frekvencie.
  • Alebo je cez ISP konektor a USBAsp plošný spoj pripojený k počítaču, odkiaľ si berie energiu. Sledovaný obvod je pripojený k plošnému spoju, odkiaľ je napájaný.
  • Alebo je celý plošný spoj pripojený ku sledovanému obvodu, odkiaľ si berie energiu a nie je potrebné žiadne pripojenie k počítaču.
ċ
frequency_counter.ino
(4k)
Robo Ulbricht,
18. 1. 2014, 0:12
ċ
frequency_counter_nokia.ino
(4k)
Robo Ulbricht,
4. 12. 2014, 11:28
Ċ
Robo Ulbricht,
1. 12. 2014, 10:52
Comments