Përmbajtje:
- Hapi 1: Divizioni i Frekuencave Dixhitale
- Hapi 2: Hardware i rekomanduar
- Hapi 3: Qarku
- Hapi 4: Kodi dhe Matja e Frekuencave të Ulëta
Video: Si të matni frekuencën e lartë dhe ciklin e punës, njëkohësisht, duke përdorur një mikrokontrollues .: 4 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:20
Unë e di se çfarë mendoni: "Huh? Ka shumë udhëzime se si të përdorni mikrokontrolluesit për të matur frekuencën e sinjalit. Yawn." Por prisni, ka një risi në këtë: Unë përshkruaj një metodë të matjes së frekuencave shumë më të larta nga sa mund të mbajë një mikrokontrollues (MCU) dhe ciklin e funksionimit të sinjalit - të gjitha në të njëjtën kohë!
Gama e frekuencave të pajisjes përfshin nga ~ 43 Hz në ~ 450 kHz, ndërsa cikli i funksionimit varion nga 1% deri në 99%.
Më lejoni të shpjegoj pjesën "mund të durojë": një MCU mat periudhën e një sinjali të valës katrore, T, duke ndjekur kohën midis dy ngjarjeve të mëvonshme të tranzicionit. Për shembull, tensioni i ulët deri në atë të lartë kërcen në njërën nga kunjat e tij I/O. E bën atë duke numëruar numrin e impulseve të orës së tij të brendshme. Në mënyrë naive, kufiri i sipërm për frekuencat e matura duhet t'i bindet teoremës së marrjes së mostrave Nyqvist-Shannon; dmth., do të ishte afërsisht e barabartë me gjysmën e frekuencës së orës së MCU -ve. Në realitet kufiri është shumë, shumë më i ulët, sepse MCU duhet të ekzekutojë kodin për të trajtuar ndërprerjet, për të ruajtur variablat, për të bërë operacione aritmetike, për të shfaqur rezultatet, etj. Në eksperimentet e mia me një MCU 48 MHz numri minimal i cikleve të orës midis kalimeve të matshme ishte rreth 106. Prandaj, kufiri i sipërm i intervalit të frekuencës së matshme në këtë rast do të ishte 48, 000 /212 /2 = 226.4 kHz.
Ndërsa MCU mat periudhën e sinjalit, ai gjithashtu mund të përcaktojë gjerësinë e impulsit të tij, P: koha e tensionit të sinjalit që mbetet e lartë. Me fjalë të tjera, koha midis kalimeve të ulëta në të larta dhe të larta në të ulëta. Cikli i funksionimit të sinjalit përcaktohet si përqindja e mëposhtme:
Detyra = 100% * P / T
Ashtu si në rastin e frekuencës, ekziston një kufi praktik në gjerësinë e impulsit. Duke përdorur shembullin e mësipërm, 106 cikle të orës do të kufizonin gjerësinë e impulsit në jo më pak se 2.21 mikrosekonda. Ose, jo më pak se 50% në 226.4 kHz.
Një nga mënyrat e rritjes së kufirit të sipërm të frekuencës së sinjaleve të valëve katrore është aplikimi i ndarësve dixhitalë që përdorin flip-flops. Ndarja e frekuencës së hyrjes me n do të zgjaste gamën e sipërme të matshme n herë. Ky është një lajm i mrekullueshëm, ndarësit dixhitalë kanë një të metë themelore: sinjali i ndarë humbet informacionin e gjerësisë së pulsit (dhe ciklit të punës)! Për shkak të mënyrës se si funksionojnë ndarësit, prodhimi i tyre ka gjithmonë 50% cikël detyre. Bummer…
Në faqet në vijim, megjithatë, unë do të tregoj se si të ndajmë në mënyrë dixhitale frekuencën dhe të ruajmë gjerësinë e impulsit origjinal duke më lejuar të mat sinjalet edhe përtej kufijve të vendosur nga numërimi i drejtpërdrejtë.
Hapi 1: Divizioni i Frekuencave Dixhitale
Ndarësit tradicionalë të frekuencave dixhitale përdorin flip-flops; ky tutorial shpjegon mirë parimet se si të ndërtoni ndarës duke përdorur flip-flops standarde JK. Kjo zgjidh problemin e frekuencave hyrëse shumë të larta për MCU, por ka një pengesë të madhe: sinjali i ndarë ka 50% cikël pune, pavarësisht nga detyra e sinjalit hyrës! Për të parë pse është kështu, shikoni dy figurat e para. Sinjali origjinal me periodën T dhe gjerësinë e pulsit P futet në kunjin e orës të një flip-flop JK ndërsa kunjat e tij J dhe K mbahen të lartë gjatë gjithë kohës (figura e parë). Logjika 3.3V supozohet në të gjithë. Le të supozojmë se rrokullisja nxitet nga skaji pozitiv (d.m.th., në rritje) i orës. Në këto kushte, ndryshimet e gjendjes së kunjit dalës ("rrokullisjet" dhe "rrëzimet" individuale) ndodhin sa herë që kunja e orës shkon nga e ulët në të lartë. Kalimi i lartë në i ulët i orës (pra, buza negative) injorohet plotësisht. Shikoni figurën e dytë. Pina e daljes, Q, lëshon një sinjal periudha e të cilit është dy herë më e gjatë se periudha fillestare, domethënë, frekuenca e saj përgjysmohet. Gjerësia e impulsit të daljes është gjithmonë e barabartë me T. Rrjedhimisht, gjerësia e impulsit origjinal, P, humbet.
Shtimi i një flip-flop tjetër JK në një konfigurim të treguar në figurën e tretë ndan frekuencën origjinale me 4. Shtimi i më shumë flip-flops në të njëjtën mënyrë sekuenciale ndan frekuencën me fuqitë pasuese 2: 8, 16, 32, etj.
Problemi: si të ndani frekuencën e valës katrore duke ruajtur gjerësinë e impulsit?
Ideja është që të shtoni siç duhet një avantazh negativ të shkaktuar nga JK në përzierje. Le ta quajmë "Neg FF"; shiko figurën e katërt. Këtu, "siç duhet" do të thotë që kunjat J dhe K të rrokullisjes së re janë të lidhura me kunjat e daljes Q dhe Qbar, përkatësisht, të ndarësit me 4 ("Pos FF") të ilustruar në figurën e mëparshme. (Këtu, "bar" është shiriti horizontal mbi simbolin Q që tregon mohimin logjik.) Për të parë se çfarë arrin kjo hidhini një sy tabelës së funksioneve të "Neg FF" në figurën e pestë: Kunjat e daljes së Neg, Q dhe Qbar, pasqyrojnë gjendjen e kunjave të tij hyrës, J dhe K, respektivisht. Që do të thotë se ato pasqyrojnë gjendjen e Q dhe Qbar të Pos. Por, veprimi i Neip-it duhet të presë për skajin negativ të sinjalit origjinal, i cili arrin në kohën P pas skajit pozitiv. Aha!
Format valore që rezultojnë janë ilustruar në figurën e gjashtë. "Pos Q" jep sinjal në frekuencën 1/4, "Pos Qbar" është inversi, "Neg Q" ndjek "Pos Q" të zhvendosur nga gjerësia e impulsit P, dhe "Neg Qbar" është e kundërta e tij. Ju mund të verifikoni që logjika AND e "Pos Qbar" dhe "Neg Q" prodhon një tren pulsi të karakterizuar nga gjerësia origjinale e impulsit P dhe 1/4 e frekuencës. Bingo!
Në fillim kam përdorur pikërisht këtë sinjal dalës për të ushqyer MCU. Sidoqoftë, doli të ishte problematike për gjerësinë e impulsit shumë të shkurtër për shkak të kufizimit të cikleve 106 të MCU të përmendur në Hyrje. Unë e kam zgjidhur këtë problem të vogël duke zgjedhur një dalje tjetër: "Pos Qbar" DHE "Neg Qbar" në vend. Një vështrim i formave të valëve duhet t'ju bindë se gjerësia e impulsit të kësaj forme valore të veçantë, P ', ndryshon midis T dhe 2T në vend të diapazonit (0, T) për P. P mund të rikuperohet lehtësisht nga P' me:
P = 2T - P '
Hapi 2: Hardware i rekomanduar
Me të vërtetë më pëlqen relativisht i sapoardhuri tek hobistët elektronikë: Atmel SAM D21 MCU të bazuar në procesorin 32-bit ARM Cortex M0+ që funksionon me një ritëm të orës 48 MHz, shumë më i lartë se Atmelët më të vjetër. Për këtë projekt bleva:
- Bordi i ItsyBitsy M0 Express MCU nga Adafruit
- Më ndodhi të kisha një bateri LiPo të rimbushshme nga Adafruit
- Ekran monokrom 128x32 SPI OLED (e keni menduar: Adafruit)
- Flok-dërrmë JK e dyfishtë e nxitur nga skaji pozitiv SN74HC109 nga Texas Instruments
- Flok-dërrmë JK e dyfishtë e nxitur nga skaji negativ SN74HC112 nga Texas Instruments
- Katërfishe dhe porta CD74AC08E nga Texas Instruments
- Katërfish OSE porta CD74AC32E nga Texas Instruments
Hapi 3: Qarku
Figura e parë tregon një skemë të thjeshtuar të njehsorit të frekuencës/detyrës. Logjika 3.3 V CMOS supozohet në të gjithë. Rrjedhimisht, amplituda e valës katrore të hyrjes duhet të jetë midis V përkatëseIH niveli (dmth. 2 V) dhe 3.3 V. Nëse jo, duhet ta shkallëzoni lart ose poshtë në përputhje me rrethanat. Në shumicën e rasteve do të mjaftonte një ndarës i thjeshtë i tensionit. Nëse dëshironi të krijoni versionin tuaj të njehsorit në një nivel tjetër logjik, atëherë duhet të përdorni një mikrokontrollues tjetër (MCU), bateri dhe një ekran që funksionon në nivelin e dëshiruar. Portat logjike dhe rrokullisjet e përdorura në këtë projekt funksionojnë me nivele logjike diku midis 2 V dhe 6 V dhe duhet të jenë në rregull në shumicën e rasteve.
Siç tregohet, ItsyBitsy MCU përdor kunjat 9-13 për të komunikuar me ekranin përmes protokollit softuer SPI. Pina 3V jep energji në të gjithë qarkun. Kodi dixhital i hyrjes 3 pranon sinjalin e analizuar, ndërsa kunjat 2 dhe 4 kontrollojnë burimin e sinjalit: ose sinjal i drejtpërdrejtë që vjen përmes portës AND3 (frekuenca të ulëta hyrëse), ose sinjal i ndarë me 4 përmes portës AND4 (frekuenca të larta hyrëse) siç përshkruhet në Hapin 2 Kodi, i diskutuar në hapin tjetër, zbulon automatikisht gamën e frekuencës në hyrje dhe ndërron në mënyrë të përshtatshme burimin e sinjalit.
Skema nuk tregon kompleksitetin e vërtetë të lidhjeve dixhitale të çipave. Imazhi i dytë tregon se si do të dukej projekti në një dërrasë buke. Sinjali i hyrjes vjen përmes një teli të kuq në kunjin 2CLK të rrokullisjes me skaj të dyfishtë pozitiv. KUJDES: Normalisht, të gjitha kunjat J dhe K të këtij flip -flopi duhet të mbahen lart, por SN74HC109 në veçanti përmban pinin Kbar - një kunjë K të përmbysur - në vend. Prandaj, kjo kunj duhet të bazohet! Flip-flop-i i parë negativ në SN74HC112 ka kunjat e tij 1K dhe 1J të lidhur me kunjat 1Q dhe 1Qbar të SN74HC109. Flip-flopi i dytë në SN74HC112 është i papërdorur dhe kunjat e tij të hyrjes (2K, 2J, 2CLRbar) janë të bazuara. Të gjitha kunjat e tjera shtesë PREbar (paravendosur) dhe CLRbar (qartë) në të gjitha flip-flops duhet të lidhen me logjikën e lartë. Ora e papërdorur dhe kunjat e daljes lihen të palidhur. Në mënyrë të ngjashme, kunjat hyrëse të papërdorura në të gjitha portat janë të bazuara, ndërsa kunjat dalëse të papërdorura lihen të palidhura. Siç kam diskutuar në udhëzuesin tim "Vrasësi i padukshëm i Unazës së Telefonit", tokëzimi i kunjave të papërdorur të çipave logjikë eliminon luhatjet e rastësishme dhe kursen energjinë e baterisë.
Hapi 4: Kodi dhe Matja e Frekuencave të Ulëta
Natyrisht, i gjithë veprimi ndodh në kodin e lidhur më poshtë. Kur hyrja që hyn në pin 3 kalon nga niveli i ulët dixhital në atë të lartë, MCU fillon të numërojë pulset e orës së tij të brendshme 48 MHz. Ai shënon momentin e kalimit të lartë në të ulët dhe vazhdon numërimin deri në kalimin tjetër të ulët në atë të lartë, kur rifillon përsëri të gjithë procesin përsëri. Numërimi i parë përfaqëson gjerësinë e pulsit, ndërsa i gjithë numërimi paraqet periudhën e sinjalit. Dhe ky është i gjithë sekreti.
CPU vëren këto kalime përmes ndërprerjeve të harduerit. SAMD21 ka disa orë; kodi im përdor një TC3 një. Fillimisht, unë kam filluar duke lexuar fletën e të dhënave M0 duke u përgatitur për shumë përpjekje në kodimin e mbajtësit të ndërprerjes, por së shpejti kam zbuluar një kod shumë të lidhur në postimet e Forumit Arduino nga përdoruesit electro_95, MartinL dhe Rucus, kontributi i të cilëve është pranuar siç duhet. Kam përfshirë dhe modifikuar kodin e tyre të kombinuar në timen; duke më kursyer shumë kohë!
Siç e përmenda më parë, rezolucioni i sinjalit është i kufizuar me 106 cikle CPU për të ekzekutuar kodin midis ndërprerjeve. Ndarja dixhitale me ruajtjen e gjerësisë së impulsit kujdeset për frekuencat e larta. Frekuencat e ulëta, nga ana tjetër, paraqesin një sfidë tjetër: meqenëse numëruesi i orës TC3 është 16 bit i gjatë, ai tejmbush pasi kalon kufirin e numërimit 65, 536. Dikush mund ta trajtojë këtë situatë duke shtuar një ndërprerje të tejmbushjes, por zgjodhi një zgjidhje të ndryshme: TC3 mund të përdorë një orë CPU të paracaktuar (d.m.th., të ndarë në softuer) në vend të një hardueri 48 MHz. Kështu, nëse periudha e sinjalit i afrohet kufirit të tejmbushjes, kodi mund të udhëzojë TC3 të përdorë numërimet 24 MHz për periudhën e ardhshme dhe, voila, numëruesi bie nën 32, 768 akuza. Për frekuenca edhe më të ulëta, TC3 mund të udhëzohet që të numërojë pulset 12 MHz, etj. Parashkarkuesi i përshtatshëm përcaktohet automatikisht në bazë të frekuencës së sinjalit, me histerezë, në mënyrë që të mbajë numëruesin TC3 brenda kufirit të tejmbushjes. Si rezultat, skaji i poshtëm i gamës së pajisjes është rreth 43 Hz.
Jeni të mirëseardhur që të kodoni kodin dhe ta përdorni në projektin tuaj, por ju lutemi përmendni burimin e tij kur publikoni rezultatet.
Lidhje me kodin.
Recommended:
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe një Pranker audio të pajtueshme me Troll Arduino/Bordi praktik i Shakasë.: 5 Hapa
Një makinë për frikësimin e Halloween -it duke përdorur një PIR, një kungull të printuar në 3D dhe Tran Arduino Compatible Audio Pranker/Joke Board praktike .: Bordi Troll i krijuar nga Patrick Thomas Mitchell i EngineeringShock Electronics, dhe u financua plotësisht në Kickstarter jo shumë kohë më parë. Unë mora shpërblimin disa javë më parë për të ndihmuar në shkrimin e disa shembujve të përdorimit dhe ndërtimin e një biblioteke Arduino në një përpjekje
Matni temperaturën dhe lagështinë duke përdorur DHT11 / DHT22 dhe Arduino: 4 hapa
Matni Temperaturën dhe Lagështinë Duke Përdorur DHT11 / DHT22 dhe Arduino: Në këtë Udhëzues Arduino do të mësojmë se si të përdorim DHT11 ose sensorin DHT22 për matjen e temperaturës dhe lagështisë me bordin Arduino
Matni frekuencën kryesore duke përdorur Arduino: 7 hapa (me fotografi)
Matni frekuencën kryesore duke përdorur Arduino: Më 3 Prill, Kryeministri i Indisë, Shri. Narendra Modi u kishte bërë thirrje indianëve që të fiknin dritat dhe të ndiznin një llambë (Diya) në orën 21:00 të mbrëmjes më 5 prill për të shënuar luftën e Indisë kundër Corona Virus. Menjëherë pas njoftimit, pati një kaos të madh
Si të bëni një dron duke përdorur Arduino UNO - Bëni një kuadopter duke përdorur mikrokontrollues: 8 hapa (me fotografi)
Si të bëni një dron duke përdorur Arduino UNO | Bëni një Quadcopter Duke përdorur Mikrokontrolluesin: HyrjeVizitoni Kanalin Tim në YoutubeNjë drone është një vegël (produkt) shumë e shtrenjtë për të blerë. Në këtë postim do të diskutoj, si ta bëj me çmim të ulët ?? Dhe si mund ta bëni tuajin si ky me çmim të lirë … Epo në Indi të gjitha materialet (motorët, ESC -të
Duke përdorur Raspberry Pi, matni lartësinë, presionin dhe temperaturën me MPL3115A2: 6 hapa
Përdorimi i Raspberry Pi, Matni Lartësinë, Presionin dhe Temperaturën Me MPL3115A2: Dije atë që zotëron dhe di pse e zotëron! It'sshtë intriguese. Ne po jetojmë në epokën e Automatizimit të Internetit pasi ai zhytet në një bollëk aplikimesh të reja. Si entuziastë të kompjuterit dhe elektronikës, ne kemi mësuar shumë me Raspberry Pi a