- Co to jest silnik serwo?
- Łączenie serwomotorów z mikrokontrolerami:
- Programowanie silnika serwo z mikrokontrolerem PICF877A PIC:
- Schemat obwodu:
- Symulacja i konfiguracja sprzętu:
To jest nasz 11 samouczek dotyczący nauki mikrokontrolerów PIC przy użyciu MPLAB i XC8. W tym samouczku nauczymy się jak sterować serwomotorem za pomocą mikrokontrolera PIC. Jeśli pracowałeś już z silnikami serwo, możesz pominąć pierwszą połowę tego samouczka, ale jeśli jesteś nowy w samym silniku serwo, kontynuuj czytanie.
Do tej pory omówiliśmy wiele podstawowych samouczków, takich jak miganie diody LED za pomocą PIC, timery w PIC, interfejs LCD, interfejs 7-segmentowy, ADC za pomocą PIC itp. Jeśli jesteś absolutnie początkującym, odwiedź pełną listę samouczków PIC tutaj i zacząć naukę.
W naszym poprzednim samouczku nauczyliśmy się generować sygnały PWM za pomocą mikrokontrolera PIC, sygnały były generowane na podstawie wartości odczytanej z potencjometru. Jeśli zrozumiałeś wszystkie programy, Gratulacje, zakodowałeś już również silnik serwo. TAK, serwomotory reagują na sygnały PWM (które tutaj tworzymy za pomocą timerów) dowiemy się dlaczego i jak w tym tutorialu. Będziemy symulować i budować konfigurację sprzętu dla tego projektu, a szczegółowe wideo można znaleźć na końcu tego samouczka.
Co to jest silnik serwo?
Serwomotor to typ siłownika (przeważnie okrągły), który umożliwia sterowanie kątowe. Dostępnych jest wiele typów serwomotorów, ale w tym samouczku skupimy się na hobbystycznych serwomotorach pokazanych poniżej.
Serwa hobbystyczne są popularne, ponieważ są niedrogą metodą sterowania ruchem. Zapewniają gotowe rozwiązanie dla większości potrzeb R / C i robotów hobbystów. Eliminują również potrzebę niestandardowego projektowania systemu sterowania dla każdej aplikacji.
Większość serwomotorów hobby ma kąt obrotu 0-180 °, ale jeśli jesteś zainteresowany, możesz również uzyskać serwosilnik 360 °. W tym samouczku zastosowano serwomotor 0–180 °. Istnieją dwa typy silników serwo opartych na przekładni, jeden to silnik serwo z przekładnią plastikową, a drugi to silnik serwo z przekładnią metalową. Metalową przekładnię stosuje się w miejscach, w których silnik narażony jest na większe zużycie, ale ma to swoją cenę.
Serwosilniki są oceniane w kg / cm (kilogram na centymetr). Większość serwomotorów hobbystycznych jest oceniana na 3 kg / cm lub 6 kg / cm lub 12 kg / cm. Ta wartość kg / cm mówi ci, jaką wagę twój serwomotor może unieść na określoną odległość. Na przykład: Silnik serwo 6 kg / cm powinien być w stanie unieść 6 kg, jeśli ładunek jest zawieszony 1 cm od wału silnika, im większa odległość, tym mniejsza nośność. Dowiedz się tutaj podstaw silnika serwo.
Łączenie serwomotorów z mikrokontrolerami:
Połączenie silników serwo hobby z MCU jest bardzo łatwe. Z serwomechanizmów wychodzą trzy przewody. Z czego dwa zostaną wykorzystane do zasilania (dodatni i ujemny), a jeden zostanie użyty do sygnału, który ma być wysłany z MCU. W tym samouczku będziemy używać serwomotoru MG995 Metal Gear, który jest najczęściej używany w humanoidalnych robotach samochodów RC itp. Zdjęcie MG995 pokazano poniżej:
Kolorystyka twojego serwomotoru może się różnić, dlatego sprawdź odpowiednią kartę katalogową.
Wszystkie serwomotory współpracują bezpośrednio z szynami zasilającymi + 5 V, ale musimy uważać na ilość prądu, jaką silnik zużywałby, jeśli planujesz użyć więcej niż dwóch serwomotorów, należy zaprojektować odpowiednią osłonę serwomechanizmu. W tym samouczku po prostu użyjemy jednego silnika serwo, aby pokazać, jak zaprogramować nasz mikrokontroler PIC do sterowania silnikiem. Sprawdź poniższe linki do łączenia serwomotoru z innym mikrokontrolerem:
- Interfejs silnika serwo z mikrokontrolerem 8051
- Sterowanie silnikiem serwo za pomocą Arduino
- Samouczek dotyczący silnika serwo Raspberry Pi
- Silnik serwo z mikrokontrolerem AVR
Programowanie silnika serwo z mikrokontrolerem PICF877A PIC:
Zanim będziemy mogli rozpocząć programowanie dla silnika serwo, powinniśmy wiedzieć, jaki rodzaj sygnału ma być wysłany do sterowania silnikiem serwo. Powinniśmy zaprogramować MCU, aby wysyłał sygnały PWM do przewodu sygnałowego silnika serwo. W serwomotorze znajduje się obwód sterujący, który odczytuje cykl roboczy sygnału PWM i ustawia wał serwomotoru w odpowiednim miejscu, jak pokazano na poniższym rysunku
Każdy silnik serwo działa na różnych częstotliwościach PWM (najczęściej stosowana częstotliwość to 50 Hz, która jest używana w tym samouczku), więc pobierz arkusz danych silnika, aby sprawdzić, w jakim okresie PWM działa silnik serwo.
Szczegóły dotyczące sygnału PWM dla naszego Tower pro MG995 przedstawiono poniżej.
Z tego możemy wywnioskować, że nasz silnik pracuje z okresem PWM 20 ms (50 Hz). Dlatego częstotliwość naszego sygnału PWM powinna być ustawiona na 50 Hz. Częstotliwość PWM, którą ustawiliśmy w naszym poprzednim samouczku, wynosiła 5 KHz, użycie tego samego nie pomoże nam tutaj.
Ale mamy tutaj problem. PIC16F877A nie może generować sygnały PWM niskich częstotliwości za pomocą modułu CCP. Zgodnie z arkuszem danych najniższa możliwa wartość, jaką można ustawić dla częstotliwości PWM, to 1,2 kHz. Musimy więc porzucić pomysł wykorzystania modułu CCP i znaleźć sposób na tworzenie własnych sygnałów PWM.
Dlatego w tym samouczku użyjemy modułu czasowego do generowania sygnałów PWM o częstotliwości 50 Hz i zmieniamy ich cykl pracy, aby sterować aniołem serwomotoru. Jeśli nie znasz timerów lub ADC z PIC, wróć do tego samouczka, ponieważ pominę większość rzeczy, ponieważ już je tam omówiliśmy.
Inicjalizujemy nasz moduł Timer z preskalerem 32 i przepełniamy go co 1us. Zgodnie z naszą kartą danych PWM powinien mieć okres tylko 20 ms. Więc nasz czas razem i czas wolny powinien wynosić dokładnie 20 ms.
OPTION_REG = 0b00000100; // Timer0 z zewnętrzną częstotliwością i 32 jako preskalerem TMR0 = 251; // Załaduj wartość czasu dla 1us delayValue może zawierać się w przedziale 0-256 tylko TMR0IE = 1; // Włącz bit przerwania timera w rejestrze PIE1 GIE = 1; // Włącz globalne przerwanie PEIE = 1; // Włącz przerwanie peryferyjne
Więc wewnątrz naszej funkcji rutynowej przerwań włączamy pin RB0 na określony czas i wyłączamy go na czas rozwiercania (20ms - on_time). Wartość czasu załączenia można określić za pomocą Potencjometru i modułu ADC. Przerwanie pokazano poniżej.
oid przerwania timer_isr () {if (TMR0IF == 1) // Timer się przepełnił {TMR0 = 252; / * Załaduj wartość timera, (Uwaga: Timervalue ma wartość 101 zamiast 100, ponieważ TImer0 potrzebuje dwóch cykli instrukcji, aby rozpocząć zwiększanie TMR0 * / TMR0IF = 0; // Wyczyść licznik przerwania timera ++;} if (count> = on_time) { RB0 = 1; // uzupełnij wartość migania diod LED} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Wewnątrz naszej while pętli po prostu odczytać wartość potencjometru za pomocą modułu ADC i aktualizuje na czasie PWM z wykorzystaniem wartości odczytu.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
W ten sposób stworzyliśmy sygnał PWM, którego okres wynosi 20 ms i ma zmienny cykl pracy, który można ustawić za pomocą potencjometru. Pełny kod został podany poniżej w sekcji kodu.
Teraz sprawdźmy dane wyjściowe za pomocą symulacji proteusa i przejdźmy do naszego sprzętu.
Schemat obwodu:
Jeśli już natknąłeś się na samouczek PWM, schematy tego samouczka będą takie same, z wyjątkiem tego, że dodamy serwomotor zamiast światła LED.
Symulacja i konfiguracja sprzętu:
Za pomocą symulacji Proteus możemy zweryfikować sygnał PWM za pomocą oscyloskopu, a także sprawdzić kąt obrotu silnika serwo. Kilka migawek symulacji pokazano poniżej, na których można zauważyć kąt obrotu serwomotoru i cykl pracy PWM, które zmieniają się na podstawie potencjometru. Następnie sprawdź pełne wideo, rotację przy różnych PWM, na końcu.
Jak widać, anioł obrotu serwomechanizmu zmienia się na podstawie wartości potencjometru. Przejdźmy teraz do naszej konfiguracji sprzętu.
W konfiguracji sprzętowej właśnie usunęliśmy płytkę LED i dodaliśmy silnik Servo, jak pokazano na powyższym schemacie.
Sprzęt pokazano na poniższym obrazku:
Poniższy film pokazuje, jak silnik serwo reaguje na różne położenia potencjometru.
To jest to!! Mamy sprzężony serwomotor z mikrokontrolera PIC, teraz można użyć własnej kreatywności i dowiedzieć się aplikacje dla tego produktu. Istnieje wiele projektów wykorzystujących serwomotor.