- Súčasti sú povinné
- Príprava 3D tlačeného robotického ramena
- Schéma zapojenia
- Kroky zapojené do programovania LPC2148 pre robotické rameno
- Vysvetlenie kódovania
- Výber servomotora, ktorý sa má otáčať pomocou tlačidiel
- Pracovanie robotického ramena typu Pick and Place
Robotic Arms, sú jedným z fascinujúcich inžinierskych výtvorov a je vždy fascinujúce sledovať, ako sa tieto veci nakláňajú a otáčajú, aby sa dali dokončiť zložité veci, ako by to urobila ľudská ruka. Tieto robotické ramená sa bežne vyskytujú v priemyselných odvetviach na montážnej linke vykonávajúcich intenzívne mechanické práce, ako sú zváranie, vŕtanie, lakovanie atď., V poslednej dobe sa tiež vyvíjajú pokročilé robotické ramená s vysokou presnosťou na vykonávanie zložitých chirurgických operácií. V tomto návode teda poďme zostaviť jednoduché robotické rameno pomocou mikrokontroléra ARM7-LPC2148 na vyberanie a umiestňovanie objektov ručným ovládaním niekoľkých potenciometrov.
V tomto tutoriále budeme používať 3D tlačený robotický ARM, ktorý bol zostavený podľa postupu v danej veci. ARM používa 4 robotický motor na robotický pohyb ARM. Ak nemáte tlačiareň, môžete si vytvoriť ruku pomocou jednoduchých kartónov, aké sme vytvorili pre náš projekt robotického ramena Arduino. Pre inšpiráciu si môžete tiež prečítať Robotické rameno Record and Play, ktoré sme vytvorili skôr pomocou Arduina.
Poďme si teda pripraviť veci pre náš projekt
Súčasti sú povinné
- 3D tlačiareň Robotické rameno
- ARM7-LPC2148
- Servomotor SG-90 (4)
- 10k potenciometer (4)
- Tlačidlo (4)
- LED (4)
- 5 V (1 A) napájací adaptér
- Rezistory (10k (4), 2,2k (4))
- Nepál
- Pripojenie drôtov
Príprava 3D tlačeného robotického ramena
3D tlačené robotické rameno použité v tomto výučbe bolo vyrobené podľa vzoru EEZYbotARM, ktorý je k dispozícii v Thingiverse. Kompletný postup výroby 3D tlačeného robotického ramena a detail montáže s videom sú obsiahnuté v prepojení na vec, ktoré je zdieľané vyššie.
Toto je obrázok môjho 3D tlačeného Robotického ramena po zostavení so 4 servomotormi.
Schéma zapojenia
Nasledujúci obrázok zobrazuje zapojenie obvodov robotického ramena založeného na ARM.
Pripojenie obvodov pre projekt je jednoduché. Nezabudnite napájať servomotory samostatným sieťovým adaptérom 5V DC. Pre potenciometre a tlačidlá môžeme použiť 3,3 V dostupné z mikrokontroléra LPC2148.
Tu používame 4 piny ADC LPC2148 so 4 potenciometrami. A tiež 4 piny PWM LPC2148 spojené s piny PWM servomotora. Pripojili sme tiež 4 tlačidlá na výber, ktorý motor bude pracovať. Po stlačení tlačidla sa teda príslušný potenciometer zmení, aby sa zmenila poloha servomotora.
Tlačidlá na jednom konci, ktorý je spojený s GPIO LPC2148, sú sťahovacie cez rezistor 10k a druhý koniec je pripojený k 3,3V. Tiež sú pripojené 4 LED diódy, ktoré indikujú, ktorý servomotor je vybraný na zmenu polohy.
Pripojenie obvodu medzi 4 servomotorom a LPC2148:
LPC2148 | Servo motor |
P0.1 | SERVO1 (PWM-oranžová) |
P0.7 | SERVO2 (PWM-oranžová) |
P0.8 | SERVO3 (PWM-oranžová) |
P0.21 | SERVO4 (PWM-oranžová) |
Zapojenie obvodu medzi 4 potenciometrom a LPC2148:
LPC2148 | Stredný kolík potenciometra Ľavý kolík - 0 V GND LPC2148 Pravý kolík - 3,3 V LPC2148 |
P0,25 | Potenciometer |
P0,28 | Potenciometer2 |
P0,29 | Potenciometer3 |
0,30 | Potenciometer4 |
Pripojenie obvodu 4 LED s LPC2148:
LPC2148 | LED anóda (katóda všetkých LED je GND) |
P1,28 | LED1 (anóda) |
P1,29 | LED2 (anóda) |
P1.30 | LED3 (anóda) |
P1.31 | LED4 (anóda) |
Zapojenie obvodov 4 tlačidiel s LPC2148:
LPC2148 | Tlačidlo (s pull-down rezistorom 10k) |
P1.17 | Tlačidlo 1 |
P1.18 | Tlačidlo 2 |
P1.19 | Tlačidlo 3 |
P1.20 | Tlačidlo4 |
Kroky zapojené do programovania LPC2148 pre robotické rameno
Pred programovaním pre toto robotické rameno musíme vedieť o generovaní PWM v LPC2148 a používaní ADC v ARM7-LPC2148. Za týmto účelom si pozrite naše predchádzajúce projekty týkajúce sa rozhrania servomotorov s LPC2148 a ako používať ADC v LPC2148.
ADC prevod pomocou LPC2148
Pretože musíme poskytnúť ADC hodnoty pre nastavenie hodnoty pracovného cyklu pre generovanie PWM výstupu pre riadenie polohy servomotora. Musíme nájsť ADC hodnoty potenciometra. Pretože máme štyri potenciometre na riadenie štyroch servomotorov, potrebujeme 4 kanály ADC LPC2148. Tu v tomto tutoriále používame ADC piny (P0.25, P0.28, P0.29, P0.30) kanálov ADC s 4,1,2,3, ktoré sú prítomné v LPC2148.
Generovanie signálov PWM pre servomotor pomocou LPC2148
Pretože potrebujeme generovať PWM signály na riadenie polohy servomotora. Musíme nastaviť pracovný cyklus PWM. K robotickému ramenu máme pripojené štyri servomotory, takže potrebujeme 4 PWM kanál LPC2148. Tu v tomto tutoriále používame PWM piny (P0.1, P0.7, P0.8, P0.21) PWM kanálov 3,2,4,5, ktoré sú prítomné v LPC2148.
Programovanie a blikanie hexadecimálneho súboru na LPC2148
Na programovanie ARM7-LPC2148 potrebujeme keil uVision a na flashovanie HEX kódu na LPC2148 je potrebný nástroj Flash Magic. Tu sa používa USB kábel na programovanie ARM7 Stick cez micro USB port. Napíšeme kód pomocou Keila a vytvoríme hexadecimálny súbor. Potom sa HEX súbor nahrá na flash disk ARM7 pomocou Flash Magic. Ak sa chcete dozvedieť viac o inštalácii keil uVision a Flash Magic a o tom, ako ich používať, kliknite na odkaz Začíname s mikrokontrolérom ARM7 LPC2148 a naprogramujte ho pomocou Keil uVision.
Vysvetlenie kódovania
Kompletný program pre tento projekt Robotic Arm je uvedený na konci tutoriálu. Teraz sa pozrime na programovanie podrobne.
Konfigurácia PORT LPC2148 pre použitie GPIO, PWM a ADC:
Použitie registra PINSEL1 na povolenie kanálov ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 pre kolíky P0.25, P0.28, P0.29, P0.30. A tiež pre PWM5 pre pin P0.21 (1 << 10).
#define AD04 (1 << 18) // Vyberte funkciu AD0.4 pre P0.25 #define AD01 (1 << 24) // Vyberte funkciu AD0.1 pre P0.28 #define AD02 (1 << 26) / / Vyberte funkciu AD0.2 pre P0.29 #define AD03 (1 << 28) // Vyberte funkciu AD0.3 pre P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Použitie registra PINSEL0 na povolenie PWM kanálov PWM3, PWM2, PWM4 pre piny P0.1, P0.7, P0.8 LPC2148.
PINSEL0 = 0x000A800A;
Použitie registra PINSEL2 na povolenie funkcie GPIO pin pre všetky piny na PORT1 používané na pripojenie LED a tlačidla.
PINSEL2 = 0x00000000;
Na výrobu pinov LED ako výstupu a pinov tlačidiel ako vstupu sa používa register IODIR1. (0 pre VSTUP a 1 pre VÝSTUP)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Zatiaľ čo čísla pinov sú definované ako
#define SwitchPinNumber1 17 // (spojené s P1.17) #define SwitchPinNumber2 18 // (spojené s P1.18) #define SwitchPinNumber3 19 // (spojené s P1.19) #define SwitchPinNumber4 20 // (spojené s P1. 20) #define LedPinNumber1 28 // (spojené s P1.28) #define LedPinNumber2 29 // (spojené s P1.29) #define LedPinNumber3 30 // (spojené s P1.30) #define LedPinNumber4 31 // (spojené s P1.31)
Konfigurácia nastavenia prevodu ADC
Ďalej sa režim konverzie ADC a hodiny pre ADC nastavia pomocou registra AD0CR_setup.
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Nastavenie režimu ADC
Zatiaľ čo CLCKDIV, Burst Mode a PowerUP sú definované ako
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 pre zapnutie a 0 pre vypnutie #define PowerUP (1 << 21)
Nastavenie hodín pre prevod ADC (CLKDIV)
Používa sa na výrobu hodín pre ADC. 4MHz hodiny ADC (ADC_CLOCK = PCLK / CLKDIV), kde sa skutočne používa „CLKDIV-1“, v našom prípade PCLK = 60mhz
Burst Mode (Bit-16): Tento bit sa používa na konverziu BURST. Ak je tento bit nastavený, modul ADC vykoná konverziu pre všetky kanály, ktoré sú vybrané (SET) v bitoch SEL. Nastavením 0 v tomto bite zakážete BURST prevod.
Režim vypnutia (bit-21): Používa sa na zapnutie alebo vypnutie ADC. Nastavenie (1) v tomto bite vyvedie ADC z režimu vypnutia a robí ho funkčným. Vymazanie tohto bitu vypne ADC.
Konfigurácia nastavenia prevodu PWM
Najskôr vynulujte a deaktivujte počítadlo pre PWM pomocou registra PWMTCR a nastavte register predvoľby časovača PWM s hodnotou predradiča.
PWMTCR = 0x02; PWMPR = 0x1D;
Ďalej nastavte maximálny počet počítaní v jednom cykle. To sa deje v registri zápasov 0 (PWMMR0). Pretože máme 20000, jedná sa o PWM vlnu 20 ms
PWMMR0 = 20 000;
Po tomto nastavení hodnoty pre pracovný cyklus v registroch zhody používame PWMMR4, PWMMR2, PWMMR3, PWMMR5. Tu nastavujeme počiatočné hodnoty 0 ms (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Potom nastavte PWM Match Control Register tak, aby spôsobil vynulovanie počítadla, keď dôjde k registru Match.
PWMMCR = 0x00000002; // Reset pri zhode MR0
Potom západka PWM Povoliť registráciu, aby sa umožnilo použitie hodnoty zhody (PWMLER)
PWMLER = 0x7C; // Povolenie blokovania pre PWM2, PWM4, PWM4 a PWM5
Resetujte počítadlo časovača bitom v PWM časovom riadiacom registri (PWMTCR) a tiež povolíte PWM.
PWMTCR = 0x09; // Povoliť PWM a počítadlo
Ďalej povoľte výstupy PWM a nastavte PWM v režime s jednou hranou v riadiacom registri PWM (PWMPCR).
PWMPCR = 0x7C00; // Povoliť PWM2, PWM4, PWM4 a PWM5, PWM ovládané jednou hranou
Výber servomotora, ktorý sa má otáčať pomocou tlačidiel
Máme štyri tlačidlá, ktoré sa používajú na otáčanie štyroch rôznych servomotorov. Výberom jedného tlačidla a zmenou príslušného potenciometra nastaví hodnota ADC pracovný cyklus a zodpovedajúci servomotor zmení svoju polohu. Ak chcete zistiť stav prepínača tlačidla
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Takže v závislosti na tom, ktorá hodnota prepínača je VYSOKÁ, dôjde k prevodu ADC a potom po úspešnom prevode hodnoty ADC (0 až 1023) sa namapuje v zmysle (0 až 2045) a potom sa hodnota pracovného cyklu zapíše pin (PWMMRx) PWM pripojený k servomotoru. A tiež je LED rozsvietená VYSOKÁ, aby indikovala, ktorý spínač je stlačený. Nasleduje príklad prvého tlačidla
if (switchStatus1 == 1) { IOPIN1 = (1 <
Pracovanie robotického ramena typu Pick and Place
Po nahraní kódu do LPC2148 stlačte ľubovoľný spínač a upravte zodpovedajúci potenciometer, aby ste zmenili polohu robotického ramena.
Každý prepínač a potenciometer riadia každý pohyb servomotora, ktorý je základným pohybom vľavo alebo vpravo, pohybom nahor alebo nadol, dopredu alebo dozadu, a potom uchopovačom pohyb drží a uvoľňuje. Kompletný kód s podrobným pracovným videom je uvedený nižšie.