- Požadované komponenty
- Příprava 3D tištěného robotického ramene
- Kruhový diagram
- Kroky zapojené do programování LPC2148 pro robotické rameno
- Vysvětlení kódování
- Výběr servomotoru pro otáčení pomocí tlačítek
- Práce s robotickým ramenem Pick and Place
Robotic Arms, jsou jedním z fascinujících technických výtvorů a je vždy fascinující sledovat, jak se tyto věci naklánějí a posouvají, aby bylo možné provádět složité věci stejně, jako by to udělala lidská ruka. Tato robotická ramena se běžně vyskytují v průmyslových odvětvích na montážní lince provádějících intenzivní mechanické práce, jako je svařování, vrtání, malování atd., V poslední době se také vyvíjejí pokročilá robotická ramena s vysokou přesností pro provádění složitých chirurgických operací. V tomto tutoriálu si tedy vytvořme jednoduché robotické rameno pomocí mikrokontroléru ARM7-LPC2148 pro vychystávání a umísťování objektu ručním ovládáním několika potenciometrů.
V tomto tutoriálu použijeme 3D tištěný robotický ARM, který byl sestaven podle postupu v thingiverse. ARM používá pro robotický pohyb ARM 4 servomotory. Pokud nemáte tiskárnu, můžete si také postavit paži pomocí jednoduchých lepenek, jaké jsme postavili pro náš projekt Arduino Robotic Arm. Pro inspiraci se můžete také podívat na Robotické rameno Record and Play, které jsme dříve postavili pomocí Arduina.
Pojďme tedy připravit věci pro náš projekt
Požadované komponenty
- 3D tiskárna Robotic ARM
- ARM7-LPC2148
- Servomotor SG-90 (4)
- 10k potenciometr (4)
- Tlačítko (4)
- LED (4)
- 5V (1A) DC napájecí adaptér
- Rezistory (10k (4), 2,2k (4))
- Nepájivá deska
- Připojení vodičů
Příprava 3D tištěného robotického ramene
3D tištěná robotická paže použitá v tomto výukovém programu byla vytvořena podle návrhu EEZYbotARM, který je k dispozici v Thingiverse. Kompletní postup pro vytvoření 3D tištěného robotického ramene a montážní detail s videem jsou obsaženy v odkazu na věc, který je sdílen výše.
Toto je obrázek mého 3D tištěného Robotického ramene po sestavení se 4 servomotory.
Kruhový diagram
Následující obrázek ukazuje zapojení obvodů robotického ramene založeného na ARM.
Připojení obvodu pro projekt je jednoduché. Nezapomeňte napájet servomotory samostatným 5V DC napájecím adaptérem. Pro potenciometry a tlačítka můžeme použít 3,3 V dostupné z mikrokontroléru LPC2148.
Zde používáme 4 piny ADC LPC2148 se 4 potenciometry. A také 4 piny PWM LPC2148 spojené s piny PWM servomotoru. Připojili jsme také 4 tlačítka k výběru, který motor bude fungovat. Po stisknutí tlačítka se tedy respektovaný potenciometr změní, aby se změnila poloha servomotoru.
Tlačítka na jednom konci, který je spojen s GPIO LPC2148, jsou stahována přes rezistor 10k a druhý konec je spojen s 3,3V. Rovněž jsou připojeny 4 LED diody, které indikují, který servomotor je vybrán ke změně polohy.
Okruhová připojení mezi 4 servomotorem a LPC2148:
LPC2148 | Servomotor |
P0.1 | SERVO1 (PWM-oranžová) |
P0.7 | SERVO2 (PWM-oranžová) |
P0.8 | SERVO3 (PWM-oranžová) |
P0.21 | SERVO4 (PWM-oranžová) |
Zapojení obvodu mezi 4 potenciometry a LPC2148:
LPC2148 | Středový kolík potenciometru Levý kolík - 0 V GND LPC2148 Pravý kolík - 3,3 V LPC2148 |
P0.25 | Potenciometr 1 |
P0.28 | Potenciometr 2 |
P0.29 | Potenciometr 3 |
0,30 | Potenciometr |
Zapojení obvodu 4 LED s LPC2148:
LPC2148 | LED anoda (katoda všech LED je GND) |
P1.28 | LED1 (anoda) |
P1.29 | LED2 (anoda) |
P1.30 | LED3 (anoda) |
P1.31 | LED4 (anoda) |
Zapojení obvodů 4 tlačítek s LPC2148:
LPC2148 | Tlačítko (s pull-down rezistorem 10k) |
P1.17 | Tlačítko 1 |
P1.18 | Tlačítko 2 |
P1.19 | Tlačítko 3 |
P1.20 | Tlačítko 4 |
Kroky zapojené do programování LPC2148 pro robotické rameno
Před programováním pro toto robotické rameno musíme vědět o generování PWM v LPC2148 a použití ADC v ARM7-LPC2148. K tomu si přečtěte naše předchozí projekty týkající se propojení servomotoru s LPC2148 a jak používat ADC v LPC2148.
ADC převod pomocí LPC2148
Protože potřebujeme poskytnout hodnoty ADC pro nastavení hodnoty pracovního cyklu pro generování výstupu PWM pro řízení polohy servomotoru. Musíme najít hodnoty ADC potenciometru. Protože máme čtyři potenciometry pro ovládání čtyř servomotorů, potřebujeme 4 kanály ADC LPC2148. Tady v tomto tutoriálu používáme ADC piny (P0.25, P0.28, P0.29, P0.30) kanálů ADC 4,1,2,3, které jsou v LPC2148.
Generování signálů PWM pro servomotor pomocí LPC2148
Protože potřebujeme generovat signály PWM pro řízení polohy servomotoru. Musíme nastavit pracovní cyklus PWM. K robotickému rameni máme připojeny čtyři servomotory, takže potřebujeme 4 PWM kanál LPC2148. Zde v tomto tutoriálu používáme PWM piny (P0.1, P0.7, P0.8, P0.21) PWM kanálů 3,2,4,5, které jsou v LPC2148.
Programování a blikání hexadecimálního souboru na LPC2148
Chcete-li program ARM7-LPC2148 musíme Keil uVision a blikat HEX kód je zapotřebí nástroj LPC2148 Flash magie. Zde se používá USB kabel k programování ARM7 Stick přes micro USB port. Napíšeme kód pomocí Keila a vytvoříme hexadecimální soubor a poté se soubor HEX přenese na flash disk ARM7 pomocí Flash Magic. Chcete-li se dozvědět více o instalaci keil uVision a Flash Magic a o tom, jak je používat, přejděte na odkaz Začínáme s mikrokontrolérem ARM7 LPC2148 a naprogramujte jej pomocí Keil uVision.
Vysvětlení kódování
Kompletní program pro tento projekt Robotic Arm je uveden na konci tohoto tutoriálu. Nyní se podívejme na programování podrobně.
Konfigurace PORT LPC2148 pro použití GPIO, PWM a ADC:
Pomocí registru PINSEL1 povolíte kanály ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 pro piny P0.25, P0.28, P0.29, P0.30. A také pro PWM5 pro kolík P0.21 (1 << 10).
#define AD04 (1 << 18) // Vyberte funkci AD0.4 pro P0.25 #define AD01 (1 << 24) // Vyberte funkci AD0.1 pro P0.28 #define AD02 (1 << 26) / / Vyberte funkci AD0.2 pro P0.29 #define AD03 (1 << 28) // Vyberte funkci AD0.3 pro P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Použití registru PINSEL0 k povolení PWM kanálů PWM3, PWM2, PWM4 pro piny P0.1, P0.7, P0.8 LPC2148.
PINSEL0 = 0x000A800A;
Použití registru PINSEL2 k povolení funkce pinu GPIO pro všechny piny na PORT1 používané pro připojení LED a tlačítka.
PINSEL2 = 0x00000000;
Chcete-li vytvořit LED piny jako výstup a piny tlačítka jako vstup, používá se registr IODIR1. (0 pro VSTUP a 1 pro VÝSTUP)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Zatímco čísla pinů jsou definována jako
#define SwitchPinNumber1 17 // (Propojeno s P1.17) #define SwitchPinNumber2 18 // (Propojeno s P1.18) #define SwitchPinNumber3 19 // (Propojeno s P1.19) #define SwitchPinNumber4 20 // (Propojeno s P1. 20) #define LedPinNumber1 28 // (Propojeno s P1.28) #define LedPinNumber2 29 // (Propojeno s P1.29) #define LedPinNumber3 30 // (Propojeno s P1.30) #define LedPinNumber4 31 // (Propojeno s P1.31)
Konfigurace nastavení převodu ADC
Dále se režim převodu ADC a hodiny pro ADC nastaví pomocí registru AD0CR_setup.
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Nastavení režimu ADC
Zatímco CLCKDIV, Burst Mode a PowerUP jsou definovány jako
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 pro zapnutí a 0 pro vypnutí #define PowerUP (1 << 21)
Nastavení hodin pro převod ADC (CLKDIV)
To se používá k výrobě hodin pro ADC. 4Mhz hodiny ADC (ADC_CLOCK = PCLK / CLKDIV), kde se skutečně používá „CLKDIV-1“, v našem případě PCLK = 60mhz
Burst Mode (Bit-16): Tento bit se používá pro BURST převod. Pokud je tento bit nastaven, modul ADC provede převod pro všechny kanály, které jsou vybrány (SET) v bitech SEL. Nastavením 0 v tomto bitu zakážete BURST převod.
Režim vypnutí (Bit-21): Slouží k zapnutí nebo vypnutí ADC. Nastavení (1) v tomto bitu přivede ADC z režimu vypnutí a zprovozní jej. Vymazáním tohoto bitu vypnete ADC.
Konfigurace nastavení převodu PWM
Nejprve vynulujte a deaktivujte čítač pro PWM pomocí PWMTCR registru a nastavte PWM Timer Prescale Register s hodnotou prescaleru.
PWMTCR = 0x02; PWMPR = 0x1D;
Dále nastavte maximální počet impulzů v jednom cyklu. To se provádí v Match Register 0 (PWMMR0). Protože máme 20000, jedná se o PWM vlnu 20 ms
PWMMR0 = 20 000;
Poté nastavíme hodnotu pracovního cyklu v registrech shody, používáme PWMMR4, PWMMR2, PWMMR3, PWMMR5. Zde nastavujeme počáteční hodnoty 0 ms (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Poté nastavte PWM Match Control Register tak, aby způsobil reset čítače, když dojde k registru shody.
PWMMCR = 0x00000002; // Reset při shodě MR0
Poté západka PWM Enable Register pro povolení použití hodnoty shody (PWMLER)
PWMLER = 0x7C; // Blokování povoleno pro PWM2, PWM4, PWM4 a PWM5
Resetujte počítadlo časovače pomocí bitů v PWM Timer Control Register (PWMTCR) a také povolí PWM.
PWMTCR = 0x09; // Povolit PWM a počítadlo
Dále povolte výstupy PWM a nastavte PWM v režimu řízeném jednou hranou v řídicím registru PWM (PWMPCR).
PWMPCR = 0x7C00; // Povolit PWM2, PWM4, PWM4 a PWM5, PWM řízené jednou hranou
Výběr servomotoru pro otáčení pomocí tlačítek
Máme čtyři tlačítka, která slouží k otáčení čtyř různých servomotorů. Výběrem jednoho tlačítka a změnou odpovídajícího potenciometru nastaví hodnota ADC pracovní cyklus a odpovídající servomotor změní svou polohu. Chcete-li zjistit stav tlačítkového spínače
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Takže podle toho, která hodnota přepínače je VYSOKÁ, dojde k převodu ADC a poté se po úspěšném převodu hodnoty ADC (0 až 1023) namapuje na (0 až 2045) a poté se hodnota pracovního cyklu zapíše na pin (PWMMRx) PWM připojený k servomotoru. A také se LED rozsvítí HIGH pro indikaci, který spínač je stisknutý. Následuje příklad pro první tlačítko
if (switchStatus1 == 1) { IOPIN1 = (1 <
Práce s robotickým ramenem Pick and Place
Po nahrání kódu do LPC2148 stiskněte libovolný spínač a změňte odpovídající potenciometr, abyste změnili polohu robotického ramene.
Každý spínač a potenciometr řídí každý pohyb servomotoru, který je základním pohybem vlevo nebo vpravo, pohybem nahoru nebo dolů, dopředu nebo dozadu a poté chapačem držet a uvolňovat pohyb. Kompletní kód s podrobným pracovním videem je uveden níže.