Universitatea Transilvania din Braşov Electronică Aplicată Facultatea de Inginerie Electrică şi Ştiinţa Calculatoarelor 2017 [308105]
PROIECT DE DIPLOMĂ
Absolvent: [anonimizat]: Șef Lucrări dr.ing. Stanca Cornel Aurel
BRAȘOV
2017
Algoritm pentru parcarea laterală automată a autovehiculelor
Absolvent: [anonimizat]: Șef Lucrări dr.ing. Stanca Cornel Aurel
BRAȘOV
2017
FIȘA PROIECTULUI DE DIPLOMĂ
1.Scopul proiectului
Scopul proiectului a fost acela de realizare a un circuit de control pentru parcarea automată a unei masini electrice. Pentru detectia desiatelor s-au utilizat senzorii ultrasonici de distantă (HC-SR04). Sistemul are urmatoarele functionalitati:
Citirea rapida a senzorilor ultrasonici;
Procesarea infomatiei cu ajutorul microcontrolerului dedicat;
Emiterea comenzilor necesare in procesul de parcare pe magistrala LIN către modulul de tractiune;
2.Obiectivele proiectului
Pentru realizarea scopului enunțat s-aurmărit îndeplinirea următoarele obiective:
Proiectarea circuitului de control pentru parcarea automată a unei masiniavând ca nucleu microcontrolerul PIC 16F1825.
Realizarea circuitului de citire a senzorilor ultrasnici .
Realizarea circuitului de comunicatie pe magistrala LIN.
Realizarea programului de control a circuitului electronic implementat.
Verificarea funcționării și ajustarea parametrilor.
[anonimizat].[anonimizat] o [anonimizat] a volanului ceea ce pentru unii șoferi se dovedeste a fii foarte dificil.Aceasta problemă o abordez in acest proiect prin a realiza un sistem de parcare complet automat prin apasarea unui buton.
Parcarea automată este un sistem de manevrare auto care mișcă un vehicul dintr-o [anonimizat]-se pe senzorii de distanță. Sistemul automat de parcare are scopul de a sporii confortul și siguranța de conducere în medii cu limitări în cazul în care este necesară o mare atenție și experiență pentru a conduce masina. Manevra de parcare se realizează prin intermediul unui control coordonat al unghiului de direcțiesi al vitezei.
Prima încercare de implementare a unui astfel de sistem a fost pe la mijlocul anilor 1990 ca mai apoi majoritatea firmelor de mașini să implementeze un sistem de asistență la parcare.Acesta presupune decât mișcarea volanului si adaptarea vitezei în timpul parcării. [1]
În anul 1992, Volskwagen a propus un sistem de parcare automată unde toate cele 4 [anonimizat] 4 roti în directia locului si putea începe secvența de parcare laterală.Niciodată nu a iesit pe piață o masină cu un astfel de sistem acesta rămânând doarun concept. [2]
În anul 2003,Toyota a vândut primul Prius hibrid care avea integrat un sistem de parcare paralelă automată si se numea ”Intelligent Parking Assisst”. [3]
Jeep a introdus un sistem de asistare la parcare numit ParkSense pe noul lor model din anul 2014, Cherokee. [4]
Un sistem de parcare complet automat in care șoferul poate sa coboare din mașină și sa privească cum aceasta parchiază singură a fost propus de firma BOSCH în data de 18 februarie 2015.Problema acestor sisteme este prețul foarte ridicat atât al mașinii cât și al sistemului în sine.[5]
Un sistem automat de parcare utilizează diverse metode pentru detectarea obiectelor din jurul vehiculului. Senzorii instalați pe barele de protecție față și spate pot acționa atât ca transmițător, cât și ca receptor. Acești senzori emită un semnal care se va reflecta înapoi atunci când întâmpină un obstacol în apropierea vehiculului. Apoi, carputerul va folosi timpul pentru a determina poziția obstacolului. Alte sisteme folosesc camere, de ex. Tehnologia Omniview sau radarele pentru a detecta obstacolele și a măsura dimensiunea spațiului de parcare și distanța de la marginea drumului.[6] [7]
Senzorii emit impulsuri acustice, cu o unitate de control care măsoară intervalul de întoarcere al fiecărui semnal reflectat și distanța la care se afla obiectul. [8] Sistemul, în schimb, avertizează șoferul cu tonuri acustice, distanța fata obiect indicând frecvența, cu tonuri mai rapide care indică o apropiere mai apropiată și un ton continuu care indică o distanță minimă prestabilită. Sistemele pot include și ajutoare vizuale, cum ar fi afișoare cu LED sau LCD pentru a indica distanța obiectului. Un vehicul poate include o pictogramă a vehiculului pe ecranul infotainmentului mașinii, cu o reprezentare a obiectelor din apropiere ca blocuri colorate.
Senzorii spate pot fi activați când treapta de mers înapoi este selectată și dezactivată imediat ce este selectată orice alt angrenaj. Senzorii frontali pot fi activați manual și dezactivați automat când autovehiculul atinge o viteză predeterminată.
Deoarece sistemele cu ultrasunete se bazează pe reflectarea undelor sonore, sistemul nu poate detecta obiecte plate sau obiecte insuficient de mari pentru a reflecta sunetul – de exemplu, un stâlp îngust sau un obiect longitudinal îndreptat direct spre vehicul sau în apropierea unui obiect. Obiectele cu suprafețe plane înclinate de la verticală pot deflecta undele de revenire de la senzori, împiedicând detectarea. [9]
Noutatea adusă acestui proiect este folosirea a mai puțini senzori ultrasonici , decât cele existente astăzi pe piață și interfațarea cu modulul de comunicație LIN.Prețul unui astfel de sistem în general , este destul de mare în comparație cu sistemul pe care eu il propun.
Descrierea sistemului
Pe un cadru realizat de căre patru studenți sunt implementate:două subsiteme de sigurntă(faruri adaptive, cruise control),un sistem de parcare automată și un sistem de control a două motoare BLDC.În Fig.1 este prezentată o poză în care se pot vedea senzorii folosiți în realizarea sistemului meu și anume sistemul de parcare automată.
Cele patru sisteme comunică printr-o interfață LIN(Local Interconnect Network)..În Fig.2. se poate vedea schema bloc a sistemului implementat.
Proiectul își propune implementarea unui algoritm de parcare laterală automată prin folosirea a patru senzori ultrasonici de distantă dispuși ca în Fig.3 și Fig.4.
Senzorii sunt controlați de un microcontroller din familia PIC ce analizează datele primite, calculeză distanța și trimite către motoarele BLDC prin interfața LIN , informații privind viteza și sensul de rotație al motoarelor în funcție de necesități.
Sistemul intră în funcțiune si execută algoritmii implementați când un comutator este in poziția on , iar masina intră în funcția de parcare.
Relizarea modulului electronic
Schema electronică este imparțiță in trei parti:
– Alimentare;
– Control;
– Comunicatie.
Întregul modul este prezentat în Fig.5.
Componentele cheie utilizate sunt :
Microcontroller–ul PIC16f1825;
Transceiver-ul de LIN MCP2003;
Senzorul ultrasonic HC-SR04.
Aceste componente sunt explicate mai în detaliu în capitolele ce urmează.
5.1. Schema electronică a moduluilui de alimentare
În figura de mai sus este prezentată schema electronică pentru partea de alimentarea.
Acest modul se ocupă cu fabricarea tensiunilor necesare pentru PCB-ul fabricat,mai exact
12V și 5V.Modului este alimentat cu 12 V direct de la baterie și tensiunea este stabilizată la valorile necesare.
Când tensiunea de intrare este pozitivă (mai mare decât 0), dioda D1 este polarizată direct. Deoarece amplitudinea tensiunii de intrare este mult mai mare decât valoarea tensiunii de prag a diodei (VD0,7V), aceasta din urmă se poate considera nulă.
Când tensiunea de intrare este negativă (mai mică decât 0), dioda D1 este polarizată invers. Deoarece dioda D este alimentată invers ea este blocată și nu permite trecerea curentului prin ea. În acest caz tensiunea de ieșire devine la rândul său zero.Prin urmare dioda D1 este folosita ca și protecție la alimentare inversă [10]
Condesatorul C2 denumit și condesator de filtrare, are rolul de a limita variația tensiunii. În Momentul în care tensiunea sursei scade sub valoarea tensiunii din condensator, dioda se blochează și nu permite descărcarea condensatorului spre baterie.
Regulatorul de tensiune
Această serie de regulatoare de tensiune cu circuite integrate cu tensiune fixă este proiectată pentru o gamă largă de aplicații.Circuitul integrat LM7805 este un stabilizator de tensiune fixă de 5V, Fig.7. El poate furniza la ieșire un curent de până la 1,5A și suportă la intrare tensiuni de până la 40 V, Fig.8.
Circuitul este imun la suprasarcină fiind prevăzut cu circuite interne de limitare a curentului și de protecție la supratemperatură.
5.2. Schema electronică a modulului de control
În Fig.9 este prezentată schema circuitului electronic al sistemului de control având ca nucleu un microcontroller din familia PIC și anume PIC16F1825.Pentru alegera microcontroller-ului am avut nevoie de opt pini digitali de input/output , un port de EUSART si un timer pe 16-biți.
Pentru a putea vedea buna funcțonalitate a sistemului pe pinul RC3 al microcontroller-ului am ales sa pun un LED comandat cu un tranzistor.
În schema prezentatăcondesatoarele C3,C3.1,C3.2,C.3 sunt folosite ca și condesatoare de decuplare.
Dispozitivele active necesită plasarea unui condensator de aproximativ 100nF cât mai aproape posibil de pinii de alimentare. Valorile lor pot varia cu un factor de aproximativ 10, dar există cerințe tehnologice și de proiectare de care proiectantul trebuie să țină seama în mod strict.
Acestea sunt:
• condensatoarele trebuie să aibă terminale cât mai scurte sau (și mai bine) să fie de tip SMD;
• condensatorul de 100nF trebuie plasat cât mai aproape de circuitul integrat;
• traseele de conectare a condensatoarelor trebuie să fie cât mai scurte și cât mai late.
Condensatoarele de decuplare sunt folosite pentru motive diferite..Unul dintre acestea este de a servi ca sursă (rezervor) de energie electrică în momentele în care circuitul integrat comută între cele două stări logice, situații în care, pe timpul tranzițiilor, apare un consum ridicat de curent, respectiv o scădere a tensiunii la pinii de alimentare. Astfel, prezența unui condensator de decuplare care să respecte cerințele de mai sus face ca la nivelul respectivului circuit să existe o mică sarcină depozitată și care poate fi livrată la momentele de timp corespunzătoare. Lipsa condensatoarelor de decuplare din cadrul layout-ului poate duce la o scădere semnificativă a tensiunii de alimentare pe timpul tranzițiilor. Dacă modificările de tensiune sunt prea mari, nivelurile semnalelor digitale ar putea să ajungă în zonele de nedeterminare cauzând posibile (și, din păcate, aleatoare) erori de funcționare ale dispozitivelor.Vinovat de căderile de tensiune este vârful de curent ce trece prin traseele de alimentare ale circuitului integrat.[12]
Microcontroller-ul PIC16F1825
Este folosit ca nucleu al sistemului de control. În Fig.10 este prezentată capsula microcontrolerului PIC 16F1825 . Fiecărui pin îi este asociată lista de funcționalități selectabile soft. Dintre caracteristicile puse la dispoziție, în aplicație sunt exploatate următoarele:
Oscilator intern de 32MHz calibrat în fabrică,cu o precizie de ±1%; frecvența de lucru poate fi ajustată de către utilizator în faza de proiectare sau în timpul rulării programului, în domeniul 31kHz-32MHz;
Tensiunea de alimentare într-un domeniu larg: 1,8V-5,5V;
Capabilitatea de programare serială în circuit (ICSP) prin pinii ICSPDAT și ICSPCLK;
12 pini ce pot fi utilizați ca intrări/ ieșiri digitale;
Timer1:
– timer/counter pe 16-biți cu prescaler foarte bun în aplicațiile în timp real.
Restul funcțiilor microcontroller-ului pentru fiecare pin sunt prezentate in tabelul din Fig.11.
Senzorul Ultrasonic HC-SR04
În Fig.12. este prezentat senzorul de distanță ultrasonic folosit pentru masurarea distanței dintre mașină și obiectul de interes iar în Fig.13. este atasată diagrama de timp pentru funcționarea lui.
Acest senzor poate măsura distanțe între 2 cm si 400 cm cu o precizie care poate ajunge până la 3 mm.Fiecare modul HC-SR04 include un transmițător ultrasonic ,un receptor si un circuit de comandă.
Diagrama de sincronizare este prezentată mai jos. Senzorul trebuie doar să furnizeze un scurt puls de 10us la intrarea de TRIG pentru pornirea masurarii , iar apoi modulul va trimite un ciclu de 8 impulsuri de ultrasunete la frecventa de 40 kHz.Semnalul de ECHO este un puls a cărui lațime variază in funcție de distanta la care se află obictul țintă .Se poate calcula distanța prin intervalul de timp dintre transmiterea semnalului de declanșare și recepționarea semnalului ecou.
Formula folosită pentru masurareadistanței este :
Microcontroller-ul dispune de trei tipuri de timer:
-TIMER0 care este pe 8-biți;
-TIMER1 care este pe 16-biți;
-TIMER2/4/6 care sunt identice si sunt pe 8 biți.
Am ales sa folosesc TIMER1 doarece este foarte folosit în aplicațiile realizate în timp real deoarece este mai precis decat restul. Modulul Timer1 poate fi folosit ca un contor de 16 biți sau cronometru. Se compune din două registre de 8 biți TMR1H și TMR1L care pot fi citite și scrise. Perechea de registre, TMR1H: TMR1L crește de la 0000H la FFFFH.
Mai jos am rezentat configurarea biților din regisrul T1CON: (0b00010000)
Bit 7-6 TMR1CS<1:0>:Timer1 Clock Source Select bits
00 = Timer1 clock source is instruction clock (FOSC/4)
Bit 5-4 T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits
01 = 1:2 Prescale value
Bit 3 T1OSCEN: LP Oscillator Enable Control bit
0 = Dedicated Timer1 oscillator circuit disabled
Bit 2 T1SYNC: Timer1 External Clock Input Synchronization Control bit
TMR1CS<1:0> = 0X
Acest bit este ignorat. Timer1 utilizează ceasul intern când TMR1CS <1: 0> = 1X.
Bit 1 Neimplementat: Citit ca și ‘0’
Bit 0 TMR1ON: Timer1 On bit
0 = Timer1 oprit
Frecventa oscilatorului intern este selectată folosind registrul OSSCON din interiorul microcontrollerului.Am ales frecventa de 4 kHz din mai multe motive ce le voi expune în cele ce urmează.
Biții de configurare ai registrului OSCCON: (0b01101010)
Bit 7 SPLLEN: Software PLL Enable Bit
Dacă PLLEN în Configuration Bits este = 0:
0 = 4x PLL is disabled
Bit 6-3 IRCF<3:0>: Internal Oscillator Frequency Select bits
1101 = 4 MHz HF
Bit 2 Unimplemented: Read as ‘0’
Bit 1-0 SCS<1:0>: System Clock Select bits
1x = Internal oscillator bloc
5.3. Schema electronică a modulului de comunicație
Pentru interconectare modulelor în rețea am folosit protocolul standard în automotive LIN(Local Interconnect Network).
Protocolul LIN este un mod de comunicare ieftin, deoarece comunicația se faca pe un singur fir în mod asincron, de viteză mică, de până la 20 kbit/s,Comunicația se realizeaza cu ajutorul circuitului integrat MCP 2003.
MCP 2003
În Fig.18 este reprezentată capsula circuitului integrat folosit.Acesta face interfațarea dintre microcontroller si rețeaua LIN.Circuitul preia informația de la modulul serial al microcontroller-ului și face translația de la nivelul de 5V,la nivelul logic pe care funcționează rețeaua LIN.MCP2003 are protecție la supraîncălzire și scurt circuit datorită circuitelor din interiorul capsulei.
Funcționarea acestui modul se face urmărind diagrama de stări dată de documentația componentei.(Fig.19)
LIN(Local Interconnect Network)
Pentru interconectarea tuturor modulelor în rețea am stabilit sa folosesc un protocol folosit in industria automotive si anume LIN-ul.Costul redus a fost unul dintre aspectele pentru care am ales acest mod de comunicație.Acesta este un protocol standard folosit în automotive și este și un mod de comunicare ieftin,deoarece comunicația se face pe un singur fir în mod asincron.Protocolul LIN din specificații dispune de viteze de pana la 20 kbit/s.
Acest protocol este format dintr-un nod master si pâna la la 15 noduri slave.Toate mesajele sunt inițiate de către nodul master iar un singur slave poate raspunde în funcție de ID-ul mesajului.Nodul master poate avea si el funcție de slave prin raspunsul la propriile mesaje.
Un mesaj conține urmatoarele informații ce se imparte in doua părți:
Message header(trimis doar de master):
-Un camp de BREAK, constituit din 13 biți de zero;
-Un câmp de SYNC, constituit din caracterul 0x55 si este carecterizat de 5 fronturi căzătoare pe cei 8 biți.
-Un câmp ID, constituit din 6 biți de date + 2 biți de paritate.BițiiID4 și ID 5 indica numarul câmpurilor de date dintr-un mesaj.
Message Response(care poate fii trimis și de către master și de către slave):
-În funcție de aplicație, câmpul de răspuns este format din date + sumă de control .Acesta este cazul în care avem identificator necunoscut sau viciat. În acest caz calcularea sumei de control poate fi omisă.[13]
Fabricarea plăcilor
Procesul de fabricație a placilor s-a întins pe durata desfașurării intregului proiect.Acesta include urmatoarele etape:
Realizarea schemei electronice într-un program dedicat;
Realizarea layout-ului crespunzator;
Imprimarea cablajului pe placuța de cupru;
Corodarea PCB-ului;
Găurirea cablajului pentru componentele THT(Through-hole technology) și popularea;
6.1.Realizarea schemei electronice într-un program dedicat
Pentru realizarea circuitului am folosit biblioteci deja existente pentru anumite componente,dar deoarece nu am gasit toate componentele de care am avut nevoie câteva dintre ele au trebuit create de mine după specificațiile date de documentația fiecărei componente,de exemplu pentru MCP2003 a trebuit sa creez atat designul componentei cât și footprint-ul acesteia.
6.2.Realizarea layout-ului
Folosind același program descries anterior am realizat layout-ul ținând cont de regulile de proiectare(distanța dintre trasee,distanța dintre planurile de alimentare si masă,condesatoarele de decuplare cat mai aproape de componentă,etc.).
Realizarea layout-ului are loc în 5 etape:
Primul pas este așezarea amprentelor fiecărei componente;
Al doilea pas este rutarea traseelor;
Al treilea pas este dimensionarea plăcii;
Cel de-al parulea pas este realizarea planului de masă;
Iar ultimul pas este verificarea corctitudinii.
În figurile de mai jos se poatevedea rezultatul obțint in urma realizării layout-ului și o parte din etapele descries anterior.
6.3. Imprimarea cablajului pe plăcuța de cupru
Pentru imprimarea cablajului pe placa de cupru , primul pas a fost să scot din program la scală 1:1 proiectul de imprimat.Urmatorul pas a fost ca pe o foaie tip A4, specială pentru ralizarea PCB-urilor , să imprim circuitul utilizând o imprimantă laser.
Curățarea și degresarea plăcuței de cupru este un alt pas important pentru finalizarea perfecta a procesului.Folia cu traseul imprimat se pune deasupra plăcii de cupru curățata anterior,iar prin transfer termic cerneala de pe foaie ramane pe placa de cupru.Eventualele erori sunt corectate cu ajutorul unui marker permanent.
6.4. Corodarea PCB-ului
După etapa de imprimare a cablajului pe placa de cupru urmează etapa de corodare a plăcii.Aceasta se pune într-o soluție de persulfat de sodiu , diluat în apă caldă până când tot cuprul nefolositor se corodează.
După corodare se spală placa bine si se indepartează cerneala,cu ajutorul unui diluant.
6.5. Găurirea cablajului pentru componentele THT(Through-Hole Technology) și popularea
Dupa ce am îndepărtat cerneala de pe placă , am dat cu un burghiu găurile necesare pentru componentele THT(Through-Hole Technology).Dupa această etapă a urmat popularea plăcii cu toate componentele circuitului.Popularea s-a realizat manual. În figurile care urmează se poate vedea placa după popularea și lipirea componentelor.
După populare a urmat partea de verificare , unde cu ajutorul multimetrului am verificat placa de scurt circuit,trasee sărite,etc..Dupa acest pas a urmat alimentarea PCB-ului și testarea tensiunilor de pe placă.
Algoritmii implementați
De menționat că distanțele din algoritmii implementați sunt determinațe pe cale experimentală.În poza de mai jos se poate observa cum determin distanțele.
Instrumente folosite și soft-uri folosite
PICKIT 3 a fost folosit ca și programator pentru microcontroller-ul de pe placa realizată.
Softul folosit pentru realizarea aplicației în limbaj C,compilarea, programarea și debug este MPLAB X IDEprodus de firma MICROCHIP.Acest software este foarte bun deoarece permite interacționarea directă cu unealta hardware pentru programarea microcontroller-ului.
Pentru diferitele simulări din faza de proiectare , este folosit softul PROTEUS.
Simularea si testarea senzorului ultrasonic HC-SR04
Pentru simularea fucționării senzorului ultrasonic am folosit softul Proteus.
Pentru prima fază am ales microcontrollerul PIC16f1825 din familia microchip pentru a putea controla senzorul.Codul implementat pentru simularea senzorului a fost creat in softul MPLAB X IDE.Am selectat de pe acest PIC16f1825porturile DIO folosite și pe PCB-ul realizat.Pe fiecare pin de trigger și pin de echo al senzorului am pus cate o sondă de osciloscop.
Senzorul ultrasonic HC-SR04 pentru al putea simula are un pin(TestPin) de care am legat o rezistența variabilă(potențiometru) pentru a regla distanța la care se află obiectul de interes.Acesta are patru pini si anume : un pin de alimentare(senzorul funcționază la o tensiune de +5V),un pin de transmisie(TRIGGER),un pin de receptie(ECHO) și un pin de masă(GND).
Am folosit din bilblioteca Proteus un osciloscop virtual cu patru canale pentru a vedea semnalele primite și transmise de la microcontroller către senzor.Din testele pe care le-am realizat osciloscopul are niste rezultate foarte bune.
.
În Fig.34 putem observa pe osciloscopul digitalpulsurile de 10us ce declansează începerea masurării timpului de catre microcontroller si începerea transmisiei senzorului.
În Fig.35 sunt prezentate semnalele trimise pe pinul de recepție(ECHO) al senzorului ultrasonic a carui lungime a pulsului se modifica in funcite de distața la care se afla obiectul și ceea ce la primirea lui pe pinii de intrare ai microcontrolleru-lui declanseaza conversia timpului dintre emisie si recepție în distanță.
Rezultate experimentale
În figura de mai jos este prezentată măsurarea tensiunii de pe placă după dioda de protecție la animentare.Tensiunea scade datorită căderii de tensiune de 0,6V pe diodă.
Tensiunea de alimentare de după integratul LM7805 , este prezentată în Fig.37.
Funcționarea senzorilor este forte bună,neavând nevoie de o mediere a semnalului primit.Din multe teste , am observant că distanța masurată de senzorul ultrasonic este aproximativ egala cu distanța reală(aceasta fiind masurată cu ajutorul unei rulete de mână și cu ajutorul ledului de pe plcă amplasat pe pinul RC3).În Fig.38,Fig.39, Fig.40, Fig.41 se pot observa semnalele de trigger și echo de la senzorul ultrasonic și ledul folosit pentru a determina dacă distanța măsurată este egala cu cea reală.
Se poate observa în figura de mai sus că perioda impulsului este de 11,8 ns,ceea ce se datorează softwer-ului și anume aplelarii întârziate a funcțiilor.Cu toate acestea senzorul masoară cu ±1 mm diferență față de distanța reală.
Folosindu-mă de placa de control de faruri a unuia dintre colegi , am putut demonstra funcționalitatea transimisiei dintre două module.Cum se poate observa și în Fig.42 și Fig.43,când mâna mea este la o distanta egală sau mai mica de 7 cm transmit un character (Fig.42), iar când mâna este mai la depărtare , sau distanța detectată este mai mare de 7 cm , se transmite un alt character și intensitatea farurilor se modifică.
Concluzii și dezvoltări ulterioare
Sistemul proiectat și realizat funcționează în conformitate cu scopul propus:
– Citirea senzorilor ultrasonici se face extrem de rapid aproximativ 10 ms când obiectul se află la o distanță relativ mare(între 1 – 2 m);
-Procesarea infomatiei cu ajutorul microcontrolerului dedicat de asemenea se face foarte rapid și corect;
-Emiterea comenzilor necesare pe magistrala LIN lin a reușit în totalitate dar cu niște erori de recepție ce au fost rezolvate ulterior.
O îmbunatățire a sistemului poate fi aceea de adăugare a mai multor senzori pentru a reduce numărul de erori ce pot apărea în timpul rulării sistemului , sau renunțarea la senzorii ultrasonici și implementarea sistemului cu ajutorul unei camere video folosind procesarea de imagini.
Bibliografie
[1]. ^Paromtchik, Igor; Laugier, Christian (April 1996). "Motion Generation and Control for Parking an Autonomous Vehicle"(PDF). Proceedings of the IEEE International Conference on Robotics and Automation. Minneapolis, MN, USA. pp. 3117–3122. do i:10.1109/ROBOT.1996.509186. Retrieved 10 May 2015.
[2]. ^"Volkswagen Futura" . IRVW (Integrated Research Volkswagen) Futura concept car 2014.
Retrieved 5 May 2015.
[3]. ^"Toyota unveils car that parks itself". CNN International.September 2003. //edition.cnn.com/2003/TECH/ptech/09/01/toyota.prius.reut/index.htmlRetrieved 5 May 2015.
[4] .Morrison, Jim (15 October 2013). "2014 Jeep Cherokee Park Assist". Retrieved 9 May 2015.
[5]. ^"Bosch Fully Automated Parking". Bosch. 18 February 2015. Retrieved 18 February 2015.
[6]. ^Grabianowski, Ed (17 August 2006). "How Self-Parking Cars Work". Retrieved 5 May 2015.
[7]. ^Carullo A.; Parvis M. (2001). An Ultrasonic Sensor for Distance Measurement in Automotive Applications. In: IEEE SENSORS JOURNAL, vol. 1 n. 2, pp. 143-147. – ISSN 1530-437X
[8]. ^ "Mercedes Benz Parktronic system (PTS)". Launch Tech. Retrieved 2008-07-13.
[9]. ^ Jensen, Christopher (August 18, 2009). "Are Blind Spots a Myth?". The New York Times. Retrieved August 9, 2013.
[10].www.islavici.ro/cursuriold/Curs%20DCE/Curs%203%20Aplicatii%20Diode.doc
[11] http://www.tme.eu/ro/details/l7805abd2t/regulatoare-de-tensiune-neregulata/st-microelectronics/l7805abd2t-tr/
[12] http://electronica-azi.ro/2003/02/20/tehnici-de-realizare-a-layout-ului-pentru-sisteme-analogice-si-digitale/
[13]http://www.meo.etc.upt.ro/materii/cursuri/ISMT/10.pdf
Anexe
Mai jos este prezentat codul pentru simularea în softul PROTEUS.
// more than once.
#ifndef XC_HEADER_TEMPLATE_H
#define XC_HEADER_TEMPLATE_H
// PIC16F1825 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
#pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#include<pic16f1825.h>
#define _XTAL_FREQ 4000000
unsigned char var;
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* XC_HEADER_TEMPLATE_H */
void initHardware()
{
//USART TRANSMITION
TRISCbits.TRISC4 = 0;//TX is output
PORTCbits.RC4 = 1;//TX is HIGH
TRISCbits.TRISC5 = 1;//RX is input
OSCCON = 0x6A;
APFCON0bits.RXDTSEL = 0;//RX on pin RC5
APFCON0bits.TXCKSEL = 0;//TX pin on RC4
TXSTAbits.TX9 = 0;//8 bit transmission
TXSTAbits.TXEN = 1;//enable transmitter
TXSTAbits.SYNC = 0;//asyncronous transmission
TXSTAbits.BRGH = 1;//high speed baud rate
BAUDCONbits.BRG16 = 0;//16 bit baud rate generator disabled
SPBRGH = 0x00;// baud rate = 10417
SPBRGL = 0x17;//
RCSTAbits.SPEN = 1;//enable serial port
RCSTAbits.RX9 = 0;//8 bit reception
RCSTAbits.CREN = 1;//enable receiver
PIE1bits.RCIE = 1;//receive interrupt enable
INTCONbits.GIE = 1;//global interrupt enable
INTCONbits.PEIE = 1;//peripheral interrupt enable
}
void hardwareSenzors(){
OSCCON = 0x6A;
ANSELA = 0b00000000;// Digital I/O Channel A
ANSELC = 0b00000000;// Digital I/O Channel C
TRISA = 0b00100110; // RA2 = echo and RA5 = echo and RA1 = echo;
LATAbits.LATA4 = 0; //triger sensor2
LATAbits.LATA0 = 0;//trigger sensor 3
TRISC = 0b00000010;// RC0 and RC3 are Output and RC0 TRIGER
LATCbits.LATC0 = 0;//triger senzor 1
LATCbits.LATC3 = 0;//LED
LATCbits.LATC2 = 0;//triger senzor 4
}
void sendPulseS1(){
LATCbits.LATC0 = 1;//trig start
__delay_us(10);
LATCbits.LATC0 = 0;//trig stop
}
void sendPulseS2(){
LATAbits.LATA4 = 1;//trig start
__delay_us(10);
LATAbits.LATA4 = 0;//trig stop
}
void sendPulseS3(){
LATAbits.LATA0 = 1;//trig start
__delay_us(10);
LATAbits.LATA0 = 0;//trig stop
}
void sendPulseS4(){
LATCbits.LATC2 = 1;//trig start
__delay_us(10);
LATCbits.LATC2 = 0;//trig stop
}
void interrupt ISR(void)
{
if(PIR1bits.RCIF && !RCSTAbits.FERR){
if(RCREG == 0x02){
TXREG = var;
}
}
}
void main(void) {
double time1 = 0;
double distances1 = 0;
double time2 = 0;
double distances2 = 0;
double time3 = 0;
double distances3 = 0;
double time4 = 0;
double distances4 = 0;
double timespot = 0;
double distanceok = 0;
hardwareSenzors();
initHardware();
T1CON = 0b00010000;
T1GCON = 0b01000000;
while(1){
//Senzor 1 STRAT
TMR1H = 0x00;
TMR1L = 0x00;
sendPulseS1();
while(!PORTAbits.RA2)//!echo
;
TMR1ON = 1;//start timer
while(PORTAbits.RA2)//on echo
;
TMR1ON = 0;//stop timer
time1=( TMR1L | (TMR1H << 8));
time1=time1 * 0.034;
distances1 = time1;
//Senzor1 STOP
//distance1 valoare calculata pentru senzorul 1
//SENZOR2 START
TMR1H = 0x00;
TMR1L = 0x00;
sendPulseS2();
while(!PORTAbits.RA5)//!echo
;
TMR1ON = 1;//start timer
while(PORTAbits.RA5)//on echo
;
TMR1ON = 0;//stop timer
time2=( TMR1L | (TMR1H << 8));
time2=time2 * 0.034;
distances2 = time2;
//SNZOR2 STOP
//distances2 valoare calculata pentru senzorul 2
//SENZOR3 START
TMR1H = 0x00;
TMR1L = 0x00;
sendPulseS3();
while(!PORTAbits.RA1)//!echo
;
TMR1ON = 1;//start timer
while(PORTAbits.RA1)//on echo
;
TMR1ON = 0;//stop timer
time3=( TMR1L | (TMR1H << 8));
time3=time3 * 0.034;
distances3 = time3;
//SENZOR3 STOP
//SENZOR4 START
TMR1H = 0x00;
TMR1L = 0x00;
sendPulseS4();
while(!PORTCbits.RC1)//!echo
;
TMR1ON = 1;//start timer
while(PORTCbits.RC1)//on echo
;
TMR1ON = 0;//stop timer
time4=( TMR1L | (TMR1H << 8));
time4=time4 * 0.034;
distances4 = time4;
//SENZOR4 STOP
if( distances1 > 2 && distances1 < 40,distances2 > 2 && distances2 < 40,distances3 > 2 && distances3 < 40,distances4 > 2 && distances4 < 40)
{
LATCbits.LATC3 = 1;
}
else if (distances1 > 40,distances2 > 40,distances3 > 40,distances4 > 40 )
{
LATCbits.LATC3 = 0;
}
}
}
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: Universitatea Transilvania din Braşov Electronică Aplicată Facultatea de Inginerie Electrică şi Ştiinţa Calculatoarelor 2017 [308105] (ID: 308105)
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.
