- Būtini komponentai
- Pasiruošimas 3D spausdintam robotui ARM
- Grandinės schema
- Veiksmai, susiję su „Robot Arm“ LPC2148 programavimu
- Kodavimas Paaiškinimas
- Servovariklio pasirinkimas pasukti naudojant mygtukus
- Pick and Place robotinės rankos darbas
„Robotiniai ginklai“ yra vienas iš patrauklių inžinerijos kūrinių, todėl visada žavu stebėti, kaip šie daiktai pakrypsta ir pasisuka, kad būtų atlikti sudėtingi dalykai, kaip tai darytų žmogaus ranka. Šių robotų ginklų dažniausiai galima rasti surinkimo linijos pramonės įmonėse, atliekančiose intensyvų mechaninį darbą, pvz., Suvirinimą, gręžimą, dažymą ir kt., Neseniai pažangios, labai tikslios robotizuotos rankos taip pat kuriamos sudėtingoms chirurginėms operacijoms atlikti. Taigi šioje pamokoje sukursime paprastą robotų ranką, naudodami mikrovaldiklį ARM7-LPC2148, kad pasirinktumėte ir padėtumėte objektą rankiniu būdu valdydami kelis potenciometrus.
Šioje pamokoje naudosime 3D spausdintą robotinį ARM, kuris buvo sukurtas laikantis „ thingiverse “ procedūros. ARM roboto judėjimui naudoja 4 servovariklius. Jei neturite spausdintuvo, taip pat galite pastatyti ranką paprastais kartonais, kaip mes pastatėme mūsų „Arduino“ robotų rankos projektui. Įkvėpimo taip pat galite rasti „Record and Play Robotic Arm“, kurį mes anksčiau sukūrėme naudodami „Arduino“.
Taigi dabar pasiruoškime dalykus savo projektui
Būtini komponentai
- 3D spausdintuvo robotinė ARM
- ARM7-LPC2148
- Servovariklis SG-90 (4)
- 10 k potenciometras (4)
- Mygtukas (4)
- LED (4)
- 5 V (1 A) nuolatinės srovės maitinimo adapteris
- Rezistoriai (10k (4), 2.2k (4))
- Bandomoji Lenta
- Laidų sujungimas
Pasiruošimas 3D spausdintam robotui ARM
Šioje instrukcijoje naudojama 3D spausdinta robotų ranka buvo sukurta vadovaujantis „ EEZYbotARM“ pateiktu dizainu, kuris yra prieinamas „Thingiverse“. Išsami 3D spausdintos robotinės rankos gamybos procedūra ir surinkimo detalė su vaizdo įrašu pateikiami aukščiau esančiame saite.
Tai mano 3D spausdintos roboto rankos vaizdas, surinkus jį su 4 „Servo Motors“.
Grandinės schema
Šiame paveikslėlyje parodytos ARM pagrįstos robotinės rankos grandinės jungtys .
Projekto grandinių jungtys yra paprastos. „Servo“ variklius maitinkite atskiru 5 V nuolatinės srovės maitinimo adapteriu. Potenciometrams ir mygtukams galime naudoti 3,3 V, gaunamą iš mikrovaldiklio LPC2148.
Čia mes naudojame 4 LPC2148 ADC kaiščius su 4 potenciometrais. Taip pat 4 LPC2148 PWM kaiščiai, sujungti su servovariklio PWM kaiščiais. Mes taip pat prijungėme 4 mygtukus, kad pasirinktume, kurį variklį naudoti. Taigi, paspaudus mygtuką, atitinkamas potenciometras keičiamas, norint pakeisti servo variklio padėtį.
Mygtukai, kurių vienas galas yra sujungtas su LPC2148 GPIO, yra ištraukiamas per 10 k varžą, o kitas galas sujungiamas su 3,3 V įtampa. Taip pat prijungti 4 šviesos diodai, nurodantys, kuris servovariklis pasirinktas padėčiai pakeisti.
Grandinės jungtys tarp 4 servovariklio ir LPC2148:
LPC2148 | Servo variklis |
P0.1 | SERVO1 (PWM-oranžinė) |
P0.7 | SERVO2 (PWM-oranžinė) |
P0.8 | SERVO3 (PWM-oranžinė) |
P0.21 | SERVO4 (PWM-oranžinė) |
Grandinės jungtys tarp 4 potenciometro ir LPC2148:
LPC2148 | Potenciometro centrinis kaištis - kairysis kaištis - 0 V GND iš LPC2148 dešiniojo kaiščio - 3,3 V iš LPC2148 |
P0.25 | Potenciometras |
P0.28 | Potenciometras2 |
P0.29 | Potenciometras3 |
P0.30 | Potenciometras |
4 šviesos diodų su LPC2148 grandinės jungtys:
LPC2148 | LED anodas (visų LED katodas yra GND) |
P1.28 | LED1 (anodas) |
P1.29 | LED2 (anodas) |
P1.30 | LED3 (anodas) |
P1.31 | LED4 (anodas) |
4 mygtukų su LPC2148 grandinės jungtys:
LPC2148 | Spaudžiamasis mygtukas (su ištraukiamuoju rezistoriumi 10 tūkst.) |
P1.17 | Mygtukas1 |
P1.18 | Mygtukas2 |
P1.19 | Mygtukas3 |
P1.20 | Mygtukas4 |
Veiksmai, susiję su „Robot Arm“ LPC2148 programavimu
Prieš programuodami šią robotų ranką, turime žinoti apie PWM generavimą LPC2148 ir ADC naudojimą ARM7-LPC2148. Norėdami tai padaryti, peržiūrėkite ankstesnius projektus, susijusius su servo variklio sąsaja su LPC2148 ir kaip naudoti ADC LPC2148.
ADC konversija naudojant LPC2148
Kadangi mes turime pateikti ADC reikšmes nustatydami darbo ciklo vertę PWM išėjimui generuoti, kad valdytumėte servo variklio padėtį. Turime rasti potenciometro ADC vertes. Kadangi turime keturis potenciometrus keturiems „Servo“ varikliams valdyti, mums reikia 4 ADC kanalo LPC2148. Šioje pamokoje mes naudojame ADC kaiščius (P0.25, P0.28, P0.29, P0.30) iš ADC kanalų, kurių atitinkamai yra LPC2148, 4,1,2,3.
PWM signalų generavimas servovarikliui naudojant LPC2148
Kadangi mes turime generuoti PWM signalus, kad valdytume servo variklio padėtį. Turime nustatyti PWM darbo ciklą. Mes turime keturis „Servo“ variklius, prijungtus prie robotų rankos, todėl mums reikia 4 PWM kanalo LPC2148. Čia šioje pamokoje mes naudojame PWM kanalus (P0.1, P0.7, P0.8, P0.21) iš 3,2,4,5 PWM kanalų, atitinkamai esančių LPC2148.
Hex failo programavimas ir mirksėjimas į LPC2148
Norėdami užprogramuoti ARM7-LPC2148, reikia „ Keil uVision“ ir „ HEX“ kodo į „LPC2148 Flash Flash“ įrankį. USB laidas naudojamas programuoti „ ARM7 Stick“ per „micro USB“ prievadą. Mes rašome kodą naudodami „Keil“ ir sukuriame hex failą, tada HEX failas perduodamas į „ARM7“ lazdelę naudojant „ Flash Magic“. Norėdami sužinoti daugiau apie „Keil uVision“ ir „Flash Magic“ diegimą ir kaip juos naudoti, spustelėkite nuorodą „Pradžia su„ ARM7 LPC2148 “mikrovaldikliu ir užprogramuokite ją naudodami„ Keil uVision “.
Kodavimas Paaiškinimas
Pilna šio robotų rankos projekto programa pateikiama mokymo programos pabaigoje. Dabar pažiūrėkime apie programavimą išsamiai.
LPC2148 PORT konfigūravimas naudoti GPIO, PWM ir ADC:
PINSEL1 registro naudojimas įgalinant ADC kanalus - ADC0.4, ADC0.1, ADC0.2, ADC0.3 kaiščiams P0.25, P0.28, P0.29, P0.30. Be to, PWM5 kaiščiui P0.21 (1 << 10).
#define AD04 (1 << 18) // Pasirinkite P0.25 funkciją AD0.4 #define AD01 (1 << 24) // Pasirinkite P0.28 funkciją AD0.1 #define AD02 (1 << 26) / / Pasirinkite P0.29 funkciją AD0.2 #define AD03 (1 << 28) // Pasirinkite funkciją AD0.3 P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
PINSEL0 registro naudojimas įgalinant PWM kanalus PWM3, PWM2, PWM4 LPC2148 kaiščiams P0.1, P0.7, P0.8.
PINSEL0 = 0x000A800A;
PINSEL2 registro naudojimas įgalinant GPIO kaiščių funkciją visiems PORT1 kaiščiams, naudojamiems LED ir mygtukui prijungti.
PINSEL2 = 0x00000000;
Norėdami, kad LED kaiščiai būtų išvesties ir mygtuko kaiščiai, kaip įvesties, naudojamas IODIR1 registras. (0 - INPUT ir 1 - OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
Nors smeigtukų numeriai apibrėžiami kaip
#define SwitchPinNumber1 17 // (sujungtas su P1.17) #define SwitchPinNumber2 18 // (sujungtas su P1.18) #define SwitchPinNumber3 19 // (sujungtas su P1.19) #define SwitchPinNumber4 20 // (sujungtas su P1. 20) #define LedPinNumber1 28 // (sujungtas su P1.28) #define LedPinNumber2 29 // (sujungtas su P1.29) #define LedPinNumber3 30 // (sujungtas su P1.30) #define LedPinNumber4 31 // (sujungtas su P1.31)
Konfigūruojamas ADC konversijos nustatymas
Tada ADC konversijos režimas ir ADC laikrodis nustatomas naudojant AD0CR_setup registrą.
nepasirašytas ilgas AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // ADC režimo nustatymas
Nors CLCKDIV, „Burst“ režimas ir „PowerUP“ yra apibrėžti kaip
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 įjungta ir 0 išjungta #define PowerUP (1 << 21)
ADC konversijos (CLKDIV) laikrodžio nustatymas
Tai naudojama ADC laikrodžiui gaminti. 4 MHz ADC laikrodis (ADC_CLOCK = PCLK / CLKDIV), kur iš tikrųjų naudojamas "CLKDIV-1", mūsų atveju PCLK = 60 MHz
Burst mode (16 bitas): Šis bitas naudojamas BURST konversijai. Jei šis bitas nustatytas, ADC modulis konvertuos visus kanalus, kurie yra pasirinkti (SET) SEL bitais. Jei šiame bite nustatysite 0, BURST konversija bus išjungta.
Išjungimo režimas („Bit-21“): jis naudojamas ADC įjungti arba išjungti. Šio bito nustatymas (1) išjungia ADC išjungimo režimą ir jį veikia. Išvalius šį bitą, ADC bus išjungtas.
Konfigūruojamas PWM konversijos nustatymas
Pirmiausia iš naujo nustatykite ir išjunkite PWM skaitiklį naudodami PWMTCR registrą ir nustatykite „PWM Timer Prescale“ registrą su išankstinio skalerio verte.
PWMTCR = 0x02; PWMPR = 0x1D;
Tada nustatykite maksimalų skaičiavimų skaičių per vieną ciklą. Tai daroma 0 rungtynių registre (PWMMR0). Kadangi mes turime 20000, nes tai yra 20msekų PWM banga
PWMMR0 = 20000;
Po to nustatykite darbo ciklo vertę rungtynių registruose, mes naudojame PWMMR4, PWMMR2, PWMMR3, PWMMR5. Čia mes nustatome pradines 0 msek reikšmes (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
Po to nustatykite „PWM Match Control Register“, kad įvykus varžybų registrui būtų iš naujo nustatytas skaitiklis.
PWMMCR = 0x00000002; // Reset MR0 rungtyje
Po to „PWM“ fiksatorius „Enable Register“ įgalina naudoti atitikties vertę (PWMLER)
PWMLER = 0x7C; // Užraktas įgalintas PWM2, PWM4, PWM4 ir PWM5
Atstatykite laikmačio skaitiklį naudodami šiek tiek PWM laikmačio valdymo registre (PWMTCR), taip pat jis įgalina PWM.
PWMTCR = 0x09; // Įgalinti PWM ir skaitiklį
Tada įjunkite PWM išėjimus ir nustatykite PWM vieno krašto valdomu režimu PWM valdymo registre (PWMPCR).
PWMPCR = 0x7C00; // Įgalinti PWM2, PWM4, PWM4 ir PWM5, vieno krašto valdomą PWM
Servovariklio pasirinkimas pasukti naudojant mygtukus
Mes turime keturis mygtukus, kurie naudojami keturiems skirtingiems servovarikliams pasukti. Pasirinkus vieną mygtuką ir keičiant atitinkamą potenciometrą, ADC vertė nustato darbo ciklą, o atitinkamas servovariklis keičia savo padėtį. Norėdami gauti mygtuko jungiklio būseną
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Taigi, atsižvelgiant į tai, kokia jungiklio vertė yra AUKŠTA, įvyksta ADC konversija, o po sėkmingo ADC (0 iki 1023) vertės konversijos ji susiejama (0 iki 2045) ir tada darbo ciklo vertė įrašoma į (PWMMRx) PWM kaištį, prijungtą prie servo variklio. Šviesos diodas pasukamas AUKŠTU, kad nurodytų, kuris jungiklis yra paspaustas. Toliau pateikiamas pirmojo mygtuko pavyzdys
jei (switchStatus1 == 1) { IOPIN1 = (1 <
Pick and Place robotinės rankos darbas
Įkėlę kodą į LPC2148, paspauskite bet kurį jungiklį ir pakeiskite atitinkamą potenciometrą, kad pakeistumėte roboto rankos padėtį.
Kiekvienas jungiklis ir potenciometras valdo kiekvieną servovariklio judėjimą, kuris yra pagrindo kairės arba dešinės judėjimas, judėjimas aukštyn arba žemyn, pirmyn arba atgal, o tada griebtuvas, kad judėjimas būtų laikomas ir atleistas. Visas kodas su išsamiu vaizdo įrašu pateikiamas žemiau.