INHOUDSOPGAWE:

Arduino golfvormgenerator: 5 stappe (met foto's)
Arduino golfvormgenerator: 5 stappe (met foto's)

Video: Arduino golfvormgenerator: 5 stappe (met foto's)

Video: Arduino golfvormgenerator: 5 stappe (met foto's)
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Julie
Anonim
Arduino golfvorm generator
Arduino golfvorm generator

Update van Februarie 2021: kyk na die nuwe weergawe met 300x die bemonsteringstempo, gebaseer op die Raspberry Pi Pico

In die laboratorium benodig u gereeld 'n herhalende sein met 'n sekere frekwensie, vorm en amplitude. Dit kan wees om 'n versterker te toets, na 'n stroombaan, 'n komponent of 'n aktuator te kyk. Kragtige golfvormopwekkers is in die handel beskikbaar, maar dit is relatief maklik om self 'n nuttige een te maak met 'n Arduino Uno of Arduino Nano, sien byvoorbeeld:

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

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

Hier is die beskrywing van 'n ander een met die volgende kenmerke:

* Akkurate golfvorms: 8-bis-uitvoer met R2R DAC, 256-monstervorm

* Vinnig: 381 kHz bemonsteringstempo

* Presies: frekwensiebereik van 1 mHz. So akkuraat soos die Arduino -kristal.

* Maklike werking: golfvorm en frekwensie instelbaar met 'n enkele draaikodeerder

* Groot verskeidenheid amplituden: millivolts tot 20V

* 20 vooraf gedefinieerde golfvorms. Reguit om meer by te voeg.

* Maklik om te maak: Arduino Uno of Nano plus standaardkomponente

Stap 1: Tegniese oorwegings

Maak 'n analoog sein

'N Tekortkoming van die Arduino Uno en Nano is dat dit nie 'n digitaal-na-analoog (DAC) omskakelaar het nie, dus is dit nie moontlik om 'n analoog spanning direk op die penne af te voer nie. Een oplossing is die R2R -leer: 8 digitale penne is aan 'n weerstandsnetwerk gekoppel, sodat 256 uitsetvlakke bereik kan word. Deur direkte toegang tot die poort kan die Arduino 8 penne gelyktydig met 'n enkele opdrag stel. Vir die weerstandsnetwerk is 9 weerstande met waarde R nodig en 8 met waarde 2R. Ek het 10kOhm gebruik as 'n waarde vir R, wat die stroom van die penne tot 0,5mA of minder hou. Ek dink R = 1kOhm kan ook werk, aangesien die Arduino maklik 5mA per pen, 40mA per poort kan lewer. Dit is belangrik dat die verhouding tussen die R en die 2R weerstande werklik 2. Dit word die maklikste bereik deur 2 weerstande van waarde R in serie te plaas, vir 'n totaal van 25 weerstande.

Fase akkumulator

Deur 'n golfvorm te genereer, word herhaaldelik 'n reeks van 8-bis getalle na die Arduino-penne gestuur. Die golfvorm word gestoor in 'n skikking van 256 grepe en hierdie skikking word bemonster en na die penne gestuur. Die frekwensie van die uitsetsein word bepaal deur hoe vinnig 'n mens deur die skikking beweeg. 'N Robuuste, presiese en elegante manier om dit te doen, is met 'n faseakkumulator: 'n 32-bis getal word gereeld toegeneem, en ons gebruik die 8 belangrikste bits as die indeks van die skikking.

Vinnige monsterneming

Onderbrekings laat die monster toe op goed gedefinieerde tye, maar die oorhoofse onderbrekings beperk die bemonsteringsfrekwensie tot ~ 100kHz. 'N Oneindige lus om die fase op te dateer, die golfvorm te monteer en die penne in te stel, neem 42 kloksiklusse, wat 'n monsterneming van 16MHz/42 = 381kHz behaal. Deur die draaikodeerder te draai of te druk, word 'n penverandering en 'n onderbreking wat uit die lus kom, verander om die instelling te verander (golfvorm of frekwensie). In hierdie stadium word die 256 getalle in die skikking herbereken sodat geen werklike berekeninge van die golfvorm in die hooflus uitgevoer hoef te word nie. Die absolute maksimum frekwensie wat gegenereer kan word, is 190kHz (die helfte van die bemonsteringssnelheid), maar dan is daar slegs twee monsters per periode, dus nie veel beheer oor die vorm nie. Die koppelvlak laat dus nie toe om die frekwensie bo 100kHz in te stel nie. By 50kHz is daar 7-8 monsters per periode en by 1.5 kHz en onder alle 256 getalle wat in die skikking gestoor word, word elke periode bemonster. Vir golfvorme waar die sein glad verander, byvoorbeeld die sinusgolf, is dit nie 'n probleem om monsters oor te slaan nie. Maar vir golfvorme met smal spykers, byvoorbeeld 'n vierkantgolf met 'n klein insetsiklus, bestaan die gevaar dat 'n enkele monster vir frekwensies bo 1,5 kHz ontbreek, daartoe kan lei dat 'n golfvorm nie soos verwag gedra nie

Akkuraatheid van die frekwensie

Die getal waarmee die fase by elke monster toegeneem word, is eweredig aan die frekwensie. Die frekwensie kan dus ingestel word op 'n akkuraatheid van 381kHz/2^32 = 0,089mHz. In die praktyk is hierdie akkuraatheid amper nooit nodig nie, dus beperk die koppelvlak die frekwensie in stappe van 1mHz. Die absolute presisie van die frekwensie word bepaal deur die presisie van die Arduino -klokfrekwensie. Dit hang af van die Arduino-tipe, maar die meeste spesifiseer 'n frekwensie van 16.000MHz, dus 'n presisie van ~ 10^-4. Met die kode kan u die verhouding tussen die frekwensie en die fase -toename verander om te korrigeer vir klein afwykings van die 16MHz aanname.

Buffering en versterking

Die weerstandsnetwerk het 'n hoë uitset -impedansie, dus die uitsetspanning daal vinnig as 'n las aangeheg word. Dit kan opgelos word deur die uitset te buffer of te versterk. Hier word die buffer en versterking gedoen met 'n opamp. Ek het die LM358 gebruik omdat ek dit gehad het. Dit is 'n stadige opamp (sleeptempo 0.5V per mikrosekonde), so by hoë frekwensie en hoë amplitude word die sein verdraai. 'N Goeie ding is dat dit spanning baie naby 0V kan hanteer. Die uitgangsspanning is egter beperk tot ~ 2V onder die spoor, dus die gebruik van +5V krag beperk die uitsetspanning tot 3V. Opstapmodules is kompak en goedkoop. As hy +20V aan die opamp voed, kan dit seine genereer met 'n spanning tot 18V. (Let wel, die skema sê LTC3105, want dit was die enigste stap wat ek in Fritzing gevind het. In werklikheid het ek 'n MT3608-module gebruik, sien foto's in die volgende stappe). Ek kies om 'n veranderlike verswakking op die uitset van die R2R DAC toe te pas, en gebruik dan een van die opamps om die sein sonder versterking te buffer en die ander om met 5,7 te versterk, sodat die sein 'n maksimum uitset van ongeveer 20V kan bereik. Die uitsetstroom is redelik beperk, ~ 10mA, dus 'n sterker versterker kan nodig wees as die sein 'n groot luidspreker of elektromagneet aandryf.

Stap 2: Vereiste komponente

Vir die kerngolfvormgenerator

Arduino Uno of Nano

16x2 LCD -skerm + 20kOhm -trimmer en 100Ohm -reeksweerstand vir agtergrond

5-pins roterende encoder (met geïntegreerde drukknop)

25 resistors van 10 kOhm

Vir die buffer/versterker

LM358 of ander dubbele opamp

opstapmodule gebaseer op die MT3608

50kOhm veranderlike weerstand

Weerstand van 10 kOhm

Weerstand van 47 kOhm

1 muF kapasitor

Stap 3: Konstruksie

Konstruksie
Konstruksie
Konstruksie
Konstruksie

Ek het alles gesoldeer op 'n 7x9cm prototipe bord, soos op die foto getoon. Aangesien dit 'n bietjie deurmekaar geraak het met al die drade, het ek probeer om die leidings wat positiewe spanning dra rooi en die wat gemaal het, swart te kleur.

Die encoder wat ek gebruik het, het 5 penne, 3 aan die een kant, 2 aan die ander kant. Die kant met 3 penne is die werklike encoder, die kant met 2 penne is die geïntegreerde drukknop. Aan die 3-pen kant moet die sentrale pen met die grond verbind word, die ander twee penne met D10 en D11. Aan die 2-pen kant moet die een pen aan die aarde gekoppel word en die ander aan die D12.

Dit is die lelikste ding wat ek nog ooit gemaak het, maar dit werk. Dit sal lekker wees om 'n omhulsel in te sit, maar die ekstra werk en koste regverdig dit nou nie regtig nie. Die Nano en die skerm is vasgemaak met speldkoppe. Ek sou dit nie weer doen as ek 'n nuwe een sou bou nie. Ek het nie verbindings op die bord gesit om die seine op te vang nie. In plaas daarvan tel ek dit op met krokodildrade uit uitstekende stukke koperdraad, soos volg gemerk:

R - rou sein van die R2R DAC

B - gebufferde sein

A - versterkte sein

T -tydsignaal van pen 9

G - grond

+ - positiewe 'hoë' spanning vanaf die opstapmodule

Stap 4: Die kode

Die kode, 'n Arduino -skets, is aangeheg en moet na die Arduino opgelaai word.

20 golfvorme is vooraf gedefinieer. Dit moet eenvoudig wees om enige ander golf by te voeg. Let daarop dat die ewekansige golwe die 256-waarde-skikking met ewekansige waardes vul, maar dieselfde patroon word elke periode herhaal. Ware ewekansige seine klink soos geraas, maar hierdie golfvorm klink baie meer na 'n fluitjie.

Die kode stel 'n 1kHz -sein op pen D9 met TIMER1. Dit is handig om die tydsberekening van die analoog sein na te gaan. So het ek agtergekom dat die aantal kloksiklusse 42 is: as ek 41 of 43 aanneem en 'n 1 kHz -sein genereer, het dit duidelik 'n ander frekwensie as die sein op pen D9. Met die waarde 42 pas dit perfek.

Normaalweg onderbreek die Arduino elke millisekonde om tyd by te hou met die millis () -funksie. Dit sal die akkurate seinopwekking versteur, sodat die spesifieke onderbreking gedeaktiveer word.

Die samesteller sê: "Sketch gebruik 7254 grepe (23%) van die stoorplek van die program. Maksimum is 30720 grepe. Globale veranderlikes gebruik 483 grepe (23%) dinamiese geheue, en laat 1565 grepe oor vir plaaslike veranderlikes. Die maksimum is 2048 grepe." Daar is dus genoeg ruimte vir meer gesofistikeerde kode. Pasop dat u moontlik 'ATmega328P (ou selflaaiprogram)' moet kies om suksesvol na die Nano te laai.

Stap 5: Gebruik

Die seingenerator kan eenvoudig deur die mini-USB-kabel van die Arduino Nano aangedryf word. Dit word die beste gedoen met 'n kragbank, sodat daar geen toevallige grondlus met die apparaat is waarmee dit verbind kan word nie.

As dit aangeskakel word, sal dit 'n sinusgolf van 100 Hz genereer. Deur die knop te draai, kan een van die ander 20 golftipes gekies word. Deur te draai terwyl gedruk word, kan die wyser op enige van die syfers van die frekwensie gestel word, wat dan na die gewenste waarde verander kan word.

Die amplitude kan met die potensiometer gereguleer word en óf die gebufferde óf die versterkte sein kan gebruik word.

Dit is baie handig om 'n ossilloskoop te gebruik om die amplitude van die sein te kontroleer, veral as die sein stroom aan 'n ander toestel verskaf. As daar te veel stroom getrek word, sal die sein knip en die sein sterk verdraai word

Vir baie lae frekwensies kan die uitset gevisualiseer word met 'n LED in serie met 'n 10kOhm -weerstand. Klankfrekwensies kan met 'n luidspreker gehoor word. Maak seker dat die sein baie klein is ~ 0,5V, anders word die stroom te hoog en begin die sein knip.

Aanbeveel: