- Componente necesare
- Pregătirea brațului robotizat tipărit 3D
- Diagrama circuitului
- Pași implicați în Programarea LPC2148 pentru Robotic Arm
- Explicație de codare
- Selectarea servomotorului pentru a se roti folosind butoanele Push
- Funcționarea brațului robotizat Pick and Place
Brațele robotice sunt una dintre creațiile inginerești fascinante și este întotdeauna fascinant să privești aceste lucruri înclinându-se și panoramând pentru a face lucruri complexe la fel cum ar face un braț uman. Aceste brațe robotizate pot fi găsite în mod obișnuit în industriile de pe linia de asamblare care efectuează lucrări mecanice intense, cum ar fi sudarea, găurirea, vopsirea etc., brațele robotice recent avansate cu precizie ridicată sunt, de asemenea, dezvoltate pentru a efectua operații chirurgicale complexe. Deci, în acest tutorial să construim un braț robotizat simplu folosind microcontrolerul ARM7-LPC2148 pentru alegerea și plasarea unui obiect prin controlul manual al câtorva potențiometre.
În acest tutorial vom folosi un ARM robotizat tipărit 3D care a fost construit urmând procedura din thingiverse. ARM utilizează 4 servomotori pentru mișcarea robotică a brațului. Dacă nu aveți o imprimantă, puteți, de asemenea, să vă construiți brațul cu cartoane simple, cum am construit pentru proiectul nostru Arduino Robotic Arm. Pentru inspirație, puteți consulta și brațul robotizat Record and Play pe care l-am construit anterior folosind Arduino.
Deci, acum să pregătim lucrurile pentru proiectul nostru
Componente necesare
- Imprimantă 3D Robotic ARM
- ARM7-LPC2148
- Servomotor SG-90 (4)
- Potențiometru 10k (4)
- Buton (4)
- LED (4)
- Adaptor de alimentare DC de 5V (1A)
- Rezistoare (10k (4), 2.2k (4))
- Breadboard
- Conectarea firelor
Pregătirea brațului robotizat tipărit 3D
Brațul robotizat tipărit 3D utilizat în acest tutorial a fost realizat urmând designul dat de EEZYbotARM, care este disponibil în Thingiverse. Procedura completă pentru realizarea brațului robot tipărit 3D și asamblarea detaliilor cu video sunt prezente în link-ul thingiverse, care este prezentat mai sus.
Aceasta este imaginea brațului meu robot tipărit 3D după asamblare cu 4 servo-motoare.
Diagrama circuitului
Următoarea imagine arată conexiunile de circuit ale brațului robotizat bazat pe ARM.
Conexiunile de circuit pentru proiect sunt simple. Asigurați-vă că alimentați servomotorii cu un adaptor de alimentare separat de 5V DC. Pentru potențiometre și butoane, putem folosi 3,3V disponibile de la microcontrolerul LPC2148.
Aici folosim cei 4 pini ADC ai LPC2148 cu 4 potențiometre. Și, de asemenea, 4 pini PWM de LPC2148 conectați cu pinii PWM ai servomotorului. De asemenea, am conectat 4 butoane pentru a selecta ce motor să funcționeze. Deci, după apăsarea butonului potențiometrul respectat este variat pentru a schimba poziția servomotorului.
Butoanele cu un capăt care sunt conectate cu GPIO de LPC2148 sunt pull-down prin rezistor de 10k și un alt capăt este conectat cu 3,3V. De asemenea, sunt conectate 4 LED-uri pentru a indica ce servomotor este selectat pentru a schimba poziția.
Conexiuni de circuit între 4 servo-motor și LPC2148:
LPC2148 | Servo motor |
P0.1 | SERVO1 (PWM-Orange) |
P0.7 | SERVO2 (PWM-Orange) |
P0.8 | SERVO3 (PWM-Orange) |
P0.21 | SERVO4 (PWM-Orange) |
Conexiuni de circuit între 4 potențiometru și LPC2148:
LPC2148 | Potențiometru Pin central Pin stânga - 0V GND de LPC2148 Pin drept - 3,3V de LPC2148 |
P0.25 | Potențiometru 1 |
P0.28 | Potențiometru2 |
P0.29 | Potențiometru3 |
P0.30 | Potențiometru4 |
Conexiuni de circuit a 4 LED-uri cu LPC2148:
LPC2148 | Anod LED (catodul tuturor LED-urilor este GND) |
P1.28 | LED1 (anod) |
P1.29 | LED2 (anod) |
P1.30 | LED3 (anod) |
P1.31 | LED4 (anod) |
Conexiuni de circuit de 4 butoane cu LPC2148:
LPC2148 | Buton de apăsare (cu rezistor de tragere 10k) |
P1.17 | Buton 1 |
P1.18 | Buton2 |
P1.19 | Buton 3 |
P1.20 | Buton4 |
Pași implicați în Programarea LPC2148 pentru Robotic Arm
Înainte de a programa acest braț robotizat, trebuie să știm despre generarea PWM în LPC2148 și utilizarea ADC în ARM7-LPC2148. Pentru aceasta, consultați proiectele noastre anterioare privind interfațarea motorului servo cu LPC2148 și cum să utilizați ADC în LPC2148.
Conversie ADC folosind LPC2148
Deoarece trebuie să oferim valori ADC pentru setarea valorii ciclului de funcționare pentru generarea ieșirii PWM pentru controlul poziției servomotorului. Trebuie să găsim valori ADC ale potențiometrului. Deoarece avem patru potențiometre pentru controlul a patru servomotoare, avem nevoie de 4 canale ADC LPC2148. Aici, în acest tutorial, folosim pinii ADC (P0.25, P0.28, P0.29, P0.30) de canale ADC de 4,1,2,3, respectiv prezenți în LPC2148.
Generarea semnalelor PWM pentru servomotor folosind LPC2148
Deoarece trebuie să generăm semnale PWM pentru controlul poziției servomotorului. Trebuie să stabilim ciclul de funcționare al PWM. Avem patru servomotoare conectate la brațul robotizat, așa că avem nevoie de 4 canale PWM ale LPC2148. Aici, în acest tutorial, folosim pini PWM (P0.1, P0.7, P0.8, P0.21) de canale PWM de 3,2,4,5, respectiv prezenți în LPC2148.
Programarea și intermitentul fișierului hexagonal către LPC2148
Pentru a programa ARM7-LPC2148 avem nevoie de uVision keil și pentru a bloca codul HEX la LPC2148 este nevoie de instrumentul Flash Magic. Un cablu USB este utilizat aici pentru a programa stick - ul ARM7 prin portul micro USB. Scriem cod folosind Keil și creăm un fișier hexagonal și apoi fișierul HEX este afișat pe stick-ul ARM7 folosind Flash Magic. Pentru a afla mai multe despre instalarea keil uVision și Flash Magic și despre modul de utilizare, urmați linkul Noțiuni introductive despre microcontrolerul ARM7 LPC2148 și programați-l folosind Keil uVision.
Explicație de codare
Programul complet pentru acest proiect Robotic Arm este dat la sfârșitul tutorialului. Acum să vedem programarea în detaliu.
Configurarea PORT a LPC2148 pentru utilizarea GPIO, PWM și ADC:
Utilizarea registrului PINSEL1 pentru a activa canalele ADC - ADC0.4, ADC0.1, ADC0.2, ADC0.3 pentru pinii P0.25, P0.28, P0.29, P0.30. Și, de asemenea, pentru PWM5 pentru pinul P0.21 (1 << 10).
#define AD04 (1 << 18) // Selectați funcția AD0.4 pentru P0.25 #define AD01 (1 << 24) // Selectați funcția AD0.1 pentru P0.28 #define AD02 (1 << 26) / / Selectați funcția AD0.2 pentru P0.29 #define AD03 (1 << 28) // Selectați funcția AD0.3 pentru P0.30 PINSEL1 - = AD04 - AD01 - AD02 - AD03 - (1 << 10);
Utilizarea registrului PINSEL0 pentru a activa canalele PWM PWM3, PWM2, PWM4 pentru pinii P0.1, P0.7, P0.8 din LPC2148.
PINSEL0 = 0x000A800A;
Utilizarea registrului PINSEL2 pentru a activa funcția pin GPIO pentru toți pinii din PORT1 utilizați pentru conectarea LED-ului și a butonului.
PINSEL2 = 0x00000000;
Pentru a face pinii LED ca ieșire și pinii butonului ca intrare se utilizează registrul IODIR1. (0 pentru INPUT & 1 pentru OUTPUT)
IODIR1 = ((0 << 17) - (0 << 18) - (0 << 19) - (0 << 20) - (1 << 28) - (1 << 29) - (1 << 30) - (1 << 31));
În timp ce numerele PIN sunt definite ca
#define SwitchPinNumber1 17 // (conectat cu P1.17) #define SwitchPinNumber2 18 // (conectat cu P1.18) #define SwitchPinNumber3 19 // (conectat cu P1.19) #define SwitchPinNumber4 20 // (conectat cu P1. 20) #define LedPinNumber1 28 // (conectat cu P1.28) #define LedPinNumber2 29 // (conectat cu P1.29) #define LedPinNumber3 30 // (conectat cu P1.30) #define LedPinNumber4 31 // (conectat cu P1.31)
Configurarea setării de conversie ADC
Apoi, modul de conversie ADC și ceasul pentru ADC sunt setate utilizând registrul AD0CR_setup.
unsigned long AD0CR_setup = (CLKDIV << 8) - BURST_MODE_OFF - PowerUP; // Configurarea modului ADC
În timp ce CLCKDIV, modul Burst și PowerUP sunt definite ca
#define CLKDIV (15-1) #define BURST_MODE_OFF (0 << 16) // 1 pentru activat și 0 pentru oprit #define PowerUP (1 << 21)
Setarea ceasului pentru conversia ADC (CLKDIV)
Acesta este folosit pentru a produce ceasul pentru ADC. Ceas ADC de 4Mhz (ADC_CLOCK = PCLK / CLKDIV) unde se folosește de fapt „CLKDIV-1”, în cazul nostru PCLK = 60mhz
Mod Burst (Bit-16): Acest bit este utilizat pentru conversia BURST. Dacă acest bit este setat, modulul ADC va face conversia pentru toate canalele selectate (SET) în biții SEL. Setarea 0 în acest bit va dezactiva conversia BURST.
Mod de oprire (Bit-21): Acesta este utilizat pentru pornirea sau oprirea ADC. Setarea (1) în acest bit scoate ADC din modul de oprire și îl face operațional. Ștergerea acestui bit va opri ADC.
Configurarea setării de conversie PWM
Mai întâi Resetați și dezactivați contorul pentru PWM utilizând registrul PWMTCR și configurați PWM Timer Prescale Register cu valoarea prescalerului.
PWMTCR = 0x02; PWMPR = 0x1D;
Apoi setați numărul maxim de numărări într-un ciclu. Acest lucru se face în Match Register 0 (PWMMR0). Deoarece avem 20000, este un val PWM de 20 msecs
PWMMR0 = 20000;
După aceea, setați valoarea pentru ciclul de funcționare în registrele de potrivire, folosim PWMMR4, PWMMR2, PWMMR3, PWMMR5. Aici stabilim valorile inițiale de 0 msec (Toff)
PWMMR4 = 0; PWMMR2 = 0; PWMMR3 = 0; PWMMR5 = 0;
După aceea setați PWM Match Control Register pentru a provoca o resetare a contorului atunci când apare registrul de match.
PWMMCR = 0x00000002; // Resetați la meciul MR0
După aceea, PWM latch Enable Register pentru a permite utilizarea valorii de potrivire (PWMLER)
PWMLER = 0x7C; // Activare blocare pentru PWM2, PWM4, PWM4 și PWM5
Resetați contorul temporizatorului utilizând un bit în Registrul de control al temporizatorului PWM (PWMTCR) și, de asemenea, activează PWM.
PWMTCR = 0x09; // Activați PWM și contorul
Apoi activați ieșirile PWM și setați PWM în modul controlat cu o singură margine în registrul de control PWM (PWMPCR).
PWMPCR = 0x7C00; // Activați PWM2, PWM4, PWM4 și PWM5, PWM controlat pe o singură margine
Selectarea servomotorului pentru a se roti folosind butoanele Push
Avem patru butoane care sunt utilizate pentru a roti patru servomotoare diferite. Prin selectarea unui singur buton și modificarea potențiometrului corespunzător, valoarea ADC setează ciclul de funcționare și servomotorul corespunzător își schimbă poziția. Pentru a obține starea butonului de comutare
switchStatus1 = (IOPIN1 >> SwitchPinNumber1) & 0x01;
Deci, în funcție de valoarea comutatorului care este MARE, conversia ADC are loc și apoi după conversia cu succes a valorii ADC (0 la 1023), aceasta este mapată în termeni de (0 la 2045) și apoi valoarea ciclului de funcționare este scrisă în pinul (PWMMRx) PWM conectat la servomotor. Și, de asemenea, un LED este înălțat pentru a indica ce comutator este apăsat. Următorul este un exemplu pentru primul buton
if (switchStatus1 == 1) { IOPIN1 = (1 <
Funcționarea brațului robotizat Pick and Place
După încărcarea codului pe LPC2148, apăsați orice comutator și modificați potențiometrul corespunzător pentru a schimba poziția brațului robotizat.
Fiecare comutator și potențiometru controlează fiecare mișcare a servomotorului care este mișcarea de bază stânga sau dreapta, mișcarea în sus sau în jos, înainte sau înapoi și apoi mânerul pentru a menține și elibera mișcarea. Codul complet cu un videoclip detaliat de lucru este dat mai jos.