Sisukord:
- 1. samm: digitaalse sageduse jaotus
- Samm: soovitatav riistvara
- 3. samm: vooluring
- 4. samm: kood ja madalate sageduste mõõtmine
Video: Kuidas mõõta kõrgsageduslikku ja töötsüklit samaaegselt mikrokontrolleri abil: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Ma tean, mida te arvate: "Häh? Seal on palju juhiseid, kuidas kasutada mikrokontrollereid signaali sageduse mõõtmiseks. Haigutus." Kuid oodake, selles on uudsus: ma kirjeldan meetodit, millega mõõdetakse sagedusi, mis on palju kõrgemad kui mikrokontroller (MCU) suudab kanda, ja signaali töötsüklit - seda kõike korraga!
Seadme sagedusvahemik ulatub ~ 43 Hz kuni ~ 450 kHz, töötsükkel aga vahemikus 1% kuni 99%.
Lubage mul selgitada osa "talub": MCU mõõdab ruutlainesignaali perioodi T, jälgides aega kahe järgneva üleminekusündmuse vahel. Näiteks hüppab madal-kõrge pinge ühel selle I/O-kontaktil. Ta teeb seda, lugedes oma sisemise kella impulsside arvu. Mõistetavalt peaks mõõdetud sageduste ülempiir alluma Nyqvist-Shannoni proovivõtu teoreemile; st see oleks ligikaudu võrdne poolega MCU taktsagedusest. Tegelikkuses on see piir palju -palju madalam, sest MCU peab täitma koodi katkestuste käsitlemiseks, muutujate salvestamiseks, aritmeetiliste toimingute tegemiseks, tulemuste kuvamiseks jne. Minu katsetes 48 MHz MCU -ga oli mõõdetavate üleminekute vahel minimaalne taktsüklite arv umbes 106. Seega oleks mõõdetava sagedusvahemiku ülempiir antud juhul 48 000 /212 /2 = 226,4 kHz.
Kuigi MCU mõõdab signaali perioodi, saab see määrata ka selle impulsi laiuse, P: signaali pinge kõrgeks jäämise aeg. Teisisõnu, aeg madalalt kõrgele ja kõrgelt madalale üleminekute vahel. Seejärel määratletakse signaali töötsükkel järgmiselt:
Tollimaks = 100% * P / T
Nii nagu sageduse puhul, on ka impulsi laiusel praktiline piir. Ülaltoodud näite kohaselt piiraks 106 taktsüklit impulsi laiust vähemalt 2,21 mikrosekundini. Või vähemalt 50% sagedusel 226,4 kHz.
Üks viis ruutlainesignaalide ülemise sageduspiiri suurendamiseks on plätusid kasutavate digitaalsete eraldajate kasutamine. Sisendsageduse jagamine n -iga pikendaks mõõdetavat ülemist vahemikku n korda. See on suurepärane uudis, digitaaljaoturitel on üks põhiline viga: jagatud signaal kaotab impulsi laiuse (ja töötsükli) teabe! Kuna jagajad töötavad, on nende toodang alati 50% töötsükkel. Pahur…
Järgmistel lehekülgedel näitan aga, kuidas sagedust digitaalselt jagada ja säilitada algne impulsi laius, mis võimaldab mul mõõta signaale tunduvalt üle otsese loendamise piiridest.
1. samm: digitaalse sageduse jaotus
Traditsioonilised digitaalsed sagedusjaoturid kasutavad plätusid; see õpetus selgitab kenasti põhimõtteid, kuidas standardseid JK plätusid kasutades vaheseinu ehitada. See lahendab MCU jaoks liiga kõrgete sisendsageduste probleemi, kuid sellel on üks suur puudus: jagatud signaalil on 50% töötsükkel sõltumata sisendsignaali koormusest! Et näha, miks see nii on, vaadake kahte esimest numbrit. Algne signaal perioodi T ja impulsi laiusega P sisestatakse JK flip-flopi kellatappi, samal ajal kui selle J- ja K-tihvte hoitakse alati kõrgel (esimene joonis). 3.3V loogika on eeldatud kogu ulatuses. Oletame, et flip-flopi käivitab kella positiivne (st tõusev) serv. Nendes tingimustes muutuvad väljundtihvti olekud (üksikud "klappid" ja "flopid") iga kord, kui kellanupp läheb madalalt kõrgele. Kella üleminekut madalale üleminekule (st negatiivsele servale) eiratakse täielikult. Vaadake teist joonist. Väljundnõel Q väljastab signaali, mille periood on kaks korda pikem kui algne periood, st selle sagedus on poole võrra väiksem. Väljundi impulsi laius on alati võrdne T. Järelikult kaotatakse algne impulsi laius P.
Teise JK flip-flopi lisamine kolmandal joonisel näidatud konfiguratsioonis jagab algse sageduse 4-ga. Lisades rohkem plätusid samal järjestikul, jagab sagedus järgnevate volitustega 2: 8, 16, 32 jne.
Probleem: kuidas jagada ruutlaine sagedust, säilitades samal ajal selle impulsi laiuse?
Idee on lisada segule korralikult negatiivse servaga käivitatud JK flip-flop. Nimetagem seda "Neg FF"; vaata neljandat joonist. Siin tähendab "korralikult" seda, et uue flip-flopi J- ja K-tihvtid on seotud eelmisel joonisel näidatud jagaja-4 ("Pos FF") vastavalt Q- ja Qbar-väljundtihvtidega. (Siin on "riba" horisontaalne riba Q sümboli kohal, mis näitab loogilist eitust.) Selle saavutamiseks vaadake viienda joonise "Neg FF" funktsioonide tabelit: Negi väljundtihvtid, Q ja Qbar, peegeldage selle sisendtihvtide olekut, vastavalt J ja K. Mis tähendab, et need peegeldavad Pos 'Q ja Qbar olekut. Kuid Negi flip-flop tegevus peab ootama algse signaali negatiivset serva, mis saabub ajal P pärast positiivset serva. Ahaa!
Saadud lainekujud on illustreeritud kuuendal joonisel. "Pos Q" väljastab signaali 1/4 sagedusel, "Pos Qbar" on pöördvõrdeline, "Neg Q" järgneb "Pos Q" -le, mis on nihutatud impulsi laiuse P võrra, ja "Neg Qbar" on selle pöördvõrdlus. Saate kontrollida, kas "Pos Qbar" ja "Neg Q" loogiline JA annab impulssrongi, mida iseloomustab algne impulsi laius P ja 1/4 sagedusest. Bingo!
Alguses kasutasin MCU toitmiseks täpselt seda väljundsignaali. See osutus aga väga lühikese impulsi laiuse korral problemaatiliseks, kuna sissejuhatuses mainiti MCU 106 tsüklit. Olen selle väikese probleemi lahendanud, valides teise väljundi: "Pos Qbar" JA "Neg Qbar". Üks pilk lainekujudele peaks teid veenma, et selle konkreetse lainekuju impulsi laius P 'varieerub vahemikus T kuni 2T, mitte vahemikus (0, T) P jaoks. P saab P -st hõlpsasti taastada:
P = 2T - P '
Samm: soovitatav riistvara
Mulle tõesti meeldib elektrooniliste harrastajate suhteline uustulnuk: Atmel SAM D21 MCU-d, mis põhinevad 32-bitisel ARM Cortex M0+ protsessoril, mis töötab 48 MHz taktsagedusel, mis on palju kõrgem kui vanemad Atmelid. Selle projekti jaoks ostsin:
- ItsyBitsy M0 Express MCU plaat firmalt Adafruit
- Mul juhtus olema Adafruitist laetav LiPo aku
- Mustvalge 128x32 SPI OLED -ekraan (arvasite: Adafruit)
- Kahe positiivse servaga käivitatud JK flip-flop SN74HC109 firmalt Texas Instruments
- Kahe negatiivse servaga käivitatud JK flip-flop SN74HC112 firmalt Texas Instruments
- Neljakordne ja värav CD74AC08E firmalt Texas Instruments
- Neljakordne või värav CD74AC32E firmalt Texas Instruments
3. samm: vooluring
Esimesel joonisel on kujutatud sagedus-/tööarvesti lihtsustatud skeem. 3,3 V CMOS -i loogikat kasutatakse kogu ulatuses. Järelikult peab sisendruutlaine amplituud olema vastava V vahelIH tase (st 2 V) ja 3,3 V. Kui ei, siis peate seda vastavalt suurendama või vähendama. Enamikul juhtudel piisab lihtsast pingejagurist. Kui soovite arvesti versiooni kujundada erineval loogikatasandil, peate kasutama teist mikrokontrollerit (MCU), akut ja ekraani, mis töötavad soovitud tasemel. Selles projektis kasutatavad loogikaväravad ja plätud töötavad loogikatasemetega vahemikus 2 V kuni 6 V ja peaksid enamikul juhtudel korras olema.
Nagu on näidatud, kasutab ItsyBitsy MCU tarkvara SPI-protokolli kaudu ekraaniga suhtlemiseks kontakte 9-13. 3V pin annab voolu kogu vooluringile. Digitaalne sisendpulk 3 võtab analüüsitud signaali vastu, samas kui tihvtid 2 ja 4 juhivad signaali allikat: kas otsesignaal, mis tuleb läbi värava AND3 (madalad sisendsagedused) või signaal, mis on jagatud 4 -ga läbi värava AND4 (kõrged sisendsagedused), nagu on kirjeldatud 2. etapis Järgmises etapis käsitletav kood tuvastab automaatselt sissetuleva sagedusvahemiku ja lülitab signaali allika sobivalt ümber.
Skeem ei näita digitaalsete kiipühenduste tegelikku keerukust. Teine pilt näitab, kuidas projekt näeks välja leivaplaadil. Sisendsignaal tuleb punase juhtme kaudu kahekordse positiivse serva flip-flopi 2CLK tihvti juurde. ETTEVAATUST: Tavaliselt tuleks selle flip -flopi kõiki J- ja K -tihvte hoida kõrgel, kuid eriti SN74HC109 -l on selle asemel Kbar -tihvt - ümberpööratud K -tihvt. Seega peab see tihvt olema maandatud! SN74HC112 esimese negatiivse serva flip-flopi 1K ja 1J tihvt on ühendatud SN74HC109 1Q ja 1Qbar tihvtidega. SN74HC112 teine klapp on kasutamata ja selle sisendpoldid (2K, 2J, 2CLRbar) on maandatud. Kõik muud tihvtid PREbar (eelseadistatud) ja CLRbar (selge) kõikides plätudes peavad olema ühendatud loogilise kõrgega. Kasutamata kella- ja väljundpoldid jäetakse ühendamata. Sarnaselt on kõikide väravate kasutamata sisendpoldid maandatud, samas kui kasutamata väljundpoldid jäetakse ühendamata. Nagu ma käsitlesin oma telefonitoru nähtamatu tapja juhendamisel, välistab loogiliste kiipide kasutamata sisendpistikute maandamine juhuslikud võnkumised ja säästab aku energiat.
4. samm: kood ja madalate sageduste mõõtmine
Loomulikult toimub kõik toimingud allpool lingitud koodis. Kui tihvti 3 sissetulev sisend lülitub digitaalselt madalalt kõrgele, hakkab MCU loendama oma sisemise 48 MHz kella impulsse. See märgib üleminekut kõrgelt madalale ja jätkab loendamist kuni järgmise madala ja kõrge lülitini, kui see taaskäivitab kogu protsessi uuesti. Esimene arv näitab impulsi laiust, samas kui kogu arv näitab signaali perioodi. Ja see on kogu saladus.
CPU märgib need üleminekud riistvarakatkestuste kaudu. SAMD21 -l on mitu kella; minu kood kasutab TC3. Algselt lugesin katkestuste käitleja kodeerimiseks palju vaeva, lugedes M0 andmelehte, kuid peagi avastasin Arduino foorumi postitustest väga seotud koodi kasutajate electro_95, MartinL ja Rucus poolt, kelle panus on nõuetekohaselt tunnustatud. Lisasin ja muutsin nende kombineeritud koodi minu omaks; säästan palju aega!
Nagu ma varem mainisin, on signaali eraldusvõime piiratud ~ 106 CPU tsükliga, et katkestuste vahel koodi täita. Digitaalne jaotus koos impulsi laiuse säilitamisega hoolitseb kõrgete sageduste eest. Seevastu madalad sagedused kujutavad endast teist väljakutset: kuna TC3 kella loendur on 16 bitti pikk, voolab see pärast 65, 536 loenduspiiri ületamist üle. Selle olukorraga saab hakkama, lisades ülevoolu katkestuse, kuid valis teistsuguse lahenduse: TC3 saab riistvara 48 MHz asemel kasutada eelseadistatud (st tarkvaraga jagatud) protsessorikella. Seega, kui signaali periood läheneb ülevoolu piirile, võib kood anda TC3 -le käsu kasutada järgmiseks perioodiks 24 MHz loendusi ja voilaa, loendur langeb alla 32, 768 loendi. Veel madalamate sageduste korral saab TC3 -le anda käsu lugeda 12 MHz impulsse jne. Sobiv eelkvalifitseerija määratakse automaatselt signaali sageduse alusel koos hüstereesiga, et hoida TC3 loendur ülevoolu piires. Selle tulemusena on seadme vahemiku alumine ots umbes 43 Hz.
Olete oodatud koodi harutama ja oma projektis kasutama, kuid tulemuste avaldamisel mainige selle allikat.
Link koodile.
Soovitan:
Kuidas teha CubeSat, millega saab mõõta temperatuuri: 3 sammu
Kuidas teha CubeSat, millega saab mõõta temperatuuri: Tulge kaasa ja näete 11x11x11x11 puhta kujutlusvõimega kuubikut, võtke mu käest ja näete Marsi temperatuuri! (Willy Wonka “Kujutluse” järgi) Täna näitan, et peate ehitama oma CubeSati! Mina ja mu partnerid Alyssa ja
TrigonoDuino - kuidas mõõta kaugust ilma andurita: 5 sammu
TrigonoDuino - kuidas mõõta kaugust ilma andurita: see projekt on mõeldud kauguse mõõtmiseks ilma kaubandusliku andurita. See on projekt trigonomeetriliste reeglite mõistmiseks konkreetse lahendusega. Seda saab kohandada mõne muu trigonomeetrilise arvutuse jaoks. Cos Sin ja teised toimivad koos
Kuidas teha drooni Arduino UNO abil - Mikrokontrolleri abil kvadkopteri valmistamine: 8 sammu (piltidega)
Kuidas teha drooni Arduino UNO abil | Valmistage mikrokontrolleri abil kvadropter: Sissejuhatus Külastage minu Youtube'i kanalit Droon on ostmiseks väga kallis vidin (toode). Selles postituses arutlen, kuidas seda odavalt teha ?? Ja kuidas saate oma odava hinnaga sellist teha … No Indias kõik materjalid (mootorid, ESC -d
AVR mikrokontrolleri kaitsmebittide konfiguratsioon. Mikrokontrolleri välkmällu LED -i vilkumisprogrammi loomine ja üleslaadimine: 5 sammu
AVR mikrokontrolleri kaitsmebittide konfiguratsioon. Mikrokontrolleri välkmällu LED -i vilkumisprogrammi loomine ja üleslaadimine: Sel juhul loome lihtsa programmi C -koodiga ja põletame selle mikrokontrolleri mällu. Kirjutame oma programmi ja koostame hex -faili, kasutades Atmel Studio integreeritud arendusplatvormina. Seadistame kaitsme bi
Kuidas mõõta vahelduvvoolu tegurit Arduino abil: 4 sammu
Kuidas mõõta vahelduvvoolu tegurit Arduino abil: Tere kõigile! See on minu kolmas juhendatav, loodan, et see on teile informatiivne :-) See on õpetatav, kuidas teha Arduino abil põhiline võimsusteguri mõõtmine. Enne alustamist tuleb meeles pidada mõnda asja: see töötab AINULT