Obsah:

Ako merať vysokofrekvenčný a pracovný cyklus súčasne s mikrokontrolérom: 4 kroky
Ako merať vysokofrekvenčný a pracovný cyklus súčasne s mikrokontrolérom: 4 kroky

Video: Ako merať vysokofrekvenčný a pracovný cyklus súčasne s mikrokontrolérom: 4 kroky

Video: Ako merať vysokofrekvenčný a pracovný cyklus súčasne s mikrokontrolérom: 4 kroky
Video: Документальный фильм «Экономика солидарности в Барселоне» (многоязычная версия) 2024, November
Anonim
Ako merať vysokofrekvenčný a pracovný cyklus súčasne s použitím mikrokontroléra
Ako merať vysokofrekvenčný a pracovný cyklus súčasne s použitím mikrokontroléra
Ako merať vysokofrekvenčný a pracovný cyklus súčasne s použitím mikrokontroléra
Ako merať vysokofrekvenčný a pracovný cyklus súčasne s použitím mikrokontroléra
Ako merať vysokofrekvenčný a pracovný cyklus súčasne s použitím mikrokontroléra
Ako merať vysokofrekvenčný a pracovný cyklus súčasne s použitím mikrokontroléra

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

Divízia digitálnej frekvencie
Divízia digitálnej frekvencie
Divízia digitálnej frekvencie
Divízia digitálnej frekvencie
Divízia digitálnej frekvencie
Divízia digitálnej frekvencie

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

Odporúčaný hardvér
Odporúčaný hardvér
Odporúčaný hardvér
Odporúčaný hardvér
Odporúčaný hardvér
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

Okruh
Okruh
Okruh
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: