Përmbajtje:
- Hapi 1: Konsiderata Teknike
- Hapi 2: Komponentët e kërkuar
- Hapi 3: Ndërtimi
- Hapi 4: Kodi
- Hapi 5: Përdorimi
Video: Gjeneratori i formës valore Arduino: 5 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:16
Përditësimi i shkurtit 2021: shikoni versionin e ri me 300 herë normën e marrjes së mostrave, bazuar në Raspberry Pi Pico
Në laborator, dikush shpesh ka nevojë për një sinjal të përsëritur të një frekuence, forme dhe amplituda të caktuar. Mund të jetë për të testuar një përforcues, kontrolluar një qark, një përbërës ose një aktivizues. Gjeneratorë të fuqishëm të formave valore janë në dispozicion në treg, por është relativisht e lehtë të bësh një të dobishme vetë me një Arduino Uno ose Arduino Nano, shih për shembull:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Këtu është përshkrimi i një tjetri me karakteristikat e mëposhtme:
* Forma të sakta vale: dalje 8-bit duke përdorur R2R DAC, formë 256-mostër
* Shpejt: Shkalla e marrjes së mostrave 381 kHz
* E saktë: Gama e frekuencës së hapave 1mHz. Po aq i saktë sa kristali Arduino.
* Funksionim i lehtë: forma e valës dhe frekuenca e rregullueshme me kodues të vetëm rrotullues
* Gama e gjerë e amplituda: milivolt në 20V
* 20 forma valore të paracaktuara. E drejtë për të shtuar më shumë.
* Lehtë për tu bërë: Arduino Uno ose Nano plus përbërës standardë
Hapi 1: Konsiderata Teknike
Bërja e një sinjali analog
Një e metë e Arduino Uno dhe Nano është se nuk ka një konvertues dixhital në analog (DAC), kështu që nuk është e mundur të bëhet që ai të prodhojë një tension analog direkt në kunjat. Një zgjidhje është shkalla R2R: 8 kunja dixhitale janë të lidhura me një rrjet rezistence në mënyrë që të arrihen 256 nivele daljeje. Përmes aksesit direkt në port, Arduino mund të vendosë 8 kunja njëkohësisht me një komandë të vetme. Për rrjetin e rezistencës, nevojiten 9 rezistorë me vlerë R dhe 8 me vlerë 2R. Kam përdorur 10kOhm si vlerë për R, që mban rrymën nga kunjat në 0.5mA ose më pak. Unë mendoj se R = 1kOhm mund të funksionojë gjithashtu, pasi Arduino mund të japë lehtësisht 5mA për pin, 40mA për port. Importantshtë e rëndësishme që raporti midis rezistencave R dhe 2R të jetë vërtet 2. Kjo arrihet më lehtë duke vendosur 2 rezistorë me vlerë R në seri, për gjithsej 25 rezistorë.
Akumulatori i fazës
Gjenerimi i një forme valore pastaj zbret duke dërguar në mënyrë të përsëritur një sekuencë të numrave 8-bit në kunjat Arduino. Forma e valës ruhet në një grup prej 256 bajtësh dhe ky grup merret mostra dhe i dërgohet kunjave. Frekuenca e sinjalit të daljes përcaktohet nga sa shpejt përparon përmes grupit. Një mënyrë e fortë, e saktë dhe elegante për ta bërë këtë është me një akumulator fazor: një numër 32-bit rritet në intervale të rregullta, dhe ne përdorim 8 bitët më të rëndësishëm si indeksi i grupit.
Kampionim i shpejtë
Ndërprerjet lejojnë marrjen e mostrave në kohë të përcaktuara mirë, por lartësia e ndërprerjeve kufizon frekuencën e marrjes së mostrave në ~ 100kHz. Një lak i pafund për të azhurnuar fazën, mostrën e formës së valës dhe vendosjen e kunjave merr 42 cikle sahati, duke arritur kështu një normë të marrjes së mostrave prej 16MHz/42 = 381kHz. Rrotullimi ose shtyrja e kodifikuesit rrotullues shkakton një ndryshim të kunjit dhe një ndërprerje që del nga laku për të ndryshuar cilësimin (forma e valës ose frekuenca). Në këtë fazë, 256 numrat në grup janë rillogaritur në mënyrë që asnjë llogaritje aktuale e formës së valës të mos kryhet në lakin kryesor. Frekuenca maksimale absolute që mund të gjenerohet është 190kHz (gjysma e shkallës së marrjes së mostrës), por atëherë ka vetëm dy mostra për periudhë, pra jo shumë kontroll i formës. Ndërfaqja kështu nuk lejon të vendosni frekuencën mbi 100kHz. Në 50kHz, ka 7-8 mostra për periudhë dhe në 1.5 kHz dhe më poshtë të gjithë 256 numrat e ruajtur në grup marrin mostra çdo periudhë. Për format e valëve ku sinjali ndryshon pa probleme, për shembull vala e sinusit, kapërcimi i mostrave nuk është problem. Por për format e valëve me thumba të ngushta, për shembull një valë katrore me një cikël të vogël detyre, ekziston rreziku që për frekuencat mbi 1.5 kHz që mungon një mostër e vetme mund të rezultojë që një formë valore të mos sillet siç pritej
Saktësia e frekuencës
Numri me të cilin faza shtohet në secilin mostër është proporcional me frekuencën. Frekuenca kështu mund të vendoset në një saktësi prej 381kHz/2^32 = 0.089mHz. Në praktikë, një saktësi e tillë nuk është e nevojshme ndonjëherë, kështu që ndërfaqja kufizon përcaktimin e frekuencës në hapa 1mHz. Saktësia absolute e frekuencës përcaktohet nga saktësia e frekuencës së orës Arduino. Kjo varet nga lloji Arduino, por shumica specifikojnë një frekuencë prej 16.000 MHz, pra një saktësi prej ~ 10^-4. Kodi ju lejon të modifikoni raportin e frekuencës dhe rritjen e fazës për të korrigjuar devijimet e vogla të supozimit 16MHz.
Buferimi dhe amplifikimi
Rrjeti i rezistencës ka një rezistencë të lartë dalëse, kështu që voltazhi i tij i daljes bie shpejt nëse bashkohet një ngarkesë. Kjo mund të zgjidhet duke ruajtur ose amplifikuar daljen. Këtu, tamponimi dhe amplifikimi bëhet me një opamp. Kam përdorur LM358 sepse kisha disa. Shtë një opamp i ngadalshëm (shkalla e goditjes 0.5V për mikrosekonda) kështu që në frekuencë të lartë dhe amplituda të lartë sinjali shtrembërohet. Një gjë e mirë është se mund të përballojë tensione shumë afër 0V. Sidoqoftë, tensioni i daljes është i kufizuar në ~ 2V nën hekurudhë, kështu që përdorimi i fuqisë +5V kufizon tensionin e daljes në 3V. Modulet hap pas hapi janë kompakte dhe të lira. Duke ushqyer +20V në opamp, mund të gjenerojë sinjale me tension deri në 18V. (NB, skema thotë LTC3105 sepse kjo ishte e vetmja ngritje që gjeta në Fritzing. Në realitet kam përdorur një modul MT3608, shiko fotografitë në hapat e ardhshëm). Unë zgjedh të aplikoj një zbutje të ndryshueshme në daljen e R2R DAC, pastaj përdor njërën nga opamps për të ruajtur sinjalin pa përforcim dhe tjetrin për ta përforcuar me 5.7, në mënyrë që sinjali të arrijë një dalje maksimale prej rreth 20V. Rryma e daljes është mjaft e kufizuar, ~ 10mA, kështu që një përforcues më i fortë mund të jetë i nevojshëm nëse sinjali duhet të drejtojë një altoparlant të madh ose elektromagnet.
Hapi 2: Komponentët e kërkuar
Për gjeneratorin e formës valore bazë
Arduino Uno ose Nano
Ekran LCD 16x2 + makinë prerëse 20kOhm dhe rezistencë e serisë 100 Ohm për ndriçimin e pasmë
Kodifikues rrotullues me 5 kunja (me buton të integruar)
25 rezistencë prej 10kOhm
Për tampon/amplifikator
LM358 ose opamp tjetër të dyfishtë
moduli i rritjes i bazuar në MT3608
Rezistencë e ndryshueshme 50kOhm
Rezistencë 10kOhm
Rezistencë 47kOhm
Kondensator 1muF
Hapi 3: Ndërtimi
Unë bashkova gjithçka në një bord prototip 7x9cm, siç tregohet në foto. Meqenëse u bë pak e çrregullt me të gjitha telat, u përpoqa të ngjyros kordonët që mbajnë tension pozitiv në të kuqe dhe ato që mbajnë terren të zi.
Koduesi që kam përdorur ka 5 kunja, 3 në njërën anë, 2 në anën tjetër. Ana me 3 kunja është koduesi aktual, ana me 2 kunja është butoni i integruar. Në anën me 3 kunja, kunja qendrore duhet të lidhet me tokën, dy kunjat e tjerë me D10 dhe D11. Në anën 2-pin, një kunj duhet të lidhet me tokën dhe tjetra me D12.
Thingshtë gjëja më e shëmtuar që kam bërë ndonjëherë, por funksionon. Do të ishte mirë të vendosnit një rrethim, por tani për tani puna dhe kostoja shtesë nuk e justifikojnë atë. Nano dhe ekrani janë bashkangjitur me tituj pin. Unë nuk do ta bëja përsëri nëse do të ndërtoja një të re. Unë nuk kam vënë lidhës në tabelë për të marrë sinjalet. Në vend të kësaj, i marr me kabllo krokodili nga copa teli bakri të spikatur, të etiketuar si më poshtë:
R - sinjal i papërpunuar nga R2R DAC
B - sinjali i ruajtur
A - sinjal i përforcuar
Sinjali i kohëmatësit T nga kunja 9
G - tokë
+ - tension pozitiv 'i lartë' nga moduli i rritjes
Hapi 4: Kodi
Kodi, një skicë Arduino, është bashkangjitur dhe duhet të ngarkohet në Arduino.
20 forma valore janë paracaktuar. Duhet të jetë e drejtpërdrejtë të shtoni ndonjë valë tjetër. Vini re se valët e rastësishme mbushin grupin me vlerë 256 me vlera të rastësishme, por i njëjti model përsëritet çdo periudhë. Sinjalet e vërteta të rastësishme tingëllojnë si zhurmë, por kjo formë vale tingëllon shumë më tepër si një bilbil.
Kodi vendos një sinjal 1kHz në pin D9 me TIMER1. Kjo është e dobishme për të kontrolluar kohën e sinjalit analog. Kështu kuptova se numri i cikleve të orës është 42: Nëse marr ose 41 ose 43, dhe krijoj një sinjal 1kHz, ai qartë ka një frekuencë të ndryshme nga sinjali në pin D9. Me vlerën 42 përputhen në mënyrë perfekte.
Normalisht, Arduino ndërpret çdo milisekonda për të mbajtur kohën me funksionin millis (). Kjo do të shqetësonte gjenerimin e sinjalit të saktë, kështu që ndërprerja e veçantë është e çaktivizuar.
Përpiluesi thotë: "Skica përdor 7254 bajt (23%) të hapësirës së ruajtjes së programit. Maksimumi është 30720 bajt. Variablat globale përdorin 483 bajt (23%) të kujtesës dinamike, duke lënë 1565 bajt për ndryshoret lokale. Maksimumi është 2048 bajt." Pra, ka hapësirë të mjaftueshme për kod më të sofistikuar. Kujdes se mund t'ju duhet të zgjidhni "ATmega328P (bootloader i vjetër)" për ta ngarkuar me sukses në Nano.
Hapi 5: Përdorimi
Gjeneratori i sinjalit mund të mundësohet thjesht përmes kabllit mini-USB të Arduino Nano. Bestshtë më mirë të bëhet me një bankë energjie, në mënyrë që të mos ketë një lak tokësor aksidental me aparatin me të cilin mund të lidhet.
Kur ndizet do të krijojë një valë sinus 100Hz. Duke rrotulluar çelësin, mund të zgjidhet një nga 20 llojet e tjera të valëve. Duke u rrotulluar ndërsa shtyhet, kursori mund të vendoset në cilindo nga shifrat e frekuencës, të cilat pastaj mund të ndryshohen në vlerën e dëshiruar.
Amplituda mund të rregullohet me potenciometër dhe mund të përdoret ose sinjali i ruajtur ose i përforcuar.
Reallyshtë vërtet e dobishme të përdorni një oshiloskop për të kontrolluar amplitudën e sinjalit, veçanërisht kur sinjali furnizon rrymë në një pajisje tjetër. Nëse tërhiqet shumë rrymë, sinjali do të kapet dhe sinjali do të shtrembërohet shumë
Për frekuenca shumë të ulëta, dalja mund të vizualizohet me një LED në seri me një rezistencë 10kOhm. Frekuencat audio mund të dëgjohen me një altoparlant. Sigurohuni që ta vendosni sinjalin shumë të vogël ~ 0.5V, përndryshe rryma bëhet shumë e lartë dhe sinjali fillon të pritet.
Recommended:
Gjeneratori i funksionit: 12 hapa (me fotografi)
Gjeneratori i funksioneve: Ky udhëzues përshkruan modelin e gjeneratorit të funksioneve bazuar në qarkun e integruar analog të Maxims MAX038. Gjeneratori i funksioneve është një mjet shumë i dobishëm për freaksët elektronikë. Isshtë e nevojshme për akordimin e qarqeve të rezonancës, testimin e audit
Drita e formës së zemrës Arduino: 6 hapa (me fotografi)
Arduino Heart Shape Light: Arduino Heart Shape Light (1) Projekt i vogël Duke përdorur Arduino për të kontrolluar dritën LED (2) përdorni 4 dritë Led me 3 ngjyra, ju mund të ndryshoni të gjithë ngjyrën që ju pëlqen. (3) mund të ri-programohet si zbehet brenda dhe jashtë dritës ose Drita vezulluese (4) Të gjitha pjesët janë të shtypura nga p 3D
Funksioni DIY/Gjeneratori i formës së valës: 6 hapa (me fotografi)
Funksioni DIY/Generator Waveform: Në këtë projekt do të kemi një vështrim të shkurtër në funksionet komerciale/gjeneratorët e formave të valëve në mënyrë që të përcaktojmë se cilat veçori janë të rëndësishme për një version DIY. Më pas do t'ju tregoj se si të krijoni një gjenerator të thjeshtë funksionesh, analog dhe shifror
Gjeneratori i zareve: 12 hapa (me fotografi)
Gjeneratori i zareve: Ky Instructables është për Projektin tim të Madh që kam përfunduar si pjesë e kursit tim të Sistemeve dhe Kontrolleve të IGCSE. Ajo mori një notë A* dhe unë do t'ju udhëzoj se si ta bëni atë në këtë udhëzues. Një sfond i mirë në elektronikë, si dhe përvojë
Gjenerator me kosto të ulët të formave valore (0 - 20MHz): 20 hapa (me fotografi)
Low Cost Waveform Generator (0 - 20MHz): ABSTRATH Ky projekt vjen nga nevoja për të marrë një gjenerator valësh me një gjerësi brezi mbi 10 Mhz dhe një shtrembërim harmonik nën 1%, e gjithë kjo me një çmim me kosto të ulët. Ky dokument përshkruan një dizajn të një gjeneratori të valëve me një gjerësi brezi të tejkaluar