- Potrebne komponente
- Priprava 3D tiskane robotske ARM
- Shema vezja
- Koraki pri programiranju LPC2148 za robotsko roko
- Pojasnilo kodiranja
- Izbira servo motorja za vrtenje s tipkami
- Delovanje robotske roke Pick and Place
Robotsko orožje je ena fascinantnih inženirskih stvaritev in vedno je fascinantno opazovati, kako se te stvari nagibajo in premikajo, da se zapletejo stvari, tako kot bi to storila človeška roka. Te robotske roke lahko pogosto najdemo v industrijah na tekočem traku, ki opravljajo intenzivna mehanska dela, kot so varjenje, vrtanje, barvanje itd. V zadnjem času se razvijajo tudi napredne robotske roke z visoko natančnostjo za izvajanje zapletenih kirurških operacij. Torej, v tej vadnici zgradimo preprosto robotsko roko z uporabo mikrokrmilnika ARM7-LPC2148 za pobiranje in postavljanje predmeta z ročnim nadzorom nekaj potenciometrov.
V tej vadnici bomo uporabili 3D natisnjeno robotsko ARM, ki je bila zgrajena po postopku v stvarnosti. ARM uporablja 4 servo motorje za robotsko gibanje ARM. Če nimate tiskalnika, lahko svojo roko sestavite tudi iz preprostih kartonov, kakršne smo izdelali za naš projekt Arduino Robotic Arm. Za navdih se lahko obrnete tudi na snemanje in predvajanje robotske roke, ki smo jo prej ustvarili z uporabo Arduina.
Zdaj pa pripravimo stvari za naš projekt
Potrebne komponente
- 3D tiskalnik Robotska ARM
- ARM7-LPC2148
- Servo motor SG-90 (4)
- 10k potenciometer (4)
- Gumb (4)
- LED (4)
- 5V (1A) enosmerni napajalnik
- Upori (10k (4), 2,2k (4))
- Breadboard
- Povezovanje žic
Priprava 3D tiskane robotske ARM
3D tiskana robotska roka, uporabljena v tej vadnici, je bila narejena po načrtu, ki ga je izdal EEZYbotARM in je na voljo v Thingiverse. Popoln postopek izdelave 3D tiskane robotske roke in podrobnosti sestavljanja z videoposnetkom so na voljo v povezavi thingiverse, ki je del zgoraj.
To je slika moje 3D tiskane robotske roke po sestavljanju s 4 servo motorji.
Shema vezja
Naslednja slika prikazuje vezje vezja robotske roke, ki temelji na ARM.
Vezja vezi za projekt so preprosta. Servo motorje napajajte z ločenim 5V enosmernim napajalnikom. Za potenciometre in tipke lahko uporabimo 3,3 V, ki je na voljo v mikrokrmilniku LPC2148.
Tu uporabljamo 4 ADC zatiče LPC2148 s 4 potenciometri. In tudi 4 PWM zatiči LPC2148, povezani s PWM zatiči servo motorja. Priključili smo tudi 4 tipke, da izberemo, kateri motor naj deluje. Torej, po pritisku na gumb upoštevani potenciometer spreminja položaj servo motorja.
Tipke na enem koncu, ki je povezan z GPIO LPC2148, se spuščajo preko upora 10k, drugi konec pa je povezan z 3.3V. Povezane so tudi 4 LED, ki označujejo, kateri servo motor je izbran za spremembo položaja.
Vezne vezi med 4 servo motorji in LPC2148:
LPC2148 | Servo motor |
P0.1 | SERVO1 (PWM-oranžna) |
P0.7 | SERVO2 (PWM-oranžna) |
P0.8 | SERVO3 (PWM-oranžna) |
P0.21 | SERVO4 (PWM-oranžna) |
Vezne vezi med 4 potenciometrom in LPC2148:
LPC2148 | Levi zatič sredinskega zatiča potenciometra - 0V GND LPC2148 Desni zatič - 3,3V LPC2148 |
P0.25 | Potenciometer1 |
P0.28 | Potenciometer2 |
P0.29 | Potenciometer3 |
P0,30 | Potenciometer4 |
Vezja 4 LED-jev z LPC2148:
LPC2148 | LED anoda (katoda vseh LED je GND) |
P1.28 | LED1 (anoda) |
P1.29 | LED2 (anoda) |
P1.30 | LED3 (anoda) |
P1.31 | LED4 (anoda) |
Vezja 4 tipk z LPC2148:
LPC2148 | Potisni gumb (z vlečnim uporom 10k) |
P1.17 | Gumb1 |
P1.18 | Gumb2 |
P1.19 | Gumb3 |
P1.20 | Gumb4 |
Koraki pri programiranju LPC2148 za robotsko roko
Pred programiranjem za to robotsko roko moramo vedeti o generiranju PWM v LPC2148 in uporabi ADC v ARM7-LPC2148. Za to glejte naše prejšnje projekte o povezovanju servo motorja z LPC2148 in kako uporabljati ADC v LPC2148.
Pretvorba ADC z uporabo LPC2148
Ker moramo zagotoviti vrednosti ADC za nastavitev vrednosti delovnega cikla za generiranje izhoda PWM za nadzor položaja servo motorja. Poiskati moramo vrednosti ADC potenciometra. Ker imamo štiri potenciometre za nadzor štirih servo motorjev, potrebujemo 4 ADC kanala LPC2148. Tu v tej vadnici uporabljamo zatiče ADC (P0.25, P0.28, P0.29, P0.30) kanalov ADC s 4,1,2,3, ki so prisotni v LPC2148.
Ustvarjanje PWM signalov za servo motor z uporabo LPC2148
Ker moramo generirati PWM signale za nadzor položaja servo motorja. Nastaviti moramo delovni cikel PWM. Na robotsko roko imamo priključene štiri servo motorje, zato potrebujemo 4 PWM kanal LPC2148. Tu v tej vadnici uporabljamo zatiče PWM (P0.1, P0.7, P0.8, P0.21) kanalov PWM s 3,2,4,5, ki so prisotni v LPC2148.
Programiranje in utripanje šestnajstiške datoteke na LPC2148
Za programiranje ARM7-LPC2148 potrebujemo keil uVision in potrebno je utripati HEX kodo na LPC2148 Flash Magic orodje. Tukaj se za programiranje ARM7 Stick preko mikro USB vrat uporablja kabel USB. Kodo napišemo s pomočjo Keila in ustvarimo šestnajstiško datoteko, nato pa datoteko HEX z Flash Magic utripnemo na ARM7. Če želite izvedeti več o namestitvi keil uVision in Flash Magic ter kako jih uporabljati, sledite povezavi Uvod v mikrokrmilnik ARM7 LPC2148 in ga programirajte s pomočjo Keil uVision.
Pojasnilo kodiranja
Celoten program za ta projekt robotske roke je podan na koncu vaje. Zdaj pa si oglejmo podrobno programiranje.
Konfiguriranje PORT-a LPC2148 za uporabo GPIO, PWM in ADC:
Uporaba registra PINSEL1 za omogočanje kanalov ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 za nožice P0.25, P0.28, P0.29, P0.30. In tudi za PWM5 za zatič P0.21 (1 << 10).
#define AD04 (1 << 18) // Izberite funkcijo AD0.4 za P0.25 #define AD01 (1 << 24) // Izberite funkcijo AD0.1 za P0.28 #define AD02 (1 << 26) / / Izberite funkcijo AD0.2 za P0.29 #define AD03 (1 << 28) // Izberite funkcijo AD0.3 za P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Uporaba registra PINSEL0 za omogočanje PWM kanalov PWM3, PWM2, PWM4 za nožice P0.1, P0.7, P0.8 LPC2148.
PINSEL0 = 0x000A800A;
Z uporabo registra PINSEL2 omogočite funkcijo GPIO pin za vse nožice v PORT1, ki se uporabljajo za povezavo LED in gumba.
PINSEL2 = 0x00000000;
Če želite zatiče LED narediti kot izhodne in gumbe kot vhodne, se uporablja register IODIR1. (0 za VHOD in 1 za IZHOD)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Medtem ko so številke pinov opredeljene kot
#define SwitchPinNumber1 17 // (povezan s P1.17) #define SwitchPinNumber2 18 // (povezan s P1.18) #define SwitchPinNumber3 19 // (povezan s P1.19) #define SwitchPinNumber4 20 // (povezan s P1. 20) #define LedPinNumber1 28 // (povezano s P1.28) #define LedPinNumber2 29 // (povezano s P1.29) #define LedPinNumber3 30 // (povezano s P1.30) #define LedPinNumber4 31 // (povezano z P1.31)
Konfiguriranje nastavitve pretvorbe ADC
Nato se s pretvornikom AD0CR_setup nastavi način pretvorbe ADC in ura za ADC.
nepodpisano dolgo AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Nastavitev načina ADC
Medtem ko so CLCKDIV, način zaporednega snemanja in PowerUP opredeljeni kot
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 za vklop in 0 za izklop #define PowerUP (1 << 21)
Nastavitev ure za pretvorbo ADC (CLKDIV)
Ta se uporablja za izdelavo ure za ADC. Ura ADC 4 MHz (ADC_CLOCK = PCLK / CLKDIV), kjer se dejansko uporablja "CLKDIV-1", v našem primeru PCLK = 60 MHz
Rafalni način (Bit-16): Ta bit se uporablja za pretvorbo BURST. Če je ta bit nastavljen, bo modul ADC pretvoril vse kanale, ki so izbrani (SET) v bitih SEL. Nastavitev 0 v tem bitu bo onemogočila pretvorbo BURST.
Način izklopa (Bit-21): Uporablja se za vklop ali izklop ADC-ja. Nastavitev (1) v tem bitu ADC izklopi iz načina izklopa in ga omogoči. Če počistite ta bit, bo izklopljen ADC.
Konfiguriranje nastavitve pretvorbe PWM
Najprej ponastavite in onemogočite števec za PWM z uporabo PWMTCR registra in nastavite PWM Timer Prescale Register z vrednostjo predocenjevalnika.
PWMTCR = 0x02; PWMPR = 0x1D;
Nato nastavite največje število štetj v enem ciklu. To se naredi v Registru tekem 0 (PWMMR0). Ker imamo 20000, je to PWM val 20 ms
PWMMR0 = 20000;
Po tem nastavite vrednost za delovni cikel v registrih ujemanja, uporabljamo PWMMR4, PWMMR2, PWMMR3, PWMMR5. Tu nastavljamo začetne vrednosti 0 ms (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Po tem nastavite register nadzora ujemanja PWM, da sproži ponastavitev števca, ko pride do registra ujemanja.
PWMMCR = 0x00000002; // Ponastavi na ujemanje MR0
Po tem zapah PWM Enable Register omogoči uporabo vrednosti ujemanja (PWMLER)
PWMLER = 0x7C; // Omogočanje zapaha za PWM2, PWM4, PWM4 in PWM5
Ponastavite števec časovnika z uporabo bita v registru za nadzor časovnika PWM (PWMTCR) in omogoči tudi PWM.
PWMTCR = 0x09; // Omogoči PWM in števec
Nato omogočite izhode PWM in nastavite PWM v načinu z enim robom v nadzornem registru PWM (PWMPCR).
PWMPCR = 0x7C00; // Omogoči PWM2, PWM4, PWM4 in PWM5, PWM z enim robom
Izbira servo motorja za vrtenje s tipkami
Imamo štiri tipke, s katerimi vrtimo štiri različne servo motorje. Z izbiro enega gumba in spreminjanjem ustreznega potenciometra vrednost ADC nastavi delovni cikel in ustrezni servo motor spremeni svoj položaj. Za prikaz stanja stikala s tipko
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Torej, odvisno od tega, katera vrednost stikala je VISOKA, se izvede pretvorba ADC, nato pa se po uspešni pretvorbi vrednosti ADC (0 do 1023) preslika v izračun (0 do 2045) in nato vrednost delovnega cikla zapiše v zatič PWM (PWMMRx), priključen na servo motor. In tudi, LED je obrnjena VISOKO za prikaz pritiska na stikalo. Sledi primer prvega gumba
če (switchStatus1 == 1) { IOPIN1 = (1 <
Delovanje robotske roke Pick and Place
Po nalaganju kode na LPC2148 pritisnite katero koli stikalo in spremenite ustrezni potenciometer, da spremenite položaj robotske roke.
Vsako stikalo in potenciometer nadzorujeta vsako gibanje servomotorja, ki je osnovno levo ali desno, gibanje navzgor ali navzdol, naprej ali nazaj in nato prijemalo za zadrževanje in sprostitev gibanja. Popolna koda s podrobnim delovnim videoposnetkom je navedena spodaj.