Sadržaj:

Super brzi analogni naponi iz Arduina: 10 koraka (sa slikama)
Super brzi analogni naponi iz Arduina: 10 koraka (sa slikama)

Video: Super brzi analogni naponi iz Arduina: 10 koraka (sa slikama)

Video: Super brzi analogni naponi iz Arduina: 10 koraka (sa slikama)
Video: БОЛИ В ПОЯСНИЦЕ И МЕТАБОЛИЧЕСКИЙ СИНДРОМ 3 день 2024, Novembar
Anonim
Image
Image

Ovaj Instructable pokazuje kako generirati super brze promjene analognog napona iz Arduina i jednostavnog para otpornika i kondenzatora. Jedna aplikacija u kojoj je to korisno je generiranje grafike na osciloskopu. Postoji nekoliko drugih projekata koji su to učinili. Johngineer prikazuje jednostavno božićno drvce koristeći pulsno -širinsku modulaciju (PWM). Drugi su poboljšali taj projekt koristeći otporničke ljestve ili koristeći namjenski čip digitalno-analognog pretvarača.

Korištenje PWM-a izaziva puno treperenja, dok upotreba ljestvi otpornika ili digitalno-analognog pretvarača zahtijeva više izlaznih pinova i komponenti koje možda nisu lako dostupne. Krug koji koristim isti je par mrtvih jednostavnih otpornika i kondenzatora koji se koristi u demonstraciji božićnog drvca, ali radi sa znatno manje treperenja.

Prvo ću vas provesti kroz proces izgradnje kola. Zatim ću vas naučiti kako dodati vlastitu sliku. Na kraju ću predstaviti teoriju o tome što to čini bržim.

Ako vam se svidio ovaj Instructable, razmislite o glasanju za njega!:)

Korak 1: Izgradnja kruga

Izgradnja kola
Izgradnja kola

Za izgradnju kruga trebat će vam sljedeće:

a) Arduino zasnovan na Atmel 16MHz ATmega328P, poput Arduino Uno ili Arduino Nano.

b) Dva otpornika vrijednosti R od najmanje 150Ω.

c) Dva kondenzatora vrijednosti C tako da je C = 0,0015 / R, primjeri:

  • R = 150Ω i C = 10µ
  • R = 1,5 kΩ i C = 1µ
  • R = 15kΩ i C = 100nF
  • R = 150 kΩ i C = 10nF

Razlozi za odabir ovih vrijednosti su dvostruki. Prije svega, želimo zadržati struju na pinovima Arduina ispod maksimalne nazivne struje od 40 mA. Korištenje vrijednosti od 150Ω ograničava struju na 30mA kada se koristi s naponom napajanja Arduino od 5V. Veće vrijednosti R će smanjiti struju i stoga su prihvatljive.

Drugo ograničenje je da želimo zadržati konstantno vrijeme, koje je proizvod R i C, jednako oko 1,5ms. Softver je posebno prilagođen za ovu konstantu vremena. Iako je moguće prilagoditi vrijednosti R i C u softveru, postoji uski raspon oko kojeg će raditi, pa odaberite komponente što bliže predloženom omjeru.

Detaljnije objašnjenje zašto je RC konstanta važna bit će dato u odjeljku teorije, nakon što sam vam pokazao kako sastaviti demonstracijsko kolo.

Korak 2: Postavljanje osciloskopa

Postavljanje osciloskopa
Postavljanje osciloskopa

Za demonstraciju je potreban osciloskop postavljen na X/Y način rada. Testni vodiči moraju biti spojeni kako je prikazano na shemama. Vaš osciloskop će se razlikovati od mog, ali proći ću kroz potrebne korake za postavljanje X/Y načina rada na mojoj jedinici:

a) Podesite horizontalno preklapanje da se kontroliše kanalom B (osa X).

b) Postavite osciloskop na dvokanalni način rada.

c) Postavite volte/div na oba kanala tako da može prikazati napone od 0V do 5V. Ja sam svoj postavio na 0.5V/div.

d) Postavite način povezivanja na DC na oba kanala.

e) Podesite položaj X i Y tako da tačka bude u donjem lijevom uglu ekrana kada je Arduino isključen.

Korak 3: Preuzmite i pokrenite softver

Image
Image

Preuzmite softver sa spremišta Fast Vector Display For Arduino. Softver je licenciran pod GNU Affero javnom licencom v3 i može se slobodno koristiti i mijenjati pod uslovima te licence.

Otvorite datoteku "fast-vector-display-arduino.ino" u Arduino IDE-u i prenesite je na svoj Arduino. Trenutno ćete na ekranu osciloskopa vidjeti animaciju "Sretna Nova godina".

Ovaj sam projekt razvio kao osobni hackaton u tjednima prije Božića, tako da postoji poruka s temom Božića i Nove godine koju možete vidjeti promjenom PATTERN varijable u kodu.

Korak 4: Kreirajte vlastiti prilagođeni crtež

Shvatite zašto je PWM tako spor
Shvatite zašto je PWM tako spor

Ako želite stvoriti vlastiti crtež, možete zalijepiti koordinate točke u Arduino skicu na liniji koja definira USER_PATTERN.

Otkrio sam da je Inkscape prilično dobar alat za izradu prilagođenog crteža:

  1. Kreirajte tekst koristeći veliki, podebljani font poput Impact -a.
  2. Odaberite tekstualni objekt i odaberite "Object to Path" iz izbornika "Path".
  3. Odaberite pojedinačna slova i preklopite ih kako biste stvorili povezani oblik
  4. Odaberite "Union" iz izbornika "Path" da ih spojite u jednu krivulju.
  5. Ako na bilo kojem slovu postoje rupe, izrežite mali zarez iscrtavanjem pravokutnika pomoću alata za pravokutnik i oduzmite ga od konture pomoću alata "Razlika".
  6. Dvaput kliknite na putanju za prikaz čvorova.
  7. Pravokutnikom odaberite sve čvorove i kliknite na alatku "Učini odabrane čvorove ugla".
  8. Sačuvajte SVG datoteku.

Važno je da vaš crtež treba imati jednu zatvorenu putanju i bez rupa. Uvjerite se da vaš dizajn ima manje od 130 točaka.

Korak 5: Zalijepite koordinate iz SVG datoteke u Arduino IDE

  1. Otvorite SVG datoteku i kopirajte koordinate. Oni će biti ugrađeni u element "path". Prvi par koordinata se može zanemariti; zamijenite ih sa 0, 0.
  2. Zalijepite koordinate u Arduino skicu unutar zagrada odmah nakon "#define USER_PATTERN".
  3. Zamijenite sve razmake zarezima, u protivnom ćete dobiti grešku pri kompajliranju. Alat "Zamijeni i pronađi" može biti od pomoći.
  4. Sastavite i pokrenite!
  5. Ako imate problema, pazite na greške u serijskoj konzoli. Konkretno, vidjet ćete poruke ako vaš uzorak ima previše točaka za unutarnji bafer. U takvim slučajevima slika će pokazati prekomjerno treperenje.

Korak 6: Shvatite zašto je PWM tako spor

Za početak, pogledajmo ponašanje kondenzatora dok se puni.

Kondenzator koji je spojen na izvor napona Vcc će povećati svoj napon prema eksponencijalnoj krivulji. Ova krivulja je asimptotska, što znači da će se usporavati pri približavanju ciljnom naponu. Za sve praktične svrhe, napon je "dovoljno blizu" nakon 5 RC sekundi. RC se naziva "vremenska konstanta". Kao što smo vidjeli ranije, to je proizvod vrijednosti otpornika i kondenzatora u vašem krugu. Problem je u tome što je 5 RC prilično dugo za ažuriranje svake tačke na grafičkom ekranu. Ovo dovodi do velikog treperenja!

Kad za punjenje kondenzatora koristimo PWM (pulsno -širinska modulacija), nije nam ništa bolje. S PWM -om napon se brzo prebacuje između 0V i 5V. U praksi to znači da se brzo izmjenjujemo između ubacivanja naboja u kondenzator i izvlačenja malo istog iz njega - ovo guranje i povlačenje je više poput pokušaja trčanja maratona velikim korakom naprijed pa malim korakom unatrag uvijek iznova.

Kada sve to procijenite, ponašanje punjenja kondenzatora pomoću PWM -a potpuno je isto kao da ste za punjenje kondenzatora koristili stalni napon od Vpwm. Još uvijek nam je potrebno oko 5 RC sekundi da se "dovoljno približimo" željenom naponu.

Korak 7: Pređite od a do B, brže brže

Idi od a do B, tad malo brže
Idi od a do B, tad malo brže

Pretpostavimo da imamo kondenzator koji je već napunjen do Va. Pretpostavimo da koristimo analogWrite () za ispisivanje nove vrijednosti b. Koje minimalno vrijeme morate čekati da se postigne napon Vb?

Ako ste pogodili 5 RC sekundi, to je sjajno! Čekanjem 5 RC sekundi, kondenzator će se napuniti na gotovo gotovo Vb. Ali ako želimo, možemo zapravo pričekati mrvicu manje.

Pogledajte krivulju naboja. Vidite, kondenzator je već bio u Va kad smo počeli. To znači da ne moramo čekati vrijeme t_a. Morali bismo samo ako smo kondenzator punili od nule.

Dakle, ne čekajući to vrijeme, vidimo poboljšanje. Vrijeme t_ab je zapravo nešto kraće od 5 RC.

Ali čekaj, možemo mnogo bolje! Pogledajte sav taj prostor iznad v_b. To je razlika između Vcc, maksimalnog raspoloživog napona i Vb koji namjeravamo postići. Možete li vidjeti kako nam taj dodatni napon može pomoći da brže stignemo tamo gdje želimo?

Korak 8: Pređite sa a na B, sa turbo punjačem

Pređite od a do B s turbo punjačem!
Pređite od a do B s turbo punjačem!

Tako je. Umjesto da koristimo PWM na ciljnom naponu V_b, držimo ga na stabilnom Vcc mnogo, mnogo kraći vremenski period. Ja to zovem Turbo Charger metoda i vodi nas tamo gdje želimo ići jako, jako brzo! Nakon vremenskog kašnjenja (koje moramo izračunati), pritisnemo kočnicu prebacivanjem na PWM na V_b. Ovo sprječava da napon prevlada cilj.

Ovom metodom moguće je promijeniti napon u kondenzatoru s V_a na V_b u djeliću vremena nego samo pomoću PWM -a. Ovako dobijaš mesta, dušo!

Korak 9: Shvatite Kodeks

Shvatite Kodeks
Shvatite Kodeks

Slika vrijedi hiljadu riječi, pa dijagram prikazuje podatke i operacije koje se izvode u kodu. S lijeva na desno:

  • Grafički podaci se skladište u PROGMEM -u (to jest, flash memoriji) kao lista tačaka.
  • Bilo koja kombinacija operacija prevođenja, skaliranja i rotacije kombinira se u matricu afine transformacije. To se radi jednom na početku svakog okvira animacije.
  • Bodovi se čitaju jedan po jedan iz grafičkih podataka i svaki se množi pohranjenom transformacijskom matricom.
  • Transformirane točke napajaju se algoritmom škara koji obrezuje sve točke izvan vidljivog područja.
  • Koristeći tablicu traženja RC kašnjenja, točke se pretvaraju u pogonske napone i vremenska kašnjenja. Tablica traženja RC kašnjenja pohranjena je u EEPROM-u i može se ponovno koristiti za više izvođenja koda. Prilikom pokretanja provjerava se točnost tablice za traženje RC -a i ažuriraju se sve netočne vrijednosti. Korištenje EEPROM -a štedi vrijednu RAM memoriju.
  • Pogonski naponi i kašnjenja se zapisuju u neaktivan okvir u međuspremniku okvira. Međuspremnik okvira sadrži prostor za aktivni okvir i neaktivan okvir. Nakon što je cijeli okvir napisan, neaktivni okvir postaje aktivan.
  • Uslužna rutina prekida neprestano ponovo iscrtava sliku očitavanjem vrijednosti napona i kašnjenja iz aktivnog međuspremnika okvira. Na temelju tih vrijednosti prilagođava radne cikluse izlaznih pinova. Tajmer 1 se koristi za mjerenje vremenskog kašnjenja do nekoliko nanosekundi preciznosti, dok se mjerač 2 koristi za kontrolu radnog ciklusa pinova.
  • Igla sa najvećom promjenom napona uvijek je "turbopunjena" sa radnim ciklusom od nule ili 100%, što osigurava najbrže vrijeme punjenja ili pražnjenja. Igla s manjom promjenom napona pokreće se radnim ciklusom odabranim tako da odgovara vremenu prijelaza prvog pina-ovo vrijeme je važno da bi se osiguralo da se linije vuku ravno na osciloskopu.

Korak 10: S velikom brzinom dolazi i velika odgovornost

Budući da je ova metoda mnogo brža od PWM -a, zašto je ne koristi analogWrite ()? Pa, zato što je korištenje samo PWM -a dovoljno dobro za većinu programa i puno više oprašta. Metoda "Turbo punjača", međutim, zahtijeva pažljivo kodiranje i pogodna je samo za određene slučajeve:

  1. Izuzetno je osjetljiv na vrijeme. Kad dosegnemo ciljani nivo napona, pogonski pin se mora odmah prebaciti u uobičajeni način rada PWM -a kako bi se izbjeglo prekoračenje ciljnog napona.
  2. To zahtijeva poznavanje RC konstante, pa se te vrijednosti moraju unijeti unaprijed. Uz netočne vrijednosti, vrijeme će biti pogrešno, a naponi neispravni. Sa redovnim PWM -om, postoji jamstvo da ćete nakon određenog vremena podmiriti ispravan napon, čak i ako RC konstanta nije poznata.
  3. Izračunavanje preciznog vremenskog intervala za punjenje kondenzatora zahtijeva logaritamske jednadžbe koje su presporo za računanje u stvarnom vremenu na Arduinu. Oni se moraju unaprijed izračunati prije svakog okvira animacije i negdje spremiti u memoriju.
  4. Programi koji se bave ovom metodom moraju se boriti s činjenicom da su kašnjenja vrlo nelinearna (u stvari su eksponencijalna). Ciljni naponi u blizini Vcc ili GND bit će potrebni za mnogo više redova veličine da se postignu od napona blizu sredine.

Kako bi prevladao ova ograničenja, moj kôd za vektorsku grafiku radi sljedeće:

  1. Koristi Tajmer 1 na 16 kHz i rutinu prekida za preciznu izlaznu manipulaciju i mjerenje vremena.
  2. Zahtijeva korištenje određene vrijednosti vremenske konstante RC -a, ograničavajući izbor vrijednosti kondenzatora i otpornika.
  3. Pohranjuje vremenske odgode za sve točke u okviru animacije u memorijskom međuspremniku. To znači da rutina koja računa vremenska kašnjenja radi mnogo sporije od rutine usluge prekida koja ažurira izlazne pinove. Bilo koji okvir može biti obojen nekoliko desetina puta prije nego što je novi skup odgoda za sljedeći okvir spreman za upotrebu.
  4. Korištenje memorijskog međuspremnika ograničava broj točaka koje se mogu izvući po kadru. Koristim prostorno efikasno kodiranje kako bih izvukao maksimum iz dostupne RAM memorije, ali je i dalje ograničeno na oko 150 bodova. Preko stotinjak tačaka, ekran bi ionako počeo da treperi, pa je to sporna tačka!

Preporučuje se: