Sadržaj:

Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera .: 4 koraka
Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera .: 4 koraka

Video: Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera .: 4 koraka

Video: Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera .: 4 koraka
Video: OVO TREBATE ZNATI PRIJE GRADNJE KUĆE 2024, Novembar
Anonim
Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera
Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera
Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera
Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera
Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera
Kako mjeriti visoku frekvenciju i radni ciklus, istovremeno, pomoću mikrokontrolera

Znam šta mislite: "Huh? Postoji mnogo instrukcija o tome kako koristiti mikrokontrolere za mjerenje frekvencije signala. Zijevati." Ali čekajte, u ovome postoji novina: opisujem metodu mjerenja frekvencija mnogo viših nego što mikrokontroler (MCU) može podnijeti i radni ciklus signala - sve u isto vrijeme!

Frekvencijski raspon uređaja se kreće od ~ 43 Hz do ~ 450 kHz, dok se radni ciklus kreće od 1% do 99%.

Dopustite mi da objasnim dio "može podnijeti": MCU mjeri period signala kvadratnog vala, T, praćenjem vremena između dva naredna tranzicijska događaja. Na primjer, niski do visoki napon skače na jedan od njegovih I/O pinova. To čini brojeći broj impulsa vlastitog unutrašnjeg sata. Naivno, gornja granica za izmjerene frekvencije trebala bi biti u skladu s Nyqvist-Shannonovom teoremom uzorkovanja; to jest, otprilike bi bilo jednako polovici frekvencije takta MCU -a. U stvarnosti granica je mnogo, mnogo niža, jer MCU mora izvršiti kôd za rukovanje prekidima, spremanje varijabli, izvršavanje aritmetičkih operacija, prikaz rezultata itd. U mojim eksperimentima s MCU -om od 48 MHz minimalni broj ciklusa takta između mjerljivih prijelaza bio je oko 106. Dakle, gornja granica mjerljivog frekvencijskog područja u ovom slučaju bila bi 48 000 /212 /2 = 226,4 kHz.

Dok MCU mjeri period signala, on također može odrediti njegovu širinu impulsa, P: vrijeme preostalog visokog napona signala. Drugim riječima, vrijeme između tranzicija od niskog do visokog i od visokog do niskog. Radni ciklus signala se tada definira kao sljedeći postotak:

Dužnost = 100% * P / T

Kao i u slučaju frekvencije, postoji praktično ograničenje širine impulsa. Koristeći gornji primjer, 106 ciklusa takta ograničilo bi širinu impulsa na najmanje 2,21 mikrosekundi. Ili, najmanje 50% na 226,4 kHz.

Jedan od načina povećanja gornje granice frekvencije signala kvadratnih valova je primjena digitalnih razdjelnika koji koriste japanke. Dijeljenje ulazne frekvencije sa n produžilo bi mjerljivi gornji raspon n puta. Ovo je sjajna vijest, digitalni razdjelnici imaju jednu fundamentalnu manu: podijeljeni signal gubi informacije o širini impulsa (i radnom ciklusu)! Zbog načina rada razdjelnika, njihov izlaz uvijek ima 50% radni ciklus. Sramota…

Na sljedećim stranicama pokazat ću kako digitalno podijeliti frekvenciju i sačuvati izvornu širinu impulsa što mi omogućava mjerenje signala daleko iznad granica koje nameće izravno brojanje.

Korak 1: Podjela digitalnih frekvencija

Odjel za digitalne frekvencije
Odjel za digitalne frekvencije
Odjel za digitalne frekvencije
Odjel za digitalne frekvencije
Odjel za digitalne frekvencije
Odjel za digitalne frekvencije

Tradicionalni digitalni razdjelnici frekvencija koriste japanke; ovaj vodič lijepo objašnjava principe kako konstruirati razdjelnike koristeći standardne JK japanke. Ovo rješava problem ulaznih frekvencija previsokih za MCU, ali ima jedan veliki nedostatak: podijeljeni signal ima 50% radni ciklus bez obzira na dužinu ulaznog signala! Da biste vidjeli zašto je to tako, pogledajte prve dvije brojke. Originalni signal s periodom T i širinom impulsa P dovodi se u sat takta JK japanke, dok su njegovi pinovi J i K stalno držani visoko (prva slika). Logika 3.3V je cijela. Pretpostavimo da je flip-flop aktiviran pozitivnom (tj. Rastućom) ivicom sata. Pod ovim uvjetima, promjene stanja izlaznog pina (pojedinačni "preokreti" i "flopovi") događaju se svaki put kada pin sata pređe s niskog na visoko. Prijelaz visoke na nisku vrijednost sata (tj. Negativna ivica) potpuno se zanemaruje. Pogledajte drugu sliku. Izlazni pin, Q, emitira signal čiji je period dvostruko duži od izvornog perioda, odnosno njegova se frekvencija prepolovi. Širina impulsa na izlazu uvijek je jednaka T. Zbog toga se gubi izvorna širina impulsa, P.

Dodavanjem još jednog JK flip-flopa u konfiguraciji prikazanoj na trećoj slici, originalna frekvencija se dijeli sa 4. Dodavanjem još japanki na isti sekvencijalni način frekvencija se dijeli sa sljedećim stepenima 2: 8, 16, 32 itd.

Problem: kako podijeliti frekvenciju kvadratnog vala uz očuvanje njegove širine impulsa?

Ideja je pravilno dodati JK flip-flop sa negativnim rubom. Nazovimo to "Neg FF"; vidi četvrtu sliku. Ovdje "ispravno" znači da su J i K pinovi novog japanke vezani za Q i Qbar izlazne pinove razdjelnika po 4 ("Pos FF") prikazanog na prethodnoj slici. (Ovdje je "traka" vodoravna traka iznad simbola Q koja označava logičku negaciju.) Da biste vidjeli što se time postiže, pogledajte tablicu funkcija "Neg FF" na petoj slici: Negovi izlazi, Q i Qbar, preslikavaju stanje svojih ulaznih pinova, J i K, respektivno. Što znači da odražavaju stanje Pos 'Q i Qbar. Ali, Negova flip-flop akcija mora čekati negativnu ivicu izvornog signala, koja stiže u vrijeme P nakon pozitivne ivice. Aha!

Dobijeni talasni oblici prikazani su na šestoj slici. "Pos Q" daje signal na 1/4 frekvencije, "Pos Qbar" je li inverzan, "Neg Q" slijedi "Pos Q" pomaknut za širinu impulsa P, a "Neg Qbar" je njegov inverzan. Možete provjeriti da logičko AND "Pos Qbar" i "Neg Q" proizvodi niz impulsa koje karakterizira izvorna širina impulsa P i 1/4 frekvencije. Bingo!

U početku sam koristio upravo ovaj izlazni signal za napajanje MCU -a. Međutim, pokazalo se da je problem za vrlo kratke širine impulsa zbog ograničenja 106 ciklusa MCU -a spomenutog u uvodu. Ovaj mali problem sam riješio odabirom drugog izlaza: "Pos Qbar" I "Neg Qbar". Jedan pogled na valne oblike trebao bi vas uvjeriti da širina impulsa ovog određenog valnog oblika, P ', varira između T i 2T umjesto (0, T) raspona za P. P se može lako oporaviti iz P':

P = 2T - P '

Korak 2: Preporučeni hardver

Preporučeni hardver
Preporučeni hardver
Preporučeni hardver
Preporučeni hardver
Preporučeni hardver
Preporučeni hardver

Zaista mi se sviđa relativno novajlija u elektronskim hobistima: Atmel SAM D21 MCU-i zasnovani na 32-bitnom ARM Cortex M0+ procesoru koji radi na 48 MHz, što je mnogo više od starijih Atmela. Za ovaj projekat sam kupio:

  • ItyBitsy M0 Express MCU ploča iz Adafruit -a
  • Slučajno sam imao punjivu LiPo bateriju iz Adafruit -a
  • Jednobojni 128x32 SPI OLED ekran (pogađate: Adafruit)
  • Dvostruki JK japanka s pozitivnim rubom SN74HC109 iz Texas Instruments
  • Dvostruki JK flip-flop SN74HC112 sa negativnim rubom okidača kompanije Texas Instruments
  • Četverostruki i kapija CD74AC08E iz kompanije Texas Instruments
  • Četverostruki ili kapija CD74AC32E kompanije Texas Instruments

Korak 3: Krug

The Circuit
The Circuit
The Circuit
The Circuit

Prva slika prikazuje pojednostavljenu shemu mjerača frekvencije/radnog opterećenja. Čitavo se pretpostavlja CMOS logika od 3,3 V. Prema tome, amplituda ulaznog kvadratnog vala mora biti između odgovarajućeg VIH nivo (tj. 2 V) i 3,3 V. Ako nije, morate ga prema tome povećati ili smanjiti. U većini slučajeva jednostavan razdjelnik napona bio bi dovoljan. Ako želite dizajnirati svoju verziju mjerača na drugom logičkom nivou, morate koristiti drugi mikro kontroler (MCU), bateriju i zaslon koji rade na željenoj razini. Logička vrata i japanke korišteni u ovom projektu rade s logičkim razinama bilo gdje između 2 V i 6 V i u većini slučajeva bi trebali biti u redu.

Kao što je prikazano, ItsyBitsy MCU koristi pinove 9-13 za komunikaciju s zaslonom putem softverskog SPI protokola. 3V pin isporučuje napajanje cijelom krugu. Digitalni ulazni pin 3 prihvaća analizirani signal, dok pinovi 2 i 4 kontroliraju izvor signala: ili direktni signal koji dolazi kroz vrata AND3 (niske ulazne frekvencije), ili signal podijeljen sa 4 kroz vrata AND4 (visoke ulazne frekvencije) kako je opisano u koraku 2 Kôd, o kojem se govori u sljedećem koraku, automatski detektira dolazni frekvencijski raspon i na odgovarajući način prebacuje izvor signala.

Shema ne pokazuje pravu složenost povezivanja digitalnih čipova. Druga slika prikazuje kako bi projekat izgledao na osnovnoj ploči. Ulazni signal dolazi kroz crvenu žicu do 2CLK pina dvostrukog flip-flopa sa pozitivnom ivicom. OPREZ: Obično bi sve J i K pinove ovog japanke trebalo držati visoko, ali SN74HC109 posebno sadrži Kbar pin - obrnuti K pin - umjesto toga. Stoga ovaj pin mora biti uzemljen! Prvi flip-flop s negativnim rubom u SN74HC112 ima svoj 1K i 1J pin spojen na 1Q i 1Qbar pinove SN74HC109. Drugi japanka u SN74HC112 se ne koristi i njegovi ulazni pinovi (2K, 2J, 2CLRbar) su uzemljeni. Svi ostali dodatni pinovi PREbar (unaprijed postavljeni) i CLRbar (čisti) u svim japankama moraju biti povezani na logičko visoko. Neiskorišteni pinovi sata i izlaza ostaju nepovezani. Slično, neiskorišteni ulazni pinovi na svim vratima su uzemljeni, dok se nekorišteni izlazi ostaju nepovezani. Kao što sam već rekao u svom uputstvu "Nevidljivi ubica telefonskog zvona", uzemljenje nekorištenih ulaznih pinova logičkih čipova uklanja slučajne oscilacije i štedi energiju baterije.

Korak 4: Kôd i mjerenje niskih frekvencija

Naravno, sve radnje se događaju u dolje navedenom kodu. Kad se ulazni ulaz na pinu 3 prebaci s niskog na visoki nivo, MCU počinje brojati impulse na svom internom taktu od 48 MHz. On bilježi trenutak prelaska s visokog na nisko i nastavlja odbrojavanje do sljedećeg prekidača s niskog na visoko, kada ponovno pokreće cijeli proces. Prvi broj predstavlja širinu impulsa, dok cijeli broj predstavlja period signala. I to je cijela tajna.

CPU bilježi ove prijelaze putem hardverskih prekida. SAMD21 ima nekoliko satova; moj kôd koristi TC3 one. U početku sam počeo čitajući tablicu podataka M0 koja je uložila napore za mnogo napora u kodiranju rukovatelja prekida, ali ubrzo sam otkrio vrlo srodan kod u postovima Arduino foruma korisnika electro_95, MartinL i Rucus čiji je doprinos propisno priznato. Uključio sam i izmijenio njihov kombinirani kod u svoj; štedi mi puno vremena!

Kao što sam ranije spomenuo, rezolucija signala ograničena je sa ~ 106 CPU ciklusa za izvršavanje koda između prekida. Digitalna podjela sa očuvanjem širine impulsa brine se o visokim frekvencijama. S druge strane, niske frekvencije predstavljaju još jedan izazov: budući da je brojač sata TC3 dugačak 16 bita, on se prelijeva nakon što pređe granicu od 65, 536 brojeva. U ovoj se situaciji može riješiti dodavanjem prekida prelijevanja, ali je odabrano drugo rješenje: TC3 može koristiti unaprijed kalibriran (tj. Softverski podijeljen) CPU sat umjesto hardverskog 48 MHz. Stoga, ako se period signala približi granici prelijevanja, kôd može uputiti TC3 da koristi brojeve od 24 MHz za sljedeći period i, voila, brojač pada ispod 32, 768 tačaka. Za još niže frekvencije, TC3 se može uputiti da broji impulse od 12 MHz itd. Odgovarajući predskaler automatski se određuje na osnovu frekvencije signala, s histerezom, kako bi se brojač TC3 zadržao unutar granice prelijevanja. Kao rezultat toga, donji dio raspona uređaja je oko 43 Hz.

Možete kôd razdijeliti i koristiti u svom projektu, ali navedite njegov izvor pri objavljivanju rezultata.

Link do koda.

Preporučuje se: