Sisukord:
- Samm: tehnilised kaalutlused
- 2. samm: nõutavad komponendid
- 3. samm: ehitamine
- 4. samm: kood
- 5. samm: kasutamine
Video: Arduino lainekuju generaator: 5 sammu (piltidega)
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
Veebruari 2021 värskendus: vaadake uut versiooni, mille proovivõtu sagedus on 300 korda suurem ja mis põhineb Raspberry Pi Picol
Laboris on sageli vaja teatud sageduse, kuju ja amplituudiga korduvat signaali. See võib olla võimendi testimine, vooluahela, komponendi või täiturmehhanismi kontrollimine. Võimsad lainekujugeneraatorid on kaubanduslikult saadaval, kuid Arduino Uno või Arduino Nano abil on suhteliselt lihtne kasulik ise valmistada, vt näiteks:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Siin on veel ühe kirjeldus, millel on järgmised omadused:
* Täpsed lainekujud: 8-bitine väljund, kasutades R2R DAC, 256 proovi kuju
* Kiire: 381 kHz diskreetimissagedus
* Täpne: 1mHz sammu sagedusvahemik. Sama täpne kui Arduino kristall.
* Lihtne kasutada: lainekuju ja sagedus on seadistatavad ühe pöörleva kodeerijaga
* Lai amplituudide vahemik: millivolt kuni 20 V.
* 20 eelnevalt määratletud lainekuju. Lihtne lisada veel.
* Lihtne valmistada: Arduino Uno või Nano pluss standardkomponendid
Samm: tehnilised kaalutlused
Analoogsignaali tegemine
Üks Arduino Uno ja Nano puudusi on see, et sellel ei ole digitaal-analoog (DAC) muundurit, seega ei ole võimalik panna seda analoogpinget otse tihvtidele väljastama. Üks lahendus on R2R redel: 8 digitaalset tihvti on ühendatud takistusvõrguga, et saavutada 256 väljundi taset. Otsese juurdepääsu kaudu pordile saab Arduino ühe käsuga korraga määrata 8 kontakti. Takisti võrgu jaoks on vaja 9 takistit väärtusega R ja 8 väärtust 2R. Kasutasin R väärtuseks 10 kOhm, mis hoiab tihvtide voolu kuni 0,5 mA või vähem. Ma arvan, et R = 1 kOhm võiks samuti töötada, kuna Arduino suudab hõlpsalt tarnida 5 mA pin, 40 mA porti. On oluline, et R ja 2R takistite suhe oleks tõesti 2. Seda on kõige lihtsam saavutada, pannes järjestikku 2 takistit väärtusega R, kokku 25 takisti.
Faaside aku
Lainekuju genereerimine tähendab seejärel 8-bitiste numbrite jada korduvat saatmist Arduino tihvtidele. Lainekuju salvestatakse 256 -baidisesse massiivi ning sellest massiivist võetakse proovid ja saadetakse tihvtidele. Väljundsignaali sageduse määrab see, kui kiiresti massiivist edasi liigutakse. Tugev, täpne ja elegantne viis selleks on faasiakumulaator: 32-bitist arvu suurendatakse korrapäraste ajavahemike järel ja me kasutame massiivi indeksina 8 kõige olulisemat bitti.
Kiire proovide võtmine
Katkestused võimaldavad proovide võtmist täpselt määratletud aegadel, kuid katkestuste üldkulud piiravad diskreetimissagedust ~ 100 kHz. Lõpmatu tsükkel faasi värskendamiseks, lainekuju proovide võtmiseks ja tihvtide seadmiseks kulub 42 taktsüklit, saavutades seega diskreetimissageduse 16MHz/42 = 381kHz. Pöörleva kodeerija pööramine või lükkamine põhjustab nööpnõela vahetuse ja silmusest väljuva katkestuse, mis muudab seadistust (lainekuju või sagedus). Selles etapis arvutatakse massiivi 256 numbrit ümber nii, et põhiahelas ei ole vaja tegelikke lainekuju arvutusi teha. Absoluutne maksimaalne sagedus, mida saab genereerida, on 190 kHz (pool proovivõtu sagedusest), kuid siis on perioodi kohta ainult kaks proovi, seega ei ole kuju palju kontrollitav. Seega ei võimalda liides seadistada sagedust üle 100 kHz. 50 kHz juures on perioodil 7–8 proovi ja 1,5 kHz ja allpool võetakse kõik 256 massiivi salvestatud numbrit igal perioodil. Lainekuju puhul, mille signaal muutub sujuvalt, näiteks siinuslaine, pole proovide vahelejätmine probleem. Kuid kitsaste naeltega lainekuju puhul, näiteks väikese töötsükliga ruutlaine puhul, on oht, et sageduste puhul, mis ületavad 1,5 kHz, puudub üks proov, võib lainekuju toimida ootuspäraselt
Sageduse täpsus
Arv, mille võrra faasi iga proovi puhul suurendatakse, on proportsionaalne sagedusega. Sageduse saab seega seada täpsusele 381 kHz/2^32 = 0,089 MHz. Praktikas pole sellist täpsust peaaegu kunagi vaja, nii et liides piirab sageduse seadmist 1 mHz sammuga. Sageduse absoluutse täpsuse määrab Arduino taktsageduse täpsus. See sõltub Arduino tüübist, kuid enamik määrab sageduse 16 000 MHz, seega täpsus ~ 10^-4. Kood võimaldab muuta sageduse ja faasi juurdekasvu suhet 16MHz eelduse väikeste kõrvalekallete parandamiseks.
Puhverdamine ja võimendamine
Takisti võrgul on kõrge väljundtakistus, mistõttu koormuse kinnitamisel langeb selle väljundpinge kiiresti. Seda saab lahendada väljundi puhverdamise või võimendamisega. Siin tehakse puhverdamine ja võimendamine opampiga. Ma kasutasin LM358, sest mul oli neid. See on aeglane opamp (pöördekiirus 0,5 V mikrosekundi kohta), nii et kõrge sageduse ja suure amplituudiga signaal moonutatakse. Hea on see, et see saab hakkama 0V lähedaste pingetega. Väljundpinge on siiski piiratud ~ 2V rööpa all, seega piirab +5V võimsuse kasutamine väljundpinget 3V -ni. Step-up moodulid on kompaktsed ja odavad. Toites +20V opampile, võib see genereerida signaale pingega kuni 18 V. (NB! Skeemil on kirjas LTC3105, sest see oli ainus samm, mille leidsin Fritzingist. Tegelikkuses kasutasin MT3608 moodulit, vt järgmiste sammude pilte). Valin R2R DAC väljundile muutuva sumbumise, seejärel kasutan ühte opampidest signaali puhverdamiseks ilma võimenduseta ja teist võimendamiseks 5,7 võrra, nii et signaal jõuab maksimaalse väljundini umbes 20 V. Väljundvool on üsna piiratud, ~ 10mA, seega võib vaja minna tugevamat võimendit, kui signaal peab juhtima suurt kõlarit või elektromagnetit.
2. samm: nõutavad komponendid
Tuumlainekuju generaatori jaoks
Arduino Uno või Nano
16x2 LCD -ekraan + 20kOhm trimmer ja 100Ohm seeria takisti taustvalgustuse jaoks
5-kontaktiline pöördkooder (integreeritud nupuga)
25 takisti 10kOhm
Puhvri/võimendi jaoks
LM358 või muu kahekordne opamp
astmemoodul, mis põhineb MT3608-l
50 kOhm muutuv takisti
10 kOhm takisti
47 kOhm takisti
1 µF kondensaator
3. samm: ehitamine
Jootsin kõik 7x9cm prototüüpplaadile, nagu pildil näidatud. Kuna kõikide juhtmetega läks natuke sassi, proovisin positiivset pinget kandvaid juhtmeid punaseks värvida ja maandusjuhtmeid mustaks.
Minu kasutatud kodeerijal on 5 tihvti, 3 ühel küljel, 2 teisel küljel. 3 tihvtiga külg on tegelik kodeerija, 2 tihvtiga külg on integreeritud nupp. Kolme kontaktiga küljel tuleb keskne tihvt ühendada maandusega, ülejäänud kaks tihvti D10 ja D11 külge. Kahe kontaktiga küljel tuleb üks tihvt ühendada maandusega ja teine D12-ga.
See on koledam asi, mida ma kunagi teinud olen, kuid see töötab. Oleks tore korpusesse panna, kuid praegu ei õigusta lisatöö ja kulud seda tegelikult. Nano ja ekraan on kinnitatud nööpnõeltega. Ma ei teeks seda uuesti, kui ehitaksin uue. Ma ei pannud tahvlile pistikuid signaalide vastuvõtmiseks. Selle asemel võtan need välja krokodillijuhtmetega vasktraadi väljaulatuvatest tükkidest, mis on märgistatud järgmiselt:
R - toorsignaal R2R DAC -st
B - puhverdatud signaal
A - võimendatud signaal
Taimeri signaal tihvtist 9
G - maapind
+ - positiivne kõrgepinge lisamoodulist
4. samm: kood
Kood, Arduino visand, on lisatud ja see tuleks Arduinosse üles laadida.
20 lainekuju on eelnevalt määratletud. Mis tahes muu laine lisamine peaks olema lihtne. Pange tähele, et juhuslikud lained täidavad 256 väärtusega massiivi juhuslike väärtustega, kuid sama mustrit korratakse igal perioodil. Tõelised juhuslikud signaalid kõlavad nagu müra, kuid see lainekuju kõlab palju rohkem kui vile.
Kood seab 1kHz signaali tihvtile D9 koos TIMER1 -ga. See on kasulik analoogsignaali ajastuse kontrollimiseks. Nii ma arvasin, et taktsüklite arv on 42: kui ma eeldan, et 41 või 43 ja genereerin 1 kHz signaali, siis on selle sagedus selgelt erinev tihvti D9 signaalist. Väärtusega 42 sobivad nad ideaalselt kokku.
Tavaliselt katkestab Arduino iga millisekundi, et jälgida millis () funktsiooniga aega. See häiriks täpset signaali genereerimist, seega on konkreetne katkestus keelatud.
Koostaja ütleb: "Sketch kasutab programmi salvestusruumi 7254 baiti (23%). Maksimaalne on 30720 baiti. Globaalsed muutujad kasutavad 483 baiti (23%) dünaamilist mälu, jättes kohalikele muutujatele 1565 baiti. Maksimaalne on 2048 baiti." Nii et keerukama koodi jaoks on piisavalt ruumi. Olge ettevaatlik, et Nano -le edukaks üleslaadimiseks peate võib -olla valima "ATmega328P (vana alglaadur)".
5. samm: kasutamine
Signaaligeneraatorit saab toita lihtsalt Arduino Nano mini-USB-kaabli kaudu. Seda on kõige parem teha toitepangaga, nii et seadmega ei oleks juhuslikku maandusahelat, millega seda ühendada.
Sisselülitamisel tekitab see 100 Hz siinuslaine. Nuppu keerates saab valida ühe ülejäänud 20 lainetüübist. Nihutamise ajal pööramisel saab kursori seada mis tahes sageduse numbrile, mida saab seejärel soovitud väärtusele muuta.
Amplituudi saab reguleerida potentsiomeetriga ja kasutada kas puhverdatud või võimendatud signaali.
Signaali amplituudi kontrollimiseks on tõesti kasulik ostsilloskoop, eriti kui signaal annab voolu teisele seadmele. Kui voolu tõmmatakse liiga palju, siis signaal katkeb ja signaal on tugevasti moonutatud
Väga madalate sageduste korral saab väljundit visualiseerida 10kOhm takisti jada LED -iga. Kõlariga saab kuulda helisagedusi. Kindlasti seadke signaal väga väikeseks ~ 0,5V, vastasel juhul muutub vool liiga suureks ja signaal hakkab kärpima.
Soovitan:
Juhuslike numbrite generaator: 5 sammu (piltidega)
Juhuslike numbrite generaator: see artikkel näitab teile analoog juhuslike numbrite generaatorit. See vooluahel hakkab genereerima juhuslikku väljundit, kui inimene puudutab sisendklemmi. Vooluahela väljund on võimendatud, integreeritud ja võimendab veelgi inimese müra, mis toimib nagu
DIY funktsioon/lainekuju generaator: 6 sammu (piltidega)
DIY funktsioon/lainekuju generaator: Selles projektis vaatame lühidalt kaubanduslikke funktsioonide/lainekuju generaatoreid, et teha kindlaks, millised funktsioonid on DIY versiooni jaoks olulised. Seejärel näitan teile, kuidas luua lihtsat funktsioonigeneraatorit, analoogi ja numbrit
Generaator - alalisvoolu generaator Reed lüliti abil: 3 sammu
Generaator - alalisvoolu generaator Reed lülitit kasutades: lihtne alalisvoolu generaator Alalisvoolu (DC) generaator on elektrimasin, mis muudab mehaanilise energia alalisvoolu elektrienergiaks. Oluline: alalisvoolu (DC) generaatorit saab kasutada alalisvoolumootorina ilma konstruktsioonita muudatused
Arduino Yún Morse generaator: 4 sammu (piltidega)
Arduino Yún Morse Generator: Kas olete kunagi olnud baaris, kus te ei saanud oma sõbraga rääkida, sest muusika oli liiga vali? no nüüd võite temalt morsekoodis õlut küsida! Alustame
Madala hinnaga lainekuju generaator (0–20 MHz): 20 sammu (piltidega)
Odav lainekuju generaator (0–20 MHz): ABSTRATH See projekt tuleneb vajadusest hankida lainegeneraator ribalaiusega üle 10 Mhz ja harmooniline moonutus alla 1%, seda kõike madala hinnaga. See dokument kirjeldab lainegeneraatori konstruktsiooni, mille ribalaius on üle