- Wymagane składniki
- Przygotowanie do druku 3D Robotic ARM
- Schemat obwodu
- Kroki związane z programowaniem LPC2148 dla ramienia robota
- Objaśnienie kodowania
- Wybór serwomotoru do obracania za pomocą przycisków
- Działanie ramienia robota typu Pick and Place
Robotic Arms to jedna z fascynujących kreacji inżynieryjnych i zawsze fascynujące jest obserwowanie, jak te rzeczy przechylają się i przesuwają, aby wykonywać skomplikowane czynności, tak jak robiłaby to ludzka ręka. Te ramiona robotów można powszechnie spotkać na liniach montażowych wykonujących intensywne prace mechaniczne, takie jak spawanie, wiercenie, malowanie itp. Ostatnio opracowywane są również zaawansowane ramiona robotów o wysokiej precyzji, które umożliwiają wykonywanie złożonych operacji chirurgicznych. Dlatego w tym samouczku zbudujmy proste ramię robota przy użyciu mikrokontrolera ARM7-LPC2148 do podnoszenia i umieszczania obiektu poprzez ręczne sterowanie kilkoma potencjometrami.
W tym samouczku użyjemy robota ARM wydrukowanego w 3D, który został zbudowany zgodnie z procedurą we wszechświecie. ARM wykorzystuje 4 serwomotory do automatycznego ruchu ramienia. Jeśli nie masz drukarki, możesz również zbudować ramię z prostych kartonów, takich jak stworzyliśmy dla naszego projektu ramienia robota Arduino. Aby uzyskać inspirację, możesz również zapoznać się z ramieniem robota Record and Play, które zbudowaliśmy wcześniej przy użyciu Arduino.
Więc teraz przygotujmy rzeczy do naszego projektu
Wymagane składniki
- Drukarka 3D Robotic ARM
- ARM7-LPC2148
- Silnik serwo SG-90 (4)
- Potencjometr 10k (4)
- Przycisk (4)
- Dioda LED (4)
- Zasilacz DC 5 V (1 A)
- Rezystory (10k (4), 2,2k (4))
- Płytka prototypowa
- Podłączanie przewodów
Przygotowanie do druku 3D Robotic ARM
Ramię robota wydrukowane w 3D użyte w tym samouczku zostało wykonane zgodnie z projektem podanym przez EEZYbotARM, który jest dostępny w Thingiverse. Pełna procedura wykonania ramienia robota wydrukowanego w 3D oraz szczegóły montażu wraz z wideo są dostępne w linku do rzeczy, które zostało udostępnione powyżej.
To jest zdjęcie mojego ramienia robota wydrukowanego w 3D po złożeniu z 4 serwomotorami.
Schemat obwodu
Poniższy rysunek przedstawia połączenia obwodów ramienia robota opartego na ARM.
Połączenia obwodów w projekcie są proste. Upewnij się, że serwomotory są zasilane za pomocą oddzielnego zasilacza 5 V DC. Do potencjometrów i przycisków możemy wykorzystać 3,3 V dostępne z mikrokontrolera LPC2148.
Tutaj używamy 4 pinów ADC LPC2148 z 4 potencjometrami. A także 4 piny PWM LPC2148 połączone z pinami PWM serwomotoru. Podłączyliśmy również 4 przyciski, aby wybrać silnik do obsługi. Tak więc po naciśnięciu przycisku odpowiedni potencjometr jest zmieniany, aby zmienić położenie serwomotoru.
Przyciski na jednym końcu, który jest połączony z GPIO LPC2148 są ściągane przez rezystor 10k, a drugi koniec jest podłączony do 3,3V. Podłączone są również 4 diody LED wskazujące, który serwomotor został wybrany do zmiany położenia.
Połączenia obwodu między 4 serwomotorami i LPC2148:
LPC2148 | Siłownik |
P0.1 | SERVO1 (PWM-pomarańczowy) |
P0.7 | SERVO2 (PWM-pomarańczowy) |
P0.8 | SERVO3 (PWM-pomarańczowy) |
P0.21 | SERVO4 (PWM-pomarańczowy) |
Połączenia obwodu między 4 potencjometrami i LPC2148:
LPC2148 | Potencjometr środkowy styk Lewy styk - 0 V GND LPC2148 Prawy styk - 3,3 V LPC2148 |
P0.25 | Potencjometr 1 |
P0.28 | Potencjometr 2 |
P0.29 | Potencjometr 3 |
P0.30 | Potencjometr 4 |
Połączenia obwodu 4 diod LED z LPC2148:
LPC2148 | Anoda LED (katoda wszystkich diod LED to GND) |
P1.28 | LED1 (anoda) |
P1.29 | LED2 (anoda) |
P1.30 | LED3 (anoda) |
P1.31 | LED4 (anoda) |
Połączenia obwodów 4 przycisków z LPC2148:
LPC2148 | Przycisk (z rezystorem pull-down 10k) |
P1.17 | Przycisk 1 |
P1.18 | Przycisk 2 |
P1.19 | Przycisk 3 |
P1.20 | Przycisk 4 |
Kroki związane z programowaniem LPC2148 dla ramienia robota
Przed programowaniem tego ramienia robota musimy wiedzieć o generowaniu PWM w LPC2148 i używaniu ADC w ARM7-LPC2148. W tym celu zapoznaj się z naszymi poprzednimi projektami dotyczącymi łączenia silnika serwo z LPC2148 i sposobu korzystania z ADC w LPC2148.
Konwersja ADC za pomocą LPC2148
Ponieważ musimy podać wartości ADC do ustawienia wartości cyklu pracy do generowania wyjścia PWM do sterowania położeniem silnika serwo. Musimy znaleźć wartości ADC potencjometru. Ponieważ mamy cztery potencjometry do sterowania czterema serwomotorami, potrzebujemy 4 kanałów ADC LPC2148. Tutaj, w tym samouczku, używamy pinów ADC (P0.25, P0.28, P0.29, P0.30) kanałów ADC odpowiednio 4,1,2,3 obecnych w LPC2148.
Generowanie sygnałów PWM dla serwomotoru za pomocą LPC2148
Ponieważ musimy generować sygnały PWM do sterowania położeniem serwomotoru. Musimy ustawić cykl pracy PWM. Mamy cztery serwomotory podłączone do ramienia robota, więc potrzebujemy 4 kanałów PWM LPC2148. W tym samouczku używamy pinów PWM (P0.1, P0.7, P0.8, P0.21) kanałów PWM o wartości 3,2,4,5, odpowiednio, obecnych w LPC2148.
Programowanie i flashowanie pliku szesnastkowego do LPC2148
Aby zaprogramować ARM7-LPC2148 potrzebujemy keil uVision i flashowania kodu HEX do LPC2148 potrzebne jest narzędzie Flash Magic. Kabel USB służy tutaj do programowania pamięci ARM7 Stick przez port micro USB. Piszemy kod za pomocą Keil i tworzymy plik hex, a następnie plik HEX jest sflashowany do pamięci ARM7 przy użyciu Flash Magic. Aby dowiedzieć się więcej o instalacji keil uVision i Flash Magic oraz o tym, jak z nich korzystać, kliknij łącze Pierwsze kroki z mikrokontrolerem ARM7 LPC2148 i programuj go za pomocą Keil uVision.
Objaśnienie kodowania
Kompletny program tego projektu ramienia robota podano na końcu samouczka. Przyjrzyjmy się teraz szczegółowo programowaniu.
Konfiguracja PORT LPC2148 do korzystania z GPIO, PWM i ADC:
Wykorzystanie rejestru PINSEL1 do włączenia kanałów ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 dla pinów P0.25, P0.28, P0.29, P0.30. A także dla PWM5 dla pinu P0.21 (1 << 10).
#define AD04 (1 << 18) // Wybierz funkcję AD0.4 dla P0.25 # zdefiniuj AD01 (1 << 24) // Wybierz funkcję AD0.1 dla P0.28 # zdefiniuj AD02 (1 << 26) / / Wybierz funkcję AD0.2 dla P0.29 #define AD03 (1 << 28) // Wybierz funkcję AD0.3 dla P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Wykorzystanie rejestru PINSEL0 do włączenia kanałów PWM PWM3, PWM2, PWM4 dla pinów P0.1, P0.7, P0.8 LPC2148.
PINSEL0 = 0x000A800A;
Wykorzystanie rejestru PINSEL2 do włączenia funkcji pinów GPIO dla wszystkich pinów w PORT1 używanych do podłączenia diody LED i przycisku.
PINSEL2 = 0x00000000;
Aby wyprowadzić piny LED jako Wyjście, a piny przycisku jako Wejście, wykorzystywany jest rejestr IODIR1. (0 dla WEJŚCIA i 1 dla WYJŚCIA)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Chociaż numery pinów są zdefiniowane jako
#define SwitchPinNumber1 17 // (Connected with P1.17) #define SwitchPinNumber2 18 // (Connected with P1.18) #define SwitchPinNumber3 19 // (Connected with P1.19 ) #define SwitchPinNumber4 20 // (Connected with P1. 20) #define LedPinNumber1 28 // (Connected with P1.28) #define LedPinNumber2 29 // (Connected with P1.29) #define LedPinNumber3 30 // (Connected with P1.30) #define LedPinNumber4 31 // (Connected with P1.31)
Konfigurowanie ustawień konwersji ADC
Następnie tryb konwersji ADC i zegar dla ADC jest ustawiany za pomocą rejestru AD0CR_setup.
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Konfigurowanie trybu ADC
Podczas gdy CLCKDIV, tryb Burst i PowerUP są zdefiniowane jako
# zdefiniować CLKDIV (15-1) # zdefiniować BURST_MODE_OFF (0 << 16) // 1 dla włączenia i 0 dla wyłączenia # zdefiniować PowerUP (1 << 21)
Ustawianie zegara dla konwersji ADC (CLKDIV)
Służy do produkcji zegara dla ADC. Zegar ADC 4Mhz (ADC_CLOCK = PCLK / CLKDIV) gdzie "CLKDIV-1" jest faktycznie używany, w naszym przypadku PCLK = 60mhz
Tryb Burst (Bit-16): Ten bit jest używany do konwersji BURST. Jeśli ten bit jest ustawiony, moduł ADC dokona konwersji dla wszystkich kanałów, które są wybrane (SET) w bitach SEL. Ustawienie 0 w tym bicie wyłączy konwersję BURST.
Tryb wyłączania (Bit-21): Służy do włączania i wyłączania ADC. Ustawienie (1) w tym bicie powoduje wyjście ADC z trybu wyłączenia i sprawia, że działa. Wyczyszczenie tego bitu spowoduje wyłączenie ADC.
Konfigurowanie ustawień konwersji PWM
Najpierw zresetuj i wyłącz licznik PWM za pomocą rejestru PWMTCR i ustaw rejestr preskalowania timera PWM z wartością preskalera.
PWMTCR = 0x02; PWMPR = 0x1D;
Następnie ustaw maksymalną liczbę zliczeń w jednym cyklu. Odbywa się to w rejestrze dopasowania 0 (PWMMR0). Ponieważ mamy 20000, ponieważ jest to fala PWM o długości 20 ms
PWMMR0 = 20000;
Następnie ustaw wartość cyklu pracy w rejestrach dopasowania, używamy PWMMR4, PWMMR2, PWMMR3, PWMMR5. Tutaj ustawiamy początkowe wartości 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Następnie ustaw rejestr kontroli dopasowania PWM, aby powodował reset licznika, gdy wystąpi rejestr dopasowania.
PWMMCR = 0x00000002; // Resetuj po dopasowaniu MR0
Następnie rejestr włączania zatrzasku PWM, aby umożliwić użycie wartości dopasowania (PWMLER)
PWMLER = 0x7C; // Włącz zatrzask dla PWM2, PWM4, PWM4 i PWM5
Zresetuj licznik timera za pomocą bitu w rejestrze sterującym timerem PWM (PWMTCR), a także włącza PWM.
PWMTCR = 0x09; // Włącz PWM i licznik
Następnie włącz wyjścia PWM i ustaw PWM w trybie sterowania pojedynczym zboczem w rejestrze sterowania PWM (PWMPCR).
PWMPCR = 0x7C00; // Włącz PWM2, PWM4, PWM4 i PWM5, PWM sterowane pojedynczym zboczem
Wybór serwomotoru do obracania za pomocą przycisków
Mamy cztery przyciski, które służą do obracania czterech różnych serwomotorów. Wybierając jeden przycisk i zmieniając odpowiedni potencjometr, wartość ADC ustawia cykl pracy, a odpowiedni serwomotor zmienia swoje położenie. Aby uzyskać stan przełącznika przyciskowego
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Tak więc, w zależności od tego, która wartość przełącznika jest WYSOKA, następuje konwersja ADC, a następnie po pomyślnej konwersji wartości ADC (od 0 do 1023) jest ona mapowana w kategoriach (od 0 do 2045), a następnie wartość cyklu pracy jest zapisywana w pin PWM (PWMMRx) podłączony do serwomotoru. Ponadto dioda LED jest WYSOKA, wskazując, który przełącznik jest wciśnięty. Poniżej znajduje się przykład pierwszego przycisku
if (switchStatus1 == 1) { IOPIN1 = (1 <
Działanie ramienia robota typu Pick and Place
Po przesłaniu kodu do LPC2148, naciśnij dowolny przełącznik i zmieniaj odpowiedni potencjometr, aby zmienić pozycję ramienia robota.
Każdy przełącznik i potencjometr sterują każdym ruchem serwomotoru, czyli ruchem podstawy w lewo lub w prawo, ruchem w górę lub w dół, do przodu lub do tyłu, a następnie chwytakiem w celu zatrzymania i zwolnienia ruchu. Pełny kod ze szczegółowym działającym filmem znajduje się poniżej.