Wczytywanie...

Jak podłączyć serwo do Arduino?


W poprzednich artykułach omówiliśmy ogólnie sposób sterowania serwomechanizmami modelarskimi, opisaliśmy znaczenie sprzężenia zwrotnego oraz wskazaliśmy najważniejsze różnice, zarówno konstrukcyjne, jak i funkcjonalne, pomiędzy serwami analogowymi oraz cyfrowymi. Aby móc w praktyce zastosować przedstawione informacje, warto dowiedzieć się nieco więcej na temat metody efektywnego zastosowania serwomechanizmów z popularną platformą Arduino. Dlatego tym razem pokażemy, jak podłączyć serwo do Arduino oraz w jaki sposób skonfigurować mikrokontroler, aby móc możliwie najprościej generować potrzebne sygnały kontrolne.

Arduino – najprostszy sposób generowania sygnału PWM

Wykorzystując platformę Arduino, możemy użyć zasadniczo z trzech różnych metod generowania przebiegu PWM o czasie trwania impulsów zgodnym ze specyfikacją klasycznego serwomechanizmu. Przypomnijmy, że najczęściej stosowany przebieg sterujący serwem składa się z impulsów o czasie od 1 ms do 2 ms, powtarzanych pięćdziesiąt razy w ciągu sekundy. Tutaj już nasuwa się pierwszy pomysł – możemy przecież stworzyć pętlę for() lub while() z użyciem funkcji delayMicroseconds(). Spójrz na kod źródłowy przykładowej funkcji, mającej na celu generowanie przebiegu PWM o zadanym czasie trwania impulsu:

void ustawSerwo(int czas_us){

  for(int i = 0; i < 50; i++){

digitalWrite(pinPWM, HIGH);

delayMicroseconds(czas_us);

digitalWrite(pinPWM, LOW);

delayMicroseconds(20000 – czas_us);

  }  

}

Pętla for() została tutaj zastosowana w celu zapewnienia czasu (równego 1 s), wystarczającego do ustawienia nawet najwolniejszego serwomechanizmu; oczywiście można zastanowić się nad odpowiednim skróceniem go w celu umożliwienia szybszego rozpoczęcia kolejnej zmiany pozycji. Jak widzisz, cała „zabawa” polega tutaj na ustawianiu pinu sterującego (określonego jako pinPWM, np. za pomocą dyrektywy #define pinPWM 5), najpierw przez określony czas na stan wysoki, a następnie – przez resztę 20-milisekundowego okresu – na stan niski. Domyślasz się jednak zapewne, że taka funkcja jest wysoce nieefektywna – absorbuje całkowicie czas procesora, nie pozwalając na wykonywanie jakichkolwiek innych operacji przez czas jednej sekundy.

PWM, timery i przerwania, czyli peryferia sprzętowe Arduino wkraczają do akcji!

Znacznie lepszą metodą jest wykorzystanie wbudowanego timera sprzętowego, który znajduje się w strukturze mikrokontrolera zastosowanego w Arduino. Timery sprzętowe pozwalają na generowanie przebiegu o regulowanym programowo współczynniku wypełnienia i częstotliwości. Wystarczy zatem ustawić odpowiednio rejestry sterujące pracą timera, a ten – już bez jakiejkolwiek pomocy procesora – będzie wytwarzał odpowiedni ciąg impulsów. Aby zmienić pozycję serwa, wystarczy tylko wpisać nową wartość do rejestru OCR wybranego timera – rejestr ten określa, przez jaką część okresu timera (determinowanego przez ustawienia preskalera) na wyjściu sprzętowym timera panuje stan wysoki. Metoda ta nie jest jednak najwygodniejsza, gdyż wymaga operacji bezpośrednio na rejestrach mikrokontrolera – może to być odstraszające zwłaszcza dla osób początkujących w temacie programowania. Dodatkowo, można w ten sposób wysterować zaledwie kilka wyjść PWM, dostępnych wyłącznie na określonych liniach mikrokontrolera. Znacznie prostszą do zastosowania techniką sterowania serw jest użycie biblioteki Servo.h, dostępnej jako gotowy moduł dla platformy Arduino.

Biblioteka Servo.h dla Arduino

Doskonałym przykładem kreatywnego wykorzystania timerów sprzętowych jest biblioteka Servo.h, opracowana przez Michaela Margolisa. Sterowanie serwomechanizmów opiera się co prawda na timerach sprzętowych, ale nie wykorzystuje do tego celu sprzętowych wyjść timera – ten blok peryferyjny jest tutaj wykorzystany do generowania przerwań cyklicznych, których cel stanowi wywoływanie w ściśle określonych momentach funkcji zmieniającej stan zadanych wyprowadzeń GPIO mikrokontrolera. Jest to zatem swego rodzaju „hybryda” obu przedstawionych wcześniej rozwiązań, wykazująca zalety obu z nich. Z jednej strony, użycie dowolnych linii portów Arduino daje ogromną elastyczność podczas stosowania biblioteki w projektach, wykorzystujących także nakładki Arduino Shield. Z kolei użycie przerwań pozwala na zwolnienie znacznej części czasu procesora (a więc – także jego mocy obliczeniowej) do innych celów – mikrokontroler może zatem realizować wiele innych funkcji, czasem tylko „wyskakując na chwilę” z głównego toku programu w celu wywołania tzw. procedury obsługi przerwania. Dodatkowo, co także bardzo ważne, zastosowanie biblioteki pozwala na sterowanie kilkunastu, a nawet kilkudziesięciu serwomechanizmów jednocześnie, jest to zatem doskonała wiadomość np. dla tych osób, które chcą zbudować własnego robota kroczącego, wykorzystując Arduino i serwomechanizmy.

Podłączenie serwomechanizmu do Arduino

Wiesz już, że do wysterowania serwa za pomocą biblioteki Servo.h możesz wykorzystać prawie dowolny pin wyjściowy Arduino. Pozostaje zatem pytanie, jak podłączyć serwo do Arduino? Odpowiedź jest prosta – ponieważ popularne serwa modelarskie bez problemu akceptują napięcia wejściowe w zakresie 0.5 V, możesz z powodzeniem połączyć wejście serwa (żółty przewód) z pinem sterującym Arduino. Pamiętaj jednak, że w zależności od modelu oraz obciążenia mechanicznego, serwomechanizmy mogą pobierać całkiem spory prąd, przekraczający często wydajność prądową linii zasilania płytki. Dlatego dobrym rozwiązaniem jest doprowadzenie do serw(a) zasilania zewnętrznego (które przy okazji może także zasilać samo Arduino). Koniecznie pamiętaj przy tym, że zarówno zasilacz, jak i Arduino muszą mieć połączone masy – tylko wtedy bowiem napięcie podawane z portu Arduino na wejście serwa będzie miało właściwe wartości. Pamiętaj także, że zasilanie serwomechanizmów może przyjmować wartości z dość szerokiego zakresu, zależnego od modelu napędu – w większości przypadków jest to od 4,8 V do 6 V, ale zdarzają się serwa o zakresie napięć zasilania przesuniętym w dół (szczególnie serwa klasy micro) lub w górę (np. mocne serwa cyfrowe o momencie obrotowym rzędu kilkudziesięciu kg*cm). W każdym przypadku koniecznie należy sprawdzić specyfikację konkretnego modelu przed jego podłączeniem.

Więcej informacji w tym temacie znajdziesz na blogu:

Jak oceniasz ten wpis blogowy?

Kliknij gwiazdkę, aby go ocenić!

Średnia ocena: 5 / 5. Liczba głosów: 6

Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.