- Komponenter kreves
- Gjør deg klar den 3D-trykte robotarmen
- Kretsdiagram
- Fremgangsmåten involvert i programmering av LPC2148 for robotarm
- Koding Forklaring
- Velge servomotoren som skal roteres ved hjelp av trykknapper
- Arbeid med pick and place robotarm
Robotic Arms, er en av de fascinerende ingeniørkreasjonene, og det er alltid fascinerende å se disse tingene vippe og panorere for å få komplekse ting gjort akkurat som en menneskelig arm ville gjort. Disse robotarmene kan ofte finnes i bransjer ved samlebåndet som utfører intenst mekanisk arbeid som sveising, boring, maling osv. Nylig er det også utviklet avanserte robotarmer med høy presisjon for å utføre komplekse kirurgiske operasjoner. Så i denne opplæringen, la oss bygge en enkel robotarm ved hjelp av ARM7-LPC2148 mikrokontroller for å plukke og plassere et objekt ved manuell å kontrollere få potensiometre.
I denne opplæringen vil vi bruke en 3D-trykt robotarm som ble bygget ved å følge prosedyren i thingiverse. ARM bruker 4 servomotorer for robot ARM-bevegelse. Hvis du ikke har en skriver, kan du også bygge armen din med enkle papp som vi bygde for Arduino Robotic Arm Project. For inspirasjon kan du også henvise til Record and Play Robotic Arm som vi bygde tidligere med Arduino.
Så la oss gjøre ting klare for prosjektet vårt
Komponenter kreves
- 3D-skriver robotarm
- ARM7-LPC2148
- SG-90 Servomotor (4)
- 10k potensiometer (4)
- Trykknapp (4)
- LED (4)
- 5V (1A) DC strømadapter
- Motstander (10k (4), 2.2k (4))
- Brettbrett
- Koble ledninger
Gjør deg klar den 3D-trykte robotarmen
Den 3D-trykte robotarmen som ble brukt i denne opplæringen, ble laget ved å følge designet gitt av EEZYbotARM som er tilgjengelig i Thingiverse. Den komplette prosedyren for å lage den 3D-trykte robotarmen og monteringsdetaljen med video er til stede i thingiverse-lenken, som er deling ovenfor.
Dette er bildet av min 3D-trykte robotarm etter montering med 4 servomotorer.
Kretsdiagram
Følgende bilde viser kretsforbindelsene til ARM-basert robotarm.
Kretsforbindelsene for prosjektet er enkle. Sørg for å drive servomotorer med en separat 5V likestrømadapter. For potensiometere og trykknapper kan vi bruke 3,3 V tilgjengelig fra LPC2148 mikrokontroller.
Her bruker vi de 4 ADC-pinnene til LPC2148 med 4 potensiometre. Og også 4 PWM-pinner på LPC2148 koblet til PWM-pinnene på servomotoren. Vi har også koblet til 4 trykknapper for å velge hvilken motor som skal betjenes. Så, etter å ha trykket på knappen, respekteres potensiometeret for å endre posisjonen til servomotoren.
Trykknappene i den ene enden som er koblet til GPIO på LPC2148, trekkes ned via motstand på 10k, og den andre enden er koblet til 3,3V. Også 4 lysdioder er tilkoblet for å indikere hvilken servomotor som er valgt for å endre posisjon.
Kretsforbindelser mellom 4 servomotorer og LPC2148:
LPC2148 | Servo motor |
P0.1 | SERVO1 (PWM-Orange) |
P0.7 | SERVO2 (PWM-Orange) |
P0.8 | SERVO3 (PWM-Orange) |
P0.21 | SERVO4 (PWM-Orange) |
Kretsforbindelser mellom 4 potensiometer og LPC2148:
LPC2148 | Potentiometer midtpinne venstre pinne - 0V GND av LPC2148 høyre pinne - 3,3V av LPC2148 |
P0.25 | Potensiometer1 |
P0.28 | Potensiometer2 |
P0.29 | Potensiometer3 |
P0.30 | Potensiometer 4 |
Kretsforbindelser på 4 LED-er med LPC2148:
LPC2148 | LED-anode (katoden til alle LED-er er GND) |
P1.28 | LED1 (anode) |
P1.29 | LED2 (anode) |
P1.30 | LED3 (anode) |
P1.31 | LED4 (anode) |
Kretsforbindelser med 4 trykknapper med LPC2148:
LPC2148 | Trykknapp (med nedtrekkbar motstand 10k) |
P1.17 | Trykknapp 1 |
P1.18 | Trykknapp2 |
P1.19 | Trykknapp 3 |
P1.20 | Trykknapp 4 |
Fremgangsmåten involvert i programmering av LPC2148 for robotarm
Før vi programmerer for denne robotarmen, må vi vite om å generere PWM i LPC2148 og bruke ADC i ARM7-LPC2148. For det, se våre tidligere prosjekter om interfacing servomotor med LPC2148 og hvordan du bruker ADC i LPC2148.
ADC-konvertering ved hjelp av LPC2148
Da vi trenger å oppgi ADC-verdier for å sette driftssyklusverdi for å generere PWM-utgang for å kontrollere servomotorposisjonen. Vi må finne ADC-verdiene til potensiometeret. Siden vi har fire potensiometere for å kontrollere fire servomotorer, trenger vi 4 ADC-kanaler på LPC2148. Her i denne opplæringen bruker vi ADC-pinner (P0.25, P0.28, P0.29, P0.30) av ADC-kanaler på henholdsvis 4,1,2,3 til stede i LPC2148.
Genererer PWM-signaler for servomotor ved hjelp av LPC2148
Da vi trenger å generere PWM-signaler for å kontrollere servomotorposisjonen. Vi må stille inn driftssyklusen til PWM. Vi har fire servomotorer koblet til robotarmen, så vi trenger 4 PWM-kanaler på LPC2148. Her i denne opplæringen bruker vi PWM-pinner (P0.1, P0.7, P0.8, P0.21) av PWM-kanaler på henholdsvis 3,2,4,5 til stede i LPC2148.
Programmering og blinking av hexfil til LPC2148
For å programmere ARM7-LPC2148 trenger vi keL uVision og å blinke HEX-kode til LPC2148 Flash Magic-verktøyet er nødvendig. En USB-kabel brukes her til å programmere ARM7 Stick via mikro-USB-port. Vi skriver kode ved hjelp av Keil og lager en hex-fil, og deretter blinkes HEX-filen til ARM7-pinnen ved hjelp av Flash Magic. Hvis du vil vite mer om å installere keil uVision og Flash Magic og hvordan du bruker dem, kan du følge lenken Komme i gang med ARM7 LPC2148 Microcontroller og programmere den ved hjelp av Keil uVision.
Koding Forklaring
Komplett program for dette Robotic Arm Project er gitt på slutten av opplæringen. La oss nå se programmeringen i detalj.
Konfigurere PORT av LPC2148 for bruk av GPIO, PWM og ADC:
Ved å bruke PINSEL1-registeret for å aktivere ADC-kanalene - ADC0.4, ADC0.1, ADC0.2, ADC0.3 for pinnene P0.25, P0.28, P0.29, P0.30. Og også for PWM5 for pinnen P0.21 (1 << 10).
#definer AD04 (1 << 18) // Velg AD0.4-funksjon for P0.25 #definer AD01 (1 << 24) // Velg AD0.1-funksjon for P0.28 #definer AD02 (1 << 26) / / Velg AD0.2-funksjon for P0.29 #definer AD03 (1 << 28) // Velg AD0.3-funksjon for P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Ved å bruke PINSEL0-registeret for å aktivere PWM-kanalene PWM3, PWM2, PWM4 for pinner P0.1, P0.7, P0.8 av LPC2148.
PINSEL0 = 0x000A800A;
Bruk PINSEL2-registeret for å aktivere GPIO-pin-funksjonen for alle pinnene i PORT1 som brukes til tilkobling av LED og trykknapp.
PINSEL2 = 0x00000000;
For å gjøre LED-pinnene som utgang og trykknapppinner som inngang, brukes IODIR1-registeret. (0 for INNGANG & 1 for UTGANG)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Mens pin-tallene er definert som
#define SwitchPinNumber1 17 // (Connected with P1.17) #define SwitchPinNumber2 18 // (Connected with P1.18) #define SwitchPinNumber3 19 // (Connected with P1.19) #define SwitchPinNumber4 20 // (Koblet til 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)
Konfigurerer ADC-konverteringsinnstilling
Deretter stilles ADC-konverteringsmodus og klokken for ADC ved hjelp av AD0CR_setup-registeret.
usignert lang AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Sette opp ADC-modus
Mens CLCKDIV, Burst Mode og PowerUP er definert som
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 for on og 0 for off #define PowerUP (1 << 21)
Stille klokken for ADC-konvertering (CLKDIV)
Dette brukes til å produsere klokken for ADC. 4Mhz ADC-klokke (ADC_CLOCK = PCLK / CLKDIV) der "CLKDIV-1" faktisk brukes, i vårt tilfelle PCLK = 60mhz
Burst Mode (Bit-16): Denne biten brukes til BURST-konvertering. Hvis denne biten er satt, vil ADC-modulen konvertere for alle kanalene som er valgt (SET) i SEL-bits. Innstilling 0 i denne biten vil deaktivere BURST-konverteringen.
Slå av modus (Bit-21): Denne brukes til å slå ADC PÅ eller AV. Innstilling (1) i denne biten bringer ADC ut av strømmen og gjør den i drift. Hvis du tømmer denne biten, slås ADC av.
Konfigurerer PWM-konverteringsinnstilling
Først Tilbakestill og deaktiver teller for PWM ved bruk av PWMTCR-register og sett opp PWM Timer Prescale Register med prescaler-verdi.
PWMTCR = 0x02; PWMPR = 0x1D;
Deretter angir du maksimalt antall tellinger i en syklus. Dette gjøres i Match Register 0 (PWMMR0). Siden vi har 20000 da det er en PWM-bølge på 20 ms
PWMMR0 = 20000;
Etter at du har satt verdien for driftssyklus i kampregistrene, bruker vi PWMMR4, PWMMR2, PWMMR3, PWMMR5. Her setter vi innledende verdier på 0 msek (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Sett deretter PWM Match Control Register til å forårsake en tilbakestilling av telleren når matchregisteret oppstår.
PWMMCR = 0x00000002; // Tilbakestill på MR0-kamp
Etter det aktiverer PWM-låsen Registrer for å aktivere bruken av kampverdi (PWMLER)
PWMLER = 0x7C; // Låseaktivering for PWM2, PWM4, PWM4 og PWM5
Tilbakestill tidtelleren ved å bruke litt i PWM Timer Control Register (PWMTCR), og også aktiverer den PWM.
PWMTCR = 0x09; // Aktiver PWM og teller
Deretter aktiverer du PWM-utgangene og setter PWM i enkantkontrollert modus i PWM-kontrollregisteret (PWMPCR).
PWMPCR = 0x7C00; // Aktiver PWM2, PWM4, PWM4 og PWM5, ensidig styrt PWM
Velge servomotoren som skal roteres ved hjelp av trykknapper
Vi har fire trykknapper som brukes til å rotere fire forskjellige servomotorer. Ved å velge en trykknapp og variere det tilsvarende potensiometeret, angir ADC-verdien driftssyklusen og den tilsvarende servomotoren endrer posisjon. For å få status på trykknappbryteren
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Så avhengig av hvilken bryterverdi som er HØY, tar ADC-konverteringen sted, og etter vellykket konvertering av ADC-verdien (0 til 1023) blir den kartlagt i form av (0 til 2045), og deretter blir driftssyklusverdien skrevet til (PWMMRx) PWM-pinnen som er koblet til servomotoren. Og også blir en LED slått HØY for å indikere hvilken bryter som trykkes. Følgende er et eksempel på den første trykknappen
hvis (switchStatus1 == 1) { IOPIN1 = (1 <
Arbeid med pick and place robotarm
Etter at du har lastet opp kode til LPC2148, trykker du på en hvilken som helst bryter og varierer tilsvarende potensiometer for å endre posisjonen til robotarmen.
Hver bryter og potensiometer styrer hver servomotorbevegelse som er venstre eller høyre bevegelse, opp eller ned bevegelse, fremover eller bakover, og deretter griperen for å holde og frigjøre bevegelse. Komplett kode med en detaljert arbeidsvideo er gitt nedenfor.