Proiectarea, Comanda Si Controlul Unui Minivehicul Mobil
PROIECT DE DIPLOMĂ
PROIECTAREA, COMANDA ȘI CONTROLUL UNUI MINIVEHICUL MOBIL
CUPRINS
IntroducereCapitolul 1 – Considerații teoretice
– Microcontrollerul
– Scurt istoric.
– Microprocesor vs. Microcontroller
– Microcontrollerul – descriere generală
– Schema bloc
– Arhitecura microcontrollerului
– Memoria
– Dispozitivele I/O
– Sistemul de întreruperi
– Clasificare microcontrollere
– Microcontrollerele Atmel
– Motoare de curent continuu
Capitolul 2 – Conceptie, proiectare și execuție
2.1 – Concepția generală a minivehicululu
2.2 – Părți componente..
2.2.1 – Placa de dezvoltare Arduino
2.2.1.1 – Despre Arduino.
2.2.1.2 – Arduino Mega2650
2.2.2 – Cutia de viteze Tamiya 70097….
2.2.3 – Dispozitivul bluetooth JY-MCU BT
2.2.4 – Senzor ultrasunete HC-SR 04
2.2.5 – Driver de motoare L293NE..
2.2.6 – Șasiu și alimentare
2.3 – Funcționare și programare.
2.3.1 – Programare microcontroller Arduino
2.3.1.1 – Mediul de programare
2.3.1.2 – Concept de funcționare și programare
2.3.2 – Programare interfață de comandă și control
2.3.2.1 – Mediul de programare
2.3.2.2 – Concept de funcționare și programare.
Capitolul 3 – Concluzii
Bibliografie
Introducere
Odată cu momentul trecerii de la electronica implementată cablat la electronica programată, ritmul de dezvoltare a tehnologiei a crescut exponențial. Meritele acestei dezvoltări aparțin ideilor revoluționare a unor oameni de știință, precum John Bardeen, Walter Brattain, William Shockley, John von Neumann, Robert Noyce, Gordon Moore, Bill Gates, Paul Allen și multor alții, merite ce în cazul multor cercetători ai acestui domeniu au fost recunoscute cu Premiul Nobel.
Acest proiect, pune în aplicare câteva dintre inovatoarele descoperiri ale celei de-a doua jumătăți a secolului trecut, utilizând microcircuite și limbaje de programare pentru a pune în mișcare un minivehicul.
Documentația aferentă a acestui proiect, prezintă, pe lângă prezentarea propriu-zisă a minivehiculului din al doilea capitol, o parte teoretică, ce încearcă să prezinte cât mai bine elementele de bază ale unui astfel de device: microcontrollerul și motorul de curent continuu; toate acestea în primul capitul.
Deasemenea, un element important al realizarii oricărui proiect, și anume concluziile, vor fi trase în cel de-al treilea capitol.
Capitolul 1 – Considerații teoretice
– Microcontrollerul
– Scurt istoric
Istoria electronicii programate începe practic în anul 1971, când, pe 15 noiembrie, compania Intel, fondată 3 ani mai devreme, de către Robert Noyce și Gordon Moore, lansează pe piață primul microprocesor, 4004.
Intel 4004 (Fig.1.1.1) era capabil să proceseze datele pe 4 biți, dar instrucțiunile aveau o lungime de 8 biți și erau în număr de 46. Conținea 2300 de tranzistori, o memorie adresată de 4 KB și efectua 60000 de operații pe secundă la frecvența de baza de 108 kHz.
Tot în aceeași perioadă Intel a lansat RAM-ul, care, cuplat cu microprocesorul 4004, avea ca rezultat o viteză crescută de procesare.
Inițial, drepturile asupra arhitecturii 4004, apațineau companiei japoneze Busicom, dar, vazându-i imensul potențial, Intel a decis să cumpere aceste drepturi, ceea ce se va dovedi mai târziu, că a fost una dintre cele mai profitabile afaceri ale secolului XX, Intel devenind gigantul procesoarelor.
Astfel, a luat naștere microcalculatorul, denumit și PC, care, acum era destul de ieftin și destul de mic pentru a putea fi accesibil publicului larg.
Succesorul lui 4004 a apărut în 1972 și s-a numit Intel 8008. Acesta prelucra date pe 8 biți, avea 330 de tranzistori, frecvența de 800 kHz, memorie adresabilă de 16 KB, 48 de intrucțiuni și putea efectua 30000 de operații pe secundă.
În anul 1974, Intel a lansat microprocesorul 8080, pe 8 biți, ce avea performanțe de zece ori mai mari decăt ale lui 8008, și va deveni în scurt timp standardul din industria calculatoarelor. Acesta putea executa 290000 de intrucțiuni pe secundă, avea o frecventță de 2083 kHz, 72 de instrucțiuni, 64 KB de memorie adresabili și 4500 de tranzistori.
Intel 8080 a fost microprocesorul folosit la fabricarea primului calculator personal, Altair 8800 (Fig. 1.1.2) produs în 1975 de compania Micro Instrumentation Telemetry Systems, ce putea fi achiziționat pentru numai 395 de dolari. Evident, cererea a fost imensă.
Fig. 1.1.2
În anii următori, 70 și 80, a urmat o perioadă cu multiple perfecționări arhitecturale și tehnologice care au facut ca prețul și dimensiunea calculatorului personal să scadă incontinuu, pair puterea de calcul a acestuia să crească sistematic, creându-se o adevărată explozie pe piața americană și mondială.
În această perioadă au apărut limbajele de programare Pascal, C și FORTRAN 66, rețeaua de e-mail, sistemul de operare UNIX, TCP, sistemele de operare MS-DOS și Windows și multe altele.
Sunt înființate companii care aveau să ajungă unele dintre cele mai mari corporați de pe planetă, precum Microsoft, Apple, Intel, IBM, etc.
Deasemenea, tehnologia microprocesoarelor evoluează exponențial, ajungâdu-se de la un număr de 30000 de operații pe secundă și o memorie de 16 KB la viteze de peste 10¹² operații pe secundă și memorii de ordinul gigabyte.
Un criteriu important de clasificare a microprocesoarelor este numărul de biți pe care prelucreză datele. Astfel, microprocesoarele pot fi:
Microprocesoare pe 4 biți: Intel – 4004 (1971), Texas Instruments – TMS1000, Garret AiReaserch – Central Air Data Computer (CADC)
Microprocesoare pe 8 biți: Intel – 8008, 8080, Zilog – Z80, Motorol – 6800
Microprocesoare pe 16 biți: Intel 8086, 80186, 80286, 8086 SX, TI TMS 9900
Microprocesoare pe 32 de biți: MC68000, Intel 80386DX, 80486DX, Pentium, MIPS R2000, etc
Microprocesoare pe 64 de biți: majoritatea microprocesoarelor moderne
Odată cu apariția microprocesorului, și-a facut apariția și microcontrollerul. Acesta a apărut în același an, 1971, și a fost inventat de către doi ingineri ai companiei Texas Instruments, Gary Boone și Michael Cochran. Aceștia au creat TMS1000 (Fig. 1.1.3), un microcontroller pe 4 biți cu memorie RAM și ROM integrate. Acesta a fost mai întâi folosit intern, la Texas Instruments, la calculatoarele sale, ca mai apoi, în 1974, TI să înceapă să îl comercializeze.
Fig. 1.1.3
TMS1000 a fost oferit în numeroase configurații de capacitate a memoriei RAM și ROM și până în 1983 au fost vândute peste 100 de milioane de astfel de microcontrollere.
Intel, deasemenea, în afară de a produce primul microprocesor, a dezvoltat multe microcontrollere, printre care 8048 sau 8051. De exemplu, 8048 au fost utilizate ca procesoare pentru tastatura PC-ului IBM, în 1976 și s-au vândut în cantități ce depăsesc 1 miliard de unități. Microcontrollerele 8051, ce au urmat modelul 8048 au devenit cele mai populare microcontrollerele și sunt încă produse, 8051 devenind microcontrollerul cu cea mai mare durată de viață din istorie.
Un alt pas major în istoria microcontrollerelor a fost momentul în care microcontrollerele cu memorie programabilă au devenit disponibile. Acestea puteau fi programate, șterse și reprogramate utilizând semnale electrice
În ziua de azi, microcontrollerele sunt produse pentru arii precum automotive, iluminare, comunicații și dispozitive cu consum redus de energie.
Ele au devenit din ce în ce mai mici și mai puternice, de exemplu, în 2010, Atmel anunța un microcontroller flash ce măsura 2 mm pe 2 mm. Astfel, aceste microcontrollere sunt suficient de mici și suficient de ieftine pentru a putea fi utilizate într-o gamă foarte largă de aplicații, chiar precum jucăriile sau periuțele de dinți.
Se pot adăuga foarte multe atât despre istoria microcprocesoarelor, cât și despre istoria microcontrollerelor, tehnologia acestora dezvoltându-se foarte rapid și foarte mult în decurs de mai puțin de 50 de ani, dar cel mai corect ar fi să le cunoaștem mai în detaliu.
– Microprocesor vs. Microcontroller
Termenii „microprocesor” și „microcontroller” au fost întotdeauna confundați unul cu celălalt. Ambii descriu dispozitive destinate aplicațiior în timp real, având multe lucruri în comun, dar în același timp multe diferite.
Pentru a putea concluziona care sunt asemănările și , mai ales, care sunt deosebirile, putem începe prin a le prezenta pe amândouă mai în detaliu.
Microprocesorul este un circuit intergrat care conține doar o unitate centrală de procesare (CPU). Microprocesorul nu conține RAM, ROM sau alte periferice pe chip. Pentru a-l putea face funcțional trebuie să ii adăugăm toate acestea.
De cealaltă parte, microcontrollerul are CPU, memorie RAM, ROM și alte periferice integrate toate pe un singur chip. Este numit și minicomputer. Astăzi, companii precum ATMEL, Microchip, Texas Instruments, Freescale, Phillips, Motorola ș.a produc o gamă largă de microcontrollere.
Microcontrollerele sunt destinate executării unui singur task specific. Asta înseamnă că aplicații unde relația dintre intrări și ieșiri este definită, adică în funcție de anumite date de intrare sunt executate anumite procese, iar apoi sunt livrate date de ieșire. Aplicțiile fiind bine specificate, ele au nevoie de resurse mici, precum memorie RAM, ROM, porturi I/O, etc, ele putând astfel fi integrate pe un singur chip. De exemplu produse precum telefoane, telecomenzi, tastaturi, ceasuri, etc pot funcționa folosind o unitate de calcul mai lentă și cu resurse foarte mici.
Microprocesorul își găseste aplicabilitatea în task-uri foarte complexe, precum dezvoltarea de software, jocuri, site-uri, editare foto, etc. În aceste cazuri relația dintre intrări și ieșiri nu este definită. Ele au nevoie de resurse mari, precum RAM, ROM sau porturi I/O.
Frecvența de tact a unui microprocesor este mult mai ridicată față de cea a unui microcontroller. În timp ce un microcontroller are o frecvenșă de tact de 30-50 MHz, microprocesoarele au frecvențe ce depașesc 3 GHz.
Ca și costuri, cele două nici nu pot fi comparate, microcontrollerul fiind mult mai ieftin decât microprocesorul. Un microcontroller nu poate fi folosit în locul unui microprocesor, iar folosirea unui microprocesor în locul unui microcontroller nu este recomandată, deoarece costul aplicației ar crește foarte mult.
– Microcontrollerul – descriere generală
După cum spuneam, microcontrollerul este un calculator în miniatură, foarte ieftin, capabil să execute sarcini specifice, ca recepționarea unui semnal al unei telecomezi sau afișarea unor informații pe un display LED.
Cu toate că, spre deosebire de microprocesoare, nu pot executa decât un task al unei aplicații, microcontrollerele prezintă trei atuuri majore:
Cost scăzut: acesta poate fi considerat cel mai mare avantaj al microcontrollerelor, costul unui astfel de dispozitiv fiind infim mai mic decât al unui microprocesor, astfel înlocuirea sa este foarte la îndemână.
Consum scăzut de energie: în general microcontrollerele sunt fabricate folosind tehnologia CMOS (complementary metal oxide semiconductor), ceea ce face energia consumată să fie mai mică, iar rezistența la spike-urile de tensiune să fie mai bună.
Totul-în-unu: microcontrollerul comprimă CPU, RAM, ROM și porturi I/O într-un singur chip, capabil sa execute o sarcină dedicată.
Un astfel de microcontroller, în general, conține:
Unitatea centrală (CPU)
Generator de tact (la care trebuie adăugat un cristal de quartz sau un circuit RC)
Memorie volatilă (RAM)
Memorie non-volatilă (ROM/PROM/EPROM/EEPROM)
Dispozitive I/O serile și paralele
Controler de întreruperi, controler DMA, timere, convertoare A/D și D/A
Periferice
– Schema bloc
Privind schema bloc a unui microcontroller (Fig. 1.1.4) putem observa blocurile principale.
Acestea sunt:
Unitatea centrală de prelucrare
Memoria
Dispozitivele I/O
Elementul care leagă între ele aceste blocuri este magistrala, care conduce semnale de adresă, de date și de control, de aceea una dintre caracteristicile esențiale ale unui microcontroller este mărimea acesteia.
Ca intrări se folose energie: în general microcontrollerele sunt fabricate folosind tehnologia CMOS (complementary metal oxide semiconductor), ceea ce face energia consumată să fie mai mică, iar rezistența la spike-urile de tensiune să fie mai bună.
Totul-în-unu: microcontrollerul comprimă CPU, RAM, ROM și porturi I/O într-un singur chip, capabil sa execute o sarcină dedicată.
Un astfel de microcontroller, în general, conține:
Unitatea centrală (CPU)
Generator de tact (la care trebuie adăugat un cristal de quartz sau un circuit RC)
Memorie volatilă (RAM)
Memorie non-volatilă (ROM/PROM/EPROM/EEPROM)
Dispozitive I/O serile și paralele
Controler de întreruperi, controler DMA, timere, convertoare A/D și D/A
Periferice
– Schema bloc
Privind schema bloc a unui microcontroller (Fig. 1.1.4) putem observa blocurile principale.
Acestea sunt:
Unitatea centrală de prelucrare
Memoria
Dispozitivele I/O
Elementul care leagă între ele aceste blocuri este magistrala, care conduce semnale de adresă, de date și de control, de aceea una dintre caracteristicile esențiale ale unui microcontroller este mărimea acesteia.
Ca intrări se folosesc de regulă semnale provenind de la comutatoarele individuale sau de la traductoare (senzori de temperatură, de presiune, etc.). Aceste intrări pot fi analogice sau digitale. Informațiile provenite din intrări analogice sunt exprimate prin funcții continue de timp, citirea și interpretarea acestora necesitând prezența unor circuite capabile să prelucreze aceste informații (comparatoare, convertoare). Intrările digitale generează semnale discrete, acestea citindu-se direct la momentul citirii liniei respective.
Ieșirile, deasemenea pot fi analogice sau digitale și reprezintă în primul caz ieșiri ale convertoarelor numeric-analogice sau, în al doilea caz, informația este memorată pe aceste ieșiri până la o nouă scriere operată de către UCP la un port al microcontrollerului.
Ieșirile pot comanda relee, motoare, dispozitive de afișare, etc.
Fig. 1.1.4
Un element important, fără care un microcontroller nu poate funcționa este programul, care se stochează în memoria microcontrollerului.
– Arhitectura microcontrollerului
Arhitectura unui microcontroller reprezintă un design conceptual și o structură operațională a unui sistem. Există două arhitecturi ale unui design de microcontroller: arhitectura Harvard și arhitectura Von Neumann (Fig. 1.1.5). Diferența dintre acestea o reprezintă modalitatea în care datele și programele sunt accesate și stocate.
Arhitectura Harvard: această arhitectură prevede o magistrală separată pentru date și instrucțiuni. În momentul în care codul intrucțiunii se află pe bus-ul de intrucțiuni, pe bus-ul de date se află datele instrucțiunii anterioare. Această arhitectură are o complexitate mai mare, dar și viteza este, deasemenea mai bună.
Arhitectura von Neumann: Aceasta prevede o magistrală unică folosită atât pentru date cât și pentru instrucțiuni. Când un microcontroller cu o astfel de arhitectură adresează memoria, bus-ul este folosit pentru a transfera mai întâi codul instrucțiunii și mai apoi pentru a transfera date. Această arhitectură este mai simplă, dar, din cauză că accesul se realizează în doi pași, este destul de lentă.
Fig. 1.1.5
Cu cât structura, funcționalitatea și accesul la resursele unui microcontroller sunt mai standardizate și simetrizate, cu atât numărul de intrucțiuni de care dispune microcontrollerul este mai redus, iar viteza de execuție este mai mare.
– Unitatea centrală de prelucrare
Unitatea centrală de prelucrare(CPU) este formată din uniatea aritmetică și logică (ALU) și unitatea de control. ALU este responsabilă de efectuarea tuturor operațiior aritmetice și logice asupra operanzilor furnizați.
Unitatea de control decodifică codul operației conținut de codul unei instrucțiuni, pe baza acestei decodificări elaborâdu-se semnalele pentru comanda celorlalte blocuri pentru executarea unei intrucțiuni.
CPU conține un set de registrii interni folosiți pentru memorarea unor date des apelate sau pentru programarea unor anumite funcții. Cei mai importanți sunt registrul acumulator (A), registrul numărător (PC), registrul indicator de stivă (SP).
Astfel, s-au definit două concepte după care sunt construite unitatățile centrale de prelucrare a microcontrollerelor. Primul concept, CISC (complex instruction set computer), este conceptul cel mai întâlnit în construcția microcontrollerelor. Acesta prevede un număr mare de intrucțiuni, multe dintre ele specializate. Cel de-al doilea concept, RISC (reduced instruction set computer) are un număr mic de intrucțiuni, ceea ce aduce mai multe avantaje, printre care o viteză mai mare, consum mai mic, un număr mai mic de pini, deci dimensiuni mai mici ale chip-ului. Intrucțiunile pot fi folosite în orice mod de adresare sau cu orice registru, fiind simetrice și nu au restricții sau excepții. Tendința de evoluție a microcontrollerelor este spre conceptul RISC.
Cele două concepte pot fi pe scurt definite prin instrucțiuni complexe (CISC) și instrucțiuni simple (RISC). Exisă atât avantaje, cât și dezavantaje, atât pentru CISC , cât și pentru RISC.
Pe de o parte, instrucțiunile complexe ale conceptului CISC, pentru a fi executate trebuie descompuse în instrucțiuni simple, numite microinstrucțiuni, care pot fi executate de mai multe ori, odată decodate. Acestea asigură scurtarea programelor și în consecința o memorie mai mică necesară. Totodată lungimea înstrucțiunilor și timpul de execuție diferă foarte mult de la o instrucțiune la alta, ceea ce necesită operații logice suplimentare.
Pe de cealaltă parte, conceptul RISC elimină decodarea și microcodul (Fig. 1.1.6), instrucțiunile simple fiind executate direct de procesor prin ALU (arithmetic logic unit) și sunt de lungime fixă. Insă, instrucțiunile fiind simple, sunt utilizate de multe ori, programul devenind mai lung, iar numărul de registrii necesari este mai mare.
Deși, tendința este de a miza din ce în ce mai mult pe conceptul RISC, pe viitor se prevede că cea mai viabilă soluție va fi o combiare a celor două pentru a prelua avantajele fiecăruia.
Fig. 1.1.6
– Memoria
În ceea ce privește memoria, aceasta poate fi de mai multe feluri și este folosită în funcție de nevoile pe care le avem.
Astfel, memoria poate fi memorie RAM (random access memory), o memorie volatilă, ce poate fi citită sau scrisă de către CPU. Aceasta ocupă mult spațiu pe chip-ul microcontrollerului și astfel costurile implementării ei sunt mari.
Memoria ROM (read only memory), folosită la stocarea programelor fiind ieftină și simplă, nu se poate modifica , doar citi de către CPU.
Similară cu memoria ROM este memoria PROM (programmable ROM), dar care se poate programa de către programator. Ea poate fi de mai multe tipuri în funcție de modul de ștergere: EPROM (erasable PROM), poate fi ștearsă prin expunere la raze ultraviolete de nenumărate ori, ștergându-se tot conținutul acesteia; OTP (one time programmable PROM), nu se poate șterge sau reprograma; EEPROM (electrically erasable PROM), poate fi ștearsă electric de către CPU, selectiv; FLASH, asemănătoare cu EPROM și EEPROM, poate fi ștearsă și reprogramată electric, neselectiv.
– Dispozitivele I/O
Dispozitivele I/O reprezintă o parte foarte importantă a unui microcontroller, deoarece, acestea fac posibilă interacționarea cu mediul în procesul de control. Acestea preiau de la CPU toate aspectele legate de comandă și control în funcția respectivă, implementând funcții speciale.
Dispozitivele I/O sunt foarte diversificate. Cele mai importante dintre acestea sunt:
dispozitivele care conduc operații de comunicație,
funcții de timp,
operații de conversie analog/digital,
funcții de protecție,
funcții speciale de comandă, etc.
Unitatea centrală de calcul interpretează aceste dispozitive ca pe niste porturi. Pentru apelarea acestor porturi, există două metode de mapare a adreselor: în spațiul de memorie sau într-un spațiu separat. Aceste două metode prezintă, ambele, atât avantaje cât și dezavantaje.
Pentru metoda de alocare a adreselor porturilor în spațiul de memorie, avantajul major este că toate instrucțiunile de lucru cu memoria și toate modurile de adresare pot fi utilizate și în tratarea dispozitivelor I/O, în timp ce dezavatajele sunt susceptibilitatea la erori sofware și ocuparea spațiului de adresare disponibil pentru memorie.
De cealaltă parte, pentru alocarea în spații separate, avantajele constau în neocuparea spațiului destinat memoriei, invulnerabilitatea la erori, folosindu-se metode diferite pentru accesarea memoriei și simplitatea decodificatorului de adrese. Această metodă are, desigur și dezavantaje, precum nepermiterea folosirii modurilor de adresare folosite în lucrul cu memoria sau inflexibilitatea intrucțiunilor I/O, în comparație cu intrucțiunile folosite în lucrul cu memoria.
Precum spuneam, există o mare diversitate de dispozitive I/O, cele mai importante, enumerate mai sus, fiind prezente pe aproape toate configurațiile de microcontrolere.
Dispozitivele care conduc operații de comunicație pot avea funcții de transfer paralel sau transfer serial de date.
Porturile paralele facilitează transferul simultan a mai multor biți între microcontroller și mediul extern. Se pot transfera 8 sau mai mulți biți. În funcție de organizarea porturilor, sensul, de input sau output al unui astfel de port, stabilindu-se prin programare într-un registru de sens.
Pentru corectitudinea transferului responsabil este circuitul de interfață al portului și se folosește o metodă de sincronizare. Aceste metode sunt metoda de transfer direct, transfer strobat și transfer cu protocol (metoda handshake).
Pentru evaluarea porturilor paralele,, pricipalele însușiri de catre trebuie ținut cont sunt urmatoarele:
numărul de linii I/O,
posibilitatea programării sensului liniilor,
resursele accesibile,
posibilitatea accesării magistralelor interne,
aspectele electrice de interfațare.
Comunicația serială oferă compatibilitate cu o gamă extinsă de dispozitive și necesită un număr mic de fire, astfel, un număr mic de pini.
În transferul serial de date este necesat să se cunoască începutul și sfârșitul pachetului de informații transmise. Pentru aceasta emițătorul și receptorul de date trebuie să fie sincronizați. Această sincronizare se poate realiza prin trei metode: transferul serial asincron. transferul serial sincron și serial autosincronizat, dar numai primele două sunt mai frecvent folosite. În cazul ambelor metode se presupune că durata unui bit este egală , atât în cazul emițărorului, cât și în cazul receptorului. Numărul de biți transmiși într-o secundă reprezintă rata de transfer, numită și baud-rate și se măsoară în bps (biți/sec).
Prima metodă de sincronizare este metoda transferului asincron, sau UART (universal asynchronous receiver transmitter) (Fig. 1.1.8 – schema bloc). Într-un astfel de transfer începutul fiecărui octet este marcat de o tranziție a liniei menținută pe durata unui bit, iar sfârșitul de un bit de stop ce constă deasemenea în menținerea liniei pe durata unui bit în starea predefinită. (Fig. 1.1.7). O secvență completă este, deci, alcătuită dintr-un bit de start, un bit de stop și 8 sau 9 biți de date.
Fig. 1.1.7
Fig. 1.1.8
Metoda transferului sincron presupune ca datele transmise să fie însoțite și de semnalul de clock. Acesta este transmis pe o linie dedicată. Sunt necesare trei conexiuni pentru realizarea transferului serial sincron: emisie, recepție și clock. Protocolul dintre emițătpr și receptor include și o perioadă de sincronizare la inițierea transferului de date, sincronizare, care, spre deosebire de transferul asincron, se face o singură dată, la începutul transferului unui bloc de date. Transferul sincron permite viteze mai mari decât transferul asincron, viteze ce ajung la 1Mbps.
O conexiune de date serială sincronă se realizează între master și slave (Fig. 1.1.9), transferul fiind inițiat doar de dispozitivul master. Acesta scrie un octet în registrul de trasmisie, datele sunt apoi transferate unui registru de deplasare unde sunt serializate și transmise pe linia de emisie numită MOSI (master output slave input). Pe linia SCK (serial clock) este transmis clock-ul. La slave, datele ajung tot pe linia MOSI, tot într-un registru de deplasare unde, cu ajutorul clock-ului, sunt deplasate, iar la umplerea acestuia sunt transferate registrului de recepție de date. Pinii asociați conexiunii seriale sincrone sunt: MISO (master in slave out), MOSI (master out slave in), SCK (serial clock), nSS (non slave select).
Fig. 1.1.9
În cadrul sistemelor care comunică prin tranferul serial sincron trebuie să exite un master și unul sau mai multe dispozitive slave, existând mai multe metode de interconectare a acestora.
Interfața serială sincronă și interfața serială asincronă sunt întâlnite în microcontrollerele SCI (serial comunications interface), SPI (serial peripheral interface), SCI + și SIOP (simple I/O port).
Dispozitivele timer, având ca rol numărarea de evenimente sau generarea de impulsuri, sunt prezente pe toate microcontrollerele. Un astfel de sistem timer, pune la dispoziție funcții implementate pe baza unui numărător liber central și a unor blocuri funcționale specializate.
Timer-ul deține cele mai multe registre dintre toate dispozitivele I/O, toate funcțiile unui timer putând genera întreruperi independente, iar fiecare are propriul vector de întrerupere și control propriu.
Timerul poate fi folosit pentru orice funcție de timp. Funcțiile oferite de un timer sunt:
IC – input capture
OC – output compare
RTI – real-time interrupt
COP watchdog – computer operating properly watchdog
PA – pulse accumulator
PWM – pulse with modulation (Fig. 1.1.10)
Fig. 1.1.10
Nu în ultimul rând, foarte importante în contextul unui microcontroller modulele de conversie analog/digital și digital/analog. Acestea contribuie la puterea unui microcontroller în aplicații, deoarece interfațarea cu mediul presupune preluarea ți prelucrarea informațiilor analogice în informații digitale.
Ele sunt des întâlnite la perifericele on-chip, un exemplu simplu de astfel de convertor putându-se realiza folosind un timer în mod PWM și integraând pulsul în exterior cu un circuit simplu RC.
Astfel de convertoare nu sunt foarte performante, fiind lente în comparație cu cele implementate pe circuite dedicate. Timpii de conversie ai acestora sunt între 10 µs și 25 µs, rezoluția este de 8, 10 sau 12 biți, iar precizia de +/- ½ LSB.
Modulul de conversie este prevăzut cu multiplexor analogic, astfel că mai multe canale de intrare pot fi disponibile.
Un modul de conversie A/D (Fig. 1.1.11) este format dintr-un circuit analogic de intrare, care constă într-un multiplexor analogic, un circuit de eșantionare/memorare și un convertor A/D.
Fig. 1.1.11
– Sistemul de întreruperi
Sistemul de întreruperi reprezintă mecanismul prin care CPU răspunde evenimentelor exterioare. Acest mecamism asigură un raspuns rapid și specific la orice cerere de întrerupere.
Prin evenimente se înteleg acele stări din funcționarea sistemului care trebuie avute în vedere în controlul acestuia. Ele trebuie să declanșeze, cât mai rapid, un răspuns din partea sistemului. Unitatea centrală a unui microcontroller analizează în cadrul ultimei perioade de ceas a fiecărui ciclu instrucțiune eventualele cereri de întrerupere apărute pe parcursul execuției instrucțiunii curente.
Sistemul de înteruperi primește informațiile legate de evenimente generatoare de întreruperi de la canalele de transfer a informațiior generale, precum porturi sau timere, ori de la canalele de transfer a informațiior specifice, precum interfețele specializate UART, SPI, etc și le analizează folosind o unitate de analiză numită controller de întreruperi (CI), dar și mecanismul care oprește execuția programului curent de către CPU și analizează declanșarea rutinei adecvate de tratare a întreruperii.
Analiza controllerului de întreruperi (CI) presupune indentificarea sursei generatoare a cererii de întrerupere și determinarea ordinii de servire a cererilor de întrerupere, în cazul în care mai multe astfel de cereri apar simultan. Această ordine este stabilită în funcție de gradul de prioritizare a unei anumite cereri de întrerupere.
Domeniul de adrese de memorie în care sunt plasate instrucțiunile de start a rutinelor de servire a întreruperilor se numește tabela vectorilor de întrerupere, acest domeniu putând avea adrese fixe, specifice canalelor întrerupătoare sau adrese ce sunt stabilite de către proiectant.
Având toate aceste date despre construcția și arhitectura unui microcontroller putem observa și întelege cât mai bine o schemă generalizată a unui microcontroller (Fig. 1.1.12).
Fig. 1.1.12
– Clasificare microcontrollere
Se pot considera mai multe criterii după care microcontrollerele se pot clasifica. Printre acestea se pot număra dimensiunea magistralelor, interfețele incluse, furnizorul, domeniul de aplicabilitate.
O clasificare sumară se poate realiza, de exemplu, după compatibilitatea software:
Microcontrollere cu arhitectură CISC:
Compatibile 8051
Motorola 68xx
Compatibile x86
COP8 (National Semiconductor)
ST (Thomson)
TMS370 (TI)
Alte arhitecturi, mai ieftine : HITACI – 4 biți, Z8 – 8 biți
Microcontrollere cu arhitectura RISC
Super H – Hitachi
PIC – Microchip
AVR și ARM – Atmel
– Microcontrollerele Atmel
Una dintre cele mai importante companii fabricante de microcontrollere este Atmel.
Cele două familii principale de microcontrollere fabricate de aceștia sunt familia AVR și familia ARM.
Atmel produce microcontrollere în diverse variante, începând cu modelele low-cost AT90S2323 și AT90S1200 și terminând cu modelel complexe AT90A4414 și AT90S8515, diferența între acestea făcându-se în principal din mărimea și tipul memoriei, dar și a facilităților incluse în interfața cu utilizatorul.
Microcontrollere din familia AVR (Fig.1.1.13 – schema bloc) sunt contruite în jurul arhitecturii Harvard și dipun de o prelucrare de tip pipeline a intrucțiunilor în două trepte, astfel, cât timp o instrucțiune este executată, cealaltă se află în ciclul de aducere din memorie (fetch), executându-se astfel câte o instrucțiune la fiecare ciclu.
Fig. 1.1.13
De cealaltă parte, microcontrollerele din familia ARM (Fig. 1.1.14 – schema bloc) au un nucleu cu arhitectură RISC de mare performanță, conceput cu o arhitectură von Neumann, cu magistrala de date pe 32 de biți, două seturi de instrucțiuni și spațiu adresabil de 4G.
Acestea dispun de o prelucrare pipeline pe trei nivele: extragere cod, decodificare și execuție. CPU poate lucra cu date pe 8, 16 sau 32 de biți, iar nucleul are integrat un circuit JTAG și un emulator de circuit.
Deasemenea are mai multe magistrale de legătură pentru a asigura un paralelism ridicat.
Fig. 1.1.14
1.2 – Motorul de curent continuu
Zénobe Gramme a fost cel care a inventat motorul de curent continuu (Fig. 1.2.1), în 1873, conectând un generator de curent continuu, la un generator asemănător și a observat că mașina se rotea, realizându-se astfel conversia energiei electrice provenită de la generator.
Fig. 1.2.1
Motorul de curent continuu cuprinde două componente principale și anume: statorul (partea imobilă a motorului) și rotorul (partea mobilă). Polii magnetici și bobinele polare sunt concentrate pe stator, creând câmpul magnetic de excitație. Sensul curentului prin înfășurarea rotorică, este schimbat de un colector, care este situat pe axul motorului, ceea ce duce la exercitarea în permanență a unei forțe față de rotor, de către câmpul magnetic de excitație.
Statorul este compus din: carcasă, poli principali(de excitație), poli auxiliari (de comutație) și piese de strângere.
Principalul element de rezistență mecanică al mașinii este reprezentat de carcasă. Aceasta și jugul statoric sunt realizate de obicei dintr-un cilindru din fontă sau oțel turnat, datorită faptului că, fluxul magnetic statoric este constant în timp. Materialele care sunt folosite la construcția carcasei trebuie să conțină proprietaăți magnetice bune, pentru că în ea este închis fluxul magnetic inductor. Polii magnetici și cei auxiliari se fixează în interiorul carcasei prin șuruburi.
Polii principali de excitație ai mașinii sunt compuși dintr-un miez feromagnetic.Bobinele de excitație sunt sprijinite pe piesele polare și sunt montate pe miezul polar. Datorită secțiunii mărite, piesa polară, ajută la omogenizarea câmpului magnetic produs în întrefier și la fixarea bobinei de excitație.
Polii auxiliari având de obicei o formă paralelipipedică, sunt realizați dintr-un miez de fier. Secțiunea acestora este mai mică decât a celor principali. Ei se situează la mijlocul distanței dintre polii principali. Înfășurarea indusă și cele de excitație ale polilor, sunt conectate, de regulă, în serie.
Rotorul, având rol de indus, este compus din: arbore(ax), înfășurarea indusă, miez feromagnetic și colector.
Materialul din care este realizat miezul rotoric, este un material feromagnetic moale. Pentru a limita pierderile prin curenți turbinari, acesta este realizat din tole de oțel. Ele sunt izolate între ele cu un strat foarte subțire de oxid sau de lac. Tolele sunt grupate în pachete și sunt fixate pe arbore, prin presare. Tolele extreme au o grosime mai mare, acest lucru fiind necesar pentru rigiditatea mecanică a pachetelor. Spațiile libere dintre pachete, formează canale de ventilație.
Rolul colectorului este de redresare a tensiunii electromotoare alternative. Se disting două tipuri principale de colectoare și anume: în coadă de rândunică și în formă de H.
În funcție de modul de conectare al înfășurării de excitație, se disting patru categorii de motoare de corent continuu:
Cu excitație derivație;
Cu excitație serie;
Cu excitație mixtă;
Cu excitație separată;
Capitolul 2 – Concepție, proiectare și execuție
2.1 – Concepția generală a minivehiculului
Pentru realizarea proiectului de licență am conceput un sistem de comandă și control al unui dispozitiv mobil, pe scurt un robot.
Istoria roboților a început în urmă cu aproape 2500 de ani, când, în anul 350 î.H, matematicianul grec Archias din Tarent a construit primul mecanism propulsat cu abur.
Astfel, de-a lungul veacurilor, o mulțime de oameni de știință au facut ca tehnologia a roboților să evolueze, de la mașinăria lui Archias din Tarent la roboți capabili sa recunoască oameni, gesturi și să ia decizii proprii, precum robotul ASIMO, construit de firma Honda.
Revenind la sistemul prezentat în această lucrare (Fig. 1), comanda și controlul acestuia este realizată prin intermediul unei conexiuni Bluetooth între un computer și dispozitivul mobil, prin intermediul microcontroller-ului Arduino Mega 2650 (prezentat mai jos) și a dispozitivului JY-MCU BT (deasemenea detaliat ulterior), dispozitiv care, conectat la plăcuța Arduino, asigură conexiunea Bluetooth de care avem nevoie pentru comandă și control.
În schema urmatoare este reprezentată structura minivehiculului.
Părțile componente ale acestuia, sunt:
Plăcuța Arduino Mega 2560
Driver motoare L293NE
Senzor Sonar HC_SR_04
Modul bluetooth JY_MCU_BT
Acumulatori 1.5V, 2400mA (4 bucăți) + baterie 9V.
Motoare CC (2 bucăți)
Sistem de roți dințate pentru transmisia rotației motoarelor către roți
Șasiu de aluminiu + 2 roți + o bilă metal (ca punct de sprijin)
Sistem de fire
Principiul de funcționare al minivehiculului este următorul:
Deplasarea minivehiculului este programată a se desfăsura în două moduri
diferite. Primul mod, este modul automat. În momentul în care robotul se află în acest mod, acesta se deplasează pe direcția înainte, până la întâlnirea unui obstacol. În momentul în care un obstacol este întâlnit, robotul virează spre dreapta până când semnalul de prezență al unui obstacol nu mai este recepționat.
Cel de-al doilea mod, este modul manual, mod în care mișcarea minivehiculului este controlată de către utilizator de la tastatura computerului.
Interschimbarea dintre cele două moduri de funcționare, ca de altfel și comenzile de oprire și control, sunt realizate prin trimiterea unui caracter, pe portul serial, către robot.
Toate comenzile, precum și conexiunea între computer și minivehicul se vor realiza cu ajutorul unei interfețe grafice, care rulează pe un computer, care, pentru a putea fi folosit în controlul minivehiculului trebuie sa fie dotat cu dispozitiv bluetooth.
Dar, înainte de a ajunge să detaliez această parte, de comandă și control a minivehiculului, trebuie să cunoaștem parte hardware a acestuia. Toate componentele sale, cor fi prezentate, pe rând, în subcapitolele ce urmează.
2.2 – Partea hardware – părți componente ale minivehiculului
2.2.1 – Placa de dezvoltare Arduino
Fig.1
2.2.1.1 – Despre Arduino
În cea mai simpla formă, o placă de dezvoltare ARDUINO (logo – Fig.1) poate fi considerată ca un mic computer căreia îi poți controla intrările și ieșirile de la chip.
ARDUINO este un microcontroller pe un singur PCB (printed board circuit) destinată aplicării mai accesibile a obiectelor sau mediilor interactive.
Din punct de vedere hardware, ARDUINO este conceput în jurul unui microcontroller Atmel AVR, arhitectură Harvard RISC pe 8 biți, sau Atmel ARM pe 32 de biți. Deasemenea, pe lânga microcontroller, o placuță ARDUINO deține un oscilator, un regulator liniar de 5V ,o interfață USB, un anumit număr de pini de intrare și de ieșire, în funcție de modelul pe care îl deții (Fig. 2 – Arduino UNO).
Fig.2
ARDUINO a luat naștere in 2005 ca un proiect studențesc la Institutul Interaction Design Ivrea din Italia. Din echipa care a proiectat Arduino au facut parte Hernando Barragan, Massimo Banzi, David Cuartielles, Dave Mellis, Gianluca Marino și Nicholas Zambetti, având la bază prototipul de microcontroller Wiring, creat de Hernando Barragan in 2004, ca teză de doctorat la același institut.
Scopul lor era sa creeze un prototip de platformă electronică, mai simplă decât Wiring, făcând-o mai accesibilă utilizatorilor nespecializati in domeniul tehnic.
În final, Arduino încorpora urmatoarele caracteristici: un mediu de programare, posibilitatea de a programa placuța folosind o conexiune standard USB și un preț accesibil, având succes imediat pe piață.
Modele:
Astăzi, Arduino a devenit una dintre cele mai populare prototipuri de platforme din lume.
Aceștia au dezvoltat până astăzi circa 20 de modele diferite, fiecare specializată pentru diferite aplicații: Arduino Uno, Arduino Leonardo, Arduino Due, Arduino Yun, Arduino Tre, Arduino Micro, Arduino Robot, Arduino Esplora, Arduino Mega ADK, Arduino Ethernet, Arduino Mega 2560, Arduino Mini, LilyPad Arduino USB, LilyPad Arduino Simple, LilyPad Arduino SimpleSnap, LilyPad Arduino, Arduino Nano, Arduino Pro Mini, Arduino Pro și Arduino Fio.
2.2.1.2 – Arduino Mega 2560
Arduino Mega 2560 este un microcontroller bazat pe ATmega2560 (datasheet atașat la Anexe) de la Atmel.
Acesta are 56 de pini digitali de I/O (dintre care 15 pot fi folosiți ca ieșiri PWM), 16 pini analogici, 4 porturi seriale, un oscilator de 16 MHz, conexiune USB, mufă de alimentare jack, mufa ICSP (in-circuit serial programming) și un buton de reset.
Arduino Mega 2560 este un update la Arduino Mega, pe care îl inlocuiește.
Mega 2560 diferă față de predecesoarele sale prin faptul că nu folosește chip-ul USB-To-serial FTDI, ci ATmega16U2 programat ca și convertor USB-to-serial.
În anexa puteți vedea schema electronică și maparea pinilor, iar pe CD sunt adaugate și fișierele EAGLE.
Sumar:
Microcontroller ATmega2560
Tesiune operațională 5V
Tensiune de intrare(recomandată) 7-12V
Tensiune de intrare(limite) 6-20V
Pini I/O digitali 54 (15 furnizează ieșire PWM )
Pini de intrare analogici 16
Curent DC per pin I/O 40mA
Curent DC pentru pinul 3.3V 50mA
Memorie Flash 256KB (8KB folosiți de bootloader)
SRAM 8KB
EEPROM 4KB
Frecvența de tact 16MHz
Alimentare:
Aduino Mega poate fi alimentat prin conexiune USB sau cu o sursă de tensiune externă. Sursa de alimentare se selectează automat.
Sursa externa poate proveni ori de la un adaptor AC-to-DC ori de la o baterie. Adaptorul poate fi conectat introducând mufa de 2.1mm în mufa jack a plăcii. Direct de la baterie se pot conecta fire in pinul Gnd, respectiv pinul Vin de pe conectorul POWER.
Placuța poate funcționa cu o tensiune externă între 6 si 20 de volți. Dacă este alimentată la mai puțin de 7V, pinul de 5V poate scoate mai putin de 5V și placa poate deveni instabilă. Dacă folosim mai mult de 12V, regulatorul de tensiune se pote supraîncalzi și afecta placa, așa ca tensiunea recomandată este intre 7 și 12V
Pinii de alimentare sunt urmatorii:
Vin . Pinul de alimentare de la o sursă externă de tensiune (nu cea de 5V de la conexiunea USB) . Putem alimenta placa prin acest pin, sau daca folosim mufa jack, accesul se face prin acest pin.
5V. Acest pin scoate o tesiune constantă de 5V din regulatorul de tensiune. Alimentând placa prin pinul 5V sau 3.3V regulatorul de tensiune nu mai este folosit, putându-se afecta placa, de aceea nu este recomandat.
3V3. O iesire de 3.3V generată de regulatorul de tensiune. Curentul maxim este de 50mA.
GND. Pini de împământare (ground).
IOREF. Acest pin furnizează tensiunea de referință cu care operează microcontrollerul.
Intrări și ieșiri:
Fiecare dintre cei 54 de pini digitali pot fi folosiți ca pini de intrare sau de ieșire, folosind funcțiile pinMode(), digitalWrite() și digitalRead(). Ei operează la 5V, fiecare putând genera sau primi maximum 40mA și fiecare având un rezistor pull-up de 20-50 kΩ.
Unii dintre acești pini au funcții speciale:
Serial: 0(Rx) și 1(Tx); Serial1: 19(Rx) și 18(Tx); Serial2:17(Rx) și 16(Tx); Serial3: 15(Rx) și 14(Tx), folosiți pentru a recepționa (Rx) sau pentru a transmite (Tx) date pe portul serial.
Întreruperi externe: 2(întrerupere 0), 3(întrerupere 1), 18(întrerupere 5), 19 (întrerupere 4), 20 (întrerupere 3) și 21 (înterupere 2). Acești pini pot fi configurați pentru a declanșa întreruperi.
PWM: pinii 2-13 și 44-46 furnizează ieșiri dePWM pe 8 biți cu ajutorul funcției analogWrite().
SPI: 50(MISO), 51(MOSI), 52(SCK), 53(SS). Acești pini suportă comunicația SPI folosing librăria SPI.
LED: 13. Un LED este conectat la pinul 13.
TWI: 20(SDA) și 21(SCL). Suportă comunicația de tip TWI folosind librăria Wire.
Mega2560 are 16 pini analogici de intrare, fiecare generând 10 biți de rezoluție. Implicit, aceștia pot măsura de la ground până la 5V, putându-se totusi modifica limita lor superioară folosind pinul AREF și funcția analogReference().
Astfel, mai există încă 2 pini:
AREF: Tensiunea de referință pentru intrarea analogică.
Reset: Punând acest pin pe 0 se poate reseta microcontrollerul.
Comunicația:
Arduino Mega2650 are câteva facilități de comunicare cu un computer, cu un alt Arduino sau alte microcontrollere.
Microcontrollerul ATmega2560 vine cu patru interfețe seriale asincrone (UART). Librăria SoftwareSerial permite comunicția serială pe orice pricare dintre pinii digitali.
De asemenea, Mega2650 suportă și comunicația TWI (sau I2C) și SPI.
Programarea:
Arduino Mega2650 poate fi programat folosind softul Arduino (Arduino IDE), platformă scrisă în Java. Aceasta include un editor de cod cu facilități precum evidențierea sintaxei, potrivirea acoladelor sau spațierea automată. Deasemenea este capabilă de a compila și încărca programe pe placa, cu ajutorul unui singur clic.
Un program sau un cod scris pentru Arduino se mai numeste și ”sketch”. Programele sunt scrise în limbajul C sau C++.
Exemplu de cod pentru Arduino
ATmega2560 de pe Arduino Mega vine cu un bootloader pre-programat care permite încarcarea de cod nou fără a mai folosi un programator extern. Comunicarea se face folsind protocolul original STK500. Deasemenea, se poate sări peste bootloader și programa microcontrollerul cu ajutorul ICSP(In-Circuit Serial Programming) .
Protecția împotriva curenților mari și scurturilor pe USB:
Arduino Mega este prevăzut cu o siguranță resetabilă care protejează porturile USB ale computerului împotriva scurt-circuitelor și a curenților mari. Deși majoritatea calculatoarelor dețin propria protecție, siguranța generează un nivel suplimentar de protecție. Dacă se aplică peste 500mA pe portul USB, siguranța va întrerupe automat conexiunea până când scurtul va fi îndepărtat.
Caracteristicile fizice :
Lungimea și lățimea maximă a unei plăcuțe Arduino Mega2650 este de 10.1 cm, respectiv 5.3 cm, cu tot cu conectorul USB și mufa Jack, care depașesc dimensiunea PCB-ului.
Deasemenea, 3 găuri pentu șuruburi permit ca placa să fie atașată de o suprafață sau o carcasă.
2.2.2 – Cutia de viteze Tamiya 70097
Tamiya 70097 este o cutie de viteze mică (cca. 7.6 cm) fabricată din plastic. Acesta conține 2 motoare de curent continuu care pot mișca separat 2 tije hexagonale de 3 mm.
Există două modalități de a asambla acest kit: cu o rată de transmisie de viteză mare de 58:1 sau cu o rată de 203:1, de viteză mică.
Dimensiunile cutiei de viteze, in mm
Specificații generale:
Tensiune normală de operare 3V
Raport de transmisie 58:1, 204:1
Viteza arborelui motor liber la 3V ~12300 rpm
Curent la 3V 150mA
Curent de blocare 2100mA
Cuplu arbore motor 0.5 oz
Culoare gri
Motoare:
Cutia de viteze Tamiya 70097 Twin-Motor deține două motoare de curent continuu Mabuchi.
Aceste motoare au dimensiunile 25×15×20 mm, cântaresc 18g și au tija rotativă cu un diametru de 2 mm.
Ele au o tesiune operațională recomandată între 3 și 12 V. La o tesiune de 6V dezvoltă o viteză de aproximativ 11.500 rpm, curentul la liber fiind de 70mA iar la blocare de 800mA.
Atașat la Anexa se poate găsi datasheet-ul acestui motor.
2.2.2 – Dispozitivul bluetooth JY-MCU BT
JY-MCU BT este un dispozitiv care funcționează ca un port serial bluetooth, foarte ușor de folosit pentru a înlocui comunicația seriale prin fire.
Poate fi folosit pentru a stabili legături între un MCU și GPS, între un PC și un proiect embedded, etc.
Specificații tehnice:
Tensiune alimentare 3.3 V (2.7V – 4.2V)
Curent împerechere: 35mA; conectat: 8mA
Temperatură funcționare -40/+105
Dimensiuni 26.9×13×2.2mm
Sensibilitate recepție -85dBm
Clasa de putere +6dBm
Frecvență unde 2.4 – 2.8 GHz , bandă ISM
Protocol Bluetooth Bluetooth 2.0
Rate de transfer 4800, 9600, 38400, 57600, 115200, 230400, 460800, 921600, 1382400
Viteză asincron: 2.1Mbps/460kbps
sincron: 1Mbps/1Mbps
Modulație GFSK
Setarea implicită a portului serial : 9600, N, 8, 1.
Codul de împerechere :1234
Schema electrică:
2.2.3 – Senzor ultrasunete HC-SR 04
Senzorul ultrasonic HC SR04 folosește un sonar pentru a determina distanța până la un obiect, asemenea liliecilor sau delfinilor.
Acesta oferă o rază de detecție foarte bună și o bună acuratețe și stabilitate a citirii, totul foarte ușor de folosit. Poate detecta obstacole de la 400 cm până la 2 cm, fără a fi influențat de lumina solară sau umbre.
Vine dotat atât cu un emițător de ultrasunete, cât și cu receptor.
Specificații tehnice:
Tesiune de alimentare 5V
Curent pasiv < 2 mA
Curent de funcționare 15 mA
Arie de acoperire 2 cm – 400 cm
Rezoluție 0.3 cm
Unghi de măsurare 30 de grade
Lățime puls de trigger 10 µS
Dimensiuni 45mm×20mm×15mm
Funcții și aspect
Modulul HC-SR04 este echipat cu 4 pini:
VCC – asigură alimentare cu 5V curent continuu
GND – împământare
Trig – semnalul de intrare al senzorului de tip trigger
Echo – semnalul de ieșire al senzorului de tip echo
Dimensiunile modulului exprimate în mm:
Raza de detecție a obstacolelor și acuratețea detecției:
Mod de funționare:
Pentru a începe masuratoarea, pinul Trig al modulului trebuie să primească un impuls de 5V pentru cel puțin 10 µs. Acest lucru va inițializa senzorul și va transmite 8 cicli de unde ultrasonice la 40 kHz prin intermediul emițătorului și va aștepta undele ultrasonice reflectate.
În momentul în care modulul detectează unde ultrasonice prin intermediul receptorului, va seta pinul Echo pe 5V pe o perioadă proporțională cu distanța.
Pentru a obține distanța trebuie sa masurăm lungimea de timp în care pinul Echo a fost setat pe 5V (high).
T(timpul) = lățimea pulsului pe Echo, în µs
D(distanța) = T/58 – pentru cm
D(distanța) = T/148 – pentru inch
Sau se poate utiliza viteza sunetului care este egală cu 340 m/s.
Diagrama temporală a modulului HC-SR04
2.2.4 – Driver de motoare L293NE
L293NE (fig.1) Este un driver cvadruplu de tip Half-H destinat furnizării curenților de acționare de până la 1A la tensiuni între 4.5 și 36 V.
Este proiectat pentru a conduce sarcini inductive precum relee, bobine, motoare pas-cu-pas sau de curent continuu, ca și alte dispozitive de sarcini de curenți și tensiuni ridicate.
Toate intrările sunt compatibile TTL (transistor-transitor logic).
Driver-ele sunt activate pe perechi, cu 1 și 2 activate cu pinul 1,2EN și driver-ele 3 și 4 activate cu pinul 3,4EN (fig.2 și fig.3). Când un semnal de intrare pentru enable este pozitiv (high), driver-ele asociate sunt activate , iar ieșirile acestora sunt active și ăn aceeași fază cu intrările. Când un semnal de intrare pentru enable nul (low), aceste drivere sunt dezactivate, ieșirile lor sunt oprite și în starea de înaltă impedanță. Cu intrările corespunzătoare setate, fiecare driver formează o punte H reversibilă, utilă pentru aplicațiile de motoare sau bobine.
L293NE – fig.1
Specificații tehnice și parametrii
Tip dispozitiv Semi-punte
Curent de vârf la ieșire 2A
Drivere 4
Tensiune de alimentare minimă 4.5V
Tensiune de alimentare maximă 36V
Curent alimentare 24mA
Construcție carcasă
DIP
Număr pini 16
Latență intrare 800ns
Latență ieșire 400ns
Temperatura de operare minimă 0°C
Temperatura de operare maximă 70 °C
Diagrama logică – fig.2
Layout pini L293NE – fig.3
Principiul de funționare se poate observa în urmatoarea diagramă bloc:
Pentru detalii complete despre driverul L293 și în special despre L293NE, în Anexa se poate accesa Datasheet-ul oferit de către producator (Texas Instruments).
2.2.5 – Șasiu și alimentare
Sistemul de alimetare a minivehiculului este format din două părți. Prima parte o reprezintă o baterie de 9V, pentru alimentarea plăcuței Arduino și implicit a senzorului ultrasonic și a modulului bluetooth, iar cea de-a doua este alcatuită din 4 acumulatori de 2400mA la 1.5 V grupați în serie pentru a pune în mișcare cele două motoare de curent continuu prin intermediul driverului.
Șasiul este format dintr-o platformă de aluminiu acoperită cu material ESD, cu dimensiunile 135 mm lățime și 165 mm lungime, două roți cu diametrul de 50 mm, patru elemente de susținere și fixare a plăcuței Arduino cu înălțimea de 40 mm și o bilă de metal.
2.3 – Partea software – funcționare și programare
2.3.1 – Programare microcontroler Arduino
Vorbind despre partea software a proiectului, aceasta trebuie delimitată în două părți distincte. Partea de programare a microcontrolerului Arduino și partea de control, realizată printr-o interfață, de pe computer.
2.3.1.1 – Mediul de programare
Prima parte, partea de programare a microcontrolerului Arduino Mega 2560, se poate realiza folosind mediul de dezvoltare Arduino IDE, dezvoltat de către Arduino pe o platformă Java.
Mediul de dezvoltare Arduino (Fig. 1) conține un editor de text, o zonă de mesaje, o consolă de text, o bară de unelte ce conține butoane pentru funcțiile obișnuite și o serie de meniuri.
Prin intermediul acestui mediu se poate realiza conexiunea la plăcuța Arduino și se pot încărca programe.
Fig.1
Programele scrise folosind acest mediu sunt numite sketch-uri sau schițe. Acestea sunt scrise în editorul de text și sunt salvate cu extensia .ino.
Acest editor de text are incluse funcții de tăiere/lipire, dar și de căutare/înlocuire.
Zona de mesaje oferă feedback în momentul salvării sau încăcarii și, deasemenea afișează erori. Consola de text a Arduino IDE afișează erorile de compilare și alte informații. Deasemenea, se afișează, în partea de jos , portul serial și placa la care ești conectat.
Butoanele din bara de unelte permit verificarea și încărcarea programelor, crearea, deschiderea și salvarea sketch-urilor și deschiderea portului serial.
Limbajul de programare Arduino se bazează pe ”Wiring”, o platformă de calcul fizic similară, care se bazează pe mediul de programare de procesare multimedia. Pe scurt, limbajul pe care îl folosește Arduino este C.
Structura unei schițe Arduino este formată în principal din două funcții: setup() și loop(), după cum se poate vedea și în exemplul din Fig.1.
Funcția setup() este apelată la începutul unui sketch. Este utilizată în inițializarea variabilelor, modării pinilor, începerea utilizării unor librării, etc. Această funcțieca fi rulată o singură dată, la fiecare pornire sau resetare a plăcuței.
După crearea funcției setup(), funcția loop() execută exact ceea ce îi sugereaza numele, adică o buclă infinită, permițându-i programului să raspundă și să execute. Este utilizată pentru a controla activ placa Arduino.
2.3.1.2 – Concept de funcționare și programare
Revenind la principiul de funcționare, spuneam mai sus că minivehiculul funcționează în două moduri diferite: modul automat și modul manual.
În funcția „setup()” am deschis și setat rata de transfer pe serial pentru două porturi.
Prima funcție, „Serial.begin(9600);” deschide și setează baudrate-ul pentru portul dedicat comunicării cu Arduino, iar cea de-a doua, „Serial1.begin(9600);” deschide și setează baudrate-ul pentru portul dedicat comunicării bluetooth.
Deasemenea, tot în corpul funcției „setup()” am configurat pinii ca find de ieșire (OUTPUT) folosind instrucțiunea „pinMode(pin, mode);”.
Nu în ultimul rând, utilizând funcția ”analogWrite”, care setează valoarea de PWM către un pin, am resetat acești pini la valoarea 0 a PWM-ului, după cum se poate observa în Fig.2.
Fig.2
Variabilelor dirMotorLeft, dirMotorRight, dirMotorLeft2 și dirMotorRight2 le-au fost anterior atribuite valorile pinilor pe care sunt folosite (Fig. 3).
Fig.3
În bucla pricipală de execuție, „loop()” se verifică în primul rând dacă, pe portul serial, s-a primit o comandă ( „if (Serial1.available() > 0)” ), altfel, minivehiculului nu va reacționa în nici un fel, ci va rămâne în asteptarea primei comenzi.
În momentul în care avem un număr de octeți (caractere) disponibili pentru citire pe portul serial, adică „Serial1.available() > 0” (de notat este faptul că aceste date sunt deja sosite și stocate în bufferul de primire serial, ce poate stoca până la 64 de octeți), aceștia se citesc, octet cu octet ( „Serial1.read()” ), ca apoi să fie interpretați și să se execute instrucțiuni în funcție de valoarea pe care o au (Fig. 4).
Fig.4
Analizând aceasta secvență de cod, se poate observa că în momentul în care există pentru prima dată octeți disponibili pentru citire, variabila „test_flag” își schimbă valoarea în 1, după ce în prealabil fusese inițializată la valoarea 0.
Acest flag are rolul de a menține următoarea buclă activă cât timp nu se primește pe serial octetul care cere oprirea minivehiculului sau daca se primesc octeti a căror interpretare nu înseamnă nimic în contextul programului.
Valorile care sunt utile în acest program sunt următoarele:
Acestea reprezintă codurile ascii în valori decimale pentru urmatoarele caractere:
AUTO 0
MANUAL 1
STOP 5
LEFT 4
RIGHT 6
FORWARD 8
BACKWARD 2
Astfel, în buclă, instrucțiunea condițională „switch”, în funcție de valoarea primită, poate apela funcțiile „auto_mode()” pentru activarea modului automat al minivehiculului, „manual_mode()” pentru activarea modului manual sau „stopMotors()” dacă primește comanda de oprire sau în cazul în care valoarea este alta decât cele utile.
Funcția „auto_mode()” (Fig. 5) se execută într-o buclă infinită, până în momentul în care, pe serial, apare comanda de schimbare a modului de operare în „MANUAL” sau comanda „STOP”. În momentul în care una din aceste comenzi este primită, funcția „auto_mode()” va opri bucla de execuție și va întoarce valoarea primită ca și comandă, această valoare fiind utilă în bucla principală de execuție, după cum se va vedea mai târziu.
Deasemenea, în aceasta funcție este utilizat și senzorul ultrasonic HC-SR-04, folosind funcția „check_distance()” (Fig.6), funcție ce utilizează biblioteca „NewPing.h” inclusă la începutul programului.
Fig.6
Utilizând această funcție se verifică ciclic, distanța până la un obstacol. Cât timp distanța măsurată este mai mare de 30 cm , iar pe serial nu se primește nici o comandă, motoarelor li se va seta o valoare de PWM folosind funcția „setMotorsFwd(left_mot,right_mot)” (Fig.7), care are ca parametrii valoarea PWM a motorului stâng, respectiv valoarea PWM a motorului drept. În momentul în care valoarea măsurată scade sub 30 cm, deasemenea se verifică disponibilitatea octeților pentru citire pe serial, iar dacă nu există, minivehicului de va mișca către dreapta setănd PWM numai motorului din stânga.
Fig. 5
Fig.7
De cealaltă parte, funcția „manual_mode()” (Fig.8) nu mai folosește senzorului ultrasonic pentru deplasare, ci doar comenzile primite prin bluetooth de la utilizator.
Astfel, după cum se poate observa, și aici avem o buclă infinită din care se poate ieși doar la primirea comenzii de trecere în modul automat sau a comenzii de oprire. Altfet, dacă nici una din aceste două comenzi nu este primită, se vor executa instrucțiunile aferente fiecarei comenzi astfel: pentru comanda „FORWARD” celor două motoare li se va seta o valoarea PWM pentru ca vehiculul să meargă înainte cu aceeași viteză la ambele motoare, la comanda „LEFT” se va seta PWM doar motorului din dreapta, pentru ca minivehicului sa vireze spre stânga, analog la comanda „RIGHT”, iar la comanda „BACKWARD”, după cum se poate vedea în Fig. 7 la funcția „setMotorsRev” sensul motoarelor se inversează, iar la setarea PWM-ului deplasarea se va realiza în sens invers. Deasemenea, daca semnalul de pe portul serial nu poate fi interpretat sau daca nu avem nici un semnal, minivehiculul va rămâne pe loc.
Revenind în bucla principală, „loop()”, se poate observa că atât funcția „auto_mode()”, cât și funcția „manual_mode()” au ca parametru de întoarcere o valoare întreagă, ce reprezintă valoarea care, după cum spuneam în descrierea celor două funcții, reprezintă codul de apelare a schimbării modului de funcționare a minivehiculului.
Astfel, acestă valoare va fi încărcată în variabila „incomingByte”, pentru a continua bucla de execuție și a intra automat în alt caz al „switch-ului”, fără a fi nevoie sa fie repetată comanda.
Pe de altă parte, în momentul în care bucla de execuție ajunge în ramura „STOP” a acestui „switch”, condiția buclei va deveni nulă, astfel bucla se va sfârși, iar programul de execuție va trebui să aștepte o nouă comandă pentru a putea executa o acțiune.
2.3.2 – Programare interfață de comandă și control
După cum spuneam la începutul capitolului, în cea de-a doua parte a subcapitolului, vom vorbi desprea interfața de comandă și control a minivehiculului.
2.3.2.1 – Mediul de programare
Acestă interfață a fost realizată folosind mediul de programare LabWindows/CVI, versiunea 2012, dezvoltat de National Instruments.
LabWindows/CVI este o platformă pentru dezvoltare de software cu orientare pe aplicații de instrumentație.
Denumirea sa – CVI vine de la C for Virtual Instrumentation, ceea ce înseamnă, evident, ca limbajul de programare folosit este ANSI C.
Dezvoltatorii săi, National Instruments, ne pun la dispoziție cu ajutorul CVI, un mediu de dezvoltare interactiv, destinat aplicațiilor Windows. Astfel, avantajele simplității și flexibilității limbajului C sunt îmbinate cu avantajele programării de tip vizual.
LabWindows/CVI a fost creat pentru aplicații de instrumentație și control, dar, datorită multiplelor facilități incluse, este capabil să dezvolte și aplicații de altă factură.
Una dintre aceste facilități este flexibilitatea, existând posibilitatea interfațării bidirecționale cu alte compilatoare de C sau C++ sau putându-se folosi DLL-uri.
Poate punctul forte al acestui mediu de dezvoltare îl reprezintă bibliotecile puse la dispoziție, acestea conținând funcții specializate domeniului controlului automat sau achizițiilor de date.
Principalele biblioteci specializate incluse în acest mediu de dezvoltare sunt cele :
Specializate pe achiziția de date:
Pentru interfața GPIB/GPIB 488.2 (General Purpose Interface Bus)
Pentru achiziții de date
Pentru operații I/O în cazul achiziței de date
Pentru sistemul VXI
Pentru interfața serială RS232
Pentru instrumente
Specializate pe analiza datelor:
Pentru analiză
Pentru analiză avansată
Pentru formatarea specială
Pentru I/O
Pentru lucrul în rețea și comunicarea între aplicații
Pentru DDE (Dynamic Data Exchange)
Pentru TCP (TransmitionControl Protocol)
Pentru sistemul X de sub Unix
În afară de acestea mai există o bibliotecă ce conține drivere și surse pentru osciloscoape, multimetre și generatoare de funcții, numită biblioteca de instrumente.
Utilizatorul are la dispoziție peste 450 de drivere pentru diferite periferice, nemai fiind necesar lucrul la nivel de registru cu aceste echipamente foarte complexe.
Biblioteca pentru interfața cu utilizatorul, ce conține funcții pentru crearea unui GUI ( Graphical User Interface) este deasemenea inclusă.
Principalele componente generice (Fig. 9) ale unui proiect complet dezvoltat în CVI sunt urmatoarele:
Interfața cu utilizatorul
Partea de control a aplicației
Partea specializată pentru achiziția datelor
Partea specializată în analiza acestor date
Fig. 9
Principalele tipuri de fișiere folosite sunt:
*.prj – fișiere de tip proiect
*.uir – fișiere care conțin descrierea unei interfețe grafice
*.c – fișiere sursă
*.h – fișiere header
*.fp – fișiere care conțin descrierea unui instrument
*.lib – fișiere bibliotecă
*.dll – fișiere link-editate pentru apel dinamic
*.obj – fișiere obiect
LabWindows/CVI prezintă câteva noutăți ăn acest domeniu, printre care și „Function Panels”, o reprezentare grafică a funcțiilor specifice CVI. Cu ajutorul acestei reprezentări grafice se poate vizualiza o anumită funcție și parametrii care trebuie editați interactiv de către utilizator.
De asemenea, acest mediu cuprinde un compilator optimizat, un linkeditor și un debugger performant.
2.3.2.2 – Concept de funcționare și programare
Pentru controlul și comanda minivehicului, am conceput o interfață simplă și usor de folosit (Fig.10).
Fig. 10
După cum se poate observa, această interfață conține o serie de butoane, a căror funcționalitate o voi prezenta ulterior, un textbox în care se afișează diferite mesaje legate de comenzile trimise către minivehicul, patru timere și un led care indica starea com-ului prin intermediul căruia ne vom conecta la minivehicul (Fig.11).
De precizat ar fi, faptul că , pentru a putea controla minivelicului cu un anumit computer, acesta trebuie să dispună de bluetooth, iar cele două dispozitive care comunică trebuie împerecheate, parola fiind ”1234”. Deasemenea, trebuie verificat com-ul pe care se va realiza această conexiune, deoarece în programul interfeței de comandă, acesta este hard-codat. Astfel, va trebui modificat programul. În cazul computerului meu, acesta este portul numărul 7.
Fig. 11
După ce primul pas a fost făcut, și anume împerecherea dispozitivelor și verificarea portului, putem trece la pasul următor: conectarea la minivehicul.
Ușor de intuit, acest lucru se va realiza folosind butonul „Connect”. La apăsarea acestui buton, se va apela funcția „Connect_CB” (Fig.12).
Fig.12
În corpul acestei funcții se poate observa rolul acestui buton, de a deschide și configura portul de comunicație cu dispozitivul mobil, folosind funcția „OpenComConfig”. În cazul în care conexiunea nu a reușit, funcția va returna o valoare negativă, iar în textbox se va afișa un mesaj de informare, iar în cazul în care va reuși, deasemenea se va afișa un mesaj, iar culoarea LED-ului se va seta culoarea verde.
După conectare este necesat să se selecteze modul de funcționare a minivehiculului, folosindu-se switch-ul binar din partea dreapta-sus a interfeței. La schimbarea valorii switch-ului se va apela funcția „SwitchControl”(Fig.13).
Fig. 13
Această funcție va verifica poziția comutatorului, prin funcția „GetCtrlVal” și în funcție de această poziție, variabilei globale „send_byte” i se va atribui valoarea „MANUAL” sau „AUTO” definite ca macrouri.
Deasemenea, la momentul selectării poziției „1” a switch-ului, adică modul manual, butoanele de control ale minivehiculului, care implicit sunt ascunse, vor deveni vizibile și utilizabile. Invers, daca se va selecta modul automat, acestea vor rămâne ascunse, sau vor redeveni, dacă anterior a fost selectat modul manual.
După ce modul de funcționare a fost selectat, se va trimite această comandă, folosind butonul „Send Comand”. Funcția folosită la acest buton este „Send_Command”(Fig. 14).
Fig. 14
Această funcție va trimite pe portul serial deschis, valoarea variabilei globale „send_byte” , cu ajutorul funcției „ComWrtByte”. Dacă această variabilă are valoarea „-1”, adică valoarea cu care a fost inițializată, modul de funcționare nu s-a selectat, iar la apăsarea butonului va apărea o fereastră pop-up, care va atenționa utilizatorul că trebuie sa selecteze modul de funcționare. Deasemenea, în text-box se va afișa comanda trimisă.
După cum spuneam, la selectarea modului manual, butoanele de control, marcate cu săgeți se vor activa. Acestea, cu ajutorul a patru timer-e vor trimite pe portul serial comanda dorită.
Aceste timer-e sunt folosite în scopul de a trimite octeți cât timp avem un anumit buton apăsat. Astfel, la apăsarea butonului, timer-ul atribuit acelui buton se va activa (exemplu: buton înainte -Fig. 15), iar la ridicarea butonului se va dezactiva. În timpul în care va fi activat, la un interval de 300 ms, se va trimite un octet pe serial (exemplu: timer 2 – Fig.16).
Fig. 15
Fig.16
Butonul „Stop”, prin funcția „Stop_btn” (Fig.17) va curăța bufferul de ieșire al portului, după care va trimite octetul pentru oprire.
Fig.17
Celelalte butoane de pe această interfață, „ClearLog”, „Disconnect” și „Quit” au rolurile de a șterge înregistrările din textbox, a deconecta computerul de minivehicul prin închiderea portului, respectiv a închide interfața. Acestea apelează funcțiile „Clear_Log” (Fig.18) , „Disconnect_CB”(Fig.19), respectiv „QuitCallback”(Fig.20).
Fig. 18
Fig.19
Fig.20
Bibliotecile folosite în acest program sunt „utility.h”, „ansi_c.h”, „rs232.h”, „cvirte.h”, „userint.h” și „rob_uir.h” unde am definit instrumentele de pe interfață și prototipurile funcțiilor apelate.
Această versiune a programului de comandă și control este una de început, existân multiple posibilități de îmbunătățire, despre care voi discuta la capitolul III.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiectarea, Comanda Si Controlul Unui Minivehicul Mobil (ID: 163262)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
