Indholdsfortegnelse:

Arduino -timere: 8 projekter: 10 trin (med billeder)
Arduino -timere: 8 projekter: 10 trin (med billeder)

Video: Arduino -timere: 8 projekter: 10 trin (med billeder)

Video: Arduino -timere: 8 projekter: 10 trin (med billeder)
Video: ТЕПЕРЬ НЕ ПРОПАДУ 10-ть самоделок ВЫРУЧАТ ГДЕ УГОДНО! 2024, December
Anonim
Arduino -timere: 8 projekter
Arduino -timere: 8 projekter

Arduino Uno eller Nano kan generere præcise digitale signaler på seks dedikerede ben ved hjælp af de tre indbyggede timere. De kræver kun et par kommandoer for at konfigurere og bruger ingen CPU -cykler til at køre!

Brug af timerne kan være skræmmende, hvis du starter med hele ATMEGA328 -databladet, der har 90 sider dedikeret til deres beskrivelse! Flere indbyggede Arduino-kommandoer bruger allerede timerne, f.eks. Millis (), delay (), tone (), AnalogWrite () og servobiblioteket. Men for at bruge deres fulde kraft skal du konfigurere dem gennem registre. Jeg deler her nogle makroer og funktioner for at gøre dette lettere og mere gennemsigtigt.

Efter et meget kort overblik over timerne, følg 8 seje projekter, der er afhængige af signalgenerering med timerne.

Trin 1: Påkrævede komponenter

Påkrævede komponenter
Påkrævede komponenter

For at lave alle 8 projekter skal du bruge:

  • En Arduino Uno eller kompatibel
  • En prototypeskærm med mini protoboard
  • 6 kabler til brødbræt
  • 6 korte breadboard -jumpere (lav dig selv fra 10 cm solid -core -tilslutningstråd)
  • 2 krokodilleder
  • 1 hvid 5 mm LED
  • en 220 Ohm modstand
  • en 10kOhm modstand
  • et 10 kOhm potentiometer
  • 2 keramiske 1muF kondensatorer
  • 1 elektrolytisk 10muF kondensator
  • 2 dioder, 1n4148 eller lignende
  • 2 mikro servomotorer SG90
  • 1 8 Ohm højttaler
  • 20 m tynd (0,13 mm) emaljeret tråd

Trin 2: Oversigt over Arduino -timerne til signalgenerering

Timer0 og timer2 er 8-bit timere, hvilket betyder, at de højst kan tælle fra 0 til 255. Timer1 er en 16-bit timer, så den kan tælle op til 65535. Hver timer har to tilhørende udgangsstifter: 6 og 5 for timer0, 9 og 10 for timer1, 11 og 3 for timer2. Timeren øges ved hver Arduino -urcyklus eller med en hastighed, der reduceres med en forudskaleringsfaktor, som enten er 8, 64, 256 eller 1024 (32 og 128 er også tilladt for timer2). Timerne tæller fra 0 til ‘TOP’ og derefter igen (hurtig PWM) eller nedad (fasekorrekt PWM). Værdien af 'TOP' bestemmer således frekvensen. Outputstifterne kan indstille, nulstille eller vende på værdien af Output Compare Register, så de bestemmer driftscyklussen. Kun timer1 har mulighed for uafhængigt at indstille frekvensen og driftscyklusser for begge udgangsstifter.

Trin 3: LED -blink

Image
Image
LED blinker
LED blinker
LED blinker
LED blinker

Den laveste frekvens, der kan nås med 8-bit timerne, er 16MHz/(511*1024) = 30, 6Hz. Så for at få en LED til at blinke med 1 Hz, har vi brug for timer1, som kan nå frekvenser 256 gange mindre, 0,12 Hz.

Tilslut en LED med sin anode (langt ben) til pin9, og tilslut dens katode med en 220 Ohm modstand til jord. Upload koden. LED'en blinker ved nøjagtigt 1 Hz med en driftscyklus på 50%. Loop () -funktionen er tom: Timeren initialiseres ved opsætning () og behøver ikke yderligere opmærksomhed.

Trin 4: LED -dæmper

Image
Image
LED lysdæmper
LED lysdæmper
LED lysdæmper
LED lysdæmper

Pulsbreddemodulation er en effektiv måde at regulere intensiteten af en LED. Med en ordentlig driver er det også den foretrukne metode til at regulere elektromotorers hastighed. Da signalet enten er 100% tændt eller 100% slukket, spildes der ikke strøm på en seriemodstand. Grundlæggende er det som at blinke LED'en hurtigere, end øjet kan følge. 50Hz er i princippet tilstrækkeligt, men det kan stadig se ud til at flimre lidt, og når lysdioden eller øjnene bevæger sig, kan der opstå et irriterende ikke-kontinuerligt 'spor'. Ved hjælp af en forudskala på 64 med en 8-bit timer får vi 16MHz/(64*256) = 977Hz, hvilket passer til formålet. Vi vælger timer2, så timer1 forbliver tilgængelig for andre funktioner, og vi forstyrrer ikke Arduino time () -funktionen, der bruger timer0.

I dette eksempel reguleres driftscyklussen og dermed intensiteten af et potentiometer. En anden LED kan reguleres uafhængigt med den samme timer på pin 3.

Trin 5: Digital-til-analog konverter (DAC)

Image
Image
Digital-til-analog konverter (DAC)
Digital-til-analog konverter (DAC)
Digital-til-analog konverter (DAC)
Digital-til-analog konverter (DAC)

Arduino har ikke en ægte analog udgang. Nogle moduler tager en analog spænding for at regulere en parameter (displaykontrast, detektionstærskel osv.). Med kun en kondensator og modstand kan timer1 bruges til at oprette en analog spænding med en opløsning på 5mV eller bedre.

Et lavpasfilter kan 'gennemsnit' PWM-signalet til en analog spænding. En kondensator er forbundet via en modstand til en PWM -pin. Karakteristika bestemmes af PWM -frekvensen og værdierne af modstanden og kondensatoren. Opløsningen af 8-bit timerne ville være 5V/256 = 20mV, så vi vælger Timer1 for at få 10-bit opløsning. RC-kredsløbet er et førsteordens lavpasfilter, og det vil have en vis krusning. Tidsskalaen for RC-kredsløbet skal være meget større end perioden for PWM-signalet for at reducere krusningen. Perioden vi får for en 10-bit præcision er 1024/16MHz = 64mus. Hvis vi bruger en 1muF kondensator og en 10kOhm modstand, er RC = 10ms. Peak-to-peak-krusningen er højst 5V*0,5*T/(RC) = 16mV, hvilket anses for tilstrækkeligt her.

Bemærk, at denne DAC har en meget høj outputimpedans (10 kOhm), så spændingen vil falde betydeligt, hvis den trækker strøm. For at undgå det kan den bufres med en opamp, eller en anden kombination af R og C kan vælges, f.eks. 1kOhm med 10muF.

I eksemplet styres DAC -udgangen med et potentiometer. En anden uafhængig DAC -kanal kan køres med timer1 på pin 10.

Trin 6: Metronom

Image
Image
Metronom
Metronom
Metronom
Metronom

En metronom hjælper med at holde styr på rytmen, når du spiller musik. Ved meget korte impulser kan arduino -timerudgangen fodres direkte til en højttaler, hvilket vil give klart hørbare klik. Med et potentiometer kan slagfrekvensen reguleres fra 40 til 208 slag i minuttet i 39 trin. Timer1 er nødvendig for den krævede præcision. Værdien af 'TOP', som bestemmer frekvensen, ændres inde i loop () -funktionen, og det kræver opmærksomhed! Du ser her, at WGM -tilstanden adskiller sig fra de andre eksempler, der har fast frekvens: Denne tilstand, med TOP indstillet af OCR1A -registret, har dobbelt buffering og beskytter mod at mangle TOP og få en lang fejl. Dette betyder imidlertid, at vi kun kan bruge 1 output pin.

Trin 7: Lydspektrum

Image
Image
Lydspektrum
Lydspektrum
Lydspektrum
Lydspektrum

Mennesker kan høre mere end 3 størrelsesordener af lydfrekvenser, fra 20Hz til 20kHz Dette eksempel genererer hele spektret med et potentiometer. En 10muF kondensator sættes mellem højttaleren og Arduino for at blokere jævnstrømmen. Timer1 producerer en firkantbølge. Bølgeformgenereringstilstanden her er fasekorrekt PWM. I denne tilstand begynder tælleren at tælle baglæns, når den når toppen, hvilket resulterer i pulser, der har deres middelværdi fast, selv når driftscyklussen varierer. Det resulterer imidlertid også i en periode, der er (næsten) dobbelt, og det sker bare, at med forudskala 8 dækker timer1 hele det hørbare spektrum, uden at det er nødvendigt at ændre forskala. Også her, da værdien af TOP ændres undervejs, ved at bruge OCR1A som top reducerer fejl.

Trin 8: Servomotorer

Image
Image
Servomotorer
Servomotorer
Servomotorer
Servomotorer

Der er kraftige servobiblioteker, men hvis du kun har to servoer at køre, kan du lige så godt gøre det direkte med timer1 og dermed reducere CPU, hukommelsesbrug og undgå afbrydelser. Den populære SG90 servo tager et 50Hz signal, og pulslængden koder positionen. Ideel til timer1. Frekvensen er fast, så begge udgange på pin9 og pin 10 kan bruges til at styre servoerne uafhængigt.

Trin 9: Spændingsdobler og inverter

Spændingsdobler og inverter
Spændingsdobler og inverter
Spændingsdobler og inverter
Spændingsdobler og inverter
Spændingsdobler og inverter
Spændingsdobler og inverter

Nogle gange kræver dit projekt en spænding, der er højere end 5V eller en negativ spænding. Det kan være at køre en MOSFET, at køre et piezo -element, at drive en opamp eller nulstille en EEPROM. Hvis strømforbruget er lille nok, op til ~ 5mA, kan en opladningspumpe være den enkleste løsning: kun 2 dioder og to kondensatorer forbundet til et pulseret signal fra en timer giver mulighed for at fordoble arduino 5V til 10V. I praksis er der 2 diodedråber, så det vil være mere som 8,6V i praksis for doubleren eller -3,6V for inverteren.

Kvadratbølgens frekvens bør være tilstrækkelig til at pumpe tilstrækkelig ladning gennem dioderne. En 1muF kondensator flytter 5 muC forandring, når spændingen skifter mellem 0 og 5V, så for en 10mA strøm skal frekvensen være mindst 2 kHz. I praksis er en højere frekvens bedre, da den reducerer krusningen. Med timer2, der tæller fra 0 til 255 uden forudskala, er frekvensen 62,5 kHz, hvilket fungerer godt.

Trin 10: Trådløs strømoverførsel

Image
Image
Trådløs strømoverførsel
Trådløs strømoverførsel
Trådløs strømoverførsel
Trådløs strømoverførsel

Det er ikke ualmindeligt at oplade et smart ur uden kabler, men det samme kan let være en del af et Arduino -projekt. En spole med et højfrekvent signal kan overføre strøm til en anden spole i nærheden gennem induktion uden elektrisk kontakt.

Forbered først spolerne. Jeg brugte en papirrulle med en diameter på 8,5 cm og en emaljeret tråd med en diameter på 0,13 mm til at lave 2 spoler: den primære med 20 omdrejninger, den sekundære med 50 omdrejninger. Selvinduktansen af denne type spole med N-viklinger og en radius R er ~ 5muH * N^2 * R. Så for N = 20 og R = 0,0425 giver L = 85muH, hvilket blev bekræftet med komponenttesteren. Vi producerer et signal med en frekvens på 516 kHz, hvilket resulterer i en impedans på 2pi*f*L = 275Ohm. Dette er højt nok til, at Arduino ikke går i overstrøm.

For at køre spolen mest effektivt vil vi gerne bruge en ægte vekselstrømskilde. Der er et trick, der kan gøres: De to udgange fra en timer kan køres i modsat fase ved at vende en af udgangene. For at gøre det endnu mere ligner en sinusbølge, bruger vi den fase-korrekte PWM. På denne måde, mellem pin 9 og 10, veksler spændingen mellem både 0V, pin 9 +5V, begge 0V, pin 10 +5V. Effekten vises på billedet fra et omfangsspor (med en 1024 forudskala har dette legetøjsomfang ikke meget båndbredde).

Tilslut primærspolen til pin 9 og 10. Tilslut en LED til den sekundære spole. Når den sekundære spole bringes tæt på primæren, lyser LED'en kraftigt.

Anbefalede: