- Tarvittavat komponentit
- 3D-tulostetun robotti-ARM: n valmisteleminen
- Piirikaavio
- Vaiheet LPC2148: n ohjelmoimiseksi robottiosalle
- Koodaus Selitys
- Servomoottorin valitseminen pyörittäväksi painikkeilla
- Pick and Place -robottivarren toiminta
Robotti-aseet ovat yksi kiehtovista tekniikan luomuksista, ja on aina kiehtovaa katsella näiden asioiden kallistumista ja panorointia saadaksesi monimutkaisia asioita aivan kuten ihmisen käsivarsi tekisi. Nämä robottivarret löytyvät yleisesti kokoonpanolinjan toimialoilta, jotka suorittavat voimakasta mekaanista työtä, kuten hitsaus, poraus, maalaus jne., Äskettäin kehittyneitä, erittäin tarkkoja robottivarret kehitetään myös monimutkaisten kirurgisten toimenpiteiden suorittamiseksi. Joten rakennetaan tässä opetusohjelmassa yksinkertainen robottivarsi ARM7-LPC2148-mikrokontrollerilla kohteen valitsemiseksi ja sijoittamiseksi käsin ohjaamalla muutamia potentiometrejä.
Tässä opetusohjelmassa käytämme 3D-tulostettua robotti-ARM: ää, joka on rakennettu noudattamalla asianomaisessa menettelyssä annettuja ohjeita. ARM käyttää 4 servomoottoria ARM-robottiliikkeeseen. Jos sinulla ei ole tulostinta, voit myös rakentaa käsivartesi yksinkertaisilla pahvilla, kuten olemme rakentaneet Arduino-robottivarren projektiin. Inspiraatiota varten voit myös viitata Record and Play Robotic Arm -sarjaan, jonka rakennimme aiemmin Arduinolla.
Joten nyt saatetaan asiat valmiiksi projektiimme
Tarvittavat komponentit
- 3D-tulostimen robotti ARM
- ARM7-LPC2148
- SG-90-servomoottori (4)
- 10k potentiometri (4)
- Painike (4)
- LED (4)
- 5 V: n (1 A) tasavirtalähde
- Vastukset (10k (4), 2.2k (4))
- Leipälauta
- Johtojen liittäminen
3D-tulostetun robotti-ARM: n valmisteleminen
Tässä opetusohjelmassa käytetty 3D-tulostettu robottivarsi tehtiin seuraamalla EEZYbotARMin antamaa mallia, joka on saatavana Thingiversessa. Täydellinen menettely 3D-tulostetun robottivarren valmistamiseksi ja kokoonpanotiedot videon kanssa ovat läsnä edellä mainitussa linkissä.
Tämä on kuva 3D-tulostetusta robotti-käsivarrestani, kun olen asentanut 4 Servo-moottoria.
Piirikaavio
Seuraava kuva näyttää ARM-pohjaisen robottivarren piiriliitännät.
Piiriliitännät projektille ovat yksinkertaisia. Varmista, että servomoottorit käynnistetään erillisellä 5 V: n tasavirtalähteellä. Potentiometreille ja painikkeille voimme käyttää LPC2148-mikrokontrollerista saatavaa 3,3 V: n jännitettä.
Tässä käytämme LPC2148: n 4 ADC-nastaa 4 potentiometrillä. Ja myös 4 LPC2148: n PWM-nastaa, jotka on yhdistetty servomoottorin PWM-nastoihin. Olemme myös liittäneet 4 painonappia valitaksesi moottorin, jota haluat käyttää. Joten painikkeen painamisen jälkeen potentiometriä vaihdetaan servomoottorin aseman muuttamiseksi.
LPC2148: n GPIO: han liitetyt painikkeet, yksi pää vedetään alas 10 k: n vastuksella ja toinen pää liitetään 3,3 V: lla. Myös 4 LEDiä on kytketty osoittamaan, mikä servomoottori on valittu asennon muuttamiseksi.
Piiriliitännät 4 servomoottorin ja LPC2148 välillä:
LPC2148 | Servo moottori |
P0.1 | SERVO1 (PWM-oranssi) |
P0.7 | SERVO2 (PWM-oranssi) |
P0.8 | SERVO3 (PWM-oranssi) |
P0.21 | SERVO4 (PWM-oranssi) |
Piiriliitännät 4 potentiometrin ja LPC2148 välillä:
LPC2148 | Potentiometrin keskitappi Vasen tappi - 0 V GND LPC2148: sta Oikea nasta - 3,3 V LPC2148: sta |
P0.25 | Potentiometri 1 |
P0.28 | Potentiometri 2 |
P0.29 | Potentiometri 3 |
P0.30 | Potentiometri 4 |
4 LED-piirin liitännät LPC2148: lla:
LPC2148 | LED-anodi (kaikkien LEDien katodi on GND) |
P1.28 | LED1 (anodi) |
P1.29 | LED2 (anodi) |
P1.30 | LED3 (anodi) |
P1.31 | LED4 (anodi) |
Neljän LPC2148-painikkeen paineliitäntä:
LPC2148 | Painike (alasvetovastuksella 10k) |
P1.17 | Painike 1 |
P1.18 | Painike 2 |
P1.19 | Painike 3 |
P1.20 | Painike 4 |
Vaiheet LPC2148: n ohjelmoimiseksi robottiosalle
Ennen tämän robottivarren ohjelmointia meidän on tiedettävä PWM: n luomisesta LPC2148: ssa ja ADC: n käytöstä ARM7-LPC2148: ssa. Katso tästä aiemmat projektimme, jotka koskevat Servo-moottorin liittämistä LPC2148: een ja miten ADC: tä käytetään LPC2148: ssa.
ADC-muunnos LPC2148: lla
Koska meidän on annettava ADC-arvot työjakson arvon asettamiseksi PWM-lähdön muodostamiseksi servomoottorin sijainnin ohjaamiseksi. Meidän on löydettävä potentiometrin ADC-arvot. Koska meillä on neljä potentiometriä neljän servomoottorin ohjaamiseksi, tarvitsemme 4 ADC-kanavaa LPC2148: ta. Tässä tässä opetusohjelmassa käytämme ADC-nastoja (P0.25, P0.28, P0.29, P0.30) 4,1,2,3 ADC-kanavasta, jotka ovat läsnä LPC2148: ssa.
PWM-signaalien generointi servomoottoria varten LPC2148: lla
Koska meidän on luotava PWM-signaaleja servomoottorin sijainnin ohjaamiseksi. Meidän on asetettava PWM: n käyttöjakso. Meillä on neljä Servo-moottoria, jotka on kytketty robottivarrelle, joten tarvitsemme 4 PWM-kanavaa LPC2148: ta. Tässä tässä opetusohjelmassa käytämme 3,2,4,5: n PWM-kanavien PWM-nastoja (P0.1, P0.7, P0.8, P0.21), jotka ovat läsnä LPC2148: ssa.
Hex-tiedoston ohjelmointi ja vilkkuminen LPC2148: een
Ohjelmoimaan ARM7-LPC2148 Tarvitsemme Keil uVision & vilkkua HEX-koodin ja LPC2148 Flash Magic-työkalu tarvitaan. USB-kaapelia käytetään tässä ARM7-muistin ohjelmointiin mikro-USB-portin kautta. Kirjoitamme koodin Keilillä ja luomme heksatiedoston ja sitten HEX-tiedosto välitetään ARM7-tikkuun Flash Magicilla. Jos haluat tietää enemmän Keil uVisionin ja Flash Magicin asentamisesta ja niiden käytöstä, seuraa linkkiä Aloittaminen ARM7 LPC2148 -mikrokontrollerilla ja ohjelmoi se Keil uVisionin avulla.
Koodaus Selitys
Täydellinen ohjelma tälle robottihankkeelle annetaan opetusohjelman lopussa. Katsotaan nyt ohjelmointi yksityiskohtaisesti.
LPC2148-portin määrittäminen GPIO: ta, PWM: ää ja ADC: tä varten:
PINSEL1-rekisterin käyttäminen ADC-kanavien ottamiseksi käyttöön - ADC0.4, ADC0.1, ADC0.2, ADC0.3 nastoille P0.25, P0.28, P0.29, P0.30. Ja myös PWM5: lle tapille P0.21 (1 << 10).
#define AD04 (1 << 18) // Valitse AD0.4-toiminto parametrille P0.25 #define AD01 (1 << 24) // Valitse AD0.1-funktio parametrille P0.28 #define AD02 (1 << 26) / / Valitse AD0.2-toiminto parametrille P0.29 #define AD03 (1 << 28) // Valitse AD0.3-toiminto parametrille P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
PINSEL0-rekisterin käyttäminen PWM-kanavien PWM3, PWM2, PWM4 ottamiseksi käyttöön LPC2148-nastoille P0.1, P0.7, P0.8.
PINSEL0 = 0x000A800A;
PINSEL2-rekisterin avulla GPIO-nastatoiminto otetaan käyttöön kaikille PORT1: n nastoille, joita käytetään LEDin ja painikkeen liittämiseen.
PINSEL2 = 0x00000000;
LED-nastojen tekeminen lähtö- ja painonapitulaksi tulona käytetään IODIR1-rekisteriä. (0 tulolle ja 1 tulolle)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30)) - (1 << 31));
Vaikka pin-numerot on määritelty
#define SwitchPinNumber1 17 // (Yhdistetty P1.17: n kanssa) #define SwitchPinNumber2 18 // (Yhdistetty P1.18: een) #define SwitchPinNumber3 19 // (Yhdistetty P1.19: ään) #define SwitchPinNumber4 20 // (Yhdistetty P1: een. 20) #define LedPinNumber1 28 // (Yhdistetty P1.28: een) #define LedPinNumber2 29 // (Yhdistettynä P1.29: ään) #define LedPinNumber3 30 // (Yhdistettynä P1.30) #define LedPinNumber4 31 // (Yhdistetty P1.31)
ADC-muunnosasetuksen määrittäminen
Seuraavaksi ADC-muunnostila ja ADC: n kello asetetaan käyttämällä AD0CR_setup-rekisteriä.
allekirjoittamaton pitkä AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // ADC-tilan määrittäminen
Vaikka CLCKDIV, Burst Mode ja PowerUP määritetään
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 päällä ja 0 pois päältä #define PowerUP (1 << 21)
Kellon asettaminen ADC-muunnokselle (CLKDIV)
Tätä käytetään ADC: n kellon tuottamiseen. 4 MHz: n ADC-kello (ADC_CLOCK = PCLK / CLKDIV), jossa tosiasiallisesti käytetään "CLKDIV-1", tapauksessamme PCLK = 60 MHz
Burst-tila (bitti-16): Tätä bittiä käytetään BURST-muunnokseen. Jos tämä bitti on asetettu, ADC-moduuli suorittaa muunnoksen kaikille kanaville, jotka on valittu (SET) SEL-bitteinä. Tämän bitin asettaminen 0 poistaa BURST-muunnoksen käytöstä.
Virrankatkaisutila (Bit-21): Tätä käytetään ADC: n kytkemiseen päälle tai pois päältä. Tämän bitin asetus (1) tuo ADC: n pois virrankatkaisutilasta ja tekee siitä toimintakykyisen. Tämän bitin tyhjentäminen sammuttaa ADC: n.
PWM-muunnosasetuksen määrittäminen
Ensin nollaa ja poista PWM-laskuri käytöstä PWMTCR-rekisterin avulla ja asenna PWM Timer Prescale -rekisteri esiasteikon arvolla.
PWMTCR = 0x02; PWMPR = 0x1D;
Määritä seuraavaksi yhden jakson enimmäismäärä. Tämä tehdään ottelurekisterissä 0 (PWMMR0). Koska meillä on 20000, koska se on 20 ms: n PWM-aalto
PWMMR0 = 20000;
Sen jälkeen, kun asetat työjakson arvon ottelurekistereissä, käytämme PWMMR4, PWMMR2, PWMMR3, PWMMR5. Tässä asetetaan alkuarvot 0 ms (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Tämän jälkeen määritä PWM Match Control Register aiheuttamaan laskurin nollaus, kun ottelurekisteri tapahtuu.
PWMMCR = 0x00000002; // Palauta MR0-ottelu
Tämän jälkeen PWM-salpa Ota käyttöön -rekisteri mahdollistaa otteluarvon (PWMLER) käytön
PWMLER = 0x7C; // Salpa käytössä malleille PWM2, PWM4, PWM4 ja PWM5
Nollaa ajastinlaskuri käyttämällä PWM- ajastinrekisterin (PWMTCR) bittiä, ja se myös mahdollistaa PWM: n.
PWMTCR = 0x09; // Ota PWM ja laskuri käyttöön
Ota seuraavaksi käyttöön PWM-lähdöt ja aseta PWM yhden reunaohjatussa tilassa PWM-ohjausrekisterissä (PWMPCR).
PWMPCR = 0x7C00; // Ota käyttöön PWM2, PWM4, PWM4 ja PWM5, yksi reunaohjattu PWM
Servomoottorin valitseminen pyörittäväksi painikkeilla
Meillä on neljä painonappia, joita käytetään neljän eri servomoottorin pyörittämiseen. Valitsemalla yhden painikkeen ja vaihtamalla vastaavaa potentiometriä ADC-arvo asettaa käyttöjakson ja vastaava servomoottori muuttaa sijaintiaan. Painikekytkimen tilan saamiseksi
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Joten riippuen siitä, mikä kytkentäarvo on KORKEA, tapahtuu ADC-muunnos ja sitten ADC-arvon (0-1023) onnistuneen muuntamisen jälkeen se kartoitetaan (0-2045) -merkillä ja sitten työjakson arvo kirjoitetaan (PWMMRx) PWM-tappi kytketty servomoottoriin. Ja myös LED käännetään KORKEAKSI osoittamaan mitä kytkintä painetaan. Seuraava on esimerkki ensimmäisestä painikkeesta
jos (switchStatus1 == 1) { IOPIN1 = (1 <
Pick and Place -robottivarren toiminta
Kun olet ladannut koodin LPC2148: een, paina mitä tahansa kytkintä ja vaihda vastaavaa potentiometriä robotin varren asennon muuttamiseksi.
Jokainen kytkin ja potentiometri ohjaavat jokaista servomoottorin liikettä, joka on vasen tai oikea pohjaliike, ylös- tai alaspäin suuntautuva liike, eteen- tai taaksepäin, ja sitten tarttuja pitämään ja vapauttamaan liikkeen. Täydellinen koodi yksityiskohtaisella videolla on annettu alla.