Přesný měřič frekvence s procesorem ATmega8

(1 Hz až 50 MHz, příp. 1 Hz až 100 MHz)
Přesný měřič frekvence s procesorem ATmega8
Miroslav Němeček Pridal  Miroslav Němeček
  987 zobrazení
3
 1
Zaujímavé zapojenia

Srdcem měřiče frekvence je procesor ATmega8, doplněný děličkou 393. Na výběru děličky závisí dosažitelný horní mezní kmitočet. S děličkou Philips Nexperia NXP 74HC393 je možné dosáhnout 100 MHz. Dělička Toshiba 74VHC393FT má udávaný typický mezní kmitočet 170 MHz (měřič zobrazí max. 100 MHz). Já jsem použil Texas Instruments SN74HC393N, který uvádí limit 25 MHz, ale při testech pracoval až do 50 MHz. Na použité děličce závisí i návrh plošného spoje. Mnou použitá dělička SN je v pouzdru DIL14. Děličky NXP a Toshiba jsou v pouzdru SO14, plošný spoj je nutné upravit na SMD verzi.

Klasické měřiče měří frekvenci tak, že počítají pulzy za dobu např. 1 sekundy. Tato metoda je vhodná pro měření vysokých frekvencí. Jiná metoda, vhodná pro nízké frekvence, měří naopak interval mezi pulzy.

Tento měřič frekvence obě metody kombinuje. Čítá pulzy po dobu přibližně 1 sekundy a současně měří časový interval mezi prvním a posledním pulzem. Díky tomu je schopný změřit přesnou frekvenci na plný počet platných číslic v plném rozsahu 1 Hz až 100 MHz.

K měření frekvence periodického signálu se zpravidla používají dvě metody:

  • počítání pulsů za danou dobu (typicky 1 sekunda)

nebo

  • měření doby mezi dvěma následujícími pulsy.

První metoda je vhodná k měření vysokých kmitočtů, pro nízké kmitočty je nepřesná. Druhá metoda je vhodná naopak k měření nízkých frekvencí a je nepřesná pro vysoké kmitočty. Zde uvedený popis obě metody kombinuje a umožňuje přesné měření frekvencí v plném rozsahu. Metoda byla realizována k přesnému měření frekvencí (až na 7 číslic) v rozsahu 1 Hz až 100 MHz s procesorem ATmega8, pracujícím na frekvenci 16 MHz.

Schéma zapojení a metoda měření

Ve schématu je na místě procesoru ATmega8. Použil jsem ze zásob ATmega8L, který je určen pro nízká napětí a nízké frekvence, ale i na 5V s 16 MHz pracoval v pořádku. Na vstupu měřiče je použita dělička 393. Na výběru děličky závisí dosažitelný horní mezní kmitočet. S NXP 74HC393 nebo Toshiba 74VHC393FT pracuje měřič až do 100 MHz. Výstup děličky je veden na analogový multiplexer NC7SB3157P6X, který přepíná vstup pro měření buď přímý, nebo přes děličku. Přepínání obstarává procesor přes výstup PD5. Při vzestupu frekvence nad 1 MHz zapne děličku, při poklesu pod 500 kHz vypne děličku. Bez přítomnosti signálu procesor děličku zkusmo zapíná a vypíná. Výstupem PD6 se nuluje předdělička.

Schema zapojení

Signál je z multiplexeru přiveden jednak na vstup T0 (PD4) a jednak na ICP (PB0). Vstup T0 je vstup časovače Timer0. 8-bitový čítač Timer0 čítá pulzy přicházející na vstup T0. Při přetečení se softwarově inkrementuje čítač pulzů o 256. Vstup ICP je vstup časovače Timer1. 16-bitový čítač Timer1 se stará o přesné měření času. Při přetečení čítače se inkrementuje vyšší slovo čítače času.

Měření frekvence probíhá formou záznamu časových razítek. Čítače běží stále dál, tj. čítač Timer0 počítá pulzy a čítač Timer1 počítá čas. Zhruba každou sekundu se sejme časové razítko - stav čítače času z Timer1 a počet pulzů z Timer0. Okamžik časového razítka je synchronizovaný hranou na vstupu ICP. Z přírustku času a z přírustku počtu pulzů se poté vypočte přesná frekvence a perioda pulzu. Délku doby měření určuje čítač Timer2, který počítá uběhlý čas v µs.

Bližší popis metody měření naleznete na této stránce.

Měřič se napájí ze střídavého zdroje 9V s usměrňovacím můstkem a stabilizátorem. Stabilizátor vyžaduje chlazení. Vhodnější by bylo změnit napájení na USB konektor bez stabilizátoru a napájet měřič z běžné USB nabíječky.

K procesoru je připojen dvouřádkový LCD displej (2x16 znaků), pracující ve 4-bitovém módu. LCD dvouřádkové displeje bývají po elektrické stránce kompatibilní (obvykle se dodržuje kompatibilita s řadičem Hitachi HD44780), rozdíly však bývají s rozložením pinů. Proto pozor u jiných displejů - je možné, že budete mít proti schématu jinak piny 15 a 16 (prohozené LED- a LED+)!

Vstup měřiče je ošetřen oddělovacím kondenzátorem a větví z odporů, která nastaví pracovní bod blízko překlápěcí úrovně. Tím je zajištěna vyšší citlivost, než by odpovídalo TTL úrovním. Řešení to není nejlepší, doporučuji zauvažovat o jiné variantě. Pro slabé signály může být citlivost malá, pro zarušené signály zas naopak velká, hodil by se zesilovač s hysterezí. Např. výstup z Generátoru s PWM modulací je modulován vyšší frekvencí a to se projevuje tak, že měřič měří zčásti i frekvenci nosné (při napětí kolem 0) a tak je výsledek měření zkreslený. Někdy může vadit vysoká vstupní impedance, kdy je měření zkreslené kmity průmyslového rušení, které chytají nestíněné vodiče (projeví se vyšší indikovanou frekvencí). Správným řešením by zřejmě byl vstup s hysterezí s automatickou regulací citlivosti.

Plošný spoj a osazení

Plošný spoj je navržen jako jednostranný, s několika drátovými propojkami.

K napájení je zvolen střídavý zdroj 9V (ze starého modemu), můstkový usměrňovač a stabilizátor 7805. Stabilizátor vyžaduje chladič. Aby se vešel pod displej, musel jsem žebra chladiče ohnout. Pokud použijete napájení z USB konektoru (z USB nabíječky +5V), odpadne potřeba usměrňovače a chladiče.

Do displeje je přiletována řada pinů a je zasouvací do konektoru v plošném spoji. Řešení s konektorem velmi dopočuruji, raději než propojení drátovým kabelem - mnohem snáze se s tím manipuluje a displeje můžete snadno vyměňovat. Potíž můžete mít s výběrem displeje. Po elektrické stránce bývají displeje kompatibilní (řadič kompatibilní s Hitachi HD44780), ovšem může se lišit rozložení pinů. Displej, který jsem použil, rozložením pinů nejvíce odpovídá displeji WINSTAR WH1602A-YGH-ET - což znamená: piny se nachází vlevo dole, v pořadí 14 (=DB7) ... 1 (=Vss), 16 (=K LED-), 15 (=A LED+). Můžete sice použít jiný displej (může i vyjít levněji), ale může být potřeba změnit piny na plošném spoji, jako např. pořadí pinů otočit a přesunout nahoru, tj. je potřeba zvětšit plošný spoj.

Před sestavením si zkontrolujte, jak vám elektronika vyjde do krabičky na výšku. Použil jsem krabičku podobnou krabičce KM78, jen je o pár milimetrů vyšší. Možná budete muset šetřit s výškou konektoru pro LCD displej (zvolit nižší konektor) a zvážit, zda se vám tam vejde případný chladič stabilizátoru a napájecí konektor (příp. víko krabičky podložit, aby se vytvořil větší prostor).

Doporučuji nejdříve přiletovat napájecí obvody a zkontrolovat napájecí napětí. Po naletování ostatních součástek se chyby napájení už špatně hledají nebo dokonce může dojít k poškození některých obvodů.

Obvod 393 doporučuji umístit do patice, aby ho bylo snadné měnit při hledání obvodu s nejvyšším mezním kmitočtem. Ovšem použijete-li NXP 74HX393 nebo Toshiba 74VHC393FT, je nutné spoj upravit z DIL14 patice na SO14.

Spodní strana (strana spojů):

Osazení součástek:

 

Deska je připevněna ke dnu krabičky dole 2 šrouby (lze použít krabičku KM78, ale může být potřeba použít nižší konektor pro LCD a nižší chladič stabilizátoru). Doporučuji do horních děr přišroubovat ještě distanční sloupky, jako vzpěry, aby byla deska uchycena stabilněji. Ještě lepší by bylo připravit plošný spoj přes celou plochu krabičky, aby se dal přišroubovat i horními šrouby, což je i potřebná úprava pro displej s piny vlevo nahoře.

Displej je upevněn na dolní straně konektorem a na horní straně šrouby ke sloupkům. Horní díry v displeji může být potřeba trochu rozšířit pilníkem, aby se do nich vešly šrouby M3.

Do víka krabičky jsou upevněny 2 banánkové zdířky a vyřezán otvor pro displej.

Potisk krabičky (vytiskl jsem na inkoustové tiskárně):

Na horní stranu krabičky jsem přilepil popisku a přelepil izolepou proti otěru.

Naprogramování a oživení

Kód k naprogramování procesoru ve formátu HEX nebo BIN naleznete v balíku zdrojových souborů. Po naprogramování nastavte pojistky následujícím způsobem (konfigurace pro krystal 16 MHz):

low = 0xEF (11101111), high = 0xC9 (11001001).

Po připojení napájení by se měl rozsvítit displej následujícím způsobem:

První řádek indikuje nepřítomnost signálu. V druhém řádku se zobrazí aktuální úroveň vstupu LOW nebo HIGH - lze využít k nastavení rozhodovací úrovně vstupních obvodů.

Po přivedení signálu se v prvním řádku zobrazí frekvence a v druhém řádku perioda pulzů.

Budete-li chtít program upravovat, překládá se pomocí WinAvr 20100110 (avr-gcc 4.3.3). Instalátor lze stáhnout např. ze SourceForge https://sourceforge.net/projects/winavr/. Program se překládá povelovým souborem c.bat (=compile).

Kalibrace

Při osazení běžným krystalem je dosažená přesnost frekvence při pokojové teplotě zhruba kolem 50 ppm (= odchylka 0,005%) - odchylka se objeví na předposlední číslici údaje. Přesnost krystalu můžeme zvýšit kalibrací o 1 řád. Kalibrace kmitočtu a času je činnost v domácích podmínkách nejsnáze dosažitelná, protože máme k dispozici přesný časový normál, např. prostřednictvím internetu.

Ke kalibraci krystalu měřiče frekvence lze použít program ClockTest. Po nahrátí programu do procesoru a zapnutí napájení se začne na displeji odpočítávat čas. V prvním řádku je uběhlý čas v sekundách, zaokrouhlený na celý počet minut. Za ním následuje odchylka od celé minuty, v sekundách (v rozsahu -30 .. +30 sekund). Tj. od 30. sekundy se zobrazí záporná odchylka, od celé minuty kladná odchylka. V druhém řádku se zobrazí vypočítaná frekvence procesoru, která by odpovídala aktuálnímu uběhlému času v celých minutách. Podle obrázku - pokud uběhly přesně 4 minuty a na displeji je údaj "240-7", znamená to, že procesor se zpozdil o 7 sekund, myslí si že uběhlo jen "240 - 7" sekund, frekvence krystalu by v tom případě byla 15534440 Hz.

Po určité době se odečte uběhlý čas indikovaný na displeji, a skutečně uběhlý čas. Opravená frekvence procesoru pak je F = F_CPU * čas_indikovaný / čas_skutečný. Opravená frekvence procesoru se zapíše do parametru F_CPU v MAKEFILE zdrojového kódu měřiče, upravený program se přeloží a zapíše do procesoru.

Příklad použití

Začínám kalibrační měření v 19:55:00. Kalibraci budu měřit 1 den. Druhý den odečítám údaj na displeji v 19:26:00, tj. za 84660 sekund. Na displeji je údaj 84660+5. To znamená - uběhlo 84660 sekund celých minut, ale procesor si myslí že je o 5 sekund více. Skutečná frekvence procesoru pak je: F = 16000000 * 84665 / 84660 = 16000945 Hz (stejná hodnota by se měla zobrazit i v druhém řádku displeje). Tuto hodnotu zapíši do proměnné F_CPU v makefile, přeložím a vypálím do procesoru. Nyní mohu zopakovat upřesňující měření s delším časem.

Pozn.: Je vhodné zvolit dobu měření takovou, aby odchylka činila několik sekund (aby nevznikla chyba nepřesností odečtu času) a přitom aby byla menší než 30 sekund (aby údaj celých minut na displeji souhlasil se skutečně uběhlým časem). Před kalibrací je vhodné ponechat přístroj několik minut zapnutý, aby se stabilizovaly vnitřní teploty. I příště, budete-li chtít přesný údaj na plný počet číslic, je vhodné nechat přístroj nejdříve stabilizovat, aby se dosáhly stejné teplotní podmínky jako při kalibraci. Samozřejmě kalibrace už nebude platná, budete-li měřič používat v mrazu nebo v horkém létě; měřič nemá teplotní stabilizaci.

Během kalibrace můžete využít programy ve složce "util". Program CLOCK.EXE je Windows program k zobrazení aktuálního času (Windows 10 sice také umí zobrazit čas se sekundami, ale není to okno které by zůstalo trvale na displeji). Program AboutTime je program pro synchronizaci času PC s přesným časovým serverem. Nejsou-li implicitní servery v provozu, lze využít servery tik.cesnet.cz a tak.cesnet.cz.

Po správné kalibraci by se měly údaje generátoru a měřiče lišit jen minimálně. Při měření použijte obdélníkový signál. Při měření tvarových kmitů se používá PWM regulace, měřič by zachytával i kmity PWM nosné a údaj by byl zkreslený. Ke zkreslení údaje může dojít i u obdélníkového signálu, používáte-li dlouhé nestíněné vodiče. Vodiče zachytávají průmyslové rušení a to se může projevit tak, že údaj frekvence přeskakuje náhodně až o několik jednotek Hz (desetinná místa se nemění). Týká se to především rozsahu kmitočtů ve stovkách Hz. Můžete to ošetřit tak, že měřič zapojíte do výstupů s vlnovkou - použije se RC filtr, který potlačí i rušení indukované na vodičích.

Nedostatky a opravy

  • Použít raději napájení přes USB konektor, nevyžaduje stabilizátor a USB zdroje (nabíječky) jsou dnes běžnější.
  • Lépe vyřešit vstupní obvody (použít obvod s hysterezí a automatickou regulací citlivosti).
  • Jako displej použít raději verzi s horními piny, je dnes běžnější; ale ještě raději upravit plošný spoj aby byl univerzální pro obě verze.
  • Obvod 393 dát do objímky, aby byl snadno vyměnitelný a mohl se vytipovat obvod s nejvyšším mezním kmitočtem.
  • Na plošný spoj doplnit SMD variantu obvodu 393, verze NXP nebo Toshiba v SMD dosahují 100 MHz.

Downloady

Zdrojové kódy FreqMeter s firmware

Schéma zapojení v Eagle Free

Grafické podklady (schéma a plošný spoj)

Program ClockTest pro kalibraci krystalu

Kompletní download podkladů FreqMeter (včetně www stránky)

Použité součástky

Výběr součástek byl uzpůsoben na prodejnu GM Electronics, kterou mám blízko. Displej jsem zde vybral takový, který svými piny odpovídá displeji, který jsem použil, tj. piny jsou vlevo dole. Se stejnou funkčností by měl jít použít i jiný displej (2 řádky po 16 znacích), který může být i levnější, ale může mít jiné rozložení pinů. Typicky mají mnohé displeje piny naopak vlevo nahoře, což bude znamenat nutnost upravit (a zvětšit) plošný spoj. Každopádně ještě vyzkoušejte zapojení LED diody pro osvícení pozadí (u mých displejů jsou piny obráceně než odpovídalo datasheetu).

V seznamu jsem uvedl děličku SN74HC393N, kterou jsem jako jedinou sehnal ve svém obchodě GM a se kterou měřič pracuje do 50 MHz. Chcete-li dosáhnout vyšší frekvence, zkuste vyhledat jinou variantu obvodu 393. Verze od Philips NXP 74HC393 pracuje až do 100 MHz. Toshiba 74VHC393FT má udávaný typický mezní kmitočet 170 MHz. Obě jsou k dostání na mouser.com v SMD verzi - bude potřeba plošný spoj upravit pro variantu SMD. Měřič zobrazí max. 100 MHz.

Součet ceny za vše je 441 Kč (včetně krabičky, fotocuprextitu, dražšího displeje a dražšího konektoru).



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

       

Komentáre k článku

Stanisław Sieniuć pred rokom

Gratulujeme. Nadherna prace. Udělal jsem počítadlo a funguje skvěle. Ještě musím zkontrolovat, zda funguje pro nízké frekvence.
Program je napsaný v C. Zeptám se v jakém prostředí jsi psal. V zatmění určitě ne. Odpovězte, prosím.
Píšu překladatelem. Promiňte.
Pozdravy.
Stanislava.

Pre komentovanie sa musíte prihlásiť.

Vaša reklama na tomto mieste

Vyhľadajte niečo na našom blogu

PCBWay Promo

ourpcb Promo

PCBWay Promo

ourpcb Promo

PCBWay Promo

ourpcb Promo


Webwiki Button