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, Srpanj
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 pomoću modulacije širine impulsa (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 koji možda nisu lako dostupni. 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 sklopa. 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 glasovanju za njega!:)

Korak 1: Izgradnja kruga

Izgradnja sklopa
Izgradnja sklopa

Za izgradnju sklopa trebat će vam sljedeće:

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

b) Dva otpornika vrijednosti R od najmanje 150Ω.

c) Dva kondenzatora vrijednosti C takvi 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 umanjit će struju i stoga su prihvatljive.

Drugo ograničenje je da želimo zadržati konstantno vrijeme, koje je umnožak R i C, jednako oko 1,5 ms. 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 dano u odjeljku teorije, nakon što sam vam pokazao kako sastaviti demonstracijski krug.

Korak 2: Postavljanje osciloskopa

Postavljanje osciloskopa
Postavljanje osciloskopa

Za demonstraciju je potreban osciloskop postavljen na X/Y način rada. Ispitni 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) Postavite horizontalno preklapanje da se kontrolira kanalom B (os 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 spajanja na DC na oba kanala.

e) Podesite položaj X i Y tako da točka bude u donjem lijevom kutu zaslona kada je Arduino isključen.

Korak 3: Preuzmite i pokrenite softver

Image
Image

Preuzmite softver iz 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 uvjetima 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, pa postoji poruka s božićnom i novogodišnjom temom koju možete vidjeti izmjenom PATTERN varijable u kodu.

Korak 4: Izradite 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. Stvorite tekst velikim, podebljanim fontom, poput Impact.
  2. Odaberite tekstualni objekt i odaberite "Object to Path" s izbornika "Path".
  3. Odaberite pojedina slova i preklopite ih kako biste stvorili povezani oblik
  4. Odaberite "Union" s izbornika "Path" kako biste ih spojili u jednu krivulju.
  5. Ako na nekim slovima postoje rupe, izrežite mali zarez iscrtavanjem pravokutnika alatom 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 alat "Učini odabrane čvorove kutom".
  8. Spremite SVG datoteku.

Važno je da vaš crtež treba imati jednu zatvorenu putanju i bez rupa. Pobrinite 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 može se zanemariti; zamijenite ih s 0, 0.
  2. Zalijepite koordinate u Arduino skicu unutar zagrada odmah nakon "#define USER_PATTERN".
  3. Zamijenite sve razmake zarezima, u protivnom ćete dobiti pogrešku pri prevođenju. Alat "Zamijeni i pronađi" može biti od pomoći.
  4. Sastavite i pokrenite!
  5. Ako imate problema, provjerite ima li grešaka u serijskoj konzoli. Konkretno, vidjet ćete poruke ako vaš uzorak ima previše točaka za unutarnji međuspremnik. 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 spojen na izvor napona Vcc pojačat će svoj napon prema eksponencijalnoj krivulji. Ova krivulja je asimptotična, što znači da će se usporiti s približavanjem ciljnom naponu. U sve praktične svrhe, napon je "dovoljno blizu" nakon 5 RC sekundi. RC se naziva "vremenska konstanta". Kao što smo ranije vidjeli, to je umnožak vrijednosti otpornika i kondenzatora u vašem krugu. Problem je u tome što je 5 RC prilično dugo za ažuriranje svake točke na grafičkom zaslonu. To dovodi do velikog treperenja!

Kad za punjenje kondenzatora koristimo pulsno -širinsku modulaciju (PWM), 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 više je 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: Prijeđite od a do B, malo 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. No, ako želimo, zapravo možemo 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 zapravo je nešto kraće od 5 RC.

Ali čekaj, možemo puno 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 s a na B s 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će vrijeme. 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. Time se 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 s PWM -om. Ovako dobivate mjesta, dušo!

Korak 9: Shvatite Kodeks

Shvatite Kodeks
Shvatite Kodeks

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

  • Grafički podaci pohranjuju se u PROGMEM (to jest, flash memorija) kao popis toč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 jedna po jedna iz grafičkih podataka i svaka se množi s pohranjenom matricom transformacije.
  • Pretvorene točke napajaju se algoritmom škara koji obrezuje sve točke izvan vidljivog područja.
  • Pomoću tablice traženja RC kašnjenja točke se pretvaraju u pogonske napone i vremenske odgode. 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 upisuju se u neaktivni okvir u međuspremniku okvira. Međuspremnik okvira sadrži prostor za aktivni okvir i neaktivan okvir. Nakon što je napisan cijeli okvir, neaktivni okvir postaje aktivan.
  • Uslužna rutina prekida neprestano ponovno 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 koristi se za mjerenje vremenskog kašnjenja do nekoliko nanosekundi preciznosti, dok se mjerač 2 koristi za kontrolu radnog ciklusa pinova.
  • Igla s najvećom promjenom napona uvijek je "turbopunjena" s radnim ciklusom od nule ili 100%, osiguravajući 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 usklađivanje je važno kako bi se osiguralo da se crte crtaju 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, jer 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 prikladna je samo za određene slučajeve:

  1. Izuzetno je osjetljiv na vrijeme. Kad dosegnemo ciljnu razinu napona, pogonski pin se mora odmah prebaciti u uobičajeni način rada s PWM -om kako bi se izbjeglo preklapanje ciljnog napona.
  2. To zahtijeva poznavanje RC konstante, pa se te vrijednosti moraju unijeti unaprijed. S netočnim vrijednostima, vrijeme će biti pogrešno, a naponi netočni. S uobičajenim PWM -om, postoji jamstvo da ćete nakon nekog vremena podmiriti ispravan napon, čak i ako RC konstanta nije poznata.
  3. Izračunavanje točnog 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 (zapravo su eksponencijalna). Ciljni naponi u blizini Vcc ili GND bit će potrebni za mnogo više redova veličine da se postignu od napona u blizini središnje točke.

Kako bi prevladao ta ograničenja, moj vektorski grafički kod radi sljedeće:

  1. Koristi Timer 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 međuspremniku. To znači da rutina koja izračunava kašnjenja radi mnogo sporije od rutine usluge prekida koja ažurira izlazne pinove. Bilo koji okvir može se naslikati nekoliko desetaka puta prije nego što je novi skup odgode 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 učinkovito kodiranje kako bih najbolje iskoristio raspoloživu RAM memoriju, no ona je i dalje ograničena na oko 150 bodova. Preko stotinjak točaka, zaslon bi ionako počeo treperiti, pa je to sporna točka!

Preporučeni: