Obsah:
- Krok 1: Digitálne frekvenčné delenie
- Krok 2: Odporúčaný hardvér
- Krok 3: Okruh
- Krok 4: Kód a meranie nízkych frekvencií
Video: Ako merať vysokofrekvenčný a pracovný cyklus súčasne s mikrokontrolérom: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Viem, čo si myslíte: "Hej? Existuje veľa návodov na používanie mikrokontrolérov na meranie frekvencie signálu. Zívnutie." Ale počkajte, v tomto je novinka: Popisujem spôsob merania frekvencií oveľa vyšších, ako znesie mikrokontrolér (MCU) a pracovný cyklus signálu - to všetko súčasne!
Frekvenčný rozsah zariadenia sa pohybuje od ~ 43 Hz do ~ 450 kHz, zatiaľ čo pracovný cyklus sa pohybuje od 1% do 99%.
Vysvetlím časť „môže niesť“: MCU meria periódu signálu štvorcovej vlny T pomocou sledovania času medzi dvoma následnými prechodovými udalosťami. Napríklad nízke až vysoké napätie skáče na jednom zo svojich I/O pinov. Vykonáva to počítaním počtu impulzov vlastných vnútorných hodín. Naivne by sa horná hranica meraných frekvencií mala riadiť vzorovacou vetou Nyqvist-Shannon; to znamená, že by sa zhruba rovnalo polovici hodinovej frekvencie MCU. V skutočnosti je limit oveľa, oveľa nižší, pretože MCU musí vykonávať kód, aby zvládol prerušenia, ukladal premenné, robil aritmetické operácie, zobrazoval výsledky atď. V mojich experimentoch s 48 MHz MCU bol minimálny počet hodinových cyklov medzi merateľnými prechodmi asi 106. Preto by horná hranica rozsahu merateľných frekvencií v tomto prípade bola 48 000 /212 /2 = 226,4 kHz.
Kým MCU meria periódu signálu, môže tiež určiť jeho šírku impulzu, P: čas zostávajúceho vysokého signálneho napätia. Inými slovami, čas medzi prechodmi od nízkeho k vysokému a od najvyššieho k najnižšiemu. Pracovný cyklus signálu je potom definovaný ako nasledujúce percento:
Clo = 100% * P / T
Rovnako ako v prípade frekvencie existuje praktická hranica šírky impulzu. Použitím vyššie uvedeného príkladu by 106 hodinových cyklov obmedzilo šírku impulzu na najmenej 2,21 mikrosekúnd. Alebo najmenej 50% pri 226,4 kHz.
Jeden zo spôsobov, ako zvýšiť horný limit frekvencie signálov štvorcových vĺn, je použitie digitálnych rozdeľovačov, ktoré používajú klopné obvody. Delenie vstupnej frekvencie n by predĺžilo merateľný horný rozsah n krát. To je skvelá správa, digitálne rozdeľovače majú jednu zásadnú chybu: rozdelený signál stráca informácie o šírke impulzu (a pracovnom cykle)! Vzhľadom na spôsob, akým rozdeľovače pracujú, má ich výkon vždy 50% pracovný cyklus. Bummer…
Na nasledujúcich stranách však ukážem, ako digitálne rozdeliť frekvenciu a zachovať pôvodnú šírku impulzu, čo mi umožňuje merať signály ďaleko za hranicou stanovenou priamym počítaním.
Krok 1: Digitálne frekvenčné delenie
Tradičné digitálne rozdeľovače frekvencie používajú klopné obvody; tento tutoriál pekne vysvetľuje princípy konštrukcie deličov pomocou štandardných JK žabiek. To rieši problém príliš vysokých vstupných frekvencií pre MCU, ale má jednu veľkú nevýhodu: delený signál má 50% pracovný cyklus bez ohľadu na povinnosť vstupného signálu! Prečo je to tak, pozrite sa na prvé dve čísla. Pôvodný signál s periódou T a šírkou impulzu P je privádzaný do hodinového kolíka klopného obvodu JK, zatiaľ čo jeho kolíky J a K sú vždy držané vysoko (prvý obrázok). Logika 3,3 V sa predpokladá v celom texte. Predpokladajme, že klopný obvod je spustený kladným (tj. Stúpajúcim) okrajom hodín. Za týchto podmienok dochádza k zmenám stavu výstupného kolíka (jednotlivé „preklopenia“a „flopy“) zakaždým, keď sa hodinový kolík zmení z nízkej na vysokú. Vysoký a nízky prechod hodín (tj. Negatívna hrana) sú úplne ignorované. Pozri druhý obrázok. Výstupný kolík Q vysiela signál, ktorého perióda je dvakrát dlhšia ako pôvodná perióda, to znamená, že jeho frekvencia je polovičná. Šírka impulzu výstupu je vždy rovná T. V dôsledku toho sa pôvodná šírka impulzu P stratí.
Pridaním ďalšieho JK klopného obvodu v konfigurácii zobrazenej na treťom obrázku sa pôvodná frekvencia vydelí 4. Pridaním ďalších klopných obvodov rovnakým sekvenčným spôsobom sa frekvencia vydelí následnými mocnosťami 2: 8, 16, 32 atď.
Problém: Ako rozdeliť frekvenciu štvorcovej vlny pri zachovaní jej šírky impulzu?
Cieľom je správne pridať do mixu JK flip-flop spustený s negatívnym okrajom. Nazvime to „Neg FF“; pozri štvrtý obrázok. Tu „správne“znamená, že kolíky J a K nového klopného obvodu sú viazané na výstupné kolíky Q a Qbar rozdeľovača-4 („Pos FF“) znázornené na predchádzajúcom obrázku. („Tu“je v tomto prípade vodorovný pruh nad symbolom Q označujúci logickú negáciu.) Ak chcete zistiť, čo sa tým dosiahne, pozrite sa na tabuľku funkcií „Neg FF“na piatom obrázku: výstupné piny Neg, Q a Qbar, zrkadlia stav jeho vstupných kolíkov J a K. To znamená, že odzrkadľujú stav Pos 'Q a Qbar. Negova klopná operácia však musí počkať na záporný okraj pôvodného signálu, ktorý príde v čase P za kladný okraj. Aha!
Výsledné priebehy sú znázornené na šiestom obrázku. „Pos Q“vysiela signál na 1/4 frekvencii, „Pos Qbar“je inverzný, „Neg Q“nasleduje za „Pos Q“posunutý o šírku impulzu P a „Neg Qbar“je jeho inverzný. Môžete overiť, že logické AND „Pos Qbar“a „Neg Q“vytvára sled impulzov charakterizovaný pôvodnou šírkou impulzu P a 1/4 frekvenciou. Bingo!
Najprv som na napájanie MCU používal presne tento výstupný signál. Ukázalo sa to však byť problematické pre veľmi krátke šírky impulzov kvôli obmedzeniu 106 cyklov MCU uvedenému v úvode. Tento malý problém som vyriešil zvolením iného výstupu: „Pos Qbar“A „Neg Qbar“. Jeden pohľad na priebehy by vás mal presvedčiť, že šírka impulzu tohto konkrétneho tvaru vlny, P ', sa pohybuje medzi T a 2T namiesto (0, T) rozsahu pre P. P je možné ľahko získať z P':
P = 2T - P '
Krok 2: Odporúčaný hardvér
Skutočne sa mi páči relatívny nováčik v oblasti elektronických nadšencov: MCU Atmel SAM D21 založené na 32-bitovom procesore ARM Cortex M0+ pracujúcom pri takte 48 MHz, oveľa vyššom ako staršie Atmels. Pre tento projekt som kúpil:
- Doska MCU ItsyBitsy M0 Express od spoločnosti Adafruit
- Náhodou som mal nabíjateľnú batériu LiPo od spoločnosti Adafruit
- Monochromatický 128 x 32 SPI OLED displej (uhádli ste: Adafruit)
- Dvojitý klopný obvod JK s pozitívnym okrajom SN74HC109 od spoločnosti Texas Instruments
- Dvojitý klopný obvod JK SN74HC112 spustený s negatívnym okrajom od spoločnosti Texas Instruments
- Štvornásobný AND gate CD74AC08E od Texas Instruments
- Štvornásobná brána ALEBO CD74AC32E od spoločnosti Texas Instruments
Krok 3: Okruh
Prvý obrázok ukazuje zjednodušenú schému merača frekvencie/zaťaženia. Logika 3,3 V CMOS sa predpokladá v celom texte. V dôsledku toho musí byť amplitúda vstupnej štvorcovej vlny medzi zodpovedajúcim VIH úroveň (t. j. 2 V) a 3,3 V. Ak nie, musíte ju podľa toho zvýšiť alebo znížiť. Vo väčšine prípadov stačí jednoduchý delič napätia. Ak chcete navrhnúť svoju verziu merača na inej logickej úrovni, musíte použiť ďalší mikroovládač (MCU), batériu a displej, ktoré fungujú na požadovanej úrovni. Logické brány a klopné obvody použité v tomto projekte fungujú s logickými úrovňami kdekoľvek medzi 2 V a 6 V a vo väčšine prípadov by mali byť v poriadku.
Ako je znázornené, ItsyBitsy MCU používa piny 9-13 na komunikáciu s displejom prostredníctvom softvérového protokolu SPI. 3V pin napája celý obvod. Digitálny vstupný kolík 3 prijíma analyzovaný signál, zatiaľ čo piny 2 a 4 riadia zdroj signálu: buď priamy signál prichádzajúci cez bránu AND3 (nízke vstupné frekvencie), alebo signál delený 4 cez bránu AND4 (vysoké vstupné frekvencie), ako je popísané v kroku 2. Kód, diskutovaný v nasledujúcom kroku, automaticky detekuje prichádzajúci frekvenčný rozsah a vhodne prepne zdroj signálu.
Schéma neukazuje skutočnú zložitosť pripojení digitálnych čipov. Druhý obrázok ukazuje, ako by projekt vyzeral na doske. Vstupný signál prichádza cez červený vodič na pin 2CLK klopného obvodu s dvoma kladnými hranami. UPOZORNENIE: Normálne by mali byť všetky kolíky J a K tohto klopného obvodu držané vysoko, ale model SN74HC109 obsahuje predovšetkým pin Kbar - obrátený kolík K -. Tento kolík musí byť preto uzemnený! Prvý klopný obvod so záporným okrajom v SN74HC112 má svoj pin 1K a 1J spojený s kolíkmi 1Q a 1Qbar SN74HC109. Druhý klopný obvod v SN74HC112 je nepoužitý a jeho vstupné kolíky (2K, 2J, 2CLRbar) sú uzemnené. Všetky ostatné extra piny PREbar (prednastavené) a CLRbar (čisté) vo všetkých žabkách musia byť prepojené s logickou výškou. Nepoužívané hodinové a výstupné kolíky zostanú nezapojené. Podobne sú nepoužité vstupné kolíky vo všetkých bránach uzemnené, zatiaľ čo nepoužité výstupné kolíky zostanú nezapojené. Ako som už diskutoval v mojom pokyne „Neviditeľný zabijak telefónneho prsteňa“, uzemnenie nepoužívaných vstupných pinov logických čipov eliminuje náhodné oscilácie a šetrí energiu batérie.
Krok 4: Kód a meranie nízkych frekvencií
Všetky akcie sa prirodzene dejú v nižšie uvedenom kóde. Keď vstupný vstup na pine 3 prepne z digitálneho na nízky a vysoký, MCU začne počítať impulzy svojich vnútorných 48 MHz hodín. Zaznamenáva moment prechodu z vysokého na nízky a pokračuje v počítaní až do nasledujúceho prepnutia z najnižšieho na najvyššie miesto, kedy znova reštartuje celý proces. Prvý počet predstavuje šírku impulzu, zatiaľ čo celý počet predstavuje periódu signálu. A to je celé tajomstvo.
CPU si tieto prechody všimne prostredníctvom hardvérových prerušení. SAMD21 má niekoľko hodín; môj kód používa TC3 one. Spočiatku som začal čítaním zozbierania údajového listu M0 kvôli značnému úsiliu pri kódovaní obsluhy prerušenia, ale čoskoro som v príspevkoch fóra Arduino objavil veľmi príbuzný kód od používateľov electro_95, MartinL a Rucus, ktorých prínos je riadne uznané. Ich kombinovaný kód som začlenil a upravil do svojho; ušetríte mi veľa času!
Ako som už spomenul, rozlíšenie signálu je na vykonanie kódu medzi prerušeniami obmedzené ~ 106 cyklami CPU. Digitálne delenie so zachovaním šírky impulzu sa stará o vysoké frekvencie. Nízke frekvencie na druhej strane predstavujú ďalšiu výzvu: pretože počítadlo hodín TC3 je 16 bitov dlhé, po prekročení limitu 65, 536 počítadiel pretečie. Túto situáciu je možné zvládnuť pridaním prerušenia pretečenia, ale zvolili iné riešenie: TC3 môže namiesto hardvérového 48 MHz používať prednastavené (tj. Softvérovo rozdelené) hodiny CPU. Ak sa teda perióda signálu priblíži k limitu pretečenia, kód môže nariadiť TC3, aby na ďalšiu periódu použil 24 MHz a voila, počítadlo kleslo pod 32 768 impulzov. Pre ešte nižšie frekvencie môže byť TC3 poučený, aby počítal impulzy 12 MHz, atď. Príslušný predzosilňovač sa automaticky určí na základe frekvencie signálu s hysterézou, aby sa počítadlo TC3 udržalo v medziach pretečenia. V dôsledku toho je dolný koniec rozsahu zariadenia asi 43 Hz.
Vítame vás, keď kód rozšírite a použijete vo svojom projekte, pri zverejňovaní výsledkov však uveďte jeho zdroj.
Odkaz na kód.
Odporúča:
Ako merať kondenzátor alebo induktor s prehrávačom MP3: 9 krokov
Ako merať kondenzátor alebo induktor pomocou prehrávača MP3: Tu je jednoduchá technika, ktorú je možné použiť na presné meranie kapacity a indukčnosti kondenzátora a induktora bez drahého vybavenia. Technika merania je založená na vyváženom mostíku a dá sa ľahko zostrojiť z neskúsených
Ako vyrobiť CubeSat, ktorý dokáže merať teplotu: 3 kroky
Ako vyrobiť kocku, ktorá dokáže merať teplotu: Poďte s nami a uvidíte kocku čistej predstavivosti 11x11x11x11, chyťte ma za ruku a uvidíte teplotu Marsu! (podľa predstavy „Predstavivosti“Willyho Wonku) Dnes vám ukážem, že si musíte postaviť svoj vlastný CubeSat! Ja a moji partneri Alyssa a
TrigonoDuino - Ako merať vzdialenosť bez snímača: 5 krokov
TrigonoDuino - Ako merať vzdialenosť bez senzora: Tento projekt je určený na meranie vzdialenosti bez komerčného senzora. Je to projekt na pochopenie trigonometrických pravidiel s konkrétnym riešením. Mohlo by to byť prispôsobiteľné pre iný trigonometrický výpočet. Pretože Sin a ďalší fungujú s
Ako merať prúd a prečo by ste to mali robiť?: 4 kroky (s obrázkami)
Ako merať prúd a prečo by ste to mali robiť?: Mnoho tvorcov nevie, aké dôležité je poznať aktuálny výkres vášho projektu alebo prečo to potrebujete vedieť. V tomto tutoriále vám vysvetlím, ako zmerať aktuálnu kresbu vášho projektu a prečo je také dôležité to vedieť. T
Ako merať účinník striedavého prúdu pomocou Arduina: 4 kroky
Ako merať účinník striedavého prúdu pomocou Arduina: Ahoj všetci! Toto je môj tretí návod, dúfam, že vás bude informovať. :-) Bude to návod, ako vykonať základné meranie účinníka pomocou Arduina. Predtým, ako začneme, je potrebné mať na pamäti niekoľko vecí: Toto bude fungovať IBA s