- Komponenter, der kræves
- Forberedelse af den 3D-trykte robotarm
- Kredsløbsdiagram
- Trin involveret i programmering af LPC2148 til robotarm
- Kodning Forklaring
- Valg af servomotor, der skal drejes ved hjælp af trykknapper
- Arbejde med pick and place robotarm
Robotic Arms er en af de fascinerende tekniske kreationer, og det er altid fascinerende at se disse ting vippe og panorere for at få komplekse ting gjort ligesom en menneskelig arm ville. Disse robotarme kan almindeligvis findes i industrier ved samlebåndet, der udfører intenst mekanisk arbejde som svejsning, boring, maling osv. For nylig udvikles avancerede robotarme med høj præcision også til at udføre komplekse kirurgiske operationer. Så lad os i denne vejledning bygge en simpel robotarm ved hjælp af ARM7-LPC2148 mikrokontroller til plukning og placering af et objekt ved manuel styring af få potentiometre.
I denne vejledning bruger vi en 3D-trykt robot-ARM, der blev bygget ved at følge proceduren i thingiverse. ARM bruger 4 servomotorer til robot ARM-bevægelse. Hvis du ikke har en printer, kan du også bygge din arm med enkle pap, som vi byggede til vores Arduino Robotic Arm Project. For inspiration kan du også henvise til Record and Play Robotic Arm, som vi byggede tidligere ved hjælp af Arduino.
Så lad os nu gøre tingene klar til vores projekt
Komponenter, der kræves
- 3D-printer, robotarm
- ARM7-LPC2148
- SG-90 Servomotor (4)
- 10k potentiometer (4)
- Trykknap (4)
- LED (4)
- 5V (1A) jævnstrømsadapter
- Modstande (10k (4), 2.2k (4))
- Brødbræt
- Tilslutning af ledninger
Forberedelse af den 3D-trykte robotarm
Den 3D-trykte robotarm, der blev brugt i denne vejledning, blev lavet ved at følge designet givet af EEZYbotARM, som er tilgængeligt i Thingiverse. Den komplette procedure til fremstilling af den 3D-trykte robotarm og samlingsdetaljerne med video er til stede i thingiverse-linket, som er delet ovenfor.
Dette er billedet af min 3D-trykte robotarm efter samling med 4 servomotorer.
Kredsløbsdiagram
Det følgende billede viser kredsløbsforbindelserne til ARM-baseret robotarm.
Kredsløbstilslutningerne til projektet er enkle. Sørg for at forsyne servomotorer med en separat 5V jævnstrømsadapter. Til potentiometre og trykknapper kan vi bruge 3,3 V, der er tilgængelig fra LPC2148 mikrokontroller.
Her bruger vi de 4 ADC-ben på LPC2148 med 4 potentiometre. Og også 4 PWM-ben på LPC2148 forbundet med servomotorens PWM-ben. Vi har også tilsluttet 4 trykknapper for at vælge, hvilken motor der skal betjenes. Så efter at have trykket på knappen, varieres det respekterede potentiometer for at ændre servomotorens position.
Trykknapperne i den ene ende, der er forbundet med GPIO på LPC2148, trækkes ned via modstand på 10k, og en anden ende er forbundet med 3.3V. Der er også tilsluttet 4 lysdioder for at angive, hvilken servomotor der er valgt til at ændre position.
Kredsløbsforbindelser mellem 4 servomotorer og LPC2148:
LPC2148 | Servomotor |
P0.1 | SERVO1 (PWM-Orange) |
P0.7 | SERVO2 (PWM-Orange) |
P0.8 | SERVO3 (PWM-Orange) |
P0.21 | SERVO4 (PWM-Orange) |
Kredsløbsforbindelser mellem 4 potentiometer og LPC2148:
LPC2148 | Potentiometer midterstift venstre venstre stift - 0V GND af LPC2148 højre stift - 3,3 V af LPC2148 |
P0.25 | Potentiometer1 |
P0.28 | Potentiometer 2 |
P0.29 | Potentiometer 3 |
P0.30 | Potentiometer 4 |
Kredsløbstilslutninger på 4 LED'er med LPC2148:
LPC2148 | LED-anode (katoden for alle LED er GND) |
P1.28 | LED1 (anode) |
P1.29 | LED2 (anode) |
P1.30 | LED3 (anode) |
P1.31 | LED4 (anode) |
Kredsløbstilslutninger på 4 trykknapper med LPC2148:
LPC2148 | Trykknap (med pull-down-modstand 10k) |
P1.17 | Trykknap1 |
P1.18 | Trykknap2 |
P1.19 | Trykknap3 |
P1.20 | Trykknap 4 |
Trin involveret i programmering af LPC2148 til robotarm
Før vi programmerer til denne robotarm, skal vi vide om generering af PWM i LPC2148 og brug af ADC i ARM7-LPC2148. For dette henvises til vores tidligere projekter om interfacing servomotor med LPC2148 og hvordan man bruger ADC i LPC2148.
ADC-konvertering ved hjælp af LPC2148
Da vi har brug for at give ADC-værdier til indstilling af driftscyklusværdi til generering af PWM-udgang til styring af servomotorposition. Vi er nødt til at finde potentiometerets ADC-værdier. Da vi har fire potentiometre til styring af fire servomotorer, har vi brug for 4 ADC-kanaler af LPC2148. Her i denne vejledning bruger vi ADC-ben (P0.25, P0.28, P0.29, P0.30) af ADC-kanaler på henholdsvis 4,1,2,3 til stede i LPC2148.
Generering af PWM-signaler til servomotor ved hjælp af LPC2148
Da vi har brug for at generere PWM-signaler til styring af servomotorens position. Vi er nødt til at indstille PWM's driftscyklus. Vi har fire servomotorer tilsluttet robotarmen, så vi har brug for 4 PWM-kanaler på LPC2148. Her i denne vejledning bruger vi PWM-ben (P0.1, P0.7, P0.8, P0.21) af PWM-kanaler på henholdsvis 3,2,4,5 til stede i LPC2148.
Programmering og blinkende hexfil til LPC2148
For at programmere ARM7-LPC2148 har vi brug for keVision & at blinke HEX-kode til LPC2148 Flash Magic-værktøj er nødvendigt. Her bruges et USB-kabel til at programmere ARM7 Stick via mikro-USB-port. Vi skriver kode ved hjælp af Keil og opretter en hex-fil, og derefter blinkes HEX-filen til ARM7-stick ved hjælp af Flash Magic. Hvis du vil vide mere om installation af keil uVision og Flash Magic, og hvordan du bruger dem, skal du følge linket Kom godt i gang med ARM7 LPC2148 Microcontroller og programmer det ved hjælp af Keil uVision.
Kodning Forklaring
Komplet program til dette robotarmsprojekt gives i slutningen af vejledningen. Lad os nu se programmeringen i detaljer.
Konfiguration af PORT af LPC2148 til brug af GPIO, PWM og ADC:
Brug af PINSEL1-registeret til at aktivere ADC-kanaler- ADC0.4, ADC0.1, ADC0.2, ADC0.3 for benene P0.25, P0.28, P0.29, P0.30. Og også til PWM5 til stiften P0.21 (1 << 10).
#definer AD04 (1 << 18) // Vælg AD0.4-funktion til P0.25 #definer AD01 (1 << 24) // Vælg AD0.1-funktion til P0.28 #definer AD02 (1 << 26) / / Vælg AD0.2-funktion til P0.29 #definer AD03 (1 << 28) // Vælg AD0.3-funktion til P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Brug af PINSEL0-registeret til at aktivere PWM-kanaler PWM3, PWM2, PWM4 til ben P0.1, P0.7, P0.8 i LPC2148.
PINSEL0 = 0x000A800A;
Brug af PINSEL2-registeret til at aktivere GPIO-pinfunktionen for alle benene i PORT1, der bruges til tilslutning af LED og trykknap.
PINSEL2 = 0x00000000;
For at gøre LED-stifterne som output og trykknapstifter som input anvendes IODIR1-registeret. (0 for INPUT & 1 for OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Mens pin-numrene er defineret som
#define SwitchPinNumber1 17 // (Forbundet med P1.17) #define SwitchPinNumber2 18 // (Forbundet med P1.18) #define SwitchPinNumber3 19 // (Forbundet med P1.19) #define SwitchPinNumber4 20 // (Forbundet med P1. 20) #define LedPinNumber1 28 // (Forbundet med P1.28) #define LedPinNumber2 29 // (Forbundet med P1.29) #define LedPinNumber3 30 // (Forbundet med P1.30) #define LedPinNumber4 31 // (Forbundet med P1.31)
Konfiguration af ADC-konverteringsindstilling
Dernæst indstilles ADC-konverteringstilstand og uret til ADC ved hjælp af AD0CR_setup-registeret.
usigneret lang AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Opsætning af ADC-tilstand
Mens CLCKDIV, Burst Mode og PowerUP er defineret som
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 for on og 0 for off #define PowerUP (1 << 21)
Indstilling af uret til ADC-konvertering (CLKDIV)
Dette bruges til at fremstille uret til ADC. 4Mhz ADC-ur (ADC_CLOCK = PCLK / CLKDIV) hvor "CLKDIV-1" faktisk bruges, i vores tilfælde PCLK = 60mhz
Burst Mode (Bit-16): Denne bit bruges til BURST-konvertering. Hvis denne bit er indstillet, vil ADC-modulet konvertere for alle de kanaler, der er valgt (SET) i SEL-bits. Indstilling af 0 i denne bit deaktiverer BURST-konverteringen.
Power Down Mode (Bit-21): Denne bruges til at tænde eller slukke for ADC. Indstilling (1) i denne bit bringer ADC ud af slukningstilstand og gør den operationel. Hvis du rydder denne bit, slukkes ADC.
Konfiguration af PWM-konverteringsindstilling
Først Nulstil og deaktiver tæller for PWM ved hjælp af PWMTCR-register og opsæt PWM Timer Prescale Register med prescaler-værdi.
PWMTCR = 0x02; PWMPR = 0x1D;
Indstil derefter det maksimale antal tællinger i en cyklus. Dette gøres i Match Register 0 (PWMMR0). Da vi har 20000, da det er en PWM-bølge på 20 ms
PWMMR0 = 20000;
Efter at have indstillet værdien for driftscyklus i kampregistrene bruger vi PWMMR4, PWMMR2, PWMMR3, PWMMR5. Her indstiller vi startværdier på 0 msek (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Derefter indstil PWM Match Control Register til at forårsage en nulstilling, når matchregistret opstår.
PWMMCR = 0x00000002; // Nulstil på MR0-kamp
Derefter aktiverer PWM-låsen Aktiver register for at muliggøre brugen af matchværdi (PWMLER)
PWMLER = 0x7C; // Låseaktivering til PWM2, PWM4, PWM4 og PWM5
Nulstil timertælleren ved hjælp af en smule i PWM Timer Control Register (PWMTCR), og det aktiverer også PWM.
PWMTCR = 0x09; // Aktivér PWM og tæller
Derefter skal du aktivere PWM-udgange og indstille PWM i enkeltkantstyret tilstand i PWM-kontrolregister (PWMPCR).
PWMPCR = 0x7C00; // Aktivér PWM2, PWM4, PWM4 og PWM5, enkelt kantstyret PWM
Valg af servomotor, der skal drejes ved hjælp af trykknapper
Vi har fire trykknapper, som bruges til at rotere fire forskellige servomotorer. Ved at vælge en trykknap og variere det tilsvarende potentiometer indstiller ADC-værdien driftscyklussen, og den tilsvarende servomotor ændrer sin position. For at få status på trykknapkontakten
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Afhængig af hvilken switchværdi der er HØJ, finder ADC-konverteringen sted, og efter vellykket konvertering af ADC-værdien (0 til 1023) kortlægges den i form af (0 til 2045), og derefter skrives toldcyklusværdien til (PWMMRx) PWM-stift tilsluttet servomotor. Og også, en LED drejes HIGH for at indikere, hvilken kontakt der trykkes på. Følgende er et eksempel på den første trykknap
hvis (switchStatus1 == 1) { IOPIN1 = (1 <
Arbejde med pick and place robotarm
Efter upload af kode til LPC2148 skal du trykke på en vilkårlig kontakt og variere det tilsvarende potentiometer for at ændre robotarmens position.
Hver afbryder og potentiometer styrer hver servomotoriske bevægelse, der er base til venstre eller højre bevægelse, op eller ned bevægelse, frem eller tilbage og derefter griberen for at holde og frigøre bevægelse. Komplet kode med en detaljeret arbejdsvideo er angivet nedenfor.