Documente Academic
Documente Profesional
Documente Cultură
” din oras
Facultatea de
Secţia …
PROIECT DE LICENTA
- BRAT ROBOTIC-
oras, 2016
1
Lucrarea de fata reprezinta obiectul realizarii practice a unei platforme robotice
de tip “brat robotic” cu 3 DOF -grade de libertate care este capabil sa apuce si sa mute
un obiect. Comanda bratului robotic este realizata prin intermediul unei tastaturi cu
microswitch-uri care trimite catre microcontroller comenzi de miscare in sus, jos, rotire
stanga- dreapta si gripp. Microcontrolle-ul utilizat este din familia Microchip, are o
arhitectura Harvard pe 8 biti si lucreaza la o frecventa de clock de 64 Mz. Alimentarea
tuturor modulelor electronice din componenta bratului robotic se realizeaza de la o sursa
de tensiune DC 6-18V si este stabilizata prin intermediul a doua circuite specializate de
tip 7805. S-au utilizat doua circuite integrate de acest tip 7805 deoarece in urma testelor
practice s-a constat faptul ca in momentul in care se comanda servomecanismele RC,
curentul consumat depaseste pe o scurta perioada de timp 0.5A, tensiunea stabilizata de
la iesire scade la o valoare inferioara (<3V) iar microcontroller-ul se reseteaza in
momentul in care detecteaza acest lucru. S-a constatat faptul ca daca dispozitivele de
putere (in cazul de fata servomecanismele RC) sunt alimentate separat, resetarea
microcontroller-ului este evitata si deasemenea semnalele perturbatoare induse de
motoarele DC (ce fac parte din servomecanisme) pe linia de alimentare a
microcontroller-ului sunt eliminate.
Asa cum a fost mentionat si mai sus, unitatea centrala de procesare a semnalelor
are la bazamicrocontroller-ul pe 8-bit PIC18F46K80 ce functioneaza la o viteza de 64
Mhz si dispune de rezerve generoase de memorie RAM/ROM, timere si protocoale de
comunicatie (in cadrul proiectului vor fi descrise pe larg toate aceste caracteristici).
Micocontroller-ul PIC18F46K80 este integrat in acest proiect robotic si executa task-uri
precum achizitia si prelucrarea semnalelor digitale provenite de la tastatura de comanda
dar in acelasi timp genereaza si semnalele de comanda PWM pentru cele 4
servomecanisme care actioneaza bratul robotic. In ceea ce priveste partea de BOM (Bill
of Materials), pentru realizarea bratelor si a bazei platformei robotice s-a utilizat un
material performant si usor de prelucrat, care are o rezistenta sporita la forte de
indoire/torsiune si este rezistent totodata si la temperatura/umiditate. Pentru
interconectarea elementelor constitutive ale bratului robotic s-au utilizat prinderea in
suruburi , adeziv si baghete de plastic maleabil. In ceea ce priveste realizarea
propriuzisa/fizica a circuitelor electronice, s-au utilizat PCB-urile cu gauri deoarece sunt
rezistente, se lucreaza usor cu ele si permit transpunerea schemei electronice intr-un
mod adaptiv si curat.
2
------------------------ROBOTIC ARM- modular description--------------------------
3
--------------------Schema electronica a platformei robotice--------------------
4
Servomecanismele RC- descriere generala de functionare
FIG.1 Servomecanism RC
Metoda de comanda a acestor mecanisme se realizeaza prin PWM sau altfel spus prin
puls cu latimea factorului de umplere variabil. Asadar pentru comanda sunt necesare doar 3
fire, din care 2 de alimentare si doar un fir de comanda, fir prin care se va trimite comanda in
regim PWM . Pulsul de comanda corelat cu pozitia unghiulara a rotorului, este prezentat in
figura urmatoare :
In momentul cand aceste motoare sunt comandate sa execute o miscare de rotatie, pozitia de
comanda este mentinuta atat timp cat se trimite semnalul PWM.
5
Materiale folosite în structura corpului la construcţia roboţilor
Ca şi corpul uman, corpul unui robot conţine părţile vitale ce ajută la buna funcţionare
a sa. Astfel structura de bază a corpului unui robot poate fi construită din materiale precum
lemn, plastic sau metal şi poate lua orice formă şi dimensiune. O caracteristică importantă de
care trebuie să se ţină cont atunci când se aleg dimensiunile şi formele materialului este aceea
că pe structura corpului vor fi dispuse motoarele/servomotoarele, acumulatorii, plăcile
electronice şi alte elemente auxiliare, care au o anumită greutate şi care influenţează nu numai
alegerea parametrilor materialului, ci şi locomoţia prin modul în care sunt dispuse pe cadrul
robotului. În multe cazuri o carcasă de protecţie poate fi plasată peste circuitele electronice şi
peste anumite componente auxiliare, ajungându-se chiar şi la utilizarea de piele artificială,
aceasta având un rol pur estetic şi nu de protecţie. In cazul de fata materialul predominant
folosit este lemnul datorita usurintei cu care se prelucreaza. Metalul reprezintă alegerea optimă
în construcţia structurii de bază a unui robot, iar printre metalele cel mai des utilizate în acest
scop se pot enumera:
- Oţelul este deseori utilizat în construcţia cadrului unui robot datorită durităţii ridicate iar ca
dezavantaj se remarcă faptul că prelucrarea acestuia necesită scule speciale, oţelul fiind un
material mai greu deformabil. Oţelul inoxidabil este utilizat în construcţia componentelor de
precizie cum ar fi braţe, mâini, angrenaje şi alte mecanisme unde aluminiul nu ar putea face
faţă solicitărilor.
- Lemnul este un material utilizat în principal la construcţia cadrului unui robot, şi apreciat
pentru faptul că se prelucrează foarte uşor.Acesta are o duritate slabă raportată la greutate.
- Plasticul este materialul folosit la aproape orice în zilele noastre, inclusiv la construcţia
roboţilor. Acesta are o duritate chiar mai mare decât a multor metale şi este foarte uşor de
prelucrat şi de lipit.
Acestea au fost doar câteva exemple de materiale cel mai des utilizate în construcţia
roboţilor, dar lista poate continua având în vedere apariţia de noi materiale a căror principală
6
caracteristică este duritatea maximă raportată la greutatea minimă. Un material uşor de
prelucrat cu greutate mică şi duritate mare constituie un avantaj şi duce implicit la o proiectare
mai bună a tuturor ansamblelor unui robot. Cu cât greutatea este mai mică cu atât consumul de
energie este mai redus şi implicit autonomia de funcţionare mai mare. În ceea ce priveşte
construcţia robotului din cazul de fata, materialele utilizate au fost:
-Plastic, baghete de plastic;
-Forex;
-Aluminiul;
Sunt multe aspecte de care trebuie ţinut seama la alegerea unui MC pentru o anumită
aplicaţie. Alegerea unui MC potrivit poate duce la succesul proiectului, aşa cum o alegere
nepotrivită poate duce la eşecul proiectului. Fiecare cititor trebuie să adapteze aceste criterii
nevoilor sale şi scalei proprii de valori. Obiectivul urmărit în alegerea unui MC este obţinerea
calităţii dorite cu un cost cât mai scăzut. Calităţile dorite înseamnă performanţă, fiabilitate,
calităţi EMC (de compatibilitate electromagnetică cu mediul), iar costul total include costurile
cercetării, proiectării, construcţiei, testării, reparării produsului. În primul rând se pune
problema stabilirii funcţiei pe care MC trebuie s-o îndeplinească în sistem. Alegerea din
catalog a unui MC trebuie făcută în ideea a cât mai puţin hardware suplimentar (din motive
economice). Procesul de căutare este dificil din cauza numărului foarte mare de tipuri de MC
disponibile pe piaţă. . După stabilirea MC optim se verifică preţurile, dacă este disponibil,
suportul acordat de fabricant, existenţa uneltelor de dezvoltare, stabilitatea firmei
constructoare. Un criteriu important este posibilitatea de a fi găsit pe piaţă (optenabilitatea),
mai ales în zone în care circulaţia mărfurilor este destul de greoaie. Criteriile pentru alegerea
unui MC sunt, în ordinea importanţei:
1). Posibilitatea folosirii în aplicaţia dată este suficient un MC sau sunt necesare circuite
suplimentare;
2). Liniile I/O sunt suficiente (un număr prea mic înseamnă că aplicaţia nu se poate face cu
acest MC, iar un număr prea mare înseamnă un cost excesiv);
3). Există toate interfeţele solicitate de aplicaţie: I/O serial, convertoare A/D, D/A şi nu există
interfeţe în plus;
4). Există capacitatea de memorare suficientă: RAM, ROM;
5). MC are viteza suficientă pentru această aplicaţie. Se verifică timpul necesar rulării
programului care trebuie să fie mai mic decât intervalul de timp în care trebuie să reacţioneze
MC.
Un argument pentru alegerea unui tip de MC este existenţa unui modul de evaluare.
Pentru a promova propriile MC, mulţi furnizori au creat Kit-uri de evaluare care conţin plăci
de evaluare şi un soft minimal cu care se poate învăţa utilizarea MC şi se pot pune la punct
8
aplicaţii. Un kit conţine de regulă un program monitor pentru calculator PC, un program de
transfer al datelor spre placa de evaluare (prin interfaţa RS232 sau CENTRONICS), un
asamblor şi un compilator C. Toate kiturile sunt însoţite de documentaţie.
9
modulelor I/O pot fi văzute de UC ca locaţii de memorie sau ca dispozitive de I/O într-un
spaţiu de adresare separat. Sub numele de dispozitiv I/O, într-o abordare generalizată, sunt
cuprinse principalele interfeţe ale MC (timer, canal serial UART) şi linii I/O grupate în porturi
paralele de uz general. Acelaşi nume generic poate acoperi şi interfeţele speciale întâlnite în
configuraţii particulare de MC (convertor A/D, interfaţă serială sincronă, interfaţă LCD,
interfaţă USB, etc.
FIG.5 PIC18F46K80
Particularizare. Diagrama bloc a microcontrollerului PIC18F46K80
10
FIG.6 Diagrama bloc a microcontrollerului PIC18F46K80
Dispozitive I/O
Dispozitivele I/O reprezintă un aspect de mare interes atunci când este vorba de
microcontroller, interes rezultat din însăşi particularitatea unui MC aceea de a interacţiona cu
mediul în procesul de control pe care îl conduce.
Dispozitivele I/O implementează funcţii speciale degrevând unitatea centrală de toate
aspectele specifice de comandă şi control în funcţia respectivă.Există o varietate mare de
dispozitive I/O; dispozitivele I/O conduc operaţii generale de comunicaţie (transfer serial sau
paralel de date), funcţii generale de timp (numărare de evenimente, generare de impulsuri),
operaţii de conversie analog/numerică, funcţii de protecţie, funcţii speciale de comandă, şi
enumerarea poate continua. Parte din resurse acoperă funcţiile de control propriu-zis, iar o
parte asigură funcţiile necesare aplicaţiilor în timp real (sistemul de întreruperi, timer). Din
această mare varietate, parte din dispozitive se găsesc în configuraţia tuturor MC sau sunt
11
foarte des întâlnite, iar o altă parte de dispozitive o regăsim doar în MC construite pentru a
optimiza aplicaţii cu un grad mare de particularitate. În acest capitol, în continuare, vor fi
prezentate dispozitive des întâlnite în echiparea MC. Dispozitivele I/O sunt “văzute” de
unitatea centrală ca porturi. Există două filozofii de alocare a adreselor (mapare) pentru
apelarea porturilor de către unitatea centrală. Porturile sunt mapate fie în spaţiul de memorie,
fie într-un spaţiu propriu.
12
Module Timer
1). Captură la intrare (IC - input capture) - această funcţie se bazează pe posibilitatea de a
stoca valoarea numărătorului principal la momentul apariţiei unui front activ al unui semnal
extern. Facilitatea permite măsurarea lăţimii unui impuls sau a perioadei unui semnal.
Facilitatea poate fi folosită şi ca referinţă de timp pentru declanşarea altor operaţii.
2). Comparare la ieşire (OC - output compare) - se compară la fiecare impuls de ceas valoarea
numărătorului principal cu cea a unui registru. Dacă se constată egalitate, în funcţie de
programarea anterioară pot avea loc următoarele evenimente: declanşarea unei acţiuni la un pin
de ieşire (opţional), setarea unui flag într-un registru sau generarea unei întreruperi pentru
unitatea central (opţional). Funcţia este folosită pentru a genera întârzieri sau pentru a genera o
formă de undă cu valori dorite pentru frecvenţă şi pentru factorul de umplere .
13
3). Întreruperi în timp real (RTI – real-time interrupt) – într-un sistem există sarcini care
trebuiesc executate periodic sau care nu permit depăşirea unui interval limită între doua
execuţii. Aceste sarcini sunt lansate ca rutine de tratare a întreruperii generate de timer.
4). COP (computer operating properly) watchdog – această funcţie este folosită pentru a reseta
sistemul în cazul în care din erori de programare (bugs) sau erori în desfăşurarea programului
datorate perturbaţiilor mediului, registrul COP nu este accesat într-un interval de timp prescris.
5). Acumulare de pulsuri (pulse accumulator) – este funcţia folosită pentru a număra
evenimentele ce apar într-un interval de timp determinat sau pentru a măsura durata unui
impuls.
Microcontrollerul PIC18F46K80
FIG.7 PIC18F46K80
14
capabilitatea de a executa un numar de 16 milioane de instructiuni pe secunda, lucru ce il
recomanda in proiecte de acest gen.
Un aspect important legat de acest tip de arhitectura este acela ca memoria program
este separata de memoria de date , in acest fel fiind posibila citirea unei date si a unei
instructiuni in acelasi timp( memoria de date si memoria program se afla pe BUS-uri diferite).
Tehnica pipeline este cea prin intermediul careia o instructiune se executa corect iar in cazul
de fata , o instructiune este corect realizata in 4 perioade de clock, astfel , la o frecventa a
oscilatorului de 64 Mhz, frecventa reala de lucru a microcontrolerului va fi de 264/4 = 16
Mhz, sau altfel spus, 16 mips (16 milioane de de instructiuni pe secunda) Aceasta tehnica se
regaseste si la procesoare si ajuta la cresterea vitezei propriuzise de lucru. Fiecare etapa din
cele 4 din procesul pipeline este executata de catre o unitate functionala a
microcontrollerului. Segmentele pipeline sunt conectate intre ele intr-un mod analog
asamblarii unei conducte din segmente de teava. Segmentele tipice de executie ale unei
instructiuni masina pe microcontroller sunt :
F- fetch - se refera la un ciclu special in care procesorul citeste din memorie codul
instructiunii ce urmeaza a fi executata.
D-decode – se refera la procesul de decodare , proces in care instructiunea este recunoscuta si
procesul are tot ce ii trebuie pentru executia instructiunii.
E-execute- reprezinta procesul propriuzis de executie a instructiunii
W-write-back- scrierea rezultatului inapoi in memorie.
15
FIG.9 Secventa de executie a unei instructiuni
16
• Power-Saving modul Sleep
• Gamă largă de tensiune gama de operare (2.0V-5.5V)
• Power-on Reset (POR)
• Power-up Temporizator (PWRT) şi Oscilator Start-up Temporizator (OST)
• Brown-out Reset (BOR)
• low-curent watchdog timer (WDT)
• anduranţă mare in scrierea Flash-ului / EEPROM-ului pe celulă:
- 100.000 cicluri Flash
- 1.000.000 cicluri EEPROM
- Flash / date EEPROM de retenţie:> 40 ani
• Memoria program de citire / scriere în cursul timpului de funcţionare
• In-Circuit Debugger
• Pana la 64 Kbytes de flash program memory
• Pana la 1024 Kbytes de memorie EEPROM (100000 de cicli de scriere/citire)
• Pana la 3.6 Kbytes de memorie SRAM
• Trei oscilatoare interne de 31 KHz, 500KHz si 16 MHz.
17
18
FIG.11 Descriere functionalitati pini
Pinul MCLR/Vpp
19
- MCLR and VPP sunt doua functii reprezentate prin acelasi pin;
- MCLR reprezinta Master Clear, iar functia de reset pe microcontroller va determina ca
microcontrollerul sa stea intr-o stare de reset atat timp cat MCLR este conectat la GND .
Datorita acestui fapt, pentru a se evita eventualele resetari ale microcontrollerului, se utilizeaza
un rezistor de tipul pull-up care mentine in permanenta pinul de MCLR la Vdd. Cand MCLR
e conectat ls Vdd , atunci microcontrollerul incepre sa execute prima instructiune din
memoria program.
Definitia VPP se traduce ca fiind Voltage for Programming si este utilizat in procesul scrierii
memoriei . Atunci cand amplitudinea tensiunii de pe pinul Vpp este cuprinsa intre 9-13v
microcontrollerul intra intr-o stare speciala de reset unde acesta nu functioneaza , dar poate fi
programat.
20
Codul Sursa – C
#define sus PORTA.f3
#define jos PORTE.f0
#define stanga PORTA.f2
#define dreapta PORTE.f1
#define stanga_sus PORTC.f2
#define stanga_jos PORTE.f2
#define dreapta_sus PORTA.f1
#define dreapta_jos PORTA.f0
#define centru PORTA.f5
#define LED_stanga LATD.f0
#define LED_centru_stanga LATD.f1
#define LED_dreapta LATD.f3
#define LED_centru_dreapta LATD.f2
#define servo_baza LATD.f7
#define servo_sus LATD.f6
#define servo_gripp LATD.f4
#define servo_ultim LATD.f5
//--------------------------------DESCRIERE------------------------------------//
/*Platforma robotica mobila comandata prin microswitch-ri si 3 grade de libertate.
Alimentarea sistemelor electronice componente se realizeaza la o tensiune de 5V,
tensiune obtinua prin stabilizare pozitiva de tensiune de la o sursa externa de
5-18V. Miscarile baratelor platformei robotice se realizeaza prin intermediul
servomecanismelor RC.*/
//-------------------------CONECTIVITATE si MODULE ELECTRONICE-----------------//
/*1). INTRARI DIGITALE :
RA0 = tasta dreapta jos;
RA1 = tasta dreapta sus;
RA2 = tasta stanga;
RA3 = tasta sus;
RA5 = tasta centru;
RE0 = tasta jos;
RE1 = tasta dreapta;
RE2 = tasta stanga jos;
RC2 = tasta stanga sus;
2). IESIRI LED-uri indicatoare:
RD0 = LED stanga;
RD1 = LED centru stanga;
RD2 = LED centru dreapta;
RD3 = LED dreapta;
21
void main() {
//---------setari registri clock---64Mhz => 61.2 ns/ instruction (measured with
oscilloscope)------//
// OSCILATORUL ESTE SETAT PE INTERNAL OSCILATOR 64 Mhz
// 1). Din seterile "project-edit project" se seteateaza tipul oscilatorului (setat pe internal RC
oscillator) din registrul CONFIG1H;
// a). Registrul CONFIG1H<3:0> = bitii FOSC<3:0> = "1000" ( modul = INTIO2 internal
RC oscillator);
// b). Registrul CONFIG1H<4> = PLLCFG = "1" (1 = Oscillator is multiplied by 4);
// 2). Registrul OSCTUNE <6> = PLLEN = "1" (Frequency Multiplier PLL Enable bit =
enable);
// 3). Registrul OSCCON <6:4> = bitii IRCF<2:0> = "111"(111 = HF-INTOSC output
frequency is used (16 MHz)) - tipul oscilaatorului intet folosit
// 4). Registrul OSCCON <1:0> = bitii SCS<1:0> = "00"(Default primary oscillator
(OSC1/OSC2 or HF-INTOSC with or without PLL. Defined by the FOSC<3:0> Configuration
bits, CONFIG1H<3:0>)
//---------------------------------------------------------------------------------------------------------------/
/
OSCCON = 0b01110000;
OSCTUNE.f6 = 1;
//------------------------setari TRIS-reg directivitate-----------------------//
TRISA = 0b00101111;
TRISC = 0b00000100;
TRISB = 0b00000000;
TRISD = 0b00000000;
TRISE = 0b00000111;
ANCON0=0; // Canalele AN0-AN7 de IN = digitale
ANCON1=0; // Canalele AN8-AN14 de IN = digitale
//----------------------SETARE INTRERUPERE PE TIMER1--------------------------//
INTCON.GIE = 1; //enable all un-masked interrupts
INTCON.PEIE = 1; //Set PEIE
T1CON = 1; //enable Timer1
PIR1.TMR1IF = 0; //clear interrupt flag
TMR1H = 0b11111111; // SET INITIAL START TIMER VALUE-High (step = 0.114
ms cu osciloscopul = pas de timer)
TMR1L = 0b11110111; // SET INITIAL START TIMER VALUE-Low
PIE1.TMR1IE = 0; // disable Timer1 interrupt
//----------------------------------------------------------------------------//
LATD = 0; // iesirile pe LED-uri =0;
for (;;){
//--------------------------------------------------servo baza = stanga-dreapta
while (stanga){
servo_baza= 1;
Delay_us(900);
servo_baza = 0;
Delay_ms(40);
LED_stanga = 1;
}
22
while (dreapta){
servo_baza= 1;
Delay_us(2000);
servo_baza = 0;
Delay_ms(40);
LED_dreapta = 1;
}
//-------------------------------------------------------------------servo gripp
while (dreapta_sus){
servo_gripp= 1;
Delay_us(900);
servo_gripp= 0;
Delay_ms(18);
LED_centru_stanga =1;
LED_centru_dreapta =1;
}
while (dreapta_jos){
servo_gripp= 1;
Delay_us(2100);
servo_gripp= 0;
Delay_ms(18);
LED_centru_stanga =1;
LED_centru_dreapta =1;
}
//----------------------------------------------------------------servo superior
while (sus){
servo_sus= 1;
Delay_us(900);
servo_sus = 0;
Delay_ms(40);
LED_centru_stanga =1;
}
while (jos){
servo_sus= 1;
Delay_us(1700);
servo_sus = 0;
Delay_ms(40);
LED_centru_dreapta =1;
}
//--------------------------------------------------------------servo sus ultim
while (stanga_sus){
servo_ultim= 1;
Delay_us(800);
servo_ultim = 0;
Delay_ms(30);
}
while (stanga_jos){
23
servo_ultim= 1;
Delay_us(2200);
servo_ultim = 0;
Delay_ms(30);
}
LED_centru_dreapta =0;
LED_centru_stanga =0;
LED_dreapta =0;
LED_stanga =0;
}
}
24
Bibliografie
25