Čítač do 100 MHz
Měřit přesně frekvenci potřebuje čas od času každý elektrotechnik nebo bastlíř. Na měření frekvencí existuje vícero metod, avšak v dnešní době je nejjednodušší a nejpraktičtější měření pomocí čítače nebo digitálního osciloskopu 🙂 Já jsem neměl ani jedno z toho, tak jsem se rozhodl, že si čítač postavím. Dnes už bych si zcela jistě koupil nějaký tovární, ale tehdy mě navíc velmi začala bavit práce s mikroprocesory a chtěl jsem s nimi něco vytvářet a tak jednoduše padla volba na čítač.
Parametry čítače
Čítač, který se mi podařilo sestrojit má následující parametry:
- Měřicí vstupy:
- A – vstupní rozsah: 10 MHz – 100 MHz, vstupní impedance: 50 Ω
- B – vstupní rozsah: cca 0,6 Hz – 10 MHz, vstupní impedance: 1 MΩ, citlivost cca 2 Hz – 10 MHz: 25 mV (amplituda) – pro frekvence pod 2 Hz se citlivost snižuje až ke 120 mV amplitudy pro 0,6 Hz, maximální napětí signálu: 0,6 V (lze více, ale snižuje se vstupní impedance)
- Nastavení měření:
- Zobrazení: frekvence nebo perioda signálu
- Vzorkování: 1 s nebo 0,1 s – delší doba vzorkování znamená vyšší přesnost, ale pomalejší odezvu
Trocha teorie - čítače blokově
Schéma zapojení většiny čítačů lze rozdělit do čtyř základních bloků. Ve vstupních obvodech se příchozí signál do čítače zesiluje na zpracovatelnou úroveň a tvaruje na obdélník. Na kvalitě vstupních obvodů je závislá citlivost, ale také odolnost, vstupní kapacita a impedance čítače.
Vhodně upravený signál putuje do procesoru, který signálu změří požadované parametry – nejčastěji frekvenci, ale možno měřit třeba i střídu. To už záleží na konkrétních požadavcích tvůrce nebo zákazníka 🙂 Jde pouze o změnu softwaru. Kvalita softwaru spolu s přesností oscilátoru procesoru udávají celkovou přesnost čítače.
Pak už zbývá jen uživatelské rozhraní, kde si uživatel za pomoci např. tlačítek může navolit parametry měření a nějaký zobrazovač, např. LCD displej, sedmisegmentovky nebo retro digitrony. Samozřejmě nesmí chybět napájecí zdroj 🙂
Popis vyrobeného čítače
Vstupní obvody čítače
Původní myšlenka byla, aby čítač fungoval cca do 100 MHz. Bylo jasné, že vytvořit jeden vstup pro celý tento kmitočtový rozsah nebude jednoduché a tak jsem zvolil kompromis v podobě dvou vstupů čítače – nízkofrekvenčního (do 10 MHz) a vysokofrekvenčního (10 MHz až 100 MHz). U obou vstupních obvodů jsem se držel hesla: „nevymýšlej vymyšlené“ 🙂 Prohledal jsem internet a zcela dokonalou inspiraci pro nízkofrekvenční vstup jsem našel na stránkách Ing. Jeníčka. Popis funkce obvodu je k dispozici na jeho stránkách zde.
Proti původnímu schématu jsem provedl pouze drobné změny. Změny se týkají především použití jiných tranzistorů (původní jsem neměl). V proudovém zdroji je typ použitých tranzistorů zcela nepodstatný a v zesilovači mi z tranzistorů, které jsem měl doma, nejlépe fungovali spínací tranzistory TR15. Ve tvarovači se mi lépe osvědčil TTL obvod 74LS14 namísto CMOS 74HC14. Tento zesilovač a tvarovač jsem doplnil o jednoduchý emitorový sledovač tvořený tranzistorem Q1, který celému zapojení nepatrně snižuje citlivost, ale zato zvyšuje vstupní impedanci na cca 1 MΩ. Diody D1 a D2 tvoří vstupní ochranu, zároveň však kvůli těmto diodám není dobré připojovat na vstup čítače signály s amplitudou větší než cca 0,6 V, poté dojde k otevření diod a začne se výrazně snižovat vstupní impedance. Tento vstupní obvod předurčuje čítač pouze pro měření malých signálů. Pro signály s větší amplitudou by bylo nutné upravit vstupní obvod nebo použít externí dělič nebo sondu. Myslím, že ani jedna z možností by nepředstavovala problém, nicméně mě tento rozsah stačí. Dále jsem zamýšlel, že oddělovací kondenzátory C1 a C2 bude možné vypínačem překlenout pro měření velmi nízkých kmitočtů, ale došlo mi že i kmitočty pod 10 Hz měřím jen sporadicky. Z toho důvodu jsem tuto možnost nakonec nevyužil.
Vysokofrekvenční vstup jsem postavil s obvodem MB501. Tento obvod představuje vysokofrekvenční předděličku, schopnou fungovat od 10 MHz do 1,1 GHz, dle datasheetu. Jedná se v podstatě o katalogové zapojení použitého obvodu, s nastaveným dělicím poměrem 1/64. Z výstupu obvodu MB501 tedy vystupují signály s frekvencemi 156 kHz až 1,56 MHz. Tento signál je dodatečně tvarován obvodem 74LS14 a dále zpracováván shodně se signály na nízkofrekvenčním vstupu. Celý vysokofrekvenční vstupní obvod jsem pro lepší odstínění na DPS přikryl plechovým krytem. Pozn. pouze malá změna proti původně navržené DPS – místo kondenzátoru C23 jsem osadil diody D8, D9 a rezistor R18. Zapojení funguje lépe. Další změny jsou uvedeny nalevo ve schématu.
Důležitou část čítače tvoří obvod IC2 – 74HC153. Pomocí tohoto multiplexeru procesor přepíná na požadovaný vstup (ROZSAH) a vybírá vhodný dělicí poměr (POMER). Do multiplexeru jsou zavedeny signály z obou vstupů přes obvodu IC1 přímo a také z výstupu děličky, tvořené D klopnými obvody V1 – V4 s dělicím poměrem 1/128. Volbu vstupu provádí uživatel, procesor jen přečte, který vstup je zvolený. Volbu dělicího poměru provádí procesor dle velikosti měřené frekvence.
Mikroprocesor
Srdcem čítače je mikroprocesor AT89S52. Je to mírně vylepšená verze totálně klasické 8051 🙂 Procesor 8052 má více paměti, třetí časovač a verze S má navíc možnost ISP (In-System Programming), což je na tomto vylepšení asi to nejzajímavější. LED pro indikaci rozsahů ovládá procesor přímo, sedmisegmentové zobrazovače ovládá multiplexováním jednotlivých zobrazovačů přes pomocné tranzistory Q2 – Q7.
Na pozici oscilátoru jsem chtěl použít nějaký TCXO oscilátor, ale nenašel jsem žádný vhodný. Tak jsem nakonec použil obyčejný 24 MHz krystal. Z toho důvodu jsem do čítače dodělal i možnost kalibrace oscilátoru pomocí jumperů, kde v softwaru po změření frekvence procesor může nepatrně upravit výsledek směrem nahoru nebo dolu. Nicméně teplotní závislost krystalu tato kalibrace nezlepší. To dnes vidím jako jednu ze slabin čítače. Ale i přes to, na běžná měření krystal vyhovuje.
Abych na procesoru ušetřil 3 výstupy pro ovládání stavových LED (LED_DOBA_MERENI, LED_CAS_KMIT, LED_ROZSAH), rozhodl jsem se ovládání LED spojit s čtením stavu tlačítek pomocí elektronických přepínačů, postavených s obvody NE555 (IC2, IC3, IC4). Stisk tlačítka vždy způsobí přepnutí příslušného přepínače do log. 1 nebo log. 0 a zároveň rozsvícení nebo zhasnutí příslušné LED diody. Procesor si pak stavy přepínačů přečte. Toto je jeden z mnoha případů, kdy složitější hardware znamená jednodušší software (většinou to funguje i obráceně).
Detail procesoru v čítači 🙂
Popis činnosti SW procesoru
Program není složitý. Procesor k měření frekvence/periody využívá dva čítače TIMER0 a TIMER1. Procesor čeká na sestupnou hranu na vstupu INT0. Jakmile se sestupná hrana signálu na INT0 objeví, procesor spustí oba dva TIMERy, s tím, že TIMER0 počítá čas, který uplynul od spuštění a TIMER1 počítá příchozí impulsy. Po nastaveném čase měření (krátký čas 0,1 s je ve skutečnosti asi 0,13 s, dlouhý čas měření odpovídá 1,015 s) procesor začne opět čekat na nejbližší sestupnou hranu na INT0 a poté zastaví oba dva čítače. Výslednou frekvenci pak vypočte jednoduše jako počet impulsů (TIMER1) / čas (TIMER0) + započte nastavenou hodnotu kalibrace. Podle velikosti frekvence následně může procesor upravit dělicí poměr. Dle nastaveného zobrazení frekvence/perioda pak procesor zobrazí na zobrazovači požadovanou hodnotu. Poté procesor opět čeká na sestupnou hranu na INT0 a celé se to opakuje. Hodnota na zobrazovači je přepisována po každém měření.
Uživatelské rozhraní
Na zobrazení měřené frekvence/periody jsem zvolil trochu retro, zelené sedmisegmentové zobrazovače se společnými anodami – 5361BG 🙂 inspiraci jsem našel v továrním, školním čítači BK130. Na indikaci rozsahu a nastavení čítače jsem zvolil 3 mm LED. K ovládání čítače slouží stará telefonní tlačítka – líbí se mi jejich robustnost 🙂 Pomocí tlačítek lze navolit parametry měření:
- A/B – výběr vstupu – vysokofrekvenční nebo nízkofrekvenční
- t/f – zobrazení periody nebo frekvence měřeného signálu
- 1/0,1s – čas vzorkování signálu
Napájecí zdroj
Napájecí zdroj je velice jednoduchý. Za usměrňovačem následují dva integrované stabilizátory: 7805 pro +5 V potřebných pro napájení procesoru a logických obvodů a LM317 nastavený na +9 V pro napájení vstupních obvodů. Celý čítač jistím 100 mA pojistkou na primární straně napájecího transformátoru.
Celkový pohled do útrob čítače + detail na zdrojovou část. Ke chlazení stabilizátorů jsem použil starý chladič z nějaké grafické karty 🙂 Chladič je předimenzovaný.
Výroba DPS
Plošné spoje jsem si nechal zhotovit u svého oblíbeného čínského výrobce JLCPCB. Doporučuji 🙂 Tentokrát mi přišla vhodná modrá maska.
Testování čítače
Jelikož stále nevlastním žádný tovární čítač a jeho pořízení ani neplánuji, nemám postavený čítač proti čemu otestovat. Jeho vlastnosti jsem porovnal alespoň s přenosným digitálním osciloskopem. Myslím, že přesnost i citlivost jsou pro mé účely vyhovující.
- Měření na nízkých kmitočtech: čítač: 11,68 Hz, osciloskop: 11,70 Hz, amplituda signálu cca 25 mV.
- Měření na vyšších kmitočtech: čítač: 843,29 kHz, osciloskop: 843,5 kHz, amplituda signálu cca 33 mV.
Shrnutí projektu čítače
Bude 🙂
Podklady pro výrobu čítače
Na závěr, pro toho, kdo by měl zájem o stavbu čítače, zde jsou podklady pro výrobu jednotlivých DPS čítače a SW pro mikroprocesor AT89S52.