Sisällysluettelo:
- Vaihe 1: Piirin rakentaminen
- Vaihe 2: Oskilloskoopin asennus
- Vaihe 3: Lataa ja suorita ohjelmisto
- Vaihe 4: Luo oma mukautettu piirustus
- Vaihe 5: Liitä koordinaatit SVG -tiedostosta Arduino IDE: hen
- Vaihe 6: Ymmärrä, miksi PWM on niin hidas
- Vaihe 7: Siirry paikasta a paikkaan B, Tad Bit nopeammin
- Vaihe 8: Siirry paikasta B paikkaan Turbolaturi
- Vaihe 9: Ymmärrä koodi
- Vaihe 10: Suurella nopeudella on suuri vastuu
Video: Erittäin nopeat analogiset jännitteet Arduinolta: 10 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Tämä opas näyttää kuinka luoda erittäin nopeita analogisia jännitemuutoksia Arduinosta ja yksinkertaisesta vastuksen ja kondensaattorin parista. Yksi sovellus, jossa tämä on hyödyllistä, on grafiikan luominen oskilloskoopilla. On olemassa useita muita hankkeita, jotka ovat tehneet tämän. Johngineer näyttää yksinkertaisen joulukuusi käyttäen pulssileveysmodulaatiota (PWM). Toiset ovat parantaneet tätä projektia käyttämällä vastusportaita tai käyttämällä omaa digitaalista analogiamuunninsirua.
PWM: n käyttäminen aiheuttaa paljon välkkymistä, kun taas vastusportaiden tai digitaali-analogia-muuntimen käyttäminen vaatii enemmän lähtötappeja ja komponentteja, joita ei välttämättä ole helposti saatavilla. Käyttämäni piiri on sama kuollut yksinkertainen vastus ja kondensaattoripari kuin joulukuusi -esittelyssä, mutta toimii huomattavasti vähemmän välkkymistä.
Ensinnäkin opastan sinua piirin rakentamisessa. Sitten opetan sinulle oman kuvan lisäämisen. Lopuksi esitän teorian siitä, mikä tekee siitä nopeamman.
Jos pidit tästä Instructable -ohjelmasta, harkitse sen äänestämistä!:)
Vaihe 1: Piirin rakentaminen
Piirin rakentamiseksi tarvitset seuraavaa:
a) Arduino, joka perustuu Atmel 16MHz ATmega328P -laitteeseen, kuten Arduino Uno tai Arduino Nano.
b) Kaksi vastuksen arvoa R, joka on vähintään 150Ω.
c) Kaksi kondensaattoria arvolla C siten, että C = 0,0015 / R, esimerkkejä:
- R = 150Ω ja C = 10µ
- R = 1,5 kΩ ja C = 1 µ
- R = 15 kΩ ja C = 100 nF
- R = 150 kΩ ja C = 10 nF
Syyt näiden arvojen valintaan ovat kaksi. Ensisijaisesti haluamme pitää Arduinon nastojen virran alle 40 mA: n suurimman nimellisvirran. Käyttämällä arvoa 150Ω rajoittaa virran 30 mA: ksi, kun sitä käytetään 5 V: n Arduinon syöttöjännitteellä. Suuremmat R -arvot pienentävät virtaa ja ovat siksi hyväksyttäviä.
Toinen rajoitus on, että haluamme pitää ajan vakiona, joka on R: n ja C: n tulos, noin 1,5 ms. Ohjelmisto on viritetty erityisesti tätä aikavakioa varten. Vaikka ohjelmiston R- ja C -arvoja on mahdollista säätää, se toimii kapealla alueella, joten valitse komponentit mahdollisimman lähelle ehdotettua suhdetta.
Perusteellisempi selitys siitä, miksi RC -vakio on tärkeä, annetaan teoriaosassa sen jälkeen, kun olen näyttänyt sinulle, kuinka koota esittelypiiri.
Vaihe 2: Oskilloskoopin asennus
Esittely vaatii oskilloskoopin, joka on asetettu X/Y -tilaan. Mittajohdot on kytkettävä kaavion mukaisesti. Oskilloskooppi eroaa omastani, mutta käyn läpi tarvittavat vaiheet X/Y -tilan määrittämiseksi laitteeseeni:
a) Aseta vaakasuuntainen pyyhkäisy ohjattavaksi kanavalla B (X -akseli).
b) Aseta oskilloskooppi kaksikanavaiseen tilaan.
c) Aseta molemmat kanavat volttia/jakoa niin, että se voi näyttää jännitteet 0–5 V. Asetin omani 0,5V/div.
d) Aseta kytkentätilaksi DC molemmilla kanavilla.
e) Säädä X: n ja Y: n asentoa siten, että piste on näytön vasemmassa alakulmassa, kun Arduino sammutetaan.
Vaihe 3: Lataa ja suorita ohjelmisto
Lataa ohjelmisto Fast Vector Display For Arduino -varastosta. Ohjelmisto on lisensoitu GNU Affero Public License v3: n alla ja sitä voidaan käyttää ja muokata vapaasti kyseisen lisenssin ehtojen mukaisesti.
Avaa "fast-vector-display-arduino.ino" -tiedosto Arduino IDE: ssä ja lataa se Arduinoosi. Näet hetken "Hyvää uutta vuotta" -animaation oskilloskoopin näytöllä.
Kehitin tämän projektin henkilökohtaiseksi hackatoniksi joulua edeltävinä viikkoina, joten joulu- ja uudenvuodenaiheinen viesti näkyy muokkaamalla koodin PATTERN -muuttujaa.
Vaihe 4: Luo oma mukautettu piirustus
Jos haluat luoda oman piirustuksen, voit liittää pistekoordinaatit Arduino -luonnokseen rivillä, joka määrittää USER_PATTERN.
Huomasin, että Inkscape on melko hyvä työkalu mukautetun piirustuksen tekemiseen:
- Luo tekstiä käyttämällä suurta, lihavoitua fonttia, kuten Impact.
- Valitse tekstiobjekti ja valitse "Polku" -valikosta "Objekti polulle".
- Valitse yksittäiset kirjaimet ja limitä ne muodostaaksesi yhdistetyn muodon
- Valitse "Path" -valikosta "Union" yhdistääksesi ne yhdeksi käyräksi.
- Jos missä tahansa kirjaimessa on reikiä, leikkaa pieni lovi piirtämällä suorakulmio suorakulmion työkalulla ja vähennä se ääriviivasta "Ero" -työkalulla.
- Näytä solmut kaksoisnapsauttamalla polkua.
- Suorakulmio valitse kaikki solmut ja napsauta "Tee valitut solmukulmat" -työkalua.
- Tallenna SVG -tiedosto.
Tärkeintä on, että piirustuksessasi on yksi suljettu polku eikä reikiä. Varmista, että suunnittelussa on alle noin 130 pistettä.
Vaihe 5: Liitä koordinaatit SVG -tiedostosta Arduino IDE: hen
- Avaa SVG -tiedosto ja kopioi koordinaatit. Ne upotetaan "polku" -elementtiin. Ensimmäinen koordinaattipari voidaan jättää huomiotta; korvaa ne 0, 0.
- Liitä koordinaatit Arduino -luonnokseen hakasulkeisiin heti "#define USER_PATTERN" jälkeen.
- Korvaa kaikki välilyönnit pilkuilla, muuten saat kääntämisvirheen. Korvaa ja etsi -työkalu voi olla hyödyllinen.
- Kokoa ja aja!
- Jos sinulla on ongelmia, katso sarjakonsolista virheiden varalta. Näet erityisesti viestit, jos kuviossasi on liikaa pisteitä sisäiselle puskurille. Tällaisissa tapauksissa kuva välkkyy liikaa.
Vaihe 6: Ymmärrä, miksi PWM on niin hidas
Tarkastellaan aluksi kondensaattorin käyttäytymistä latauksen aikana.
Kondensaattori, joka on kytketty jännitelähteeseen Vcc, nostaa jännitettä eksponentiaalisen käyrän mukaisesti. Tämä käyrä on asymptoottinen, eli se hidastuu lähestyessään tavoitejännitettä. Käytännössä jännite on "tarpeeksi lähellä" 5 RC sekunnin kuluttua. RC: tä kutsutaan "aikavakioksi". Kuten aiemmin näimme, se on piirisi vastuksen ja kondensaattorin arvojen tulo. Ongelmana on, että 5 RC on melko pitkä aika päivittää jokainen piste grafiikanäytössä. Tämä aiheuttaa paljon välkkymistä!
Kun käytämme pulssileveysmodulaatiota (PWM) kondensaattorin lataamiseen, emme voi paremmin. PWM: llä jännite vaihtuu nopeasti välillä 0V ja 5V. Käytännössä tämä tarkoittaa sitä, että vaihdamme nopeasti varausta kondensaattoriin ja vedämme sen hieman ulos - tämä työntö ja vetäminen on pikemminkin kuin yrittää juosta maraton ottamalla iso askel eteenpäin ja sitten pieni askel taaksepäin uudelleen ja uudelleen.
Kun lasket kaiken keskimäärin, kondensaattorin lataaminen PWM: llä on täsmälleen sama kuin jos olisit käyttänyt tasaista Vpwm -jännitettä kondensaattorin lataamiseen. Kestää vielä noin 5 RC sekuntia, jotta pääsemme "riittävän lähelle" haluttua jännitettä.
Vaihe 7: Siirry paikasta a paikkaan B, Tad Bit nopeammin
Oletetaan, että meillä on kondensaattori, joka on jo ladattu arvoon Va. Oletetaan, että käytämme analogWrite (): ää kirjoittaaksesi b: n uuden arvon. Mikä on vähimmäisaika, jonka joudut odottamaan jännitteen Vb saavuttamista?
Jos arvasit 5 RC sekuntia, se on hienoa! Odottamalla 5 RC sekuntia kondensaattori ladataan lähes Vb: hen. Mutta jos haluamme, voimme todella odottaa hieman vähemmän.
Katso latauskäyrää. Kondensaattori oli jo Va: ssa, kun aloitimme. Tämä tarkoittaa, että meidän ei tarvitse odottaa aikaa t_a. Meidän olisi vain, jos lataisimme kondensaattorin nollasta.
Joten odottamatta sitä aikaa, näemme parannuksen. Aika t_ab on itse asiassa hieman lyhyempi kuin 5 RC.
Mutta odota, voimme tehdä paljon parempaa! Katsokaa koko tilaa yläpuolella v_b. Tämä on ero Vcc: n, käytettävissä olevan maksimijännitteen ja Vb: n välillä, jonka aiomme saavuttaa. Näetkö, kuinka tämä ylimääräinen jännite voi auttaa meitä pääsemään haluttuun paikkaan paljon nopeammin?
Vaihe 8: Siirry paikasta B paikkaan Turbolaturi
Oikein. Sen sijaan, että käytämme PWM: ää tavoitejännitteellä V_b, pidämme sitä vakaalla Vcc: llä paljon, paljon lyhyemmän ajan. Kutsun tätä Turbo Charger -menetelmäksi ja se vie meidät sinne, minne haluamme mennä todella, todella nopeasti! Aikaviiveen (joka meidän on laskettava) jälkeen iskeydymme jarruihin vaihtamalla PWM: ään kohdassa V_b. Tämä estää jännitteen ylittämästä kohdetta.
Tällä menetelmällä on mahdollista muuttaa kondensaattorin jännite arvosta V_a arvoon V_b murto -osassa ajasta kuin pelkällä PWM: llä. Näin saat paikkoja, kulta!
Vaihe 9: Ymmärrä koodi
Kuva on tuhannen sanan arvoinen, joten kaavio näyttää tiedot ja toiminnot, jotka suoritetaan koodissa. Vasemmalta oikealle:
- Grafiikkatiedot tallennetaan PROGMEM -järjestelmään (eli flash -muistiin) pisteiden luettelona.
- Mikä tahansa translaatio-, skaalaus- ja kiertotoimintojen yhdistelmä yhdistetään affiinimuunnosmatriisiksi. Tämä tehdään kerran jokaisen animaatiokehyksen alussa.
- Pisteet luetaan yksi kerrallaan grafiikkatiedosta ja kukin kerrotaan tallennetulla muunnosmatriisilla.
- Muunnetut pisteet syötetään sahausalgoritmin avulla, joka rajaa kaikki pisteet näkyvän alueen ulkopuolella.
- RC -viivehakutaulukon avulla pisteet muunnetaan ajojännitteiksi ja aikaviiveiksi. RC-viivehakutaulukko on tallennettu EEPROMiin, ja sitä voidaan käyttää uudelleen useisiin koodiajoihin. Käynnistyksen yhteydessä RC -hakutaulukon tarkkuus tarkistetaan ja mahdolliset väärät arvot päivitetään. EEPROMin käyttö säästää arvokasta RAM -muistia.
- Käyttöjännitteet ja viiveet kirjoitetaan kehyspuskurin passiiviseen kehykseen. Kehyspuskuri sisältää tilaa aktiiviselle kehykselle ja ei -aktiiviselle kehykselle. Kun koko kehys on kirjoitettu, passiivinen kehys aktivoidaan.
- Keskeytyspalvelurutiini piirtää jatkuvasti kuvaa uudelleen lukemalla jännitearvot ja viiveet aktiivisesta kehyspuskurista. Näiden arvojen perusteella se säätää lähtötappien toimintajaksoja. Ajastinta 1 käytetään viiveen mittaamiseen muutaman nanosekunnin tarkkuudella, kun taas ajastinta 2 käytetään nastojen käyttöjakson säätämiseen.
- Suurin jännitteenmuutosnappi on aina "turboahdettu", jonka toimintajakso on nolla tai 100%, mikä tarjoaa nopeimman lataus- tai purkausajan. Pistettä, jonka jännite muuttuu vähemmän, käytetään käyttöjaksolla, joka on valittu vastaamaan ensimmäisen nastan siirtymäaikaa-tällä kertaa sovitus on tärkeää sen varmistamiseksi, että viivat vedetään suoraan oskilloskoopille.
Vaihe 10: Suurella nopeudella on suuri vastuu
Koska tämä menetelmä on paljon nopeampi kuin PWM, miksi analogWrite () ei käytä sitä? No, koska vain PWM: n käyttäminen on tarpeeksi hyvä useimmille ohjelmille ja on paljon anteeksiantavampaa. "Turbolaturi" -menetelmä vaatii kuitenkin huolellista koodausta ja soveltuu vain erityistapauksiin:
- Se on erittäin herkkä ajoitukselle. Kun olemme saavuttaneet tavoitejännitetason, käyttötappi on välittömästi kytkettävä normaaliin PWM -tilaan, jotta vältetään tavoitejännitteen ylitys.
- Se edellyttää RC -vakion tuntemusta, joten nämä arvot on syötettävä etukäteen. Jos arvot ovat väärät, ajoitus on väärä ja jännitteet väärät. Säännöllisellä PWM: llä on takuu, että asetat oikean jännitteen jonkin ajan kuluttua, vaikka RC -vakio ei ole tiedossa.
- Tarkan aikavälin laskeminen kondensaattorin lataamiseen vaatii logaritmiset yhtälöt, jotka ovat liian hitaita reaaliaikaiseen laskentaan Arduinolla. Ne on laskettava etukäteen ennen jokaista animaatiokehystä ja tallennettava välimuistiin jonnekin.
- Tätä menetelmää käsittelevien ohjelmien on vastattava siihen, että viiveet ovat hyvin epälineaarisia (ne ovat itse asiassa eksponentiaalisia). Tavoitejännitteiden saavuttaminen Vcc: n tai GND: n lähellä kestää monta suuruusluokkaa kauemmin kuin jännitteet keskipisteen lähellä.
Näiden rajoitusten voittamiseksi vektorigrafiikkakoodini tekee seuraavat asiat:
- Se käyttää ajastinta 1 taajuudella 16 kHz ja keskeytyspalvelurutiinia tarkkaan tulostuksen käsittelyyn ja ajoitukseen.
- Se vaatii tietyn RC -aikavakion arvon käyttöä, mikä rajoittaa kondensaattorin ja vastuksen arvojen valintaa.
- Se tallentaa animaatiokehyksen kaikkien pisteiden aikaviiveet muistipuskuriin. Tämä tarkoittaa rutiinia, joka laskee aikaviiveet, kulkee paljon hitaammin kuin keskeytyspalvelurutiini, joka päivittää lähtönastat. Mikä tahansa kehys voidaan maalata useita kymmeniä kertoja, ennen kuin seuraavan viiveen uusi viivejoukko on valmis käytettäväksi.
- Muistipuskurin käyttö rajoittaa pisteiden määrää, jotka voidaan piirtää kehystä kohden. Käytän tilaa säästävää koodausta saadakseni kaiken irti käytettävissä olevasta RAM -muistista, mutta se on edelleen rajoitettu noin 150 pisteeseen. Noin sadan pisteen lisäksi näyttö alkaa välkkyä joka tapauksessa, joten se on kiistanalainen asia!
Suositeltava:
Puhuva automaatio -- Ääni Arduinolta -- Puheohjattu automaatio -- HC -05 Bluetooth -moduuli: 9 vaihetta (kuvilla)
Puhuva automaatio || Ääni Arduinolta || Puheohjattu automaatio || HC - 05 Bluetooth -moduuli: …………………………. Tilaa YouTube -kanavani saadaksesi lisää videoita …. …. Tässä videossa olemme rakentaneet puhuvan automaation. Kun lähetät äänikomennon matkapuhelimen kautta, se käynnistää kodin laitteet ja lähettää palautetta
Aerobinen Arduino - $ 15 Fitness Tracker Power Arduinolta: 9 vaihetta (kuvilla)
Aerobinen Arduino - 15 dollarin Fitness Tracker Power Arduinolta: Äänestä tätä kuntohaasteessa Fitbitin tai älykellon sijasta, voit rakentaa Arduinolla toimivan kuntoseurannan vain 15 dollarilla! Se seuraa käsivarsien pumppausliikettä juoksun aikana ja havaitsee tämän kiihtyvyysmittarilla. Se on
Kuinka tehdä erittäin kirkas salamalaite LEDillä - DIY: Erittäin kirkas valo: 11 vaihetta
Kuinka tehdä erittäin kirkas salamalaite LEDillä - DIY: Erittäin kirkas valo: Katso video aluksi
Erittäin yksinkertainen mutta erittäin tehokas kepponen (tietokoneen kepponen): 3 vaihetta
Erittäin yksinkertainen … mutta erittäin tehokas kepponen (tietokoneen kepponen): Tämä ohje on erittäin yksinkertainen, mutta kuitenkin erittäin tehokas! Mitä tapahtuu: Piilotat kaikki uhrin työpöydän kuvakkeet. Uhri järkyttyy, kun näkee tietokoneen sen jälkeen, kun teet kepponen. Tämä ei voi vahingoittaa tietokonetta millään tavalla
Erittäin kannettavat, erittäin kovaääniset, pitkäkestoiset, paristokäyttöiset kaiuttimet: 9 vaihetta (kuvilla)
Erittäin kannettavat, erittäin kovaääniset, pitkäkestoiset, paristokäyttöiset kaiuttimet: olen aina halunnut saada tehokkaan kaiutinjärjestelmän niille, jotka haluavat järjestää puutarhajuhlia/kenttämatkoja. monet sanovat, että tämä on tarpeeton Instructable, koska on olemassa monia boombox -tyylisiä radioita menneiltä ajoilta halvalla, tai nämä halvat ipod -tyyliset mp3 -d