Përmbajtje:

Gjeneratori i formës valore Arduino: 5 hapa (me fotografi)
Gjeneratori i formës valore Arduino: 5 hapa (me fotografi)

Video: Gjeneratori i formës valore Arduino: 5 hapa (me fotografi)

Video: Gjeneratori i formës valore Arduino: 5 hapa (me fotografi)
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Nëntor
Anonim
Gjenerator i formës valore Arduino
Gjenerator i formës valore Arduino

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

Ndërtim
Ndërtim
Ndërtim
Ndërtim

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: