Innehållsförteckning:

Arduino -timer: 8 projekt: 10 steg (med bilder)
Arduino -timer: 8 projekt: 10 steg (med bilder)

Video: Arduino -timer: 8 projekt: 10 steg (med bilder)

Video: Arduino -timer: 8 projekt: 10 steg (med bilder)
Video: #robot #humanoid #Arduino My humanoid robot inmoov working on voice commands 2024, November
Anonim
Arduino Timers: 8 projekt
Arduino Timers: 8 projekt

Arduino Uno eller Nano kan generera exakta digitala signaler på sex dedikerade stift med hjälp av de tre inbyggda timern. De kräver bara några få kommandon för att konfigurera och använder inga CPU -cykler för att köra!

Att använda timern kan vara skrämmande om du utgår från ATMEGA328 fullständiga datablad, som har 90 sidor dedikerade till deras beskrivning! Flera inbyggda Arduino-kommandon använder redan timern, till exempel millis (), delay (), tone (), AnalogWrite () och servobiblioteket. Men för att använda deras fulla kraft måste du konfigurera dem genom registren. Jag delar här några makron och funktioner för att göra detta enklare och mer transparent.

Efter en mycket kort översikt över timers, följ 8 coola projekt som är beroende av signalgenerering med timers.

Steg 1: Obligatoriska komponenter

Obligatoriska komponenter
Obligatoriska komponenter

För att göra alla 8 projekt behöver du:

  • En Arduino Uno eller kompatibel
  • En prototypsköld med mini protoboard
  • 6 hopkopplade kablar
  • 6 korta breadboardhoppare (gör dig själv från 10 cm solid -core -anslutningstråd)
  • 2 krokodilledningar
  • 1 vit 5 mm LED
  • ett 220 Ohm motstånd
  • ett 10kOhm motstånd
  • en 10 kOhm potentiometer
  • 2 keramiska 1muF kondensatorer
  • 1 elektrolytisk 10 muF kondensator
  • 2 dioder, 1n4148 eller liknande
  • 2 mikro servomotorer SG90
  • 1 8 Ohm högtalare
  • 20 m tunn (0,13 mm) emaljerad tråd

Steg 2: Översikt över Arduino -timer för signalgenerering

Timer0 och timer2 är 8-bitars timers, vilket betyder att de kan räkna från 0 till 255 som mest. Timer1 är en 16-bitars timer, så den kan räkna upp till 65535. Varje timer har två tillhörande utgångspinnar: 6 och 5 för timer0, 9 och 10 för timer1, 11 och 3 för timer2. Timern ökas vid varje Arduino -klockcykel eller med en hastighet som reduceras med en förskalningsfaktor, som antingen är 8, 64, 256 eller 1024 (32 och 128 är också tillåtna för timer2). Tidsuret räknas från 0 till ‘TOP’ och sedan om igen (snabb PWM) eller nedåt (fas korrekt PWM). Värdet på "TOP" avgör således frekvensen. Utgångsstiften kan ställa in, återställa eller vända på värdet för Output Compare -registret, så att de bestämmer driftscykeln. Endast timer1 har möjlighet att självständigt ställa in frekvensen och arbetscyklerna för båda utgångsstiften.

Steg 3: LED -blinkning

Image
Image
LED blinkar
LED blinkar
LED blinkar
LED blinkar

Den lägsta frekvensen som kan nås med 8-bitars timers är 16MHz/(511*1024) = 30, 6Hz. Så för att få en LED att blinka med 1 Hz behöver vi timer1, som kan nå frekvenser 256 gånger mindre, 0,12 Hz.

Anslut en LED med sin anod (långa ben) till pin9 och anslut dess katod med ett 220 Ohm motstånd till jord. Ladda upp koden. Lysdioden blinkar med exakt 1 Hz med en driftscykel på 50%. Loop () -funktionen är tom: timern initieras vid setup () och behöver ingen ytterligare uppmärksamhet.

Steg 4: LED -dimmer

Image
Image
LED Dimmer
LED Dimmer
LED Dimmer
LED Dimmer

Pulsbreddsmodulering är ett effektivt sätt att reglera intensiteten hos en LED. Med en rätt förare är det också den föredragna metoden för att reglera elektromotorernas hastighet. Eftersom signalen antingen är 100% på eller 100% av, slösas ingen effekt på ett seriemotstånd. I grund och botten är det som att blinka lysdioden snabbare än ögat kan följa. 50Hz är i princip tillräckligt, men det kan fortfarande tyckas flimra lite och när lysdioden eller ögonen rör sig kan det bli ett irriterande icke-kontinuerligt "spår". Med en förskala på 64 med en 8-bitars timer får vi 16MHz/(64*256) = 977Hz, vilket passar syftet. Vi väljer timer2, så att timer1 förblir tillgänglig för andra funktioner, och vi stör inte Arduino time () -funktionen, som använder timer0.

I detta exempel regleras arbetscykeln, och därmed intensiteten, av en potentiometer. En andra lysdiod kan regleras oberoende med samma timer på stift 3.

Steg 5: Digital-till-analog omvandlare (DAC)

Image
Image
Digital-till-analog omvandlare (DAC)
Digital-till-analog omvandlare (DAC)
Digital-till-analog omvandlare (DAC)
Digital-till-analog omvandlare (DAC)

Arduino har inte en sann analog utgång. Vissa moduler tar en analog spänning för att reglera en parameter (displaykontrast, detekteringströskel etc). Med bara en kondensator och motstånd kan timer1 användas för att skapa en analog spänning med en upplösning på 5mV eller bättre.

Ett lågpassfilter kan "medel" PWM-signalen till en analog spänning. En kondensator är ansluten via ett motstånd till ett PWM -stift. Egenskaperna bestäms av PWM -frekvensen och värdena för motståndet och kondensatorn. Upplösningen för 8-bitars timers skulle vara 5V/256 = 20mV, så vi väljer Timer1 för att få 10-bitars upplösning. RC-kretsen är ett första ordnings lågpassfilter och det kommer att ha en viss krusning. Tidsskalan för RC-kretsen bör vara mycket större än perioden för PWM-signalen för att minska krusningen. Perioden vi får för en 10-bitars precision är 1024/16MHz = 64mus. Om vi använder en 1muF kondensator och ett 10kOhm motstånd är RC = 10ms. Rippeln från topp till topp är högst 5V*0,5*T/(RC) = 16mV, vilket anses vara tillräckligt här.

Observera att denna DAC har en mycket hög utgångsimpedans (10 kOhm), så spänningen kommer att sjunka avsevärt om den drar ström. För att undvika det kan det buffras med en opamp, eller en annan kombination av R och C kan väljas, till exempel 1kOhm med 10muF.

I exemplet styrs DAC -utgången med en potentiometer. En andra oberoende DAC -kanal kan köras med timer1 på stift 10.

Steg 6: Metronom

Image
Image
Metronom
Metronom
Metronom
Metronom

En metronom hjälper till att hålla koll på rytmen när du spelar musik. För mycket korta pulser kan arduino -timerutgången matas direkt till en högtalare, vilket ger tydligt hörbara klick. Med en potentiometer kan slagfrekvensen regleras från 40 till 208 slag per minut, i 39 steg. Timer1 behövs för den precision som krävs. Värdet på 'TOP', som bestämmer frekvensen, ändras inuti loop () -funktionen, och det kräver uppmärksamhet! Du ser här att WGM -läget skiljer sig från de andra exemplen som har fast frekvens: detta läge, med TOP ställt in av OCR1A -registret, har dubbel buffring och skyddar mot att missa TOP och få en lång glitch. Detta betyder dock att vi bara kan använda en utgångsstift.

Steg 7: Ljudspektrum

Image
Image
Ljudspektrum
Ljudspektrum
Ljudspektrum
Ljudspektrum

Människor kan höra över 3 storleksordningar av ljudfrekvenser, från 20Hz till 20kHz Detta exempel genererar hela spektrumet med en potentiometer. En 10muF kondensator sätts mellan högtalaren och Arduino för att blockera likströmmen. Timer1 producerar en fyrkantvåg. Waveform-genereringsläget här är Fas-korrekt PWM. I det läget börjar räknaren räkna bakåt när den når toppen, vilket resulterar i pulser som har sitt medelvärde fast, även när arbetscykeln varierar. Men det resulterar också i en period som är (nästan) dubbel, och det händer bara att med förskalning 8 täcker timer1 hela det hörbara spektrumet, utan att behöva ändra förskalning. Också här, eftersom värdet på TOP ändras när du är på språng, med hjälp av OCR1A som topp minskar fel.

Steg 8: Servomotorer

Image
Image
Servomotorer
Servomotorer
Servomotorer
Servomotorer

Det finns kraftfulla servobibliotek, men om du bara har två servon att köra kan du lika gärna göra det direkt med timer1 och därmed minska CPU, minnesanvändning och undvika avbrott. Den populära SG90 -servon tar en 50Hz -signal och pulslängden kodar positionen. Perfekt för timer1. Frekvensen är fast, så båda utgångarna på pin9 och pin 10 kan användas för att styra servon oberoende av varandra.

Steg 9: Spänningsdubblare och växelriktare

Spänningsdubblare och växelriktare
Spänningsdubblare och växelriktare
Spänningsdubblare och växelriktare
Spänningsdubblare och växelriktare
Spänningsdubblare och växelriktare
Spänningsdubblare och växelriktare

Ibland kräver ditt projekt en spänning som är högre än 5V eller en negativ spänning. Det kan vara att köra en MOSFET, att köra ett piezoelement, att driva en opamp eller återställa en EEPROM. Om strömförbrukningen är tillräckligt liten, upp till ~ 5mA, kan en laddningspump vara den enklaste lösningen: bara 2 dioder och två kondensatorer anslutna till en pulsad signal från en timer gör det möjligt att fördubbla arduino 5V till 10V. I praktiken finns det 2 dioddroppar, så det kommer att vara mer som 8,6V i praktiken för dubblaren eller -3,6V för växelriktaren.

Kvadratvågens frekvens bör vara tillräcklig för att pumpa tillräckligt med laddning genom dioderna. En 1muF kondensator flyttar 5 muC förändring när spänningen växlar mellan 0 och 5 V, så för en 10 mA ström måste frekvensen vara minst 2 kHz. I praktiken är en högre frekvens bättre, eftersom det minskar krusningen. Med timer2 som räknas från 0 till 255 utan förskalning är frekvensen 62,5 kHz, vilket fungerar bra.

Steg 10: Trådlös kraftöverföring

Image
Image
Trådlös kraftöverföring
Trådlös kraftöverföring
Trådlös kraftöverföring
Trådlös kraftöverföring

Det är inte ovanligt att ladda en smart klocka utan kablar, men samma kan lätt vara en del av ett Arduino -projekt. En spole med en högfrekvenssignal kan överföra ström till en annan närliggande spole genom induktion, utan elektrisk kontakt.

Förbered först spolarna. Jag använde en pappersrulle med 8,5 cm diameter och emaljerad tråd med 0,13 mm diameter för att göra 2 spolar: den primära med 20 varv, den sekundära med 50 varv. Självinduktansen för denna typ av spole med N-lindningar och en radie R är ~ 5muH * N^2 * R. Så för N = 20 och R = 0,0425 ger L = 85muH, vilket bekräftades med komponenttestaren. Vi producerar en signal med en frekvens på 516 kHz, vilket resulterar i en impedans på 2pi*f*L = 275Ohm. Detta är tillräckligt högt för att Arduino inte ska överströms.

För att köra spolen mest effektivt vill vi använda en riktig AC -källa. Det finns ett trick som kan göras: de två utgångarna från en timer kan köras i motsatt fas genom att invertera en av utgångarna. För att göra den ännu mer lik en sinusvåg använder vi den fas-korrekta PWM. På detta sätt, mellan stift 9 och 10, växlar spänningen mellan båda 0V, stift 9 +5V, båda 0V, stift 10 +5V. Effekten visas på bilden från ett omfångsspår (med en förskala på 1024 har denna leksaksomfång inte mycket bandbredd).

Anslut primärspolen till stift 9 och 10. Anslut en lysdiod till sekundärspolen. När sekundärspolen kommer nära primären tänds lysdioden starkt.

Rekommenderad: