Kazalo:
Video: Kako izmeriti visokofrekvenčni in delovni cikel hkrati z uporabo mikrokrmilnika: 4 koraki
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Vem, kaj mislite: "Huh? Obstaja veliko navodil za uporabo mikrokontrolerjev za merjenje frekvence signala. Zehanje." Ampak počakaj, pri tem je novost: opisujem metodo merjenja frekvenc, ki so veliko višje, kot jih prenese mikrokrmilnik (MCU), in delovni cikel signala - vse hkrati!
Frekvenčni razpon naprave se giblje od ~ 43 Hz do ~ 450 kHz, delovni cikel pa od 1% do 99%.
Naj pojasnim del "lahko prenesem": MCU meri obdobje signala kvadratnega vala, T, s sledenjem času med dvema naslednjima prehodnima dogodkoma. Na primer, nizka do visoka napetost skoči na enega od svojih V/I zatičev. To stori tako, da šteje število impulzov lastne notranje ure. Naivno bi morala zgornja meja izmerjenih frekvenc upoštevati Nyqvist-Shannonov izrek vzorčenja; to bi bilo približno enako polovici taktne frekvence MCU -jev. V resnici je meja veliko, veliko nižja, ker mora MCU izvajati kodo za obravnavo prekinitev, shranjevanje spremenljivk, izvajanje aritmetičnih operacij, prikaz rezultatov itd. V mojih poskusih z 48 MHz MCU je bilo minimalno število taktov med merljivimi prehodi približno 106. Zato bi bila zgornja meja merljivega frekvenčnega območja v tem primeru 48 000 /212 /2 = 226,4 kHz.
Medtem ko MCU meri obdobje signala, lahko določi tudi njegovo širino impulza, P: čas, ko napetost signala ostane visoka. Z drugimi besedami, čas med prehodi nizko-visoko in visoko-nizko. Delovni cikel signala je nato opredeljen kot naslednji odstotek:
Dolžnost = 100% * P / T
Tako kot v primeru frekvence obstaja tudi praktična omejitev širine impulza. Z zgornjim primerom bi 106 ciklov ure omejilo širino impulza na najmanj 2,21 mikrosekunde. Ali pa najmanj 50% pri 226,4 kHz.
Eden od načinov za dvig zgornje frekvenčne meje signalov kvadratnih valov je uporaba digitalnih delilnikov, ki uporabljajo natikače. Če delite vhodno frekvenco z n, bi merljivo zgornje območje podaljšali n -krat. To je odlična novica, digitalni delilniki imajo eno temeljno napako: deljeni signal izgubi informacije o širini impulza (in obratovalnem ciklu)! Zaradi načina delovanja delilnikov ima njihova moč vedno 50% obratovalni cikel. Škoda…
Na naslednjih straneh pa bom pokazal, kako digitalno razdeliti frekvenco in ohraniti prvotno širino impulza, kar mi omogoča merjenje signalov, ki presegajo meje, ki jih določa neposredno štetje.
Korak: Oddelek za digitalne frekvence
Tradicionalni digitalni frekvenčni delilniki uporabljajo natikače; ta vadnica lepo razlaga načela, kako sestaviti razdelilnike z uporabo standardnih japonk JK. To rešuje problem vhodnih frekvenc, ki so previsoke za MCU, vendar ima eno veliko pomanjkljivost: deljeni signal ima 50% obratovalni cikel, ne glede na dolžino vhodnega signala! Če želite ugotoviti, zakaj je tako, poglejte prvi dve sliki. Izvirni signal s obdobjem T in širino impulza P se vnese v urni zatič japonke JK, medtem ko sta njegova zatiča J in K ves čas visoka (prva slika). Vseskozi je predvidena logika 3.3V. Recimo, da flip-flop sproži pozitivni (torej naraščajoči) rob ure. V teh pogojih se spremembe stanja izhodnega zatiča (posamezni "preklopi" in "flopi") zgodijo vsakič, ko se nožni uro premakne od nizkega do visokega. Prehod visoke do nizke ure (tj. Negativni rob) je popolnoma prezrt. Glej drugo sliko. Izhodni pin Q oddaja signal, katerega obdobje je dvakrat daljše od prvotnega obdobja, to je njegova frekvenca prepolovljena. Širina impulza izhoda je vedno enaka T. Posledično se prvotna širina impulza P izgubi.
Če dodate še eno JK flip-flop v konfiguraciji, prikazani na tretji sliki, delite prvotno frekvenco s 4. Če dodate več flip-flopov na isti zaporedni način, frekvenco delite z naslednjimi močmi 2: 8, 16, 32 itd.
Problem: kako razdeliti frekvenco kvadratnega vala in ohraniti njegovo širino impulza?
Ideja je, da se mešanici ustrezno doda JK flip-flop, ki sproži negativni rob. Poimenujmo ga "Neg FF"; glej četrto sliko. Tukaj "pravilno" pomeni, da sta nožici J in K nove flip-flopa vezana na izhodna zatiča Q in Qbar razdelilnika-za-4 ("Pos FF"), prikazanega na prejšnji sliki. (Tukaj je "črta" vodoravna vrstica nad simbolom Q, ki označuje logično negacijo.) Če želite videti, kaj s tem dosežete, si oglejte funkcijsko tabelo "Neg FF" na peti sliki: Negovi izhodni zatiči, Q in Qbar, zrcali stanje svojih vhodnih zatičev, J in K. Kar pomeni, da zrcalijo stanje Pos 'Q in Qbar. Toda Negovo dejanje flip-flopa mora počakati na negativni rob prvotnega signala, ki prispe v času P po pozitivnem robu. Aha!
Nastale valovne oblike so prikazane na šesti sliki. "Pos Q" oddaja signal na 1/4 frekvence, "Pos Qbar" je obraten, "Neg Q" sledi "Pos Q", premaknjen za širino impulza P, "Neg Qbar" pa je njegova inverzna. Lahko preverite, ali logični AND "Pos Qbar" in "Neg Q" proizvaja impulzni niz, za katerega je značilna prvotna širina impulza P in 1/4 frekvence. Bingo!
Sprva sem uporabil ravno ta izhodni signal za napajanje MCU. Vendar se je izkazalo za problematično pri zelo kratkih impulznih širinah zaradi omejitve 106 ciklov MCU, omenjene v uvodu. To majhno težavo sem rešil z izbiro drugega izhoda: "Pos Qbar" IN "Neg Qbar". En pogled na valovne oblike bi vas moral prepričati, da se širina impulza te posebne valovne oblike P 'spreminja med T in 2T namesto (0, T) območja za P. P lahko enostavno izterjamo iz P':
P = 2T - P '
2. korak: Priporočena strojna oprema
Resnično mi je všeč relativno novinec med ljubitelji elektronike: Atmel SAM D21 MCU-ji, ki temeljijo na 32-bitnem procesorju ARM Cortex M0+, ki deluje s taktom 48 MHz, kar je veliko višje od starejših Atmelov. Za ta projekt sem kupil:
- MCy plošča ItsyBitsy M0 Express iz Adafruit
- Slučajno sem imel polnilno baterijo LiPo iz Adafruit
- Enobarvni 128x32 SPI OLED zaslon (uganili ste: Adafruit)
- Dvojni natikač JK s pozitivnim robom SN74HC109 podjetja Texas Instruments
- Dvojna japonka JK SN74HC112, sprožena z negativnim robom, podjetja Texas Instruments
- Četverica IN vrata CD74AC08E podjetja Texas Instruments
- Štirikratna ali vrata CD74AC32E podjetja Texas Instruments
3. korak: vezje
Prva slika prikazuje poenostavljeno shemo merilnika frekvence/obremenitve. 3,3 V CMOS logika je v celoti sprejeta. Posledično mora biti amplituda vhodnega kvadratnega vala med ustreznim VIH 2 V) in 3,3 V. Če ne, ga morate ustrezno povečati ali znižati. V večini primerov bi zadostoval preprost delilec napetosti. Če želite svojo različico merilnika oblikovati na drugačni logični ravni, morate uporabiti drug mikro krmilnik (MCU), baterijo in zaslon, ki deluje na želeni ravni. Logična vrata in natikači, uporabljeni v tem projektu, delujejo z logičnimi nivoji kjer koli med 2 V in 6 V in bi morali biti v večini primerov v redu.
Kot je prikazano, MCU ItsyBitsy uporablja zatiče 9-13 za komunikacijo z zaslonom prek protokola programske opreme SPI. 3V nožica napaja celotno vezje. Digitalni vhodni pin 3 sprejme analizirani signal, medtem ko nožica 2 in 4 nadzorujeta vir signala: bodisi neposreden signal, ki prihaja skozi vrata AND3 (nizke vhodne frekvence), bodisi signal, deljen s 4 skozi vrata AND4 (visoke vhodne frekvence), kot je opisano v 2. koraku Koda, obravnavana v naslednjem koraku, samodejno zazna vhodno frekvenčno območje in ustrezno preklopi vir signala.
Shema ne prikazuje prave zapletenosti povezav digitalnih čipov. Druga slika prikazuje, kako bi bil projekt videti na podlagi. Vhodni signal prihaja skozi rdečo žico do 2CLK zatiča dvojnega flip-flopa z pozitivnim robom. POZOR: Običajno bi morali biti vsi zatiči J in K tega japonke visoko držani, SN74HC109 pa ima namesto tega posebno zatič Kbar - obrnjen zatič K. Zato mora biti ta zatič ozemljen! Prva flip-flop z negativnim robom v SN74HC112 ima svoj zatič 1K in 1J, povezan z zatiči 1Q in 1Qbar SN74HC109. Drugi flip-flop v SN74HC112 je neuporabljen in njegovi vhodni zatiči (2K, 2J, 2CLRbar) so ozemljeni. Vsi drugi dodatni zatiči PREbar (prednastavljeni) in CLRbar (čisti) v vseh japonkah morajo biti povezani z logično visoko. Neuporabljeni zatiči ure in izhoda ostanejo nepovezani. Podobno so neuporabljeni vhodni zatiči na vseh vratih ozemljeni, medtem ko neuporabljeni izhodni zatiči ostanejo nepovezani. Kot sem razpravljal v svojem navodilu "Nevidni morilec telefonskega zvonjenja", ozemljitev neuporabljenih vhodnih zatičev logičnih čipov odpravi naključna nihanja in prihrani energijo baterije.
4. korak: Koda in merjenje nizkih frekvenc
Seveda se vsa dejanja dogajajo v spodnji kodi. Ko vhodni vhod na pin 3 preklopi iz digitalnega nizkega v visoko, MCU začne šteti impulze svoje notranje ure 48 MHz. Zabeleži trenutek prehoda med visoko in nizko vrednostjo in nadaljuje štetje do naslednjega stikala med nizko in visoko, ko znova zažene celoten postopek. Prvo štetje predstavlja širino impulza, celotno štetje pa obdobje signala. In to je vsa skrivnost.
CPU beleži te prehode prek prekinitev strojne opreme. SAMD21 ima več ur; moja koda uporablja TC3 one. Sprva sem začel z branjem podatkovnega lista M0, ki je vložil veliko truda pri kodiranju upravljalnika prekinitev, a kmalu sem v objavah na forumu Arduino odkril zelo povezano kodo uporabnikov electro_95, MartinL in Rucus, katerih prispevek je ustrezno priznano. V svojo sem vključil in spremenil njihovo kombinirano kodo; prihrani mi veliko časa!
Kot sem že omenil, je ločljivost signala omejena z ~ 106 cikli CPE -ja za izvajanje kode med prekinitvami. Digitalna delitev z ohranjanjem širine impulza skrbi za visoke frekvence. Nizke frekvence pa predstavljajo še en izziv: ker je števec ure TC3 dolg 16 bitov, se po prestopu meje 65, 536 štetja prelije. To situacijo lahko obvladate tako, da dodate prekinitev prelivanja, vendar se odločite za drugačno rešitev: TC3 lahko namesto strojne opreme 48 MHz uporabi vnaprej določeno (tj. Programsko razdeljeno) takto procesorja. Če se torej obdobje signala približa meji prelivanja, lahko koda naroči TC3, naj za naslednje obdobje uporabi števila 24 MHz, in števec pade pod 32, 768. Za še nižje frekvence je mogoče TC3 naročiti, da šteje 12 MHz impulze itd. Ustrezen predkaler se samodejno določi na podlagi frekvence signala s histerezo, da ostane števec TC3 znotraj meje prelivanja. Posledično je spodnji del območja naprave približno 43 Hz.
Kodo lahko razcepite in uporabite v svojem projektu, vendar pri objavi rezultatov navedite njen vir.
Povezava do kode.