Satura rādītājs:

Arduino viļņu formas ģenerators: 5 soļi (ar attēliem)
Arduino viļņu formas ģenerators: 5 soļi (ar attēliem)

Video: Arduino viļņu formas ģenerators: 5 soļi (ar attēliem)

Video: Arduino viļņu formas ģenerators: 5 soļi (ar attēliem)
Video: Thorium: An energy solution - THORIUM REMIX 2011 2024, Novembris
Anonim
Arduino viļņu formas ģenerators
Arduino viļņu formas ģenerators

2021. gada februāra atjauninājums: pārbaudiet jauno versiju ar 300x paraugu ņemšanas ātrumu, pamatojoties uz Raspberry Pi Pico

Laboratorijā bieži nepieciešams atkārtot noteiktas frekvences, formas un amplitūdas signālu. Tas var būt, lai pārbaudītu pastiprinātāju, pārbaudītu ķēdi, sastāvdaļu vai izpildmehānismu. Jaudīgi viļņu ģeneratori ir nopērkami tirdzniecībā, taču ir salīdzinoši viegli pašiem pagatavot noderīgu, izmantojot Arduino Uno vai Arduino Nano, piemēram:

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

Šeit ir cita apraksts ar šādām funkcijām:

* Precīzas viļņu formas: 8 bitu izeja, izmantojot R2R DAC, 256 parauga forma

* Ātri: 381 kHz izlases ātrums

* Precīzs: 1mHz soļu frekvenču diapazons. Tikpat precīzs kā Arduino kristāls.

* Vienkārša darbība: viļņu formu un frekvenci var iestatīt ar vienu rotējošu kodētāju

* Plašs amplitūdas diapazons: milivolti līdz 20 V.

* 20 iepriekš noteiktas viļņu formas. Vienkārši, lai pievienotu vairāk.

* Viegli izgatavojams: Arduino Uno vai Nano plus standarta sastāvdaļas

1. darbība. Tehniskie apsvērumi

Analoga signāla radīšana

Viens no Arduino Uno un Nano trūkumiem ir tas, ka tam nav digitālā-analogā (DAC) pārveidotāja, tāpēc nav iespējams likt tam izvadīt analogo spriegumu tieši uz tapām. Viens risinājums ir R2R kāpnes: 8 digitālās tapas ir savienotas ar rezistoru tīklu, lai varētu sasniegt 256 izejas līmeņus. Izmantojot tiešu piekļuvi portam, Arduino var iestatīt 8 tapas vienlaikus ar vienu komandu. Rezistoru tīklam ir nepieciešami 9 rezistori ar vērtību R un 8 ar vērtību 2R. Es izmantoju 10 kOhm kā R vērtību, kas saglabā strāvu no tapām līdz 0,5 mA vai mazāk. Es domāju, ka R = 1 kOhm varētu arī darboties, jo Arduino var viegli piegādāt 5 mA uz tapu, 40 mA uz ostu. Ir svarīgi, lai attiecība starp R un 2R rezistoriem patiešām būtu 2. To visvieglāk panākt, sērijveidā ievietojot 2 rezistorus ar vērtību R, kopā 25 rezistorus.

Fāžu akumulators

Viļņu formas ģenerēšana nozīmē atkārtotu 8 bitu skaitļu secības nosūtīšanu uz Arduino tapām. Viļņu forma tiek saglabāta 256 baitu masīvā, un šis masīvs tiek ņemts paraugs un nosūtīts uz tapām. Izejas signāla frekvenci nosaka tas, cik ātri cilvēks virzās pa masīvu. Spēcīgs, precīzs un elegants veids, kā to izdarīt, ir fāžu akumulators: 32 bitu skaitlis tiek palielināts regulāri, un mēs izmantojam 8 nozīmīgākos bitus kā masīva indeksu.

Ātra paraugu ņemšana

Pārtraukumi ļauj ņemt paraugus precīzi noteiktā laikā, bet pārtraukumu izmaksas ierobežo paraugu ņemšanas biežumu līdz ~ 100 kHz. Bezgalīga cilpa fāzes atjaunināšanai, viļņu formas paraugu ņemšanai un tapas iestatīšanai aizņem 42 pulksteņa ciklus, tādējādi panākot 16MHz/42 = 381kHz paraugu ņemšanas ātrumu. Rotējošā kodētāja pagriešana vai stumšana izraisa tapu maiņu un pārtraukumu, kas iziet no cilpas, lai mainītu iestatījumu (viļņu formu vai frekvenci). Šajā posmā 256 skaitļi masīvā tiek pārrēķināti tā, lai galvenajā cilpā nebūtu jāveic faktiskie viļņu formas aprēķini. Absolūtā maksimālā frekvence, ko var ģenerēt, ir 190 kHz (puse no paraugu ņemšanas ātruma), bet tad ir tikai divi paraugi periodā, tāpēc nav daudz formas kontroles. Tādējādi saskarne neļauj iestatīt frekvenci virs 100 kHz. 50 kHz frekvencē vienā periodā ir 7–8 paraugi un 1,5 kHz frekvencē un zemāk par visiem 256 masīvā saglabātajiem skaitļiem tiek ņemti paraugi katrā periodā. Viļņu formām, kurās signāls mainās vienmērīgi, piemēram, sinusoidam, paraugu izlaišana nav problēma. Bet viļņu formām ar šaurām tapām, piemēram, kvadrātveida viļņiem ar mazu darbības ciklu, pastāv risks, ka frekvencēm virs 1,5 kHz trūkst viena parauga, tāpēc viļņu forma nedarbosies, kā paredzēts

Biežuma precizitāte

Skaitlis, ar kuru fāze tiek palielināta katrā paraugā, ir proporcionāls biežumam. Tādējādi frekvenci var iestatīt ar precizitāti 381kHz/2^32 = 0,089mHz. Praksē šāda precizitāte gandrīz nekad nav nepieciešama, tāpēc saskarne ierobežo frekvences iestatīšanu 1 mHz pakāpēs. Frekvences absolūto precizitāti nosaka Arduino pulksteņa frekvences precizitāte. Tas ir atkarīgs no Arduino tipa, bet lielākā daļa norāda frekvenci 16 000 MHz, tātad precizitāti ~ 10^-4. Kods ļauj mainīt frekvences un fāzes pieauguma attiecību, lai koriģētu nelielas 16MHz pieņēmuma novirzes.

Buferizācija un pastiprināšana

Rezistoru tīklam ir augsta izejas pretestība, tāpēc, pievienojot slodzi, tā izejas spriegums ātri samazinās. To var atrisināt, buferizējot vai pastiprinot izvadi. Šeit buferizācija un pastiprināšana tiek veikta ar opamp. Es izmantoju LM358, jo man bija daži. Tas ir lēns opamp (pagrieziena ātrums 0,5 V uz mikrosekundi), tāpēc augstā frekvencē un augstā amplitūdā signāls tiek izkropļots. Laba lieta ir tā, ka tā var izturēt spriegumu ļoti tuvu 0V. Tomēr izejas spriegums ir ierobežots līdz ~ 2 V zem sliedes, tāpēc, izmantojot +5 V jaudu, izejas spriegums ir ierobežots līdz 3 V. Papildu moduļi ir kompakti un lēti. Barojot +20 V opampam, tas var ģenerēt signālus ar spriegumu līdz 18 V. (NB! Shēmā ir teikts LTC3105, jo tas bija vienīgais solis, ko atradu Fritzing. Patiesībā es izmantoju MT3608 moduli, skatiet attēlus nākamajos soļos). Es izvēlos piemērot mainīgu vājinājumu R2R DAC izejai, pēc tam izmantojot vienu no opampiem, lai buferizētu signālu bez pastiprināšanas, bet otru - lai pastiprinātu par 5,7, lai signāls varētu sasniegt aptuveni 20 V maksimālo izeju. Izejas strāva ir diezgan ierobežota, ~ 10 mA, tāpēc, ja signāls ir paredzēts, lai vadītu lielu skaļruni vai elektromagnētu, var būt nepieciešams spēcīgāks pastiprinātājs.

2. darbība. Nepieciešamās sastāvdaļas

Pamatviļņu ģeneratoram

Arduino Uno vai Nano

16x2 LCD displejs + 20kOhm trimmeris un 100Ohm sērijas rezistors fona apgaismojumam

5 kontaktu rotējošais kodētājs (ar integrētu spiedpogu)

25 rezistori ar 10 kOhm

Buferim/pastiprinātājam

LM358 vai citu dubultu opamp

pastiprināšanas modulis, kura pamatā ir MT3608

50 kOhm mainīgs rezistors

10 kOhm rezistors

47 kOhm rezistors

1muF kondensators

3. solis: būvniecība

Būvniecība
Būvniecība
Būvniecība
Būvniecība

Visu lodēju uz 7x9cm prototipa tāfeles, kā parādīts attēlā. Tā kā tas kļuva nedaudz netīrs ar visiem vadiem, es mēģināju nokrāsot vadus, kuriem ir pozitīvs spriegums, un tos, kas nes zemi, melnu.

Kodētājam, ko izmantoju, ir 5 tapas, 3 vienā pusē, 2 otrā pusē. Puse ar 3 tapām ir faktiskais kodētājs, puse ar 2 tapām ir integrēta spiedpoga. 3 kontaktu pusē centrālajai tapai jābūt savienotai ar zemi, pārējām divām tapām-D10 un D11. Divu kontaktu pusē vienam tapam jābūt savienotam ar zemi, bet otram-ar D12.

Tā ir neglītākā lieta, ko jebkad esmu uztaisījis, bet darbojas. Būtu jauki ievietot korpusu, bet pagaidām papildu darbs un izmaksas to īsti neattaisno. Nano un displejs ir piestiprināti ar tapām. Es to vairs nedarītu, ja būvētu jaunu. Es neliku savienotājus uz tāfeles, lai uztvertu signālus. Tā vietā es tos paņemu ar krokodila vadiem no izvirzītiem vara stieples gabaliem, kas apzīmēti šādi:

R - neapstrādāts signāls no R2R DAC

B - buferēts signāls

A - pastiprināts signāls

T - taimera signāls no 9. tapas

G - zeme

+ - pozitīvs “augsts” spriegums no pastiprināšanas moduļa

4. solis: kods

Kods, Arduino skice, ir pievienots, un tas ir augšupielādēts Arduino.

Iepriekš ir definētas 20 viļņu formas. Būtu vienkārši pievienot jebkuru citu vilni. Ņemiet vērā, ka nejaušie viļņi aizpilda 256 vērtību masīvu ar nejaušām vērtībām, taču tas pats modelis tiek atkārtots katru periodu. Patiesi nejauši signāli izklausās pēc trokšņa, bet šī viļņu forma izklausās daudz vairāk kā svilpe.

Kods nosaka taustiņa D9 1kHz signālu ar TIMER1. Tas ir noderīgi, lai pārbaudītu analogā signāla laiku. Tā es sapratu, ka pulksteņa ciklu skaits ir 42: ja pieņemu, ka 41 vai 43, un ģenerē 1 kHz signālu, tam noteikti ir atšķirīga frekvence nekā signālam D9. Ar vērtību 42 tie lieliski sakrīt.

Parasti Arduino pārtrauc katru milisekundi, lai sekotu līdzi laikam, izmantojot funkciju millis (). Tas traucētu precīzu signāla ģenerēšanu, tāpēc konkrētais pārtraukums ir atspējots.

Sastādītājs saka: "Sketch izmanto 7254 baitus (23%) programmas krātuves vietas. Maksimums ir 30720 baiti. Globālie mainīgie izmanto 483 baitus (23%) dinamiskās atmiņas, atstājot 1565 baitus vietējiem mainīgajiem. Maksimums ir 2048 baiti." Tātad ir pietiekami daudz vietas sarežģītākam kodam. Uzmanieties, ka, lai veiksmīgi augšupielādētu Nano, iespējams, būs jāizvēlas “ATmega328P (vecais sāknēšanas ielādētājs)”.

5. darbība: lietošana

Signāla ģeneratoru var darbināt, vienkārši izmantojot Arduino Nano mini-USB kabeli. Vislabāk to izdarīt ar strāvas banku, lai ar ierīci, ar kuru to var savienot, netiktu nejauši iezemēta cilpa.

Ieslēdzot, tas radīs 100 Hz sinusa vilni. Pagriežot pogu, var izvēlēties vienu no pārējiem 20 viļņu veidiem. Pagriežot, vienlaikus nospiežot, kursoru var iestatīt uz jebkuru no frekvences cipariem, ko pēc tam var mainīt uz vēlamo vērtību.

Amplitūdu var regulēt ar potenciometru, un var izmantot vai nu buferizētu, vai pastiprinātu signālu.

Ir patiešām noderīgi izmantot osciloskopu, lai pārbaudītu signāla amplitūdu, jo īpaši, ja signāls piegādā strāvu citai ierīcei. Ja tiek ievilkta pārāk daudz strāvas, signāls tiks fiksēts un signāls ir stipri izkropļots

Ļoti zemām frekvencēm izeju var vizualizēt ar sērijveida LED ar 10 kOhm rezistoru. Ar skaļruni var dzirdēt audio frekvences. Noteikti iestatiet signālu ļoti mazu ~ 0.5V, pretējā gadījumā strāva kļūst pārāk augsta un signāls sāk griezt.

Ieteicams: