Spisu treści:

Arduino Timery: 8 projektów: 10 kroków (ze zdjęciami)
Arduino Timery: 8 projektów: 10 kroków (ze zdjęciami)

Wideo: Arduino Timery: 8 projektów: 10 kroków (ze zdjęciami)

Wideo: Arduino Timery: 8 projektów: 10 kroków (ze zdjęciami)
Wideo: Arduino #3 Jak robić kilka rzeczy jednocześnie TIMERS 2024, Grudzień
Anonim
Arduino Timery: 8 projektów
Arduino Timery: 8 projektów

Arduino Uno lub Nano może generować dokładne sygnały cyfrowe na sześciu dedykowanych pinach za pomocą trzech wbudowanych timerów. Wymagają tylko kilku poleceń do skonfigurowania i nie używają cykli procesora do uruchomienia!

Korzystanie z timerów może być onieśmielające, jeśli zaczniesz od pełnego arkusza danych ATMEGA328, który ma 90 stron poświęconych ich opisowi! Kilka wbudowanych poleceń Arduino już korzysta z timerów, na przykład millis(), delay(), tone(), AnalogWrite() i biblioteka serwo. Ale aby wykorzystać ich pełną moc, musisz ustawić je za pomocą rejestrów. Udostępniam tutaj kilka makr i funkcji, aby było to łatwiejsze i bardziej przejrzyste.

Po bardzo krótkim przeglądzie timerów, śledź 8 fajnych projektów, które polegają na generowaniu sygnału za pomocą timerów.

Krok 1: Wymagane składniki

Wymagane składniki
Wymagane składniki

Aby wykonać wszystkie 8 projektów potrzebujesz:

  • Arduino Uno lub kompatybilny
  • Prototypowa tarcza z mini płytą prototypową
  • 6 kabli połączeniowych płytki stykowej
  • 6 krótkich zworek do krojenia styków (zrób sobie z 10cm solidnego drutu łączącego)
  • 2 przewody krokodyla
  • 1 biała dioda LED 5mm
  • rezystor 220 Ohm
  • rezystor 10kOhm
  • potencjometr 10kOhm
  • 2 kondensatory ceramiczne 1mF
  • 1 kondensator elektrolityczny 10mF
  • 2 diody, 1n4148 lub podobne
  • 2 mikrosilniki serwo SG90
  • 1 głośnik 8 omów
  • 20m cienkiego (0,13mm) drutu emaliowanego

Krok 2: Przegląd liczników Arduino do generowania sygnału

Timer0 i timer2 to 8-bitowe zegary, co oznacza, że mogą liczyć maksymalnie od 0 do 255. Timer1 jest 16-bitowym zegarem, więc może liczyć do 65535. Każdy zegar ma dwa skojarzone piny wyjściowe: 6 i 5 dla timera0, 9 i 10 dla timera1, 11 i 3 dla timera2. Licznik jest zwiększany w każdym cyklu zegara Arduino lub w tempie, które jest zmniejszane o współczynnik preskalowania, który wynosi 8, 64, 256 lub 1024 (32 i 128 są również dozwolone dla timera2). Timery liczą od 0 do „TOP”, a następnie od nowa (szybki PWM) lub w dół (z poprawną fazą PWM). Wartość „TOP” określa zatem częstotliwość. Kołki wyjściowe mogą ustawiać, resetować lub odwracać na wartości rejestru porównywania wyjść, więc to one określają cykl pracy. Tylko timer1 ma możliwość niezależnego ustawienia częstotliwości i cykli pracy dla obu pinów wyjściowych.

Krok 3: LED Miga

Image
Image
Miganie diody LED
Miganie diody LED
Miganie diody LED
Miganie diody LED

Najniższa częstotliwość jaką można osiągnąć przy pomocy 8-bitowych timerów to 16MHz/(511*1024)=30, 6Hz. Tak więc, aby dioda LED mrugała z częstotliwością 1 Hz, potrzebujemy timera1, który może osiągnąć częstotliwości 256 razy mniejsze, 0,12 Hz.

Podłącz diodę LED z jej anodą (długą nogą) do pinu 9 i podłącz jej katodę z rezystorem 220 Ohm do masy. Prześlij kod. Dioda LED będzie migać dokładnie z częstotliwością 1 Hz z cyklem pracy 50%. Funkcja loop() jest pusta: licznik czasu jest inicjowany w setup() i nie wymaga dalszej uwagi.

Krok 4: Ściemniacz LED

Image
Image
Ściemniacz LED
Ściemniacz LED
Ściemniacz LED
Ściemniacz LED

Modulacja szerokości impulsu to skuteczny sposób regulowania intensywności diody LED. Przy odpowiednim sterowniku jest to również preferowana metoda regulacji prędkości silników elektrycznych. Ponieważ sygnał jest w 100% włączony lub w 100% wyłączony, nie ma marnowania mocy na rezystancję szeregową. Zasadniczo przypomina to miganie diody LED szybciej, niż oko może śledzić. 50 Hz jest w zasadzie wystarczające, ale nadal może wydawać się, że trochę migocze, a gdy dioda LED lub oczy się poruszają, może pojawić się denerwujący, nieciągły „ślad”. Używając preskalowania 64 z 8-bitowym zegarem, otrzymujemy 16MHz/(64*256)=977Hz, co odpowiada celowi. Wybieramy timer2, aby timer1 pozostał dostępny dla innych funkcji i nie ingerujemy w funkcję Arduino time(), która używa timera0.

W tym przykładzie cykl pracy, a tym samym intensywność, regulowany jest potencjometrem. Druga dioda LED może być regulowana niezależnie za pomocą tego samego timera na pinie 3.

Krok 5: Przetwornik cyfrowo-analogowy (DAC)

Image
Image
Przetwornik cyfrowo-analogowy (DAC)
Przetwornik cyfrowo-analogowy (DAC)
Przetwornik cyfrowo-analogowy (DAC)
Przetwornik cyfrowo-analogowy (DAC)

Arduino nie ma prawdziwego wyjścia analogowego. Niektóre moduły pobierają napięcie analogowe, aby regulować parametr (kontrast wyświetlacza, próg wykrywania itp.). Za pomocą tylko jednego kondensatora i rezystora timer1 może być użyty do wytworzenia napięcia analogowego o rozdzielczości 5mV lub lepszej.

Filtr dolnoprzepustowy może „uśrednić” sygnał PWM do napięcia analogowego. Kondensator jest podłączony przez rezystor do pinu PWM. Charakterystyki są określone przez częstotliwość PWM oraz wartości rezystora i kondensatora. Rozdzielczość 8-bitowych timerów wynosiłaby 5V/256=20mV, więc wybieramy Timer1, aby uzyskać 10-bitową rozdzielczość. Obwód RC jest filtrem dolnoprzepustowym pierwszego rzędu i będzie miał pewne tętnienia. Skala czasowa obwodu RC powinna być znacznie większa niż okres sygnału PWM, aby zmniejszyć tętnienie. Okres jaki otrzymujemy dla 10-bitowej precyzji to 1024/16MHz= 64mus. Jeśli użyjemy kondensatora 1mF i rezystora 10kOhm, RC=10ms. Tętnienie międzyszczytowe wynosi co najwyżej 5V*0,5*T/(RC)=16mV, co jest tutaj uważane za wystarczające.

Zauważ, że ten DAC ma bardzo wysoką impedancję wyjściową (10 kOhm), więc napięcie znacznie spadnie, jeśli będzie pobierał prąd. Aby tego uniknąć, można go buforować opampem lub wybrać inną kombinację R i C, na przykład 1kOhm z 10mF.

W przykładzie wyjście DAC sterowane jest potencjometrem. Drugi niezależny kanał DAC może być uruchamiany z timerem1 na pinie 10.

Krok 6: Metronom

Image
Image
Metronom
Metronom
Metronom
Metronom

Metronom pomaga śledzić rytm podczas odtwarzania muzyki. W przypadku bardzo krótkich impulsów wyjście timera arduino można podać bezpośrednio do głośnika, co spowoduje wyraźnie słyszalne kliknięcia. Za pomocą potencjometru częstotliwość uderzeń można regulować w zakresie od 40 do 208 uderzeń na minutę, w 39 krokach. Timer1 jest potrzebny do uzyskania wymaganej precyzji. Wartość „TOP”, która określa częstotliwość, jest modyfikowana wewnątrz funkcji loop(), a to wymaga uwagi! Widać tutaj, że tryb WGM różni się od innych przykładów, które mają stałą częstotliwość: ten tryb, z ustawionym TOP przez rejestr OCR1A, ma podwójne buforowanie i chroni przed brakiem TOP i długim glitchem. Oznacza to jednak, że możemy użyć tylko 1 pinu wyjściowego.

Krok 7: Widmo dźwiękowe

Image
Image
Widmo dźwięku
Widmo dźwięku
Widmo dźwięku
Widmo dźwięku

Ludzie mogą słyszeć ponad 3 rzędy wielkości częstotliwości dźwięku, od 20Hz do 20kHz Ten przykład generuje pełne widmo za pomocą potencjometru. Kondensator 10mF jest umieszczony między głośnikiem a Arduino, aby zablokować prąd stały. Timer1 generuje falę prostokątną. Tryb generowania przebiegów to PWM z poprawną fazą. W tym trybie licznik zaczyna odliczać wstecz, gdy osiągnie szczyt, co skutkuje impulsami, które mają stałą średnią, nawet gdy cykl pracy się zmienia. Skutkuje to jednak również okresem, który jest (prawie) podwójny i tak się składa, że przy preskali 8 timer1 pokrywa pełne spektrum słyszalne, bez konieczności zmiany preskali. Również tutaj, ponieważ wartość TOP jest zmieniana w ruchu, użycie OCR1A jako topu zmniejsza usterki.

Krok 8: Serwosilniki

Image
Image
Serwosilniki
Serwosilniki
Serwosilniki
Serwosilniki

Istnieją potężne biblioteki serwomechanizmów, ale jeśli masz tylko dwa serwa do napędzania, równie dobrze możesz zrobić to bezpośrednio za pomocą timera1, a tym samym zmniejszyć użycie procesora, pamięci i uniknąć przerwań. Popularny serwo SG90 pobiera sygnał 50Hz, a długość impulsu koduje pozycję. Idealny do timera1. Częstotliwość jest stała, więc oba wyjścia na pinie 9 i pinie 10 mogą być używane do niezależnego sterowania serwami.

Krok 9: Podwajacz napięcia i falownik

Podwajacz napięcia i falownik
Podwajacz napięcia i falownik
Podwajacz napięcia i falownik
Podwajacz napięcia i falownik
Podwajacz napięcia i falownik
Podwajacz napięcia i falownik

Czasami twój projekt wymaga napięcia wyższego niż 5 V lub napięcia ujemnego. Może to być uruchomienie MOSFET, uruchomienie elementu piezo, zasilanie opampa lub zresetowanie EEPROM. Jeśli pobór prądu jest wystarczająco mały, do ~5mA, najprostszym rozwiązaniem może być pompa ładująca: tylko 2 diody i dwa kondensatory podłączone do sygnału impulsowego z timera pozwalają podwoić arduino 5V do 10V. W praktyce są 2 spadki diod, więc w praktyce będzie to bardziej jak 8,6V dla podwajacza lub -3,6V dla falownika.

Częstotliwość fali prostokątnej powinna być wystarczająca do przepompowania wystarczającego ładunku przez diody. Kondensator 1mF porusza się o 5mC zmiany, gdy napięcie zmienia się od 0 do 5V, więc dla prądu 10mA częstotliwość musi wynosić co najmniej 2kHz. W praktyce wyższa częstotliwość jest lepsza, ponieważ zmniejsza tętnienie. Przy timerze2 liczącym od 0 do 255 bez przeskalowania częstotliwość wynosi 62,5kHz, co działa dobrze.

Krok 10: Bezprzewodowe przesyłanie zasilania

Image
Image
Bezprzewodowe przesyłanie zasilania
Bezprzewodowe przesyłanie zasilania
Bezprzewodowy transfer mocy
Bezprzewodowy transfer mocy

Nie jest niczym niezwykłym ładowanie inteligentnego zegarka bez kabli, ale to samo z łatwością może być częścią projektu Arduino. Cewka z sygnałem o wysokiej częstotliwości może przenosić moc do innej pobliskiej cewki poprzez indukcję, bez kontaktu elektrycznego.

Najpierw przygotuj cewki. Użyłem rolki papieru o średnicy 8,5 cm i drutu emaliowanego o średnicy 0,13 mm, aby wykonać 2 zwoje: pierwotną z 20 zwojami, wtórną z 50 zwojami. Indukcyjność własna tego typu cewki przy N uzwojeniach i promieniu R wynosi ~5muH*N^2*R. Czyli dla N=20 i R=0,0425 daje L=85muH, co zostało potwierdzone testerem podzespołów. Wytwarzamy sygnał o częstotliwości 516kHz, co daje impedancję 2pi*f*L=275Ohm. Jest to na tyle wysokie, że Arduino nie przechodzi w stan przetężenia.

Aby jak najefektywniej uruchomić cewkę, chcielibyśmy użyć prawdziwego źródła prądu przemiennego. Jest pewien trik, który można wykonać: dwa wyjścia timera mogą działać w przeciwnej fazie, odwracając jedno z wyjść. Aby uczynić go jeszcze bardziej podobnym do fali sinusoidalnej, używamy PWM z korekcją fazową. W ten sposób pomiędzy pinem 9 a 10 napięcie zmienia się pomiędzy 0V, pin 9 +5V, oba 0V, pin 10 +5V. Efekt jest pokazany na obrazku ze śladu lunety (przy preskalowaniu 1024, ta zabawkowa luneta nie ma dużej przepustowości).

Podłącz cewkę pierwotną do styków 9 i 10. Podłącz diodę LED do cewki wtórnej. Gdy cewka wtórna jest zbliżona do pierwotnej, dioda LED świeci jasno.

Zalecana: