Sadržaj:

Arduino tajmeri: 8 projekata: 10 koraka (sa slikama)
Arduino tajmeri: 8 projekata: 10 koraka (sa slikama)

Video: Arduino tajmeri: 8 projekata: 10 koraka (sa slikama)

Video: Arduino tajmeri: 8 projekata: 10 koraka (sa slikama)
Video: Основы программирования микроконтроллеров. Лекция в МИРЭА 2024, Novembar
Anonim
Arduino tajmeri: 8 projekata
Arduino tajmeri: 8 projekata

Arduino Uno ili Nano mogu generirati točne digitalne signale na šest namjenskih pinova pomoću tri ugrađena tajmera. Za postavljanje im je potrebno samo nekoliko naredbi, a za pokretanje ne koriste cikluse CPU -a!

Korištenje mjerača vremena može biti zastrašujuće ako krenete od potpune podatkovne tablice ATMEGA328, koja ima 90 stranica posvećenih njihovom opisu! Nekoliko ugrađenih Arduino naredbi već koriste tajmere, na primjer millis (), delay (), tone (), AnalogWrite () i servo biblioteka. Ali da biste iskoristili njihovu punu snagu, morat ćete ih postaviti kroz registre. Ovdje dijelim neke makroe i funkcije kako bi ovo bilo lakše i transparentnije.

Nakon kratkog pregleda mjerača vremena, slijedite 8 kul projekata koji se oslanjaju na generiranje signala pomoću mjerača vremena.

Korak 1: Potrebne komponente

Potrebne komponente
Potrebne komponente

Za izradu svih 8 projekata trebat će vam:

  • Arduino Uno ili kompatibilan
  • Prototipni štit s mini protoborom
  • 6 kratkospojnih kabela za matičnu ploču
  • 6 kratkih kratkospojnika za matičnu ploču (napravite sami od priključne žice od punog jezgra 10 cm)
  • 2 krokodilska kabla
  • 1 bijela LED dioda od 5 mm
  • otpornik od 220 ohma
  • otpornik od 10 kOhm
  • potenciometar od 10 kOhm
  • 2 keramička kondenzatora od 1 muF
  • 1 elektrolitički kondenzator od 10 muF
  • 2 diode, 1n4148 ili slično
  • 2 mikro servo motora SG90
  • 1 8Ohm zvučnik
  • 20 m tanke (0,13 mm) emajlirane žice

Korak 2: Pregled Arduino mjerača vremena za generiranje signala

Timer0 i timer2 su 8-bitni mjerači vremena, što znači da mogu brojati najviše od 0 do 255. Tajmer 1 je 16-bitni mjerač vremena, pa može brojati do 65535. Svaki mjerač vremena ima dva povezana izlazna pina: 6 i 5 za tajmer0, 9 i 10 za tajmer1, 11 i 3 za tajmer2. Tajmer se povećava sa svakim ciklusom Arduino takta ili brzinom koja se smanjuje za faktor predskale, koji je ili 8, 64, 256 ili 1024 (32 i 128 su takođe dozvoljeni za tajmer2). Tajmeri se broje od 0 do 'TOP', a zatim ponovo (brzi PWM) ili prema dolje (fazno ispravni PWM). Vrijednost 'TOP' tako određuje frekvenciju. Izlazni pinovi mogu postaviti, resetirati ili okrenuti vrijednost registra usporedbe izlaza, tako da oni određuju radni ciklus. Samo timer 1 ima mogućnost nezavisnog postavljanja frekvencije i ciklusa rada za oba izlazna pina.

Korak 3: LED treptanje

Image
Image
LED Blink
LED Blink
LED Blink
LED Blink

Najniža frekvencija koja se može postići pomoću 8-bitnih mjerača vremena je 16MHz/(511*1024) = 30, 6Hz. Dakle, kako bi LED dioda trepnula s 1Hz, potreban nam je tajmer1, koji može doseći 256 puta manje frekvencije, 0,12 Hz.

Spojite LED s anodom (dugačka noga) na pin9 i spojite njegovu katodu s otpornikom od 220 Ohma na masu. Otpremite kôd. LED dioda će treperiti na tačno 1Hz sa radnim ciklusom od 50%. Funkcija loop () je prazna: mjerač vremena se inicijalizira pri setup () i ne zahtijeva dodatnu pažnju.

Korak 4: LED prigušivač

Image
Image
LED Dimmer
LED Dimmer
LED Dimmer
LED Dimmer

Impulsna širina modulacije je efikasan način za regulaciju intenziteta LED diode. S odgovarajućim upravljačkim programom također je poželjna metoda za regulaciju brzine elektromotora. Budući da je signal 100% uključen ili 100% isključen, ne troši se snaga na serijski otpor. U osnovi, to je kao da LED treperi brže nego što oko može pratiti. 50Hz je u načelu dovoljno, ali može se činiti da ipak malo treperi, a kada se LED ili oči pomaknu, može doći do dosadnog, neprekidnog "traga". Koristeći predskalu 64 sa 8-bitnim tajmerom, dobivamo 16MHz/(64*256) = 977Hz, što odgovara svrsi. Odabiremo timer2, tako da timer1 ostaje dostupan za druge funkcije i ne ometamo funkciju Arduino time () koja koristi timer0.

U ovom primjeru radni ciklus, a time i intenzitet, regulira se potenciometrom. Druga LED dioda može se nezavisno regulirati istim tajmerom na pinu 3.

Korak 5: Digitalno-analogni pretvarač (DAC)

Image
Image
Digitalno-analogni pretvarač (DAC)
Digitalno-analogni pretvarač (DAC)
Digitalno-analogni pretvarač (DAC)
Digitalno-analogni pretvarač (DAC)

Arduino nema pravi analogni izlaz. Neki moduli uzimaju analogni napon za regulaciju parametra (kontrast ekrana, prag detekcije itd.). Sa samo jednim kondenzatorom i otpornikom, timer1 se može koristiti za stvaranje analognog napona rezolucije 5mV ili bolje.

Niskopropusni filter može ‘prosječiti’ PWM signal do analognog napona. Kondenzator je spojen preko otpornika na PWM pin. Karakteristike su određene PWM frekvencijom i vrijednostima otpornika i kondenzatora. Rezolucija 8-bitnih mjerača vremena bila bi 5V/256 = 20mV, pa se odlučujemo da Timer1 dobije 10-bitnu rezoluciju. RC kolo je niskopropusni filter prvog reda i imaće neke talase. Vremenska skala RC kruga trebala bi biti mnogo veća od razdoblja PWM signala kako bi se smanjila valovitost. Period koji dobijamo za 10-bitnu preciznost je 1024/16MHz = 64mus. Ako koristimo 1muF kondenzator i 10kOhm otpornik, RC = 10ms. Vrhunac talasa je najviše 5V*0.5*T/(RC) = 16mV, što se ovdje smatra dovoljnim.

Imajte na umu da ovaj DAC ima vrlo visoku izlaznu impedanciju (10 kOhm), pa će napon značajno pasti ako privuče struju. Da bi se to izbjeglo, može se međuspremnik opampati ili se može izabrati druga kombinacija R i C, na primjer 1 kOhm sa 10muF.

U primjeru, DAC izlazom se upravlja pomoću potenciometra. Drugi nezavisni DAC kanal može se pokrenuti pomoću timera1 na pinu 10.

Korak 6: Metronom

Image
Image
Metronom
Metronom
Metronom
Metronom

Metronom pomaže u praćenju ritma prilikom sviranja muzike. Za vrlo kratke impulse, izlaz arduino tajmera može se poslati direktno na zvučnik, što će proizvesti jasno čujne klikove. Potenciometrom se frekvencija otkucaja može regulirati od 40 do 208 otkucaja u minuti, u 39 koraka. Tajmer1 je potreban za potrebnu preciznost. Vrijednost 'TOP', koja određuje frekvenciju, mijenja se unutar funkcije loop (), a to zahtijeva pažnju! Ovdje vidite da se WGM način rada razlikuje od ostalih primjera koji imaju fiksnu frekvenciju: ovaj način rada, s TOP postavljenim registom OCR1A, ima dvostruko međuspremljenje i štiti od nedostajanja TOP -a i dugog kvara. Međutim, to znači da možemo koristiti samo 1 izlazni pin.

Korak 7: Zvučni spektar

Image
Image
Sound Spectrum
Sound Spectrum
Sound Spectrum
Sound Spectrum

Ljudi mogu čuti preko 3 reda veličine zvučnih frekvencija, od 20Hz do 20kHz Ovaj primjer generira cijeli spektar pomoću potenciometra. Između zvučnika i Arduina postavljen je kondenzator od 10 μF za blokiranje istosmjerne struje. Tajmer 1 proizvodi kvadratni val. Način generiranja valnog oblika ovdje je Phase-correct PWM. U tom načinu rada brojač počinje brojati unatrag kada dosegne vrh, što rezultira impulsima koji imaju srednju vrijednost fiksiranu, čak i kada radni ciklus varira. Međutim, to također rezultira razdobljem koje je (gotovo) dvostruko, a događa se i da s predskalom 8 tajmer1 pokriva cijeli zvučni spektar, bez potrebe za promjenom predskale. Također ovdje, budući da se vrijednost TOP-a mijenja u pokretu, upotrebom OCR1A kao vrha smanjuju se greške.

Korak 8: Servo motori

Image
Image
Servo motori
Servo motori
Servo motori
Servo motori

Postoje moćne servo biblioteke, ali ako imate samo dva serva za pogon, mogli biste to učiniti i izravno s timer1, i na taj način smanjiti CPU, korištenje memorije i izbjeći prekide. Popularni SG90 servo prima signal od 50Hz, a dužina impulsa kodira položaj. Idealno za tajmer1. Učestalost je fiksna, pa se oba izlaza na pin9 i pin 10 mogu koristiti za samostalno upravljanje servo pogonima.

Korak 9: Udvostručivač napona i pretvarač

Udvostručivač napona i pretvarač
Udvostručivač napona i pretvarač
Udvostručivač napona i pretvarač
Udvostručivač napona i pretvarač
Udvostručivač napona i pretvarač
Udvostručivač napona i pretvarač

Ponekad vaš projekt zahtijeva napon veći od 5 V ili negativan napon. Možda će se pokrenuti MOSFET, pokrenuti piezo element, napajati opamp ili resetirati EEPROM. Ako je potrošnja struje dovoljno mala, do ~ 5mA, pumpa za punjenje bi mogla biti najjednostavnije rješenje: samo 2 diode i dva kondenzatora spojena na impulsni signal iz tajmera omogućuju udvostručenje arduino 5V na 10V. U praksi postoje 2 diodne kapljice, pa će to više biti 8,6 V u praksi za udvostručivač ili -3,6 V za pretvarač.

Učestalost kvadratnog vala trebala bi biti dovoljna da ispumpa dovoljno naboja kroz diode. Kondenzator od 1 muF pomiče 5muC promjene pri promjeni napona između 0 i 5V, pa za struju od 10mA frekvencija mora biti najmanje 2kHz. U praksi je veća frekvencija bolja jer smanjuje valovitost. S timer2 koji broji od 0 do 255 bez predmjera, frekvencija je 62,5 kHz, što dobro radi.

Korak 10: Bežični prijenos energije

Image
Image
Bežični prijenos energije
Bežični prijenos energije
Bežični prijenos energije
Bežični prijenos energije

Nije neuobičajeno puniti pametni sat bez kabela, ali isti lako može biti dio Arduino projekta. Zavojnica s visokofrekventnim signalom može prenositi energiju na drugu obližnju zavojnicu indukcijom, bez električnog kontakta.

Prvo pripremite zavojnice. Koristio sam papirnu rolu promjera 8,5 cm i emajliranu žicu promjera 0,13 mm za izradu 2 zavojnice: primarnu s 20 okretaja, sekundarnu sa 50 zavoja. Samoinduktivnost ove vrste zavojnice s N namotaja i radijusom R je ~ 5muH * N^2 * R. Dakle, za N = 20 i R = 0.0425 daje L = 85muH, što je potvrđeno ispitivačem komponenti. Proizvodimo signal frekvencije 516 kHz, što rezultira impedancijom od 2pi*f*L = 275Ohm. Ovo je dovoljno visoko da Arduino ne prelazi u prekostruju.

Za najučinkovitiji rad zavojnice željeli bismo koristiti pravi izvor izmjenične struje. Postoji trik koji se može izvesti: dva izlaza tajmera mogu se pokrenuti u suprotnoj fazi, obrnuvši jedan od izlaza. Da bismo bili još sličniji sinusnom valu, koristimo PWM sa faznom korekcijom. Na ovaj način, između pina 9 i 10, napon se izmjenjuje između 0V, pina 9 +5V, oba 0V, pina 10 +5V. Učinak je prikazan na slici iz traga opsega (s predrazmjerom 1024, ovaj opseg igračaka nema veliku propusnost).

Priključite primarni kalem na pinove 9 i 10. Spojite LED na sekundarni kalem. Kada se sekundarni namotaj približi primarnom, LED svijetli jako.

Preporučuje se: