Turinys:

Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį: 4 žingsniai
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį: 4 žingsniai

Video: Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį: 4 žingsniai

Video: Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį: 4 žingsniai
Video: Parazituojančios energijos. Parazitavimas. Paskaitos epizodas iš 2023 metų mokymų ciklo 2024, Liepa
Anonim
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį
Kaip matuoti aukšto dažnio ir darbo ciklą vienu metu naudojant mikrovaldiklį

Aš žinau, ką jūs manote: "Aha? Yra daug nurodymų, kaip naudoti mikrovaldiklius signalo dažniui matuoti. Žiauk." Bet palaukite, čia yra naujovė: aš aprašau metodą, kaip matuoti dažnius, daug didesnius nei mikrovaldiklis (MCU), ir signalo veikimo ciklą - tuo pačiu metu!

Įrenginio dažnių diapazonas yra nuo ~ 43 Hz iki ~ 450 kHz, o darbo ciklas svyruoja nuo 1% iki 99%.

Leiskite paaiškinti „gali pakęsti“dalį: MCU matuoja kvadratinių bangų signalo T periodą, stebėdamas laiką tarp dviejų vėlesnių perėjimo įvykių. Pavyzdžiui, žemos ir aukštos įtampos šuoliai ant vieno iš jo įvesties/išvesties kaiščių. Jis tai daro skaičiuodamas savo vidinio laikrodžio impulsų skaičių. Naiviai, viršutinė išmatuotų dažnių riba turėtų paklusti Nyqvist-Shannon mėginių ėmimo teoremai; y., jis būtų maždaug lygus pusei MCU laikrodžio dažnio. Tiesą sakant, riba yra daug, daug mažesnė, nes MCU turi vykdyti kodą, kad galėtų apdoroti pertraukas, išsaugoti kintamuosius, atlikti aritmetines operacijas, rodyti rezultatus ir tt. Mano eksperimentuose su 48 MHz MCU minimalus laikrodžio ciklų skaičius tarp išmatuojamų perėjimų buvo maždaug 106. Vadinasi, viršutinė išmatuojamo dažnių diapazono riba šiuo atveju būtų 48 000 /212 /2 = 226,4 kHz.

Nors MCU matuoja signalo periodą, jis taip pat gali nustatyti jo impulsų plotį, P: signalo įtampos likimo laikas. Kitaip tariant, laikas tarp perėjimų nuo žemo iki aukšto ir nuo aukšto iki žemo. Tada signalo veikimo ciklas apibrėžiamas taip:

Pareiga = 100% * P / T

Kaip ir dažnio atveju, impulsų plotis yra praktiškai apribotas. Naudojant aukščiau pateiktą pavyzdį, 106 laikrodžio ciklai apribotų impulsų plotį ne mažiau kaip 2,21 mikrosekundės. Arba ne mažiau kaip 50% esant 226,4 kHz dažniui.

Vienas iš būdų padidinti kvadratinių bangų signalų viršutinę dažnio ribą yra skaitmeninių daliklių, naudojančių šlepetes, taikymas. Padalijus įvesties dažnį iš n, išmatuojamas viršutinis diapazonas padidėtų n kartų. Tai puiki žinia, skaitmeniniai skirstytuvai turi vieną esminį trūkumą: padalytas signalas praranda impulsų pločio (ir darbo ciklo) informaciją! Dėl to, kaip veikia skirstytuvai, jų našumas visada yra 50%. Bummer…

Tačiau kituose puslapiuose aš parodysiu, kaip skaitmeniniu būdu padalyti dažnį ir išsaugoti pradinį impulsų plotį, leidžiantį matuoti signalus, gerokai viršijančius tiesioginio skaičiavimo nustatytas ribas.

1 žingsnis: skaitmeninio dažnio skyrius

Skaitmeninių dažnių skyrius
Skaitmeninių dažnių skyrius
Skaitmeninių dažnių skyrius
Skaitmeninių dažnių skyrius
Skaitmeninių dažnių skyrius
Skaitmeninių dažnių skyrius

Tradiciniai skaitmeniniai dažnių skirstytuvai naudoja šlepetes; šioje pamokoje gražiai paaiškinami principai, kaip konstruoti skirstytuvus naudojant standartinius JK šlepetes. Tai išsprendžia per didelių MCU įvesties dažnių problemą, tačiau turi vieną didelį trūkumą: padalintas signalas turi 50% veikimo ciklą, nepriklausomai nuo įvesties signalo darbo! Norėdami sužinoti, kodėl taip yra, pažiūrėkite į pirmuosius du skaičius. Pradinis signalas su periodu T ir impulsų pločiu P tiekiamas į JK šlepetės laikrodžio kaištį, o jo J ir K kaiščiai visada laikomi aukštai (pirmasis paveikslas). 3.3V logika laikoma visoje. Tarkime, kad šleifą sukelia teigiamas (t.y. kylanti) laikrodžio kraštinė. Esant tokioms sąlygoms, išvesties kaiščio būsenos pokyčiai (atskiri „apversimai“ir „šnipštai“) vyksta kiekvieną kartą, kai laikrodžio kaištis pereina nuo žemo iki aukšto. Laikrodžio aukštas ir žemas perėjimas (ty neigiamas kraštas) visiškai ignoruojamas. Žiūrėkite antrą paveikslą. Išvesties kaištis Q skleidžia signalą, kurio laikotarpis yra dvigubai ilgesnis už pradinį laikotarpį, ty jo dažnis sumažėja perpus. Išėjimo impulsų plotis visada yra lygus T. Todėl pradinis impulsų plotis P prarandamas.

Pridėjus dar vieną JK šlepetę, kurios konfigūracija parodyta trečiame paveikslėlyje, pradinis dažnis padalijamas iš 4. Tuo pačiu nuosekliu būdu pridėjus daugiau šlepetių, dažnis padalijamas iš vėlesnių galių 2: 8, 16, 32 ir kt.

Problema: kaip padalyti kvadratinės bangos dažnį, išlaikant jos impulsų plotį?

Idėja yra tinkamai pridėti neigiamą krašto sukeltą JK flip-flop į mišinį. Pavadinkime tai „Neg FF“; žr. ketvirtą paveikslą. Čia „tinkamai“reiškia, kad naujojo šlepetės J ir K kaiščiai yra susieti su atitinkamai Q ir Qbar išvesties kaiščiais iš daliklio pagal 4 („Pos FF“), pavaizduoto ankstesniame paveikslėlyje. (Čia „juosta“yra horizontali juosta virš Q simbolio, rodančio loginį neigimą.) Norėdami pamatyti, ką tai pasiekia, pažvelkite į „Neg FF“funkcijų lentelę, esančią penktame paveikslėlyje: „Neg“išvesties kaiščiai, Q ir „Qbar“, atspindi jo įvesties kaiščių būseną, atitinkamai J ir K. Tai reiškia, kad jie atspindi Pos 'Q ir Qbar būseną. Tačiau „Neg“flip-flop veiksmas turi laukti neigiamo pradinio signalo krašto, kuris atvyksta laiku P po teigiamo krašto. Aha!

Gautos bangos formos pavaizduotos šeštajame paveikslėlyje. „Pos Q“perduoda signalą 1/4 dažniu, „Pos Qbar“yra atvirkštinis, „Neg Q“seka „Pos Q“, pakeistą impulsų pločiu P, o „Neg Qbar“yra jo atvirkštinis. Galite patikrinti, ar loginis „Pos Qbar“ir „Neg Q“AND sukuria impulsinį traukinį, kuriam būdingas pradinis impulsų plotis P ir 1/4 dažnio. Bingo!

Iš pradžių aš naudoju būtent šį išvesties signalą MCU maitinti. Tačiau dėl labai trumpų impulsų pločių tai pasirodė problemiška, nes įvade minimas MCU 106 ciklų apribojimas. Aš išsprendžiau šią nedidelę problemą pasirinkdamas kitą išvestį: „Pos Qbar“IR „Neg Qbar“. Vienas žvilgsnis į bangų formas turėtų jus įtikinti, kad šios konkrečios bangos formos impulsų plotis P 'kinta tarp T ir 2T, o ne (0, T) P diapazone. P galima lengvai atkurti iš P':

P = 2T - P '

2 veiksmas: rekomenduojama aparatinė įranga

Rekomenduojama aparatinė įranga
Rekomenduojama aparatinė įranga
Rekomenduojama aparatinė įranga
Rekomenduojama aparatinė įranga
Rekomenduojama aparatinė įranga
Rekomenduojama aparatinė įranga

Man tikrai patinka naujokas elektronikos mėgėjams: „Atmel SAM D21 MCU“, pagrįsti 32 bitų „ARM Cortex M0+“procesoriumi, veikiančiu 48 MHz dažniu, daug didesniu nei senesni „Atmels“. Šiam projektui nusipirkau:

  • ItsyBitsy M0 Express MCU plokštė iš „Adafruit“
  • Turėjau įkraunamą „LiPo“bateriją iš „Adafruit“
  • Nespalvotas 128 x 32 SPI OLED ekranas (atspėjote: „Adafruit“)
  • Dvigubo teigiamo krašto suaktyvintas „JK“šleifas SN74HC109 iš „Texas Instruments“
  • Dvigubo neigiamo krašto suaktyvintas „JK flip-flop SN74HC112“iš „Texas Instruments“
  • Keturvietis ir vartai CD74AC08E iš „Texas Instruments“
  • Keturvietis arba vartai CD74AC32E iš „Texas Instruments“

3 žingsnis: grandinė

Circuit
Circuit
Circuit
Circuit

Pirmajame paveikslėlyje parodyta supaprastinta dažnio/darbo skaitiklio schema. Visame laikoma 3,3 V CMOS logika. Taigi įvesties kvadratinės bangos amplitudė turi būti tarp atitinkamo VIH lygis (t. y. 2 V) ir 3,3 V. Jei ne, turite atitinkamai padidinti arba sumažinti mastelį. Daugeliu atvejų pakaktų paprasto įtampos skirstytuvo. Jei norite sukurti savo skaitiklio versiją kitokiu loginiu lygiu, turite naudoti kitą mikrovaldiklį (MCU), bateriją ir ekraną, kuris veikia norimu lygiu. Šiame projekte naudojami loginiai vartai ir šlepetės veikia su 2–6 V loginiais lygiais ir daugeliu atvejų turėtų būti tinkami.

Kaip parodyta, „ItsyBitsy MCU“naudoja 9–13 kaiščius, kad galėtų bendrauti su ekranu per programinės įrangos SPI protokolą. 3 V kaištis tiekia energiją visai grandinei. Skaitmeninis įvesties kaištis 3 priima analizuojamą signalą, o 2 ir 4 kaiščiai valdo signalo šaltinį: tiesioginis signalas, gaunamas per vartus AND3 (žemi įvesties dažniai), arba signalas, padalytas iš 4 per vartus AND4 (dideli įvesties dažniai), kaip aprašyta 2 veiksme Kodas, aptariamas kitame žingsnyje, automatiškai aptinka gaunamo dažnio diapazoną ir tinkamai perjungia signalo šaltinį.

Schema neparodo tikro skaitmeninių lustų jungčių sudėtingumo. Antrame paveikslėlyje parodyta, kaip projektas atrodytų ant duonos lentos. Įvesties signalas per raudoną laidą patenka į dvigubo teigiamo krašto šlepetės 2CLK kaištį. ĮSPĖJIMAS: Paprastai visi šio šlepetės J ir K kaiščiai turi būti aukštai laikomi, tačiau ypač SN74HC109 turi Kbar kaištį - apverstą K kaištį. Taigi, šis kaištis turi būti įžemintas! Pirmasis SN74HC112 neigiamo krašto šleifas turi 1K ir 1J kaištį, prijungtą prie SN74HC109 1Q ir 1Qbar kaiščių. Antrasis šnipštas SN74HC112 yra nenaudojamas, o jo įvesties kaiščiai (2K, 2J, 2CLRbar) yra įžeminti. Visi kiti papildomi kaiščiai PREbar (iš anksto nustatyti) ir CLRbar (skaidrūs) visuose šlepetėse turi būti prijungti prie loginio aukščio. Nepanaudoti laikrodžio ir išvesties kaiščiai paliekami nesujungti. Panašiai nenaudojami įvesties kaiščiai visuose vartuose yra įžeminti, o nenaudojami išėjimo kaiščiai paliekami nesujungti. Kaip aptariau savo „Nematomą telefono skambučio žudiką“, instruktuojamas, įžeminus nenaudojamus loginių lustų įvesties kaiščius, pašalinami atsitiktiniai svyravimai ir taupoma akumuliatoriaus energija.

4 žingsnis: kodas ir žemų dažnių matavimas

Natūralu, kad visi veiksmai atliekami naudojant žemiau susietą kodą. Kai įvestis, įeinanti į 3 kaištį, persijungia iš skaitmeninio žemo į aukštą, MCU pradeda skaičiuoti vidinio 48 MHz laikrodžio impulsus. Jis pažymi perėjimo nuo aukšto iki žemo momentą ir tęsia skaičiavimą iki kito jungiklio nuo žemiausio iki aukščiausio, kai jis vėl paleidžia visą procesą. Pirmasis skaičius reiškia impulsų plotį, o visas skaičius - signalo periodą. Ir tai yra visa paslaptis.

Centrinis procesorius pastebi šiuos perėjimus per aparatūros pertraukas. SAMD21 turi kelis laikrodžius; mano kodas naudoja TC3. Iš pradžių aš perskaičiau M0 duomenų lapą, kuriame buvo daug pastangų koduojant pertraukimo tvarkyklę, tačiau netrukus „Arduino“forumo įrašuose atradau labai susijusį kodą, kurį pateikė vartotojai electro_95, MartinL ir Rucus. deramai pripažino. Aš įtraukiau ir pakeičiau jų bendrą kodą į mano; sutaupysiu daug laiko!

Kaip jau minėjau, signalo skiriamąją gebą riboja ~ 106 procesoriaus ciklai, kad būtų vykdomas kodas tarp pertraukų. Skaitmeninis padalijimas su impulsų pločio išsaugojimu rūpinasi aukštais dažniais. Kita vertus, žemi dažniai kelia dar vieną iššūkį: kadangi TC3 laikrodžio skaitiklis yra 16 bitų ilgio, jis perpildomas peržengus 65, 536 skaičių ribą. Šią situaciją galima išspręsti pridedant pertekliaus pertraukimą, tačiau pasirinktas kitas sprendimas: TC3 gali naudoti iš anksto pakeistą (t. Y. Programine įranga suskirstytą) procesoriaus laikrodį, o ne aparatinį 48 MHz. Taigi, jei signalo laikotarpis artėja prie perpildymo ribos, kodas gali nurodyti TC3 naudoti 24 MHz skaičių kitam laikotarpiui ir, voila, skaitiklis nukrenta žemiau 32, 768. Dar žemesniems dažniams TC3 gali būti nurodyta skaičiuoti 12 MHz impulsus ir pan. Tinkamas prescaleris automatiškai nustatomas pagal signalo dažnį, naudojant histerezę, kad TC3 skaitiklis neviršytų perpildymo ribos. Dėl to apatinis prietaiso diapazono galas yra apie 43 Hz.

Kviečiame paskaityti kodą ir jį panaudoti savo projekte, tačiau skelbdami rezultatus paminėkite jo šaltinį.

Nuoroda į kodą.

Rekomenduojamas: