Platforma Robotica Comandata Si Semicomandata

Cuprins

Capitolul 1. Introducere

1.1 Memoriu justificativ

1.2 Structura lucrării

Capitolul 2. Fundamentare teoretică

2.1 Motoare de curent continuu nu ai spatiufără perii

2.2 Comanda motoarelor de curent continuu fără perii

2.3 Invertor trifazat

2.3.1Tranzistorul MOSFET

2.3.2Circuitul driver IR2101

2.4 Microcontrolere

2.4.1 Microcontroler PIC16F887

2.4.1 Microcontroler PIC18F4431

2.5 Senzori

2.5.1 Senzor de distanță cu ultrasunete HC-SR04

2.5.2 Senzor de curent

2.5.3 Senzor inductiv pentru detecția metalelor

2.6 Comunicare serială

2.6.1 Modulul bluetooth HC-06

2.7 Interfața grafică

Capitolul 3. Realizarea practică a proiectului

3.1 Partea mecanică

3.2 Implementare Hardware

3.2.1 Realizarea cablajelor

3.2.2 Placa de alimentare

3.2.3 Senzorul de curent

3.2.4 Detector de metale

3.2.5 Invertor

3.2.6 Placă PIC16F887

3.2.7 Placă PIC18F4431

3.2.8 Suport pentru senzorii de distanță

3.3 Implementare Software

3.3.1 Software microcontroler PIC16F887

3.3.2 Software microcontroler PIC18F4431

3.3.3 Software interfață

Capitolul 4. Rezultate.Concluzii

Capitolul 5. Anexe

5.1 Anexa 1 –Schmea invertorului trifazat

5.2 Anexa 2 –Schema

5.3 Anexa 3 –Fisierul main.c Pic16F887

Capitolul 6. Bibliografie

Capitolul 1. Introducere

1.1 Memoriu justificativ

În ultimul secol domeniul roboticii a cunoscut o mare și foarte importantă dezvoltare în activitățile umane, ca rezultat a dorinței omului de a progresa, de a crea lucruri noi care să-i ofere precizie, siguranță, rapiditate și randament ridicat în activitate. Astfel calitatea muncii este mult îmbunătățită, cu un număr de greșeli semnificativ mai mic, decât în cazul executării aceleiași munci de un om.

Roboții reușesc să ofere avantaje în multe domenii precum: domeniul medical (telemanipulatoare pentru chirurgie laporoscopică, sisteme robotizate pentru diagnoză prin ecografie, sisteme robotizate pentru intervenții neurochirurgicale), domeniul militar (ajutând la explorarea locațiilor greu accesibile și periculoase, teleghidați sau parțial autonom), în construcții (excavatoare autonome, robot mobil pentru cofraje glisante, sistem robotizat pentru stropirea betonului în construcția tunelurilor), în agricultură (sistem robotizat de culegere a florilor si fructelor, sistem robotizat de plantare a răsadurilor), toate ramurile industriei și multe alte domenii.

Lucrarea de față își propune studierea unei platforme robotice care poate funcționa atât în mod autonom cât și controlată de la distanță, îmbinând două domenii: interfațare om-mașină și robotică.

Robotica este un domeniu științific care urmărește tehnologia, dezvoltarea, proiectarea și construcția sistemelor cu funcții diversificate în scopul realizării sarcinilor umanoide. Un astfel de sistem poartă numele de robot. Prin robot percepem un ansamblu de mai multe elemente: mecanice, module electronice, motoare, senzori care dau operatorului uman posibilitatea de a interacționa cu acesta și de a-l controla.

Interacțiunea dintre om și mașină în scopul manipulării eficiente și a evidenței anumitor informații necesare în luarea deciziilor operaționale se realizează la nivelul interfaței om-mașină.

Platforma robotică prezentată în lucrarea de față implică următoarele componente:

● șasiu realizat din plexiglas datorită ușurinței cu care se poate prelucra;

● două motoare fără perii cărora li s-au atașat reductor astfel obținându-se un cuplu destul de ridicat;

● două invertoare pentru controlul motoarelor;

● senzori pentru a prelua date din mediu;

● două microcontrolere pentru a facilita controlul platformei și manipularea datelor preluate de la senzori;

● interfața grafică pentru a dispune operatorului toate informațiile necesare și a-i oferi un control eficient al platformei de la distanță.

Platforma poate fi încadrată în rândul roboților exploratori, care au o mare aplicabilitate în domeniul militar, în rândul geniștilor. De asemenea poate fi folosită și în scop didactic pentru evidențierea funcționalității sistemelor inteligente și datorită construcției permițând dezvoltarea ulterioară.

1.2 Structura lucrării

Capitolul 2. Fundamentare teoretică

2.1 Motoare de curent continuu fără perii

Dispozitivul electromecanic cu rolul de a transforma energia electrică în magnetică și din magnetică în mișcare de rotație mecanică poartă denumirea de motor electric. Motoarele electrice pot fi de mai multe tipuri, diferența constând în maniera în care câmpul magnetic este generat pentru a obține cuplul, forța de rotație, însă ele pot fi clasificate în două mari categorii, funcție de alimentare, și anume: motoare de curent continuu și motoare de curent alternativ.

Motorul de curent continuu a fost descoperit în mod accidental în 1873 de inginerul belgian Zénobe Théophile Gramme și inginerul francez Hippolyte Fontaine. Prin conectarea a două generatoare de curent continuu între ele au putut observa conversia energiei electrice absorbite de la generator. Au constatat faptul că generatorul era o mașină electrică reversibilă, el putând funcționa ca un convertizor de energie bidirecțional.

În funcție de construcție și sistemul de control, motoarele de curent continuu se împart în motoare cu perii colectoare și motoare fără perii colectoare.

Motoarele de curent continuu fără perii (Figura 2.1.1), cunoscute și sub denumirea de motore brushless, prescurtat BLDC, sunt motoare electrice sincrone cu magneți permanenți și înfășurări concentrate alimentate de la o sursă de curent continuu cu ajutorul unui sistem de comutație controlat electronic spre deosebire de cele cu perii care au sistemul de comutație mecanic bazat pe perii colectoare.

Figura 2.1.1 Secțiunea unui motor brushless

Motoarele brushless, au câștigat rapid popularitate fiind foarte utilizate în procese industriale (automatizări), tracțiuni electrice, sistemele de centrifugare, ventilatoare, pompe, servosisteme și mai recent în periferice de calculator și aparatură medicală.

Făcând o comparație între motoarele de curent continuu cu perii și cele fără perii putem observa următoarele avantaje în cazul celor din urmă: necesită întreținere minimă, nu produc scântei ionizante (interferențele electromagnetice fiind reduse total), au un zgomot redus, densitate de putere mare, dimensiuni reduse, control complex al vitezei (lipsa periilor înlătură limitarea vitezei maxime datorate încălzii periilor colectoare), o buna disipare a căldurii, pierderi rotorice minime.

În domeniul 1-10kW performanțele motoarelor fără perii de curent continuu sunt asemănătoare cu cele ale motoarelor asincrone, sub acest domeniu au un randament și factor de putere mult mai ridicat.

Rotorul motorului brushless este format dintr-un ax pe care sunt dispuși magneți permanenți cu un număr de perechi de poli variabil, putând avea între 2 și 8 poli. Magneții pot fi construiți din ferite sau aliaje magnetice din pământuri rare (magneții neodim fier bor sau neo magneți), cele din urmă având o densitate de flux mult mai bună. În figura 2.1.2 sunt prezentate câteva dintre formele constructive ale rotorului.

Statorul motorului brushless este fabricat din lamele (tole) de oțel stivuite cu înfășurări plasate în fantele care sunt tăiate axial de-a lungul periferiei interioare. Statorul se aseamană foarte mult cu cel al motorului asincron, diferind doar modul de distribuire a înfășurărilor. Cele mai multe motoare brushless au trei înfășurări statorice legate în mod stea, acestea fiind distribuite la periferia statorului pentru a forma un număr par de poli.

Din punct de vedere al configurației înfășurărilor, motoarele fără perii sunt întâlnite în două variante constructive: motoare cu excitație sinusoidală (tensiunea electromotoare indusă și curentul variază sinusoidal) și motoare cu excitație dreptunghiulară (tensiunea electromotoare indusă și curentul variază trapezoidal) . În cazul motoarelor cu unde sinusoidale cuplul variază mai lin.

Figura 2.1.2 Exemple de rotor brushless

În funcție de dispunerea magneților rotorului față de stator întâlnim motoare brushless cu magneții situați în exteriorul statorului (Figura 2.1.3 a) sau cu magneții situați în interiorul statorului (Figura 2.1.3 b).

Figura 2.1.3 Tipuri de motoare brushless

Pentru a avea un control cât mai bun al motorului este necesară cunoașterea poziției rotorului la un moment dat, cea mai simpla modalitate este folosirea senzorilor de poziție hall, sau ceva mai complicată metoda back-EMF (back electromotive force). Detaliile privind modul de realizare a comutației folosind senzorii hall sau metoda back-emf și determinarea vitezei pe baza informației de poziție, vor fi precizate în subcapitolul următor.

2.2 Comanda motoarelor de curent continuu fără perii

Simpla aplicare a tensiunii la bornele unui motor de curent continuu fără perii, cu trei înfășurări conectate în mod stea, nu este translată în mișcare de rotație, așa cum este posibil în cazul motoarelor cu perii, unde comutația este realizată prin intermediul periilor colectoare (autocomutație).

Prin urmare este necesar dezvoltarea unui sistem electronic (schema bloc echivalentă fiind prezentată în figura 2.2.1) și a unui algoritm de comutație bazat pe șase sectoare. Fiecărui sector îi corespunde o translare cu un unghi α de 60° electrice, o secvență completă de comutație fiind de 360° electrice și corespunde unei rotați electrice complete.

Figura 2.2.1. Schema bloc a unui sistem electronic de control a motorului brushless

O secvență de comutare presupune ca una din înfășurări să fie conectată la borna pozitivă, o a doua înfășurare să fie conectată la borna negativă, iar cea de-a treia înfășurare rămânând în stare de înaltă impedanță (nu este conectată la nici o bornă). În figura 2.2.2 găsim cele șase secvențe de comandă.

Rotația este rezultatul interacțiunii câmpului magnetic produs de înfășurările statorice și câmpul magnetic rotoric, cuplul maxim obținându-se când aceste două câmpuri sunt perpendiculare unul față de celălalt.

Figura 2.2.2. Secvențe de comandă

În continuare pentru a înțelege mai bine funcționarea motoarelor brushless se va analiza pe scurt modelul matematic al acestora.

Reprezentând fiecare fază a motorului printr-o rezistență, inductivitate și o tensiune electromotoare (simetrice și echilibrate așa cum se poate observa în figura 2.2.3) și ținând seama că în timpul funcționării sunt conectate două câte două fazele înfășurării statorice, se poate analiza modelul matematic în coordonatele fazelor cu parametri concentrați, ecuațiile care descriu acest model fiind:

(2.2.1)

Valorile instantanee ale curenților: (2.2.2)

Ecuația de cuplu : (2.2.3)

Figura 2.2.3. Reprezentarea înfășurărilor statorice ale motorului brushless printr-o rezistență, inductivitate și o tensiune electromotoare

– iA, iB, iC –curenții prin înfășurările statorice;

– eA, eB, eC – tensiunile electromotoare corespunzătoare celor trei înfășurările statorice;

– Te –cuplul electric;

– TL –cuplul de sarcină;

– ωm -viteza unghiulara a rotorului;

– Kf -constanta de frecare;

– j – momentul de inerție al motorului;

Modelul matematic al motorului poate fi analizat și din punct de vedere bidimensional (reprezentare vectorială, în coordonate d-q) :

Figura 2.2.4. Orientarea fluxului rotoric

Ecuațiile de tensiune: (2.2.4)

Expresiile fluxului: (2.2.5)

Fluxul de magnetizare: (2.2.6)

Inductivitățile sincrone: (2.2.7)

Ld –inductanța sincronă longitudinală;

Lq –inductanța sincronă transversală;

LSσ –inductivitatea de dispersie a fazei statorice;

Md –inductivitatea de magnetizare longitudinală;

Mq –inductivitatea de magnetizare transversală;

ω – viteza unghiulara a rotorului;

– cu indicele E au fost notate mărimile infășurărilor statorice.

Cuplul motse poate analiza modelul matematic în coordonatele fazelor cu parametri concentrați, ecuațiile care descriu acest model fiind:

(2.2.1)

Valorile instantanee ale curenților: (2.2.2)

Ecuația de cuplu : (2.2.3)

Figura 2.2.3. Reprezentarea înfășurărilor statorice ale motorului brushless printr-o rezistență, inductivitate și o tensiune electromotoare

– iA, iB, iC –curenții prin înfășurările statorice;

– eA, eB, eC – tensiunile electromotoare corespunzătoare celor trei înfășurările statorice;

– Te –cuplul electric;

– TL –cuplul de sarcină;

– ωm -viteza unghiulara a rotorului;

– Kf -constanta de frecare;

– j – momentul de inerție al motorului;

Modelul matematic al motorului poate fi analizat și din punct de vedere bidimensional (reprezentare vectorială, în coordonate d-q) :

Figura 2.2.4. Orientarea fluxului rotoric

Ecuațiile de tensiune: (2.2.4)

Expresiile fluxului: (2.2.5)

Fluxul de magnetizare: (2.2.6)

Inductivitățile sincrone: (2.2.7)

Ld –inductanța sincronă longitudinală;

Lq –inductanța sincronă transversală;

LSσ –inductivitatea de dispersie a fazei statorice;

Md –inductivitatea de magnetizare longitudinală;

Mq –inductivitatea de magnetizare transversală;

ω – viteza unghiulara a rotorului;

– cu indicele E au fost notate mărimile infășurărilor statorice.

Cuplul motorului poate fi dedus dintr-un bilanț energetic obținându-se expresia:

(2.2.8)

unde reprezintă cuplul electromagnetic.

În regim staționar () dacă inductivitățile sincrone nu depind de curent și fluxurile sunt constante ,din ecuațiile de tensiune:

(2.2.9)

și folosind notațiile: (2.2.10)

rezultă:

Ecuația de tensiune: (2.2.11)

Expresia fluxului statoric: (2.2.12)

Cea mai comodă strategie de comandă a motoarelor brushless este orientarea după fluxul rotoric.Această modalitate necesită realizarea ortogonalității dintre fluxul de excitație și curentul statoric. În cazul în care cele două componente nu sunt perpendiculare, răspunsul sistemului este lent iar cuplul electromagnetic se reduce. Deci curentul de cuplu din stator trebuie să fie pe direcția axei q și în consecință id = 0. Dacă se neglijează și rezistența fazei statorice relațiile 2.11 și 2.12 devin:

Ecuația de tensiune: (2.13)

Expresia fluxului statoric: (2.14)

Figura 2.2.5. Diagrama vectorială în regim staționar

Factorul de putere: (2.2.15)

Pulsația statorică (viteza unghiulară a rotorului la sincronism ):

(2.2.16)

Poziția rotorului este dificil de determinat datorită lipsei autocomutației. Există câteva metode de determinare a poziției, dintre care cele mai utilizate fiind metoda de detecție cu senzori hall și metoda nesenzorială back-EMF.

Metoda nesenzorială este bazată pe măsurarea tensiunii electromotoare induse în înfășurările statorului și ține de implementare hardware și software așa cum se poate deduce din schema echivalentă a unui sistem electronic prezentată în figura 2.2.6.a. Măsurarea tensiunii electromotoare induse este posibilă deoarece una dintre înfășurări este lăsată în gol la un moment dat.

Tensiunea electromotoare fiind proporțională cu viteza de rotație, la viteze mici, amplitudinea tensiunii induse este de valoare foarte mică, citirea semnalului fiind foarte dificilă pentru determinarea trecerilor prin zero, prin urmare este necesar ca rotorul să ajungă la o anumită turație, de aceea, inițial, pornirea acestui tip de motoare se face fără controlul poziției (orbește).

Metoda este convenabilă în condiții nefavorabile metodei senzoriale, precum spații greu accesibile, încăperi cu mult praf sau agenți dăunători componentelor electronice. Însă în cazul în care motorul trebuie să efectuieze opriri sau porniri repetate, această metodă prezintă dezavantaje.

a)Schema bloc a circuitului electronic b)Schema bloc a circuitului electronic

de control folosind metoda back-EMF de control folosind senzori hall

Figura 2.2.6.

În ultima vreme folosirea senzorilor hall a devenit cea mai răspândită metodă de detecție a poziției rotorului, cele mai multe motoare brushless având câte trei senzori hall montați la capătul statorului. Acești senzori, care funcționeaza pe baza efectului hall, furnizează un semnal digital cu nivel 1 logic pe o perioadă π, iar pentru cea de a doua perioadă π un semnal digital cu nivel 0 logic. Semnalele furnizate de cei trei senzori sunt defazate între ele cu 60° astfel fiecare senzor este aliniat cu unul dintre circuitele electromagnetice.

Efectul hall apare când un conductor sau un semiconductor, parcurs de un curent electric, este supus acțiunii unui cîmp magnetic perpendicular pe direcția curentului și se manifestă prin apariția unei tensiuni, denumită tensiune hall.

Numărul de cicluri electrice care trebuie să se repete pentru a obține o rotație completă este determinat de numărul de poli rotorici. Formele de unde generate de senzori sunt prezentate în figura 2.2.7 , de remarcat faptul că perioada semnalului furnizat de un senzor hall este identică cu perioada unui ciclu electric, iar în figura 2.2.6.b se poate observa o schemă bloc echivalentă unui sistem electronic de control ce utilizează senzori hall, de asemenea se poate observa și modul de amplasare a senzorilor hall în interiorul statorului.

Figura 2.2.7. Formele de unde generate de senzori Hall

2.3 Invertor trifazat

Invertoarele sunt convertoare statice de putere continuu-alternativ. Ele transformă o sursă de tensiune (sau curent) continuu într-o sursă de tensiune (sau curent) alternativă, de amplitudine și/sau frecvență variabilă.

Invertoarele cu comutație comandată se pot clasifica după mai multe criterii, în funcție de numărul de faze ale semnalului de ieșire putem întâlni invertoare monofazate și invertoare trifazate. Având în vedere natura circuitului de alimentare și mărimea comutată în circuit, întâlnim invertoare de tensiune (alimentate de la o sursa de tensiune continuă, mărimea de ieșire fiind tensiune iar forma curentului este impusă de sarcină) și invertoare de curent (alimentate de la o sursa de curent continuă, mărimea de ieșire fiind curent iar forma tensiunii este impusă de sarcină). La ieșirea invertorului forma de undă poate căpăta: forma unui semnal dreptunghiular, forma unui semnal dreptunghiular modulat în durată sau forma unui semnal sinusoidal.

După modul de comandă regăsim invertoare comandate cu undă plină și invertoare comandate pe principiul modulării în durată a impulsurilor de comandă (PWM –Pulse Width Modulation).

Majoritatea invertoarelor atât monofazate cât și trifazate sunt construite avînd la bază brațul de semipunte monofazată. Puntea monofazată conține două brațe, iar cea trifazată trei.

Fiecare braț conține două comutatoare care funcționează în contra-timp, fiecare din ele fiind basculate între două stări stabile: starea de conducție totală și starea de blocare totală. Aceste comutatoare pot fi tiristoare (GTO, normale), tranzistoare (MOSFET, IGBT, TBJ) sau relee (în cazul frecvențelor mici de comutare).

În continuare este prezentat invertorul trifazat de tensiune comandat cu undă plină în condiții ideale. Sursa care furnizează mărimea de intrare contiunuă este considerată perfectă (cu impedanța internă neglijabilă), iar comutatoarele sunt ideale (cădere de tensiune în direct nula, curent de scurgere invers nul, comutații instantanee). La ieșirea invertorului este conectată o sarcină trifazată simetrică în configurație stea, de tipul R-L-E, echivalentă cu înfășurările unui motor brushless. Cele trei brațe de ieșire ale invertorului au fost notate uzual cu A,B,C, cu N s-a notat bara negativă (masa) a sursei de tensiune continuă Vd iar cu n nulul izolat al sarcinei trifazate.

Alte notații:

-vAN,vBN,vCN –tensiunile de ieșire ale brațelor luate față de bara negativă a sursei Vd;

-vAB,vBC,vCA –tensiunile de linie la ieșirea invertorului;

-vAn,vBn,vCn –tensiunile de ieșire ale brațelor luate față de nulul stelei (izolat);

-iA , iB, iC –curenții de fază de la ieșirea invertorului;

-eA,eB,eC – tensiunile electromotoare induse;

-vnN –tensiunea dintre nulul stelei si bara negativa a sursei;

Pe fiecare interval de timp se află în conducție doar două comutatoare. Comutatoarele din partea superioară a punților invertorului față de comutatoarele din partea inferioară sunt comandate decalat cu 60° electrice. Comutatoarele unei singure punți sunt comandate în contratimp și decalat cu 120° electrice, fiecare comutator găsindu-se în conducție pe un interval de timp echivalent cu 120° electrice. Tensiunile de linie la ieșirea invertorului sunt defazate între ele cu 120° electrice.

Figura 2.3.1. Topologia invertorului trifazat cu sarcină echilibrată conectată în stea

Ecuațiile volt-amper scrise ținând seama că în timpul funcționării sunt conectate două faze ale sarcinei (conectată în stea) sunt:

(2.3.1)

Tensiunile de linie la ieșirea invertorului pot fi exprimate în funcție de tensiunile de ieșire ale brațelor luate față de nulul stelei (n) sau în funcție de tensiunile de ieșire ale brațelor luate față de bara negativă a sursei (N):

(2.3.2)

Deoarece sarcina la ieșire este în configurație stea având nulul izolat se poate scrie:

(2.3.3)

Și întrucât este simetrică și echlibrată în orice moment este valabilă relația:

(2.3.4)

Suma tensiunilor de ieșire ale brațelor luate față de nulul stelei (n) este nulă:

(2.3.5)

Tensiunile de ieșire ale brațelor luate față de bara negativă a sursei (N) pot fi exprimate după cum urmează:

(2.3.6)

Din relația 2.3.5 și 2.3.6 putem deduce expresia tensiunii dintre nulul fazei și bara negativă a sursei de alimentare:

(2.3.7)

Din expresiile 2.3.6 și 2.3.7 ecuațiile de tensiune ale invertorului trifazat capătă forma :

(2.3.8)

Figura 2.3.2. Formele de undă corespunzătoare invertorului trifazat comandat cu undă plină

Din figura prezentată anterior putem observa că formele de undă ale tensiunilor de linie la ieșirea invertorului vAB,vBC,vCA, tind spre o formă de undă trapezoidală. În funcție de poziția comutatoarelor, tensiunile de ieșire ale brațelor luate față de nulul stelei vAn,vBn,vCn vor avea valoarea sau .

Analizând primult interval 0° – 60° pentru tensiunile de linie rezultă următoarele valori :

(2.3.9)

Cel mai utilizat mod de comandă a invertoarelor trifazate este cel bazat pe principiul modulării în durată a impulsurilor (PWM).

Modulația pulsurilor în durată folosește un semnal dreptunghiular a cărui lățime este modulată ca rezultat al variației valorii medii a undei.

Considerând o formă de undă  f(t) cu periada T , valoare minimă  vmin , valoare maximă  vmax și un ciclu activ D, valoarea medie a undei va fi:

(2.3.10)

Figura 2.3.3. PWM

Forma de undă f(t) este un semnal dreptunghiular periodic, valoarea lui este  vmax pentru intervalul 0 < t < DT și respectiv  vmin pentru intervalul DT < t < T . Ținând cont și de aceste considerente, formula (2,9) va deveni :

(2.3.11)

În majoritatea cazurilor vmin  = 0 , prin urmare valoarea medie a semnalului va fi egală cu . Din acestea putem observa că valoarea medie a semnalului este direct proporțională cu cilul activ.

2.3.1 Tranzistorul MOSFET

Tranzistorul cu efect de câmp (FET) este un dispozitiv electronic semiconductor folosit pentru a comanda intensitatea curentului electric dintr-un circuit. Asemenea dispozitive sunt întâlnite și sub denumirea de tranzistoare unipolare deoarece conducția electrică este asigurată de un singur tip de purtători electronici de sarcină, electroni sau goluri, după cum canalul este de tip n, respectiv p. Funcționarea se bazează pe variația conductibilității unui canal , accesibil prin terminalele numite sursă și drenă, ce se realizează prin aplicarea unei tensiuni între  grila (poarta) și substratul dispozitivului, astfel obținându-se, modificarea dimensiunii transversale a canalului semiconductor sau a concentrației de purtători electronici din acesta.

În funcție de modul de realizare a grilei cele mai frecvente configurații de tranzistoare cu efect de camp întâlnite sunt tranzistoare cu grilă izolată de semiconductor prin intermediul unui strat de oxid de siliciu foarte subțire (MOSFET) și tranzistoare cu o joncțiune invers polarizată (JFET).

Pentru a proteja tranzistorul, uneori, în procesul de fabricație, sunt introduse diode zener între grilă și substrat. Diodele dintre grilă și substrat protejează tranzistorul însă reduc rezistența de intrare. Datorită rezistențelor mari și capacităților mici ale structurii grilă-canal din tranzistorul MOS, pot apărea tensiuni mari de străpungere datorate acumulării de sarcină electrostatica. Aceste tensiuni străpung oxidul stratului izolator, de grosime foarte mică și distrug tranzistorul. Acumularea de sarcini electrostatice poate apărea de exemplu datorită containerelor de plastic utilizate la transportul materialelor semiconductoare sau datorită tensiunii electrostatice cu care este încărcată o persoană ce ține în mână asemenea tranzistoare.Tot prin procesul de fabricație poate fi introdusă și o diodă de descărcare conectată antiparalel, între drenă și sursă, acestea protejând tranzistorul în cazul sarcinilor inductive și returnând în circuit energia înmagazinată în bobină.

Tranzistorul MOSFET spre deosebire de tranzistor bipolar are avantajul unei impedanțe de intrare mari, curentul de comandă pe grilă fiind semnificativ mai mic (de ordinul zecilor de picoamperi).

2.3.2 Circuitul driver IR2101

Circuitul integrat IR2101 este un circuit de comandă (driver) a tranzistoarelor MOSFET/IGBT dintr-un braț de punte. Este de tip HVIC cu dispozitiv de blocare CMOS, cu o construcție monolitică ridigizată, care nu necesită elemente de separare galvanică pe traseele de comunicație. Diagrama bloc a circuitului este prezentată în figura 2.3.2.1. Acesta folosește tehnica de bootstrap pentru a obține tensiunea pozitivă de grilă.

Figura 2.3.2.1 Diagrama bloc IR2101

Condesatorul CA2 conectat între pini VB și VS asigură o tensiune pozitivă suplimentară pe grila tranzistorului din partea superioară a brațului de punte. De fiecare dată când tranzitorul din partea inferioară este adus în conducție se crează condiția de încărcare a condesatorul de bootstrap CA2, de la sursa de alimentare prin intermediul diodei DA1, diodă ce protejează atât sursa cât și integratul împotriva tensiunilor ridicate ale circuitului de forță. În momentul aducerii în conducție a tranzistorului din partea superioară, tensiunea flotantă va fi asigurată de condesator pentru o perioadă de câteva microsecunde sau milisecunde.

Figura 2.3.2.2 Schema cu IR2101

2.4 Microcontrolere

Un microcontroler este un sistem electronic miniaturizat destinat controlului unui proces sau al unei interacțiuni cu mediul exterior, intervenția operatorului uman nefiind necesară. Inițial controlerele erau realizate folosind componente electromecanice și componente electronice discrete. Construcția lui era foarte robustă având un consum mare de energie și fiabilitate lasând de dorit. Cu timpul acesta a început să capete forme din ce în ce mai mici, toate componentele necesare au fost integrate pe același chip.

Datorită prețului scăzut, în prezent microcontrolerele se regăsesc în aproape toate dispozitivile electrocasnice (televizoroare, mașini de spălat, imprimante, frigidere,cuptor cu microunde etc.). De asemenea microcontrolerele sunt folosite pe scară largă și în industrie. În industria automobilelor de exemplu este integrat în unitatea de control (ECU) și poate realiza controlul frânări și al direcției(ABS), controlul injecției carburantului, controlul dispozitivelor de siguranță(Airbag), reglarea scaunelor și oglinzilor, climatizarea, diagnoza.

La ora actuală există un număr foarte mare de tipuri constructive de microcontrolere. Printre cei mai cunoscuți producători de microcontrolere sunt: Motorola, Intel, Microchip, Freescale, Texas Instruments, Atmel, Zilog. Acești producători scot pe piață chip-uri tot mai performante, dedicate anumitor aplicații specifice. Toate acestea sunt realizate în tehnologia CMOS (Complementary metal–oxide–semiconductor), tehnologie care permite obținerea celor mai mari viteze de operare la o putere consumată foarte redusă, realizarea structurilor cu densitate foarte mare de integrare și o imunitate ridicată la perturbații..

Microcontrolerul în structura sa internă poate include o unitatea centrală (microprocesor), un temporizatoar/numărător, un generator de tact (de obicei un circuit RC), o memorie volatilă (RAM) și o memorie nevolatilă (ROM/EPROM/EEPROM/FLASH), un sistem de întreruperi (ISR), un dispozitiv I/O intrări/ieșiri atât seriale cât și paralele, un covertoar A/D și D/A, un comparator analogic , un generator de PWM, periferice și alte resurse. Dimensiunea cuvântului de date reprezintă un prim criteriu de clasificare, astfel funcție de acesta și de puterea de calcul dorită întâlnim microcontrolere cu o lungime a cuvântului de date cuprinsă între 4 și 64 de biți .

Cel mai important aspect în ceea ce privește analiza oricărui sistem de calcul se referă la arhitectura sa internă. Dintre cele mai întâlnite arhitecturi amintim: arhitecturi de tip " Von Neumann " și arhitecturi de tip " Harvard ".

Fiindcă dezvoltarea aplicațiilor presupune pe lângă proiectarea circuitelor electronice aferente și specificarea prin instrucțiuni a sarcinilor pe care sistemul trebuie să le îndeplinească, microcontrolerele dispun și de un circuit microprogramabil.

Limbajul mașină este singurul mod prin care microcontrolerul poate interpreta informația. Însă acest limbaj nu este deloc la îndemâna unui programator. Acesta va utiliza un limbaj de programare (ASM, C/C++) în care o instrucțiune are corespondent o instrucțiune în limbajul mașină. Conversia instrucțiunilor din limbajul de programare în limbaj mașină va fi realizată de un compilator.

2.4.1 Microcontroler PIC16F887

Produs de firma Microchip Technology Inc, PIC16F887 este un microcontroler pe 8 biți construit pe o arhitectură de tip Harvard (figura 2.4.1.1) . Arhitectura Harvard permite executarea instrucțiunilor microcontrolerului (majoritatea) într-un singur ciclu. Spațiile de memorie sunt separate pentru memoria program și memoria de date. Lățimea magistralelor variază în funcție de mărimea memoriei.

Figura 2.4.1.1 Arhitectura Harvard

Unitatea centrală de programare de înaltă performanță este bazată pe o arhitectură RISC (Reduced Instruction Set Computer) având numai 35 de instrucțiuni.

Oscilatorul intern este de 8Mhz, frecvența acestuia poate fi divizată pentru a obține frecvențe de oscilație de 4 MHz, 2MHz, 1MHz, 500KHz, 250 KHz, 125 Khz și respectiv 31KHz, prin intermediul registrului OSCCON (biții IRCF<2:0>). Frecvența maximă de operare este de 20 MHz, în acest caz este necasar atașarea unui cuarț extern.

Microcontrolerului are o memorie program FLASH de 8192 cuvinte. Această memorie poate fi ștearsă și reporgramată electric. În cazul ștergerii este permisă doar ștergera întregului conținut.

Memoria de date este formată din 368 bytes (octeți) SRAM și 256 bytes EEPROM, fiind împărțită în patru bancuri care conțin registri de uz general (GPR) și registri de funcții speciale (SFR).Memoria SRAM (Static Random Access Memory) folosește circuite logice combinaționale pentru a memora fiecare bit și nu necesită un ciclu periodic de reîmprospătare. Această memorie conține registri de uz general, unde sunt memorate date aflate în continuă schimbare. Memoria EEPROM (Electrically Erasable Programmable Read Only Memory) este un tip de memorie nevolatilă în care sunt stocate date pe termen lung. Ștergerea este selectivă, iar pentru rescriere trebuie parcurși mai mulți pași. Memoria este lentă și are un numărul de rescriere limitat (aproximativ 10 000).

Capsula microcontrolerului este de tip PDIP având 40 de pini dintre care 4 de alimentare (VDD, VSS). Pentru alimentare este recomandată o tensiune stabilizată cu o valoare cuprinsă între 3.7V și 5V. Pinii microcontrolerului sunt grupați în patru porturi (PORTA, PORTB, PORTC, PORTD) a câte 8 pini fiecare și un port de 4 pini ( PORTE). Prin intermediul rigiștrilor TRISA/TRISB/TRISC/TRISD/TRISE pinii acestor porturi pot fi setați fie de intrare fie de ieșire, funcție de cerințele aplicației.

În figura 2.4.1.2 se poate observa o diagramă pinilor microcontrolerului .

Figura 2.4.1.2 Diagrama pinilor PIC16F887

Microcontrolerul PIC16F887 are 3 module de timere respectiv TMR0, TMR1, TMR2.

Modulul TMR0 poate lucra pe 8 biți, putând fi folosit atât ca timer cât și ca numărător de evenimente. Acesta are un prescaler de 8 biti care poate fi asignat cu TMR0 sau WDT. Prescaler-ul are rolul de a diviza frecvența oscilatorului intern sau extern. În modul de lucru timer va incrementa la fiecare ciclu instruțiune până va atinge valoarea maximă de 255, după care o va lua de la capăt. Incrementarea va porni de la o valoare prescrisă de programator. Orice midificare a TMR0 va inițializa și prescalerul. Prescalerul va memora de cate ori TMR0 a incrementat până la depășirea valorii maxime. Un ciclu instrucțiune se desfășoară pe durata a 4 perioade de ceas. La depășirea valorii de 255 (0xff) TMR0 poate genera o întrerupere.

Ecuația funcționării TMR0 este:

(2.4.1.1)

t – timpul dorit (în milisecunde);

Fosc –frecvența oscilatorului intern/extern.

Registrul OPTION_REG conține biții de control pentru a configura prescalerul, întreruperea INT externă, TMR0, și pull-up-uri de pe PORTB:

RBPU – bit de setare al „pull-up” PORTB:

1 = pull-up PORTB este dezactivat;

0 = pull-up PORTB este activat de valorile individuale ale latch-urilor;

INTEDG – bit de selecție al frontului întreruperii RB0/INT:

1 = întrerupere pe front crescător RB0/INT;

0 = întrerupere pe front descrescător RB0/INT;

T0CS –bit de selecție a tactului pentru TMR0:

1 = TMR0 incrementează prin impulsurile experne primite pe pinul RA4/T0CKI;

0 = TMR0 incrementeaza de la oscilatorul intern(Fosc/4);

T0SE –bit de selecție a polarității semnalului de tact extern:

1 = incrementare pe tranziția low-high a RA4/T0CKI;

0 = incrementare pe tranziția high-low a RA4/T0CKI;

PSA –bit de asignare a prescalerului:

1 = prescalerul este asignat la WDT;

0 = prescalerul este asignat la TMR0;

PS<2:0> – biții de selecție a ratei prescalorului:

Modulul TMR1 are o funcționare asemănătoare cu TMR0. Este un timer și numărător pe 16 biți care poate fi incrementat și în starea de hibernare (sleep) a microcontrolerului. Poate fi configurat prin intermediul registrului T1CON. Activarea timerului se face prin setarea bitului TMR1ON. TMR1 are doi regiștri paraleli TMR1H și TMR1L care se vor incrementa la fiecare tact de ceas dacă timerul este pornit și bitul T1OSCEN setat. Prescalerul este complet separat și poate fi setat la 1:1, 1:2, 1:4, 1:8.

Modulul TMR2 este un timer și numărător de 8 biți cu registru de perioadă de 8 biți. Configurare acestuia se face prin intermediul registrului T2CON. Acest timer are inclus atât prescaler cât și postscaler. Prescalerul este controlat de biți T2CKPS,, iar postscalerul este

controlată de biți TOUTPS ai registrului. Poate fi deservit ca bază de timp pentru modulul CCP.

Microcontrolerul PIC16F887 permite lucrul în întreruperi, punând la dispoziție multiple surse de întrerupere.

Prin întrerupere înțelegem suspendarea procesului de execuției a programului pentru a deservi o problemă prioritară, după finalizare reluându-se execuția procesului oprit anterior din punctul unde s-a produs întreruperea. Întreruperea în mod general este determinată de răspunsul la un efect fizic extern sau intern, care necesită o tratare imediată. Tratarea situației presupune existența unei subrutine definite în acest scop.

Întreruperile sunt controlate prin 3 biți, dintre care unul stabilește nivelul de prioritate al întreruperii (ridicat/scăzut), unul activeză întreruperea și al treilea marchează când s-a produs întreruperea. Întreruperile pot fi controlate prin intermediul regiștrilor INTCON, PIE1, PIE2, PIR1, PIR2, IOCB.

În registrele INTCON se pot face anumite configurații ale întreruperilor:

GIE –bit de permisie a întreruperilor globale:

1 = permite toate întreruperile nemascate;

0 = dezactivează toate întreruperile;

PEIE –bit de permisie a întreruperilor periferice:

1 = permite toate întreruperile periferice nemascate;

0 = dezactivează toate întreruperile periferice;

T0IE –bit de permisie a întrerulerilor generate de depășirea contorului TMR0:

1 = întrerupere permisă;

0 = întrerupere nepermisă;

INTE –bit de permisie a întreruperilor externe de la RB0/INT:

1 = întrerupere externă permisă;

0 = întrerupere externă nepermisă;

RBIE –bitul de permisie a întreruperilor generate de schimbarea stări pinilor portului B:

1 = întrerupere generate de schimbarea stări pinilor portului B permisă;

0 = întrerupere generate de schimbarea stări pinilor portului B nepermisă;

În cazul în care se utilizează întreruperea generată de schimbarea stării pinilor portului B (RBIE=1) este necesar și setarea biților corespunzători din registrul IOCB.

T0IF –flag de detecție a depășiri contorului TMR0 (trebuie șters prin program) :

1 = depășirea s-a produs;

0 = nu s-a produs depășirea;

INTF –flag de detecție a întreruperilor externe (trebuie șters prin program) :

1 = întreruperea externă a avut loc;

0 = nu a avut loc întreruperea externă;

RBIF–flag de detecție a întreruperilor genereate de schimbarea stări pinilor portului B (trebuie

șters prin program) :

1 = întreruperea avut loc;

0 = nu a avut loc întreruperea ;

Registrele PIE (Peripheral Interrupt Enable) conțin biți individuali de activare pentru fiecare perfiferic ce poate lucra în întrerupere.

PIE1:

PIE2:

Registrele PIR (Peripheral Interrupt Request) conțin informații care ne spun daca s-a produs sau nu o întrerupere.

PIR1:

PIR2:

ADIE –bit pentru setarea întreruperii convertorului AD;

ADIF –flag de întreruperi al convertorului AD;

RCIE –bit pentru setarea întreruperii pentru recepția USART;

RCIF –flag de întrerupere pentru recepția USART;

TXIE –bit pentru setarea întreruperii pentru transmisie USART;

TXIF–flag de întrerupere pentru transmisia USART;

TMR2IE –bit pentru setarea întreruperii la coincidență TMR2/PR2;

TMR2IF –flag de întrerupere la coincidență TMR2/PR2;

TMR1IE –bit pentru setarea întreruperii la depășirea valorii maxime a TMR1;

TMR1IF –flag de întrerupere la depășirea valorii maxime a TMR1;

Modulul utilizat pentru conversia mărimilor analogice în mărimi digitale, converotorul analog numeric sau prescurtat ADC, pe care acest microcontroler îl pune la dispoziție are o rezoluție de 10 biți. Modulul ADC poate fi folosit prin intermediul a 14 canale analogice.

Dacă avem o mărime analogică care variază între 0 și 5V rezultatul conversiei va fi un număr cu valoarea cuprinsă între 0 și 1023. Pinii responsabili pentru preluarea semnalelor analogice sunt distribuiți în portul A (RA0/AN0, RA1/AN1, RA2/AN2, RA3/AN3, RA5/AN4), portul B (RB0/AN12, RB1/AN10, RB2/AN8, RB3/AN9, RB4/AN11, RB5/AN13), și portul E (RE0/AN5, RE1/AN1, RE2/AN2).

Când se dorește conversia de semnale analogice, acești pini de intrare/ieșire ar trebui să fie configurați pentru modul analogic. Pentru a seta pinii utilizați pentru citirea semanlelor analogice se vor utiliza regiștri TRIS, ANSEL, ANSELH, ADCON0, ADCON1. ANSEL și ANSELH sunt regiștri de setare a modului anoalogic sau digital pentru pinii destinați acestui mod de lucru.

Registrul ADCON0:

ADCS<1:0> –biți de selecție a ceasului pentru conversia A/D:

00 = FOSC/2;

01 = FOSC/8;

10 = FOSC/32;

11 = FRC;

CHS<3:0> –biți de selecție a canalului analogic;

GO/DONE –bit status al conversiei A/D;

ADON –bit de activare a conversiei A/D;

Registrul ADCON1:

ADFM –bit de selecție al formatului rezultatului;

VCFG<1:0> –biți de selecție a tensiunii de referință:

00 = VDD,VSS;

01 = VDD, -Vref;

10 = +Vref, VSS;

11 = +Vref, -Vref;

Microcontrolerul PIC16F887 dispune de două module de comunicație serială: EUSART (Enhanced Universal Syncronous Asyncronous Receiver Transmitter) și MSSP (Master Syncronus Serial Port).

EUSART este un port periferic bidirecțional destinat implementării unui protocol clasic de comunicație serială, atât asincronă cât și sincronă. Comunicarea se poate realiza cu un alt microcontroler, calculator sau dispozitiv periferic (modul bluetooth, modul wireless, modul GSM ). Transmisia datelor fiind bidirectională aceasta se realizează prin intermediul a doi pini, RX/RC7 (recepție) și TX/RC6 (transmisie). La comunicarea sincronă pe lângă legăturile de transmisie a datelor mai existența si o legatură prin care se stabilește același semnal de tact între dispozitive. EUSART se poate folosi în configurații standard RS-232, RS-422 sau RS-485.

Regiștrii de interes pentru a configura modulul de comunicare serială sunt: registrul de control a ratei de transfer a datelor (BAUDCTL), registrul de setare a parametrilor transmisiei (TXSTA), registrul de setare a parametrilor recepției (RCSTA), registrul generator al vitezei de comunicație (SPBRG,SPBRGH), regiștrul de transmisie a caracterului (TXREG) și registrul de recepție a caracterului (RXREG). Registrul TXSTA permite selecția numărului de biți (8 sau 9 prin bitul TX9), modul de comunicație (sincron sau asincron prin bitul SYNC), selecția vitezei ridicate de comunicație (BRGH) și începerea transmisiei (TXEN). Registrul de recepție RCSTA permite activarea sau inhibarea recepției (SPEN), selectarea numărului de biți recepționați ( 8 sau 9 RX9), activarea recepției în mod continuu (CREN) și detecția a două tipuri de erori: frame error (FERR) respectiv overrun error (OERR).

Formula ce stabilește viteză de transfer a datelor este:

BRGH = 0, BRG16=0, SYNC=0: ;

BRGH ={0,1}, BRG16={0,1}, SYNC=0: ; (2.4.1.2)

BRGH = 1, BRG16={0,1}, SYNC={0,1}: ;

Microcontrolerul mai are încorporat și module de captură, comparare , PWM (Puls Width Modulation). Captura este realizată pe 16 biți cu rezoluția maximă de 12.5nS, compararea pe 16 biți cu rezoluția maximă de 200nS, iar rezoluția maximă a PWM- ului este de 10 biți . PWM-ul dispune de 1,2 sau 4 canale de ieșire având o frecvență maximă de 20kHz. Regiștrii asociați modulului comparare/captură/pwm sunt CCPR1L, CCPR1H, CCP1CON, CCPR2L, CCPR2H, CCP2CON.

Dacă se utilizează modulul PWM următoarele relații sunt importante de cunoscut:

(2.4.1.3)

(2.4.1.4)

(2.4.1.5)

2.4.2 Microcontroler PIC18F4431

Microcontrolerul PIC18F4431 are aceași arhitectură internă ca și PIC16F887. Capsulă este tot de tip PDIP cu 40 de pini I/O grupați în mod identic dar care au funcții diferite.

Figura 2.4.2.1 Diagrama pinilor PIC18F4431

Spre deosebire de PIC16F887, acest microcontroler prezintă unele avantaje pe care cel din urmă nu le poate oferii. În primul rând este un microcontroler dedicat aplicațiilor care necesită multiple intrări PWM.

Dispune de o memorie program Flash,(lasa spatiu dupa virgula nu inainte)mai mare, de 16384 bytes. De asemenea și memoria de date este mai mare, 768 bytes SRAM și 256 bytes EEPROM.

Oscilatorul intern ca și la PIC16F887 este de 8MHz . Microcontrolerul poate funcționa însă la o frecvență maximă de 40MHz datorită buclei PLL(Phase Lock Loop) interne. Această bulcă are capacitatea de a multiplica de patru ori frecvența de oscilație, cu condiția ca frecvența oscilatorul extern să nu fie mai mare de 10 MHz.

Întreruperile microcontrolerului pot fi controlate prin intermediul a 10 regiștri: RCON, INTCON, INTCON2, INTCON3, PIE1, PIE2,PIE3, PIR1, PIR2, PIR3, IPR1, IPR2, IPR3.

Regiștri IPR (Interrupt Priority Register) permit setarea priorității întreruperilor generate de un anumit periferic printr-un bit specific. Registrul RCON conține bitul IPEN (Interrupt Priority Enable Bit) prin intermediul căruia se stabilește dacă intreruperile vor lucra sau nu pe nivele de prioritate.

PIC18F2431 are 4 module timer: TMR0, TMR1, TMR2 și TMR5. Modulul TMR0 poate lucra pe 8 biți sau pe 16 biți, TMR1 și TMR5 pe 16 biți iar TMR2 pe 8 biți. Regiștri de configurare specifici acestor module sunt: T0CON,T1CON,T2CON,T5CON. TMR2 poate fi deservit ca bază de timp pentru modulul CCP. TMR5 este deservit ca bază de timp de modulul PCPWM. De asemenea mai are câteva caracteristici noi față de celelalte module timer, deservește modulul MFM (Motion Feedback Module), modul care poate fi utilizat atunci când se dorește cunoașterea anumitor informații despre o mișcare.

Convertorul analog numeric A/D pe 10 biți are doar 9 canale, și realizează o conversie cu o viteză mult mai mare față de PIC16F887. Convertorul este configurat cu ajutorul regiștrilor: ADCON0, ADCON1, ADCON2, ADCON3, ADCHS, ANSEL0, ADRESH, ADRESL.

Microcontrolerul PIC18F4431 dispune de 8 canale PWM care pot fi folosite atât în mod independent cât și în mod complementar cu posibilitatea inserției de timpi morți. Canalele sunt accesibile prin intermediul pinilor portului B (RB0/PWM0, RB1/PWM1, RB2/PWM2, RB3/PWM3, RB4/PWM5, RB5/PWM4) și portului D (RD5/PWM4, RD6/PWM6, RD7/PWM7).

Funcționarea modulului PWM este controlată de un total de 22 de registre. Opt dintre aceștea sunt folosiți pentru a configura caracteristicile modulului: PTCON0, PTCON1, PWMCON0, PWMCON1, OVDCOND, OVDCONS, DTCON, FLTCONFIG. Ceilalți 14 regiștri sunt configurati ca șapte regiștri de 16 biți.Aceștea sunt regiștrii de control ai factorului de umplere: PDC0 (PDC0L,PDC0H ), PDC1 (PDC1L, PDC1H), PDC2 (PDC2L, PDC2H), PDC3 (PDC3L, PDC3H), regiștri de timp (PTMRH, PTMRL), (PTPERH, PTPERL) și registrul de trigger special (SEVTCMPH, SEVTCMPL).

Registrul PTCON0 conține biți de configurare a timpul de bază pentru modulul PWM:

PTOPS <3:0> –biți de selecție a postscalerului;

PTCKPS<1:0>–biți de selectie a prescalerului;

PTMOD<1:0>–biți de selecție a modului timp de bază PWM:

11 = mod continuu cu întreruperi pentru actualizări duble PWM;

10 = mod continuu ;

01 = mod Single-Shot;

00 = mod Free-Running (mod liber de funcționare);

În registrul PTCON1 găsim bitul de activare a timpului de bază (PTEN) și bitul de selecție a modului de incrementare al timerului, crescător sau descrescător (PTDIR).

Registrul PWMCON0 conține biții de selecție a canalului pe care se va genera PWM (PWMEN<2:0>) și biții de selecție a modului de ieșire PWM ,independent sau conmplementar, (PMOD<3:0>).

Registrul OVDCOND permite sau nu ca ieșirea PWM să fie controlată de valoarea din registrul Duty Cycle și baza de timp PWM.

În aplicațiile cu invertoare de putere, în cazul în care PWM-urile utilizate sunt în mod complementar, pentru a avea un control superior este utilă inserția de timpi morți( figura 4.2.2). Acest lucru se realizează configurând registrul DTCON.

Figura 2.4.2.2 Exemplu de timpi morți

2.5 Senzori

Denumirea de senzor provine din cuvântul latin „sensus” –simț,ori virgula ori si? și este un dispozitiv sensibil capabil să detecteze sau să masoare unii parametrii din mediu înconjurător sau unele condiții, care sunt aplicate la intrare și să furnizeze un răspuns de aceași natură sau de natură difertită. Astfel senzorii au și funcția de a converti stimulul într-un semnal măsurabil. Cuprinde atât traductorul care transformă mărimea de intrare în semnal electric util cât și circuite aferente pentru adaptarea și conversia semnalelor și eventual prelucrarea și evaluarea informațiilor. Stimulii de la intrare pot fi de natură mecanică, termică, electromagnetică, acustici sau chimici.

2.5.1 Senzor de distanță cu ultrasunete HC-SR04

Senzorul HC-SR04 este un senzor cu ultrasunete destinat măsurării distanțelor. Funcționarea sa se bazează pe principiul ecolocației, oferind o mare precizie a distanței măsurate: de la 2 cm până la 400 cm, cu precizie de până la 3 mm.

Figura 2.5.1.1

Modulul este prevăzut cu patru pini dintre care 2 pentru alimentare, unul pentru a trimite semnal (Trigger) și unul pentru a recepționa ecoul (Echo). Alimentarea se va face de la o sursa de 5 V modulul avand un consum destul de redus ,15mA.

Ultrasunetele generate au o frecvență ridicată, 40kHz. La început este trimis un semnal de 10μs (microsecunde), apoi senzorul va genera intern o serie de 8 impulsuri de 40 kHz. Receptorul așteaptă ecoul de 60 ms (milisecunde). Dacă răspunsul este între 150μs-25ms se detectează un obstacol, dacă timpul este peste 38ms nu se detectează nimic.

Figura 2.5.1.2

Distanța este calculată folosind formula:

(2.5.1.1)

D-distanța de măsurat;

T-diferența de timp de la trasmiterea impulsului trigger până la recepționarea ecoului.

Viteza ultrasunetului în aer este de 344 m/s la o temperatură de 20°C. Trebuie ținut cont că aceasta este afectată de densitatea aerului (iar densitatea este afectată în principal de temperatură și altitudine). Timpul este înjumătățit deoarece distanța este parcursă în ambele sensuri. Trebuie avut în vedere și unghiul de măsurare a modulului, acesta fiind de doar 15°.

Senzor de curent

În multe aplicații este utilă cunoașterea curentului absorbit de circuit. Cea mai simplă modalitate de a afla curentul este sesizarea rezistivă. Metoda presupune montarea unei rezistențe în serie cu circuitul în cauză. Pe această rezistenșă se va măsura căderea de tensiunea. Valoarea curentului va fi determinată apoi ușor cu ajutorul legii lui Ohm U=R*I.

Curentul poate fi sesizat fie în configurație flotantă (capetele rezistorului sunt conectate la tensiuni diferite de zero) fie față de masă. În figura 2.5.2.1 este prezentat modul de conectare a rezistentei în cazul configurației flotante.

Figura 2.5.2.1 Sesizare rezistivă în configurație flotantă

Pentru a măsura căderea de tensiune pe rezistenta de sesizare în cazul configurației flotante se poate folosi un amplificator operational conectat in modul diferential. Acesta va măsura diferența de potențial dintre capetele rezistenței și va furniza la ieșire o tensiune față de masa, amplificată si direct proporțională cu valoarea curentului.

Figura 2.5.2.2 Schema de principiu a senzorului de curent cu sesizare rezistivă în configurație flotantă cu amplificator diferențial

Dacă aplicăm teorema lui Millman pe schema din figura 2.5.2.2 se poate scrie expresia potențialului față de masă al intrării inversoare:

(2.5.2.1)

Pentru a obține expresia potențialului intrării neinversoare observăm că avem un divizor de tensiune și putem scrie:

(2.5.2.2)

Aplicând condiția de egalitate a potențialelor celor două intrări ale amplificatorului operațional tensiunea de la ieșirea amplificatorului va fi:

(2.5.2.3)

Dacă presupunem că R1 = R3 și R2 = R4 tensiunea la ieșirea amplificatorului va fi:

(2.5.2.4)

Expresia factorului de amplificare pentru amplificatorul diferențial are forma:

(2.5.2.5)

Prin urmare valoarea curentului măsurat va fi:

(2.5.2.6)

Căderea de tensiune pe rezistorul de sesizare influențează funcționarea circuitului. De aceea se face un compromis între tensiunea necesară pentru o măsurare precisă și căderea de tensiune tolerată de aplicație.

Curentul ce trece prin rezistor va genera pe lângă căderea de tensiune și căldură. Dacă puterea ce trebuie disipată se apropie de puterea maximă recomandată pentru rezistor, este necesară montarea rezistorul pe radiator de caldură, altfel temperatura ridicată îi va scurta timpul de viață.

2.5.3 Senzor inductiv pentru detecția metalelor

Detectoarele de metale sunt dispozitive electronice cu rolul de a detecta și semnaliza obiectele metalice atât feroase (fier, oțel, oțel inoxidabil) cât și neferoase (cupru, staniu, aur, plumb, argint, aluminiu). Funcționarea se bazează pe modificarea inducției unei bobine.

Din punct de vedere al principiului de funcționare, detectoarele de metale se împart în trei categorii: VLF (Very Low Frequency), PI (Pulse Induction), BFO (Beat Frequency Oscillator).

Detectorul VLF folosește 2 bobine concentrice și oferă avantajele unei detecții foarte bune a obiectelor de mici dimensiuni, posibilitatea de a face discriminare reală pe diverse tipuri de metale, consum redus de energie, preț de achiziție accesibil. Distanța de detecție maximă este de 70 cm. Poate fi influențat de mineralizarea solului.

Detectorul PI, în funcție de modul de construcție, folosește una sau două bobine pentru detectare. Avantajele detectoarelor PI sunt stabilitatea în funcționare, imunitate la mineralizarea solului și distanțe foarte mari de detecție în adâncime, până la 5m , însă consumul de energie este foarte ridicat .

Detectorul BFO este cel mai ușor de realizat. Folosește o bobină de detecție ce oscilează sincron cu aceeași frecvență cu un oscilator de precizie , consumul este foarte redus iar detecția în comparație cu celelalte detectoare este mai mică, maxim 40 cm.

Figura 2.5.3.1 Diagramă detector de metale

Un exemplu de detector BFO este în figura 2.5.3.1, folosește 2 bobine dispuse pe o bară de ferită. Atunci când un obiect metalic este plasat în preajma bobinei de căutare, o parte din fluxul magnetic trece prin obiect și creează un curent numit curent turbionar. Acest lucru va determina amorsarea oscilațiilor prin bobina detectoare. Scăderea amplitudinii semnalului va fi semnalizată de etajut de ieșire.

2.6 Comunicare serială

Comunicarea serială este definită ca fiind transferul secvențial de informații între 2 puncte de comunicare. Transmisia informațiilor se realizează bit cu bit pe un număr redus de linii de transfer. Acest tip de comunicare, deși mai înceată decât comunicarea paralelă, oferă posibilitatea de transmitere pe o distanță mare a informației.

După modul în care se face comunicarea serială avem comunicare serială sincronă și comunicare serială asincronă. Comunicarea serială sincronă folosește un semnal de ceas care indică când o anumită dată este validă. Comunicarea serială asincronă se folosește de structura informației transmise pentru a realiza sincronizarea între emitor și receptor.

Cele mai cunoscute standarde de comunicare serială, pentru a realiza compatibilitatea între echipamentele furnizate de diverși producători, sunt RS 232 și RS 485.

Pentru ca transferul să poate avea loc este necesar un protocolul de comunicație. Echipamentele care comunică prin intermediul magistralei seriale trebuie să respecte același protocol și aceiași parametri de transmisie (mod de sincronizare, lungimea setului de date, viteza de transfer).

Viteza de transmisie a datelor reprezintă numărul de biți transmiși într-o secundă și se

măsoară în bps (biți pe secondă) sau baud. Ratele standardizate de transmisie a datelor pentru RS232 sunt: 110, 300, 1200, 2400, 4800, 9600, 19200, (28800, 33600), 38400, 57600, 76800,

115200, 230400, 460800, 921600 bps.

Cel mai utilizat standard RS-232, este un standard de comunicare serială asincronă, bidirecțional, folosit pentru transmiterea caracterelor codului ASCII.

Figura 2.6.1 Structura informației transmise conform standardului RS232

În cazul microcontrolerelor cel mai comun standard de comunicare serială cu dispozitivele periferice utilizat este modulului USART.

Figura 2.6.2. Schema de comunicare serială

Cuvândut care este trimis are aceeași structură ca cea prezentată în figura 2.6.1, fiind format dintr-un bit de start, întotdeauna 0 logic, 8– 9 biți de date, un bit de paritate, necesar pentru detecția erorilor și 1-2 biți de stop, întotdeauna 1 logic. Erorile pot apărea atunci cînd configurarea între dispozitive nu este corect facută. Erorile pot fi generate și pe liniile de transmisie, ele putând fi detectate prin bitul de paritate sau biții de stop. La transmiterea sau recepția mai multor cuvinte consecutive trebuie verificat dacă modulul a realizat operația completă de trimitere sau citire altfel poate apărea o altă eroare.

Sincronizarea, în cazul transmisiei seriale asincrone, se face prin intermediul bitului de start, la începutul fiecărui caracter transmis. Datele sunt citite secvențial la jumătatea intervalelor de bit ce urmează bitului de start. Protocolul reușește să asigure citirea corectă a datelor chiar dacă între frecvența de emisie și cea de citire a datelor există mici diferențe.

Modulul bluetooth HC-06

Modulul HC-06 este un modul bluetooth de comunicare serială la distanță. Bluetooth-ul este un set de specificații (un standard) pentru o rețea personală fără fir (wireless), bazată pe unde radio. Modul are integrat protocolul standard bluetooth V2.0. Versiunea este caracterizată de viteze mari de transmisie (3.2mbps ,Enhanced Data Rate), consum de energie mai mic și o rată a erorilor de transmisie mai scăzută (BER – bit error rate). Lățimea benzii modulului HC-06 este de 2.4MHz, puterea de emisie fiind de 3 dBm. Acest modul poate emite la o distanță de aproximativ 10 metri. Rata de transfer poate fi setată la o valoare de 1200, 2400, 4800, 9600, 19200, 38400 bps. Este recomandat ca alimentarea să fie între 3.3 și 5 V, modulul necesitând un curent de lucru cuprins între 8 și 40 mA.

Figura 2.6.1.1 Modulul bluetooth HC-06

Inițial modulul este setat la o rată de transfer de 9600 bps. Pentru a modifica rată de transfer se utilizează comenzi de tip AT (AT / AT+BAUD).

Interfața grafică

Interfața grafică cu utilizatorul (GUI Graphical User Interface ) este o interfață bazată pe un sistem de afișaj ce utilizează elemente grafice. Sistemul de afișaj grafic-vizual este situat funcțional între utilizator si un dispozitiv electronic (calculator, telefon). Interfața oferă pictograme și indicatori vizuali pentru a prezenta toate informațile și acțiunile disponibile. În spatele acestora se află un program care va executa diverse operații.

Lab Windows CVI este un mediu de programare ANSI C pentru testare și măsurare dezvoltat de National Instruments. Aceste mediu permite dezvoltarea interfețelor si produselor software punând la dispoziția programatorului un set de biblioteci. Fiecare dintre aceste biblioteci au o interfață specializată (function panel) care permit mediului să fie foarte flexibil, putând realiza o execuție interactivă , identificarea automată a variabilelor și constantelor existente, generare automată de cod și multe alte funcții. Dintre bibliotecile specializate puse la dispoziție fac parte: biblioteca pentru achiziția de date, biblioteca pentru portul serial RS232, biblioteca pentru operații I/O în cazul achiziției de date.

Capitolul 3. Realizarea practică a proiectului

3.1 Partea mecanică

Proiectul din lucrarea de față este o platformă robotică care poate funcționa atât în mod autonom cât și controlată de la distanță. Șasiul platformei este realizat din plexiglas, un material foarte ușor de prelucrat. Pe acesta, în partea frontală, sunt montate cele două motoare brushless.

Deoarece acest tip de motoare au cuplu scăzut și turație prea ridicată a fost necesara atașarea unui reductor fiecărui motor. Reductoarele au fost procurate de la două autofiletante, ele potrivindu-se perfect la sistemul de prindere al motoarelor. Angrenajele reductoarelor sunt montate în sistem planetar după cum se poate vedea în figura 3.1.1. Acestea oferă o reducție de 1 la 40 și un cuplu mai mare. Practic dacă turația la axul motorului este de 3600 rot/min la axul reductorului turația va fi de 40 de ori mai mică, 90 rot/min.

Figura 3.1.1 Reductor cu angrenaje planetare

Motoarele sunt montate în paralel pentru a putea reduce dimensiunile platformei, acestea împreuna cu reductorarele fiind destul de voluminoase. Fixarea de platformă s-a realizat cu ajutorul unor tablițe. Axul roților este prins și el prin intermediul tablițelor ce țin reductoarele. Transmisia de la reductoare la roți după cum se poate vedea în figura 3.1.2 este facută prin intermediul a câte două angrenaje.

Figura 3.1.2 Dispunerea motoarelor pe platformă

În partea din spate a platformei sunt montate două roți pivot, astfel platforma poate fi controlată doar prin intermediul roților din față. Tot în partea din spate au fost montate invertoarele împreună cu placa lor de comandă și cei doi acumulatori Li-Ion de 11.2 V împreună cu placa de alimentare și senzorul de curent, după cum se poate observa și în diagrama din figura 3.2.2.

Figura 3.1.3 Diagrama părții din spate a platformei

Celor două invertoare, montate în lateral li s-au atașat câte o carcasă confecționată din plexiglas. Aceste carcase au câte un ventilator și permit o răcire mai bună a radiatoarelor invertoarelor, în cazul în care acestea se vor încălzi datorită sarcinii prea mari.

Figura 3.1.4

Deasupra motoarelor s-a montat o placă tot din plexiglas,drept suport pentru placa de bază, pentru detectorul de metale și pentru suportul de senzori.

Senzorii cu ultrasunet sunt plasați mai în interior, cu 4 cm, față de capătul platformei, deoarece distanța minimă de măsurare permisă a senzorilor este de 4 cm, astfel în cazul funcționării în mod autonom dacă platforma se apropie prea mult de un obstacol, datorită inerției, acesta va putea detecta în continuare obstacolul și prin urmare va decizia in mod corect?.

Bobina detectorului de metale este plasată, cu ajutorul unui prelungitor mai în față, astfel încăt să nu poată detecta câmpul electromagnetic generat de motoare în timpul funcționării. Prelungitorul este flexibil,astfel la urcarea unei pante nu va incomoda platforma în nici un fel.

Toate plăcile cu circuite electronice au fost fixate de platformă cu ajutorul unor șuruburi mici, pentru o bună stabilitate și rezistență la bruscări,astfel conexiunile între plăcuțe nu vor suferi nici o avarie. În figura 3.1.5 este prezentat modul de comunicare al informațiilor între toate plăcuțele și dispozitivele de pe platformă.

Figura 3.1.5 Schema bloc a platformei

3.2 Implementare Hardware

3.2.1 Realizarea cablajelor

Structurile electronice din cadrul proiectului au fost realizate prin montarea pieselor pe un cablaj imprimat.

Cablajul imprimat ( PCB Printed Circuit Board),(sterge virgula) este o placă cu rolul de a susține mecanic și de a conecta componente electrice și electronice între ele. Placa este formată dintr-un strat non-conductiv electric (izolator FR4-Flame Retardant 4) și un strat conductiv sau două straturi conductive, din cupru.

Componentele sunt conectate prin intermediul unor trasee realizate în substratul conductiv. Traseele pot fi obținute prin mai multe metode, prin frezare mecanică, prin depunere sau prin corodare.

Metoda corodării poate fi aplicată pentru obținerea cablajelor cu cel mult două straturi de trasee. Aceasta metodă oferă rezultate destul de bune la un preț redus.

Primul pas în realizarea cablajelor constă în realizarea layout-ului (traseelor) circuitului. Acesta se poate proiecta utilizând un program de specialitate cum ar fi Proteus , Eagle ,Cadence.

După proiectarea layout-ului următorul pas este imprimarea acestuia pe placa de cablaj. Imprimarea se poate realiza și ea prin mai multe metode: prin metoda press and peel (transferul termic) și prin metoda fotografică.

În proiectul de față toate cablajele au fost realizate prin metoda fotografică. Pentru această metodă este necesar ca stratul de cupru al plăcii să fie acoperit de un strat de vopsea fotosensibilă.

O soloție comodă a fost achiziționarea unor cablaje care au deja stratul fotosensibil pozitiv aplicat. În cazul utilizării unei plăci obișnuite este necesară o bună degresare a plăcii, apoi aplicarea stratului fotosensibil (utilizand un spray positiv) căt mai uniform pe suprafața acesteia, necesită aproximativ 30 de minute pentru a se usca.

Se tipărește layout-ul pe o folie transparentă. Imaginea imprimată trebuie să fie în raport de unu la unu cu dimensiunea reală a traseelor și footprinturilor componentelor.

Folia transparentă cu imaginea imprimată este suprapusă peste placa cu fotosensibil, în așa fel încât traseele să nu fie oglindite. În următoarea etapă placa este expusă la radiații ultraviolete. Drept sursă de radiație s-a utilizat o cutie cu LED-uri ultraviolete, cu circuit de temporizare și avertizare vizual/sonoră. Timpul de expunere a fost determinat pe cale experimental, o expunere de 7 minute fiind suficientă.

După procesul de expunere plăcuța este developată într-o soluție de sodă caustică (NAOH) de concentrație mică. Pentru a obține soluția, într-un litru de apă se diluează 3 lingurițe de sodă caustică. Developarea a fost determinată și ea tot experimental ,necesitand aproxomativ 2-3 minute . La contactul cu soluția, stratul fotosensibil de pe placă, care a fost expusă la ultraviolete se dizolvă și se îndepărtează. Placa expusă nu trebuie ținută mai mult timp în soluție, deoarece există riscul ca porțiunile neexpuse să fie indepărtate.

Următorul pas este cel de corodare a plăcii. Placa este introdusă într-o soluție de clorură ferică. Timpul de corodare este proporțional cu suprafața de cupru necesară a fi corodată, în cazul plăcilor din proiectul de față procesul de corodare necesitand aproximativ 20-30 de minute.

Ultimul pas este indepărtarea stratului fotosensibil rămas. Acest lucru este posibil prin ștergerea placii cu acetonă.

În figura 3.2.1.1 sunt prezentate imagini cu referire la etapele de creare a PCB-ului prin metoda fotografică, descrisă anterior.

Figura 3.2.1.1 Etapele metodei fotografice

Placa astfel obținută poate fi utilizată drept suport pentru componentele electronice. În funcție de tehnologia folosită, Trough Hole sau Surface Mounted Device, componentele vor fi montate prin implantare sau lipire.

În proiectul de față tehnologia folosită este Trough-Hole.Această tehnologie presupune inserarea componentelor în găurile de pe placa cu circuit imprimat (PCB) și lipirea acestora pe partea opusă, partea cu stratul cu stratul de cupru, pentru lipirea componentelor utilizându-se fludor și pastă decapantă sau sacâz.

3.2.2 Placa de alimentare

Multe circuite de pe platformă necesită alimentare stabilizată la 5 V, pe când invertoarele trebuie alimentate la 12V. În figura 3.2.2.1 este prezentată schema plăcii de alimentare. Aceasta este prevăzută cu două borne de intrare la care se vor conecta acumulatorii, patru borne pentru tensiune de ieșire stabilizată la 5v și două borne pentru tensiunea de ieșire de 12v necesară alimentării invertoarelor. Tensiunea stabilizată de 5V este obținută cu ajutorul circuitlui integrat stabilizator UA7805, acesta putând furniza un curent maxim de ieșire de 1.5A.

Figura 3.2.2.1

Pe fiecare din cele două intrări este montată câte o diodă cu rol de protecție în caz de alimentare inversă a circuitului. Tot cu rol de protecție hardware au fost introduse și siguranțele fuzibile. Condensatorii C1 si C2 de 1000uF au rolul de a menține o valoare a tensiunii de ieșire cât mai constantă și de a elimina pulsațiile. Circuitul este prevăzut și cu buton de conectare deconectare la alimentare. Traseele layout-ului sunt de 2.54 mm grosime pentru tensiunile de 12V iar pentru tensiunea stabilizată de 5 V, 1.7 mm.

Figura 3.2.2.1 Layout placă de alimentare

3.2.3 Senzorul de curent

Cu scopul de a ține evidența curentului total absorbit de circuitele electronice și de motarele platformei am realizat un senzor de curent cu sesizare rezistivă. Senzorul este montat între bornele pozitive ale acumulatorilor și intrarea pozitivă a plăcii de alimentare.

Figura 3.2.3.1 Schema senzorului de curent

Senzorul este format dintr-o rezistență și un circuit de măsurare și amplificare a căderii de tensiune pe rezistență.

Rezistența de măsurare este reprezentată de rezistențele R1 și R2 (de 0.15 Ω și 5W putere). Acestea sunt montate în paralel pentru a se obține o valoare cât mai mica și o putere mai mare a rezistenței de măsurare (0.075 Ω, 10W).

Circuitul de măsurare și amplificare este defapt un amplificator operațional conectat în modul diferențial. Amplificatorul operațional utilizat este LM2904N, de putere mică. Acesta va măsura diferența de potențial dintre capetele rezistenței și va furniza la ieșire o tensiune față de masa.

Rezistențele RA1 , RA2 , RB1 , RB2, au fost alese astfel incât amplificarea la ieșirea amplificatorului să fie de 5.6.

(3.2.3.1)

Tensiunea furnizată la ieșirea amplificatorului este , direct proporțională cu valoarea curentului prin rezistența de măsurare (R1||R2).

(3.2.3.2)

La ieșirea amplificatorului, deoarece curentul absorbit poate varia foarte brusc în unitatea de timp, a fost conectat un condensator care va netezi tensiunea măsurată și amplificată.

Dioda DZ este o diodă Zenner de 5.3 V stabilizatoare. Pinul ADC fiind conectat direct la portul analogic al microcontrolerului, dioda va reprezinta un mod de protecție împotriva unei eventuale tensiuni mai mari de 5V la ieșirea amplificatorului.

Rezistențele R4 , R5 formează un divizor rezistiv calculat astfel încât tensiunea maximă VSS să fie 5V pentru tensiunea acumulatorilor complet încărcați Vdd= 12.55 V. Această tensiune va fi citită pe un pin analogic al microcontrolerului și apoi interpretată. Formula care caracterizează divizorul rezistiv este:

(3.2.3.3)

Figura 3.2.3.2 Layout senzor de curent

3.2.4 Detector de metale

Detectorul de metale montat pe platformă este format din 2 bobine dispuse pe o bară de ferită și un circuit electronic. Circuitul conține un bloc oscilator, un bloc detector și un etaj final cu led indicator și pin de măsurare a mărimii analogice furnizate la ieșire. Întregul circuit este alimentat la o tensiune stabilizată de 5V furnizată de placa de alimentare.

În figura 3.2.4.1 este prezentat circuitul detectorului de metale .

Figura 3.2.4.1 Schema detectorului de metale

Oscilatorul este de tip LC. Frecvența de oscilație a fost aleasă 15kHz. Pentru a dimensiona componentele s-a utilizat formula acestui tip de oscilator:

(3.2.4.1)

Am ales capacitatea C3 de 330 nF astfel a rezultat valoarea bobinei B :

(3.2.4.2)

Cea de a doua bobină, bobina de detecție A, a fost aleasă de trei ori mai mică. Astfel valorile bobinelor determinate, următorul pas a fost crearea fizică a bobinelor. În acest sens s-au înfășurat pe aceași bucată de ferită un număr de 140 spire din cupru de 0.3mm grosime pentru bobina B, și 45 de spire pentru bobina A.

Bobina A va prelua oscilația produsă prin bobina B. Prin intermediul tranzistorului Q1 oscilația bobinei A va intreține oscilația bobinei B.

Atunci când un obiect metalic este plasat în preajma bobinelor, o parte din fluxul magnetic trece prin obiect și creează un curent numit curent turbionar care va produce o scădere a amplitudinii oscilațiilor prin cele două bobine.

Scădere amplitudinii în bobina A va determina ieșirea tranzistorul Q1 și a tranzistorului Q2 din regimul activ normal de funcționare, astfel nu va mai putea fi intreținută oscilația prin bobina B (va fi amortizată). Tranzistorul Q3 va intra în regimul de funcționare activ normal, LED-ul aprinzându-se, iar tensiunea de pe pinul de citire scăzând.

Cele două potențiometre semireglabile RV1 și RV2 au rolul de a regla amplitudinea oscilațiilor prin bobina B, practic și distanța de detecție a obiectelor metalice. Datorită diodei D1, în baza celor două tranzistoare, Q1 și Q2, va intra doar alternanța pozitivă a oscilațiilor din bobina A. În figura 3.2.4.2 se pot observa formele de undă ale semnalelor prin cele două bobine, obținute prin simularea circuitului în Proteus.

Figura 3.2.4.2 Formele de undă ale Figura 3.2.4.3 Layout-ul

bobinelor detectorului de metale detectorului de metale

Avantajele acestui tip de detector sunt simplitatea construcției, costul redus al pieselor și consumul redus de energie. Dezavantajul major este acela ca nu poate detecta obiectele metalice aflate la o distanță mai mare de 5 cm față de bobine.

3.2.5 Invertor

Invertorul din lucrarea de față a fost realizat cu ajutorul a șase tranzistoare MOSFET ( Metal Oxide Semiconductor Field Effect Transistor ), IRF3205Pbf, comandate pe principiul modulării în durată a impulsurilor de comandă, prin intermediul circuitului driver IR2101 de un microcontroler.  

Modelul IRF3205Pbf este un tranzistor cu canal de tip N ce prezintă următoarele caracteristici: 200W puterea maximă disipată la o temperatură de 25°C, 55V tensiunea maximă drenă-sursă, 110A curentul maxim de drenă suportat, 8mΩ rezistența drenă-sursă în conducție, 1MHz frecvența maximă de lucru, plaja temperaturilor de funcționare este cuprinsă în intervalul -55°C ,175°C. Acest tranzistor are încorporată o diodă zener de protecție între drenă și sursă.

Invertorul este format din trei brațe de punte identice cu cel prezentat în figura 3.2.5.1 Știind faptul că pentru a intra în conducție tranzistoarele MOSFET au nevoie de o tensiune pozitivă aplicată între grilă și sursă, observăm faptul că tranzistorul din partea superioară a brațului de punte are nevoie de un potențial flotant pentru a putea fi comandat.

Comanda acestora este posibilă prin intermediul circuitului drivier integrat IR2101. Principiul de funcționare al acestui integrat a fost descris în subcapitolul 2.3.2.

Figura 3.2.5.1 Schema brațului de punte

Condesatorul CA2 este un condesator de bootstrat care va asigura o tensiune pozitivă suplimentară pe grila tranzistorului Q1. De fiecare dată când tranzitorul Q2 este adus în conducție se creează condiția de încărcare a condesatorul de bootstrap CA2, de la sursa de alimentare prin intermediul diodei DA1.

Figura 3.2.5.2

Deoarece sarcina este foarte instabilă, atât tensiunea cât și curentul vor varia brusc în unitatea de timp, pentru a îmbunătăți alimentarea invertorului au fost conectate o bobină și un set de condesatoare, pe intrare, după cum se poate observa în figura 3.2.5.2.

Figura 3.2.5.3 Circuit de citire a curentului

Și invertorul este prevăzut cu un circuit de citire a curentului (Figura 3.2.5.3). Amplificatorul este montat tot în conexiune diferențială numai că de data aceasta citirea nu se mai face pe o rezistență flotantă, ci pe o rezistență conectată între masa circuitului și sursa tranzistoarelor. Rezistențele au fost calculate astfel încât amplificarea să fie de 5.1.

Cele șase tranzistoare sunt montate pe un radiator, izolate unul față de celălalt (folosind pad izolator mica și nippel) pentru a nu risca să se distrugă. În figura 3.2.5.4 este prezentată imaginea invertorului având tranzistoarele montate pe radiator. Radiatorul va oferi o disipare mai bună a căldurii în timpul funcționării.

Figura 3.2.5.4 Placa invertorului trifazat

Valoarea medie a tensiunii (și curentului) debitată pe sarcină este controlată prin comanda cu impuls PWM a tranzistorilor din partea superioară a brațelor de punte, tranzistoarele din partea inferioară fiind comandate cu undă plină. Frecvența impulsurilor PWM a fost aleasă 20kHz, mult mai mare decât cea a semnalelor de ieșire. În figura 3.2.5.5 se pot observa formele de undă la ieșirea invertorului, opținute prin simularea circuitului în Proteus.

Figura 3.2.5.5 Formele de undă

Pentru un factor de umplere de 20% a PWM-ului, la funcționarea în gol motorul consumă 1.3A pe când în sarcină totală aproximativ 4A.

3.2.6 Placă PIC16F887

Circuitul cu PIC16F887 reprezintă placa de bază a platformei. Acest circuit execută majoritatea proceselor de control ale platformei. El ține evidența tuturor informațiilor preluate de la senzori și comunică prin intermediul portului serial atât cu interfața grafică cât și cu cel de-al doilea microcontroler PIC18F4431.

Figura 3.2.6.1

Microcontrolerul are 4 pini de alimetare (doi pentru borna pozitivă și doi pentru cea negativă).Condesatorul C4 conectat cât mai aproape de pinii de alimentare ai microcontrolerului, reprezentă o rezervă de sarcină care menține variația tensiunii de alimentare într-un interval restrâns.Gruparea R1-C1 conectată la pinul MCLR al microcontrolerului este un circuit de întârziere care va ține microcontrolerul sub reset până când condesatorul se va încărca (cîteva milisecunde). Pinul MCLR va trebui configurat în soft pentru acest mod de lucru. Placa este prevăzută cu un quartz de 10MHz conectat între pini RA6 și RA7, astfel microcontrolerul va funcționa la o frecvență precisă care nu va fi afectată de temperatură sau de tensiunea de alimentare.

Figura 3.2.6.2

Pinii Vpp-Vcc-Vss-Pgd-Pgc au fost conectați pe placă pentru o programare mai comodă a microcontrolerului. Cu ajutorul programatorului Pickit 2(clonă), programul specific aplicației va putea fi încărcat în microcontroler prin intermediul acestor pini.

Toți pinii au fost amplasați strategic astfel încăt conexiunile cu senzorii, cu bluetooth-ul si cu celelalte placuțe să fie făcute intr-un mod cât mai avantajos și cât mai ușor posibil.

3.2.7 Placă PIC18F4431

Circuitul cu PIC18F4431 reprezintă placa de comandă a celor două invertoare. Circuitul va prelua informațiile furnizate de microcontrolerul PIC16F887 prin intermediul conexiunii seriale, o va interpreta urmând apoi să execute comenzile impuse. Acest circuit va furniza în funcție de comanda primită impulsuri de comanda invertoarelor dupa algoritmul deja studiat.

La fel ca și circuitul descris anterior și acesta este preva .

3.3 Implementare Software

Software-ul celor două microcontrolere a fost dezvoltat cu ajutorul mediului MPLAB

8.92 și a compilatorului Hi – Tech ANSI C Compiler pentru microcontrolere din familiile PIC16F și PIC18F . Programul obținut în urma compilării a fost încărcat în microcontrolere

prin intermediul programatorului Pickit 2.

Programul fiecărui microcontroler este realizat după o programare modulară, practic programul este împărțit în mai multe subprograme . Acest mod de programare oferă următoarele avantaje: subprogramul poate fi reutilizat și în alte aplicații, ceea ce reduce efortul de programare în cazul unei noi aplicații, subprogramul poate fi scris și verificat separat de restul aplicației. Prin urmare întreținerea aplicației este simplificatã, modificãrile facându-se numai în anumite subprograme și nu afecteazã alte subprograme .

Programul include atât fișiere .c cât și fișiere .h (header). Fișierele .c conțin definițiile funcțiilor, iar fișierele .h declarațiile acestora.

Atât interfața grafică cât și software-ul pentru interfață au fost realizate în mediul Lab Windows CVI dezvoltat de National Instruments.

3.3.1 Software microcontroler PIC16F887

Primul pas în dezvoltarea unui soft pentru un microcontroler îl reprezintă introducerea unei linii de configurare. Configurarea microcontrolerului se realizează prin intermediul opțiunii Configuration Bits din meniul Configure existent în mediul MPLAB. În figura 3.3.1.1 este prezentată imaginea ferestrei de configurare precum și opțiunile setate în aceasta.

Figura 3.3.1.1 Configurare PIC16F887

Principalele configurări făcute sunt selectarea unui oscilator extern cu frecvență mare de oscilație (HS), dezactivarea Watchdog Timerului (WDTE), setarea pinului MCLR ca pin de intrare digital utilizat pentru programare și reset, dezacvtivarea Power-up Timerului (PWRTE) și dezacvtivarea Brown Out Reset (BOREN). Opțiunile selectate vor fi introduse direct de programator în microcontroler.

Watchdog timer-ul (câine de pază) este un timer care detectează durata anormală a instrucțiunilor. Power-up timer este un cronometru special care întârzie începerea execuției programului după ce microcontrolerul a fost resetat. Această întârziere oferă timp oscilatorului să se stabilizeze.

Fișierul menu.c conține rutina principală de program, rutina de întrerupere și rutina de ințializarea a microcontrolerului. La începutul programului sunt declarate variabilele globale care vor fi utilizate în rutinele fișierului principal:

#include "include.h"

unsigned int st_ant_RB0;

unsigned int st_ant_RB1;

unsigned int st_ant_RB2;

unsigned long dis_senzor1;

unsigned long dis_senzor2;

unsigned long dis_senzor3;

unsigned long v_AN7;

unsigned long v_AN4_det;

unsigned long v_AN5_vbat;

unsigned long v_AN6_ibat;

unsigned char i,data,buf,mnm;

În fișierul header „include.h” sunt introduse toate librăriile utilizate în aplicație și de asemenea tot aici sunt etichetați unii pini și definite câteva constante cu ajutorul macro-urilor(#define). Aceste etichete și constante pot fi apelate de un numar oarecare de ori și oferă o claritate în plus programului. În cazul constantelor, valoarea acestora se poate modifica cu ușurință doar din fișierul header „include.h”.

#ifndef _INCLUDE_H_

#define _INCLUDE_H_

#include <htc.h>

#include <string.h>

#include "uart.h"

#include "adc.h"

#define _XTAL_FREQ 10000000

#define Echo1 RB0

#define Echo2 RB1

#define Echo3 RB2

#define Trig_senzor1 RA0

#define Trig_senzor2 RA1

#define Trig_senzor3 RA2

#define Led_s_dreapta RD2

#define Led_s_stanga RD7

#define Led_far RD6

#define Dist 32 //[cm]

#define L_dist 5 //[cm]

#define AN7 7

#define AN4_det 4

#define AN5_vbat 5

#define AN6_ibat 6

#define Lim_AN4_det 4930

#define Lim_AN5_vbat 4000

#define Lim_AN6_ibat 3200

unsigned char val_citita;

#endif

În funcția Init_PIC() sunt configurate porturile și perifericele cu care se lucrează. Pentru controlul porturilor C, D și E este necesară utilizarea a 2 regiștrii PORT și TRIS, iar pentru porturile A și B pe lângă cei doi regiștri mai este necesară utilizarea a 2 regiștri: ANSEL și ANSELH. Registrul TRIS este folosit pentru a seta tipul portului, de intrare sau de ieșire, iar PORT setează valoarea care se poate citi la pinii portului. Regiștri ANSEL și ANSELH dictează pinilor porturilor A și B dacă să funcționeze ca pini de intrare/ieșire digitali sau ca pini analogici.

void Init_PIC()

{ ANSEL = 0b11111000; ANSELH= 0b00000000;

TRISA = 0b00111000;

TRISB = 0b00000111; TRISC = 0b11000000; TRISD = 0b00000000; TRISE = 0b00000111; PORTA = 0b00000000;

PORTB = 0b00000000;

PORTC = 0b00000000;

PORTD = 0b00000000;

PORTE = 0b00000000;

T1CON = 0b00100000; OPTION = 0b00000000;

INTCON = 0b11001000 ;

IOCB0 = 1;

IOCB1 = 1;

IOCB2 = 1;

WPUB0 = 1;

WPUB1 = 1;

WPUB2 = 1;

Init_ADC();

Init_uart();

RBIE = 0; }

După configurarea pinilor a urmat setarea timerului 1 și activarea bitul întreruperilor generate de schimbarea stări pinilor portului B precum și activarea întreruperilor globale și periferice. Timerul 1 are rolul de a măsura durata impulsului Echo primit de la senzor, necesară apoi calculării distanței până la obstacol. Semnalul ecou va fi recepționat de la senzori prin intermediul piniilor RB0,RB1,RB2 ai portului B.

Registrul specific timerului 1 este T1CON. În acest registru întâlnim biții de setare a prescalorului (T1CKPS1, T1CKPS0),acesta fiind setat la 1:4 și bitul de activare/dezactivare a timerului(TMR1ON):

Activarea întreruperilor globale și periferice este realizată prin setarea biților GIE și PEIE din registrul INTCON, iar activarea/dezactivarea întreruperilor generate de schimbarea stării pinilor portului B prin setarea bitului RBIE din același registru.

Pentru a putea citi întreruperile apărute pe pinii RB0,RB1,RB2 este necesara și setarea biților corespunzători din registrul IOCB (IOCB0, IOCB1, IOCB2).

Prin apelarea funcțiilor Init_ADC() și Init_uart() se va realiza configurarea modulului ADC de citire analogică și configurarea modulului de comunicare serială EUSART.

Bucla programului principal se va ocupa de transmiterea în mod secvențial către interfața grafică a informațiilor preluate de la senzori și totodată de furnizarea unui impuls de 10 microsecunde senzorilor cu ultrasunete.

void main(void)

{

Init_PIC(); //inițializarea microcontrolerului

__delay_ms(50); __delay_ms(50);

while(1)

{

// detector metale

v_AN4_det = Citeste_ADC(AN4_det);

v_AN4_det = (v_AN4_det*5000)>>10;

//tensiunea acumulatorilor

v_AN5_vbat = Citeste_ADC(AN5_vbat);

v_AN5_vbat = (v_AN5_vbat*5000)>>10;

//senzor curent

v_AN6_ibat = Citeste_ADC(AN6_ibat);

v_AN6_ibat = (v_AN6_ibat*5000>>10;

//șirul de caractere

uart_send('b');send_nr(v_AN5_vbat);

uart_send('c');send_nr(dis_senzor1);

uart_send('f');send_nr(dis_senzor2);

uart_send('g');send_nr(dis_senzor3);

uart_send('h');send_nr(v_AN4_det);

uart_send('i');send_nr(v_AN6_ibat);

uart_send(i); uart_send('\r');

//semnal trigerr senzori

Trig_senzor1 = 1; __delay_us(10);

Trig_senzor1 = 0; __delay_ms(15);

Trig_senzor2 = 1; __delay_us(10);

Trig_senzor2 = 0; __delay_ms(15);

Trig_senzor3 = 1; __delay_us(10);

Trig_senzor3 = 0; __delay_ms(15);

} }

Setul de informații trimis este un șir de 31 de caractere de forma:

b 0000 c 0000 f 0000 g 0000 h 0000 i 0000 x

unde caracterele b c f g h i sunt caractere de recunoaștere, iar caracterele situate între acestea sunt valorile de interes. Ultimul caracter x reprezintă caracterul de stare al platformei. Acest șir de caractere este trimis, cu valorile actualizate, aproximativ din 65 in 65 de milisecunde către interfața grafică și cel de-al doilea microcontroler.

În rutina de întrerupere sunt executate mai multe operații. În primul rând aici se realizează citirea portului UART și comunicarea cu cel de-al doilea microcontroler, în al doilea rând se ține evidența tuturor senzorilor și se respectă condițiilor impuse în funcție de modul de operare selectat de pe interfața grafică (autonom sau manual).

Producerea întreruperii, la recepționarea unui cuvânt de informație, este sesizată prin bitul RCIF din registrul PIR1. După fiecare întrerupere, bitul RCIF trebuie sterș manual, prin4asignarea valorii de 0 logic. Dacă nu se face acest lucru, nu se mai cunoaște cu certitudine momentul producerii unei noi întreruperi. Rutina de întrerupere este următoarea:

if(RCIF==1&&RCIE==1) //verificare producere întrerupere

{ RCIF=0; //se șterge flagul de detecție a întreruperilor

if(OERR==1) //testarea existenței unei erori la recepționare

{CREN=0; //dezactivare receptor

CREN=1; } //reactivare receptor pentru înlăturarea erorii

data = uart_rec(); // data= informația recepționată

if(data=='e') RBIE = 1; //selecție mod autonom

if(data=='q') //stop

{ RBIE = 0;

i = 'q';

Led_s_dreapta = 0; RD0 = 0;

Led_s_stanga = 0; Led_far = 0; }

if(data=='m') //selecție mod manual

{ buf = 2;

RBIE= 0;

i = 'm'; }

}

După cum se poate observa, în secvența de recepționare se regăsesc și condițiile de testare a modului de lucru selectat de pe interfața grafică. Caracterul 'e' recepționat corespunde modului autonom , astfel activându-se citirea senzorilor, determinarea distanței precum și executarea condițiile de evitare a coliziuni, în funcție de valorile determinate .

Citirea unui senzor cu ultrasunete și determinarea distanței se realizează în următoarea secvență de cod:

if(RBIE)

{

if(RBIF&&(Echo1==1) && (st_ant_RB0==0))

{ TMR1H = 0;

TMR1L = 0;

TMR1ON = 1; //pornire incrementare TMR1 st_ant_RB0=1; // starea anterioară devine 1

}

if(RBIF&&(Echo1==0) && (st_ant_RB0==1))

{ TMR1ON = 0; // oprire incrementare TMR1

st_ant_RB0=0; // starea anterioară devine 0

TMR = (unsigned int) TMR1H << 8; // variabila TMR=0x TMR1H 00 (hexa)

TMR = TMR + TMR1L; // TMR=0x TMR1H TMR1L(hexa)

durata = (TMR) * 2; // durata=TMR*0.5us(Clock speed)*4( Prescaler)

dis_senzor1 = durata / 58 ; // Refer HC-SR04 Datasheet (în cm)

}

………………….. // secvențe de cod

RBIF=0; //flagul de detecție a întreruperilor este șters

}

Dacă se schimbă starea pinului RB0 (Echo) din 0 în 1 și starea anterioară a pinului era 0 regiștri paraleli TMR1H-TMR1L vor fi resetați și incrementarea TMR1 va fi pornită. TMR1 fiind pe 16 biți poate incrementa de la 0 până la 65535,acest interval corespunzând unei secunde.

TMR1 va incrementa până la următoarea schimbare a stării pinului RB0. Valoarea TMR1 se află în regiștri paraleli. În variabila de tip long TMR va fi salvată valoarea din TMR1H rotită cu 8 poziții la stânga și adunată cu valoarea din TMR1L. De exemplu dacă valoarea incrementată de TMR1 este 1235, în TMR1L vom găsi valoarea 211 iar în TMR1H valoarea 4.

(3.3.1.1)

După ce au fost calculate cele trei distanțe urmează executarea algoritmului de evitare a coliziunii:

if((dis_senzor1 > Dist )&&(dis_senzor3 > Dist )&& (dis_senzor2 > 20))

{ i='w'; //inainte

Led_s_dreapta = 0; Led_s_stanga = 0; Led_far = 1; RD0 = 0; }

else

{

if((dis_senzor1 < Dist)&&(dis_senzor1 > 7)&&(dis_senzor3 > Dist ))

{ i='d'; //dreapta

Led_s_dreapta = 1; Led_s_stanga = 0; Led_far = 1; RD0 = 1; }

if((dis_senzor1 <= 7)&&(dis_senzor3 > Dist ))

{ i='s'; //înapoi

Led_s_dreapta = 0; Led_s_stanga = 1; Led_far = 0; RD0 = 1; }

if((dis_senzor3 < Dist )&&(dis_senzor3 > 7)&&(dis_senzor1 > Dist))

{ i='a'; //stanga

Led_s_dreapta = 0; Led_s_stanga = 1; Led_far = 1; RD0 = 1; }

if((dis_senzor3 <= 7)&&(dis_senzor1 > Dist ))

{ i='s'; //înapoi

Led_s_dreapta = 0; Led_s_stanga = 1; Led_far = 0; RD0 = 1; }

if(dis_senzor2 < 20)

{ i='s'; //înapoi

Led_s_dreapta = 0; Led_s_stanga = 0; Led_far = 1; RD0 = 0; }

}

În tabelul 3.3.1.1 este prezentată logica de evitare a coliziunilor funcție de distanțele citite de la senzori.

Tabel 3.3.1.1 Logica de evitare a coliziunii

Microcontrolerul va ține sub observație în mod continuu valorile furnizate de senzorul detector de metale, senzorul de curent și valoarea tensiunii de pe acumulatori. Dacă una din aceste valori nu va respecta condiția impusă microcontrolerul va ieși forțat din întrerupere imediat după ce va comanda celui de-al doilea oprirea funcționării invertoarelor. Prin acest mod se realizează o protecție software atât a circuitelor invertoarelor cât și a motoarelor.

if(v_AN4_det<Lim_AN4_det||v_AN6_ibat<=Lim_AN6_ibat||v_AN5_vbat<=Lim_AN5_vbat)

{ buf = 0;

GIE = 0; //dezactivare întreruperi globale

RBIE= 0; //dezactivare intreruperi la schimbarea stării portului B

__delay_ms(50);__delay_ms(50);

i = 'q';

Led_s_dreapta = 0; Led_s_stanga = 0; Led_far = 0; RD0 = 1;

}

În modul manual microcontrolerul va furniza către cel de-al doilea microcontroler caracterul primit de pe interfața grafică, acesta fiind specific unei anumite comenzi:

if(buf==2){

if(data=='w'){i='w'; Led_s_dreapta=0; Led_s_stanga=0; Led_far=1;} //înainte

if(data=='s'){i='s'; Led_s_dreapta=0; Led_s_stanga=0; Led_far=1;} //înapoi

if(data=='a'){i='a'; Led_s_dreapta=0; Led_s_stanga=1; Led_far=1;} //stânga

if(data=='d'){i='d'; Led_s_dreapta=1; Led_s_stanga=0; Led_far=1;} //dreapta

if(data=='q'){i='q'; Led_s_dreapta=0; Led_s_stanga=0; Led_far=0;} //stop

}

În fișierul adc.c sunt funcțiile destinate modulului ADC. Funcția Init_ADC() realizează configurarea modulului. Drept referință modulul are sursa de alimentare a pinilor microcontrolerului. Secvența de cod specifică este următoarea:

void Init_ADC(void)

{

ADIE = 0; //A/D dezactivare mod de lucru cu întrerupere

ADIF = 0; //A/D flag șters

VCFG0 = 0; //VREF+=VDD

VCFG1 = 0; //VREF-=VSS

ADCS1 = 0; //A/D biți de selecție a clock-ului

ADCS0 = 0; // 32*Tosc= 4us

ADFM = 1; //rezultatul conversiei

ADON = 1; //activarea conv A/D

}

Citirea canalelor analogice este posibilă apelând funcția Citeste_ADC(canal).Această funcție pe lângă selectarea canalului realizează și conversia mărimii analogice de la intrare.

unsigned int Citeste_ADC(unsigned int z)

{

switch(z)

{

case 3: CHS3=0; CHS2=0; CHS1=1; CHS0=1; break; //select AN3

case 4: CHS3=0; CHS2=1; CHS1=0; CHS0=0; break; //select AN4

case 5: CHS3=0; CHS2=1; CHS1=0; CHS0=1; break; //select AN5

case 6: CHS3=0; CHS2=1; CHS1=1; CHS0=0; break; //select AN6

case 7: CHS3=0; CHS2=1; CHS1=1; CHS0=1; break; //select AN7

}

GODONE = 1; // Activare GO/DONE

while(GODONE); // Așteptăm până când conversia este completă

return ((ADRESH<<8)+ADRESL); // Returnarea valoarii ADC pe zece biți

}

Fișierul uart.c conține funcțiile specifice modulului de comunicare serială, modulul UART. În funcția Init_uart() se setează o transmisie de tip asincron, pe 8 biți de date, un bit de start, un bit de stop și fără bit de paritate. Rata de transfer este stabilită în funcție de frecvența de oscilație a microcontrolerui prin intermediul biților SYNC, BRGH, BRG16 și a valorii încărcate în registrul SPBRG.

void Init_uart(void)

{ SPBRG = ((_XTAL_FREQ/16)/9600) – 1;

BRGH = 1;

TX9 = 0; //transmisie pe 8 biți

RX9 = 0; //recepție pe 8 biți

TXEN = 1; //activare transmisie

CREN = 1; //activare recepție

SPEN = 1; //port serial activat

SYNC = 0;

BRG16 = 0;

TXIE = 0; //intreruperi tx dezactivate

RCIE = 1; //intreruperi rx activate

}

Funcția de receptionare a datelor este următoarea:

unsigned char uart_rec(void)

{

unsigned char rec;

while(RCIF==0);

rec = RCREG;

return rec;

}

Variabila rec în momentul detecției întreruperii de către flagul RCIF va fi încărcată cu valoarea din registrul RCREG.Registrul RCREG conține cei opt biți ai informației proaspăt recepționate.

Funcția de transmisie a datelor este următoarea:

void uart_send(unsigned char d)

{

while(TXIF==0);

TXREG=d;

}

Pentru a putea trimite valorile preluate de modulul ADC și valorile distanțelor calculate în întrerupere, au fost create două funcții ajutătoare. Funcția send_nr() va descompune valoarea în așa fel încât să o poată trimite caracter cu caracter ajutându-se de funcția nr().

void send_nr(unsigned int numar)

// trimit numerele

{

unsigned int a,b,c,d;

d = (numar/1000);

nr(d);

c = (numar/100)%10;

nr(c);

b = (numar/10)%10;

nr(b);

a = numar%10;

nr(a);

}

void nr(unsigned int nr)

{ switch(nr){

case 0:uart_send('0');break;

case 1:uart_send('1');break;

case 2:uart_send('2');break;

case 3:uart_send('3');break;

case 4:uart_send('4');break;

case 5:uart_send('5');break;

case 6:uart_send('6');break;

case 7:uart_send('7');break;

case 8:uart_send('8');break;

case 9:uart_send('9');break;

}}

3.3.2 Software microcontroler PIC18F4431

Microcontrolerul PIC18F4431 fiind special conceput pentru generarea pe 8 canale a impulsurilor PWM este utilizat în cazut acestui proiect drept driver pentru invertoare. Acesta va prelua informația de la primul microcontroler prin intermediul portului serial urmând apoi să execute cerințele impuse.

Principalele configurări făcute în cazul acestui microcontroler sunt selectarea unui oscilator extern cu frecvență mare de oscilație (HS) având bucla PLL activată, dezactivarea Watchdog Timerului (WDTE), setarea pinului MCLR ca pin de intrare digital utilizat pentru programare și reset, dezacvtivarea Power-up Timerului (PWRTE), dezacvtivarea Brown Out Reset (BOREN), dezacvtivarea canalelor PWM din modulul PCPWM la resetarea microcontrolerului și setarea modului în care sunt active canalele PWM. Prin activarea buclei PLL frecvența oscilatorului extern, un quart de 10 MHz, va fi multiplicată de 4 ori astfel rezultând o frecvență de 40MHz.

Figura 3.3.2.1

În fișierul header „include.h”, la fel ca și în cazul primului microcontroler sunt introduse toate librăriile utilizate în aplicație și de asemenea sunt definite unele constante care vor oferi claritate programului.

Microcontrolerul va folosi din cele 8 canale doar 6 canale, comanda invertoarelor fiind făcută orbește cu impuls PWM doar pentru tranzistorii din partea superioară a brațelor de punte, tranzistoarele din partea inferioară fiind comandate cu undă plină. Pentru a putea genera impulsurile PWM necesare, în fisierul pwm.c este configurat modulul PWM.

void Init_PWM(void)

{ PTCON0 = 0b00000011; //PTCON0 1:1 postscale,Fosc/4 1:1 prescale

PTCON1 = 0b10000000; //PWM timer control register

PTPERL = 0; //

PTPERH = 1; //PTPER = $0100 or 256d for ~19.45kHz

PWMCON0= 0b01001111; //PWM Module Enable bits

PWMCON1= 0b00000001; //PWM control register

}

Regiștrii PTCON sunt regiștrii folosiți pentru controlul bazei de timp.Din registrul PTCON0 se configurează postcalarea bazei de timp 1:1, prescalarea semnalului de clock pentru baza de timp 1:1 și se setează modul de lucru al bazei de timp. Din registrul PTCON1 se pornește baza de timp și se setează modul de numărare (crescător).

Cu ajutorul registrului PWMCON0 se selectează primele 6 canalele de PWM active și modul de lucru independent al acestora.

Regiștrii PTPERL și PTPERH sunt folosiți pentru a seta perioada semnalului PWM. Rezoluția semnalului PWM are 12 biți și este obținută prin alăturarea informației conținute de regiștrii PTPERH, prin primii 4 cei mai nesimnificativi biți ai acestuia, dar primii 4 cei mai semnificativi ai PTPER, și PTPERL prin întregul octet, care reprezintă cei mai nesemnificativi 8 biți din PTPER. Valoarea maximă ce se poate încărca în registrul PTPER este:

39 (3.3.2.1)

Perioada semnalului PWM, se poate determina cu relația:

(3.3.2.2)

PTRMPS reprezintă o valoare de prescalare, setată pentru baza de timp folosită la generarea semnalului PWM.

În cazul proiectului de față frecvența PWM-ului este setată la aproximativ 19.5kHz.

9

(3.3.2.3)

Componenta continuă a semnalului PWM generat se controlează prin intermediul regiștrilor PDC. Controlul componentei continue se poate realiza cu o rezoluție de maxim 16 biți. Această rezoluția variază în funcție de perioada setată prin intermediul PTPER.

(3.3.2.4)

Funcția prin care factorul de umplere al semnalului PWM este reglat este următoarea:

void PWM_Duty_Cicle(unsigned int w)

{ PDC0H = w >> 6; //Duty Cycle high PWM0,PWM1

PDC0L = w << 2; //Duty Cycle low PWM0,PWM1

PDC1H = w >> 6; //Duty Cycle high PWM2,PWM3

PDC1L = w << 2; //Duty Cycle low PWM2,PWM3

PDC2H = w >> 6; //Duty Cycle high PWM4,PWM5

PDC2L = w << 2; //Duty Cycle low PWM4,PWM5

PDC3H = w >> 6; //Duty Cycle high PWM6,PWM7

PDC3L = w << 2; //Duty Cycle low PWM6,PWM7

}

Funcțiile destinate comunicării seriale sunt asemănătoare cu cele de la PIC16F887 . Comunicarea este setată pe același mod de transmisie: transmisie de tip asincron, cu 8 biți de date, un bit de start, un bit de stop, fără bit de paritate.

Recepționarea cuvântului de date are loc tot în rutina de întrerupere . În funcție de informația primită microcontrolerul va realiza comanda invertoarele. Următoarea secvență de cod testează dacă mesajul recepționat este unul din mesajele de comandă:

unsigned int Check_receive(void)

{unsigned int check;

unsigned char data= val_citita;

if(data=='w')check=Inainte;

if(data=='s')check=Inapoi;

if(data=='a')check=Stanga;

if(data=='d')check=Dreapta;

if(data=='q')check=Stop;

return check;}

În funcție de acest mesaj, comanda transmisă de microcontroler invertoarelor se modifică. Secvența de cod din rutina de întrerupere pentru comanda orbește a invertoarelor este următoarea:

void interrupt ISR()

{

if (TMR0IF == 1)

{ TMR0 = x1;

TMR0IF = 0;

if(dir==1) switch(sens)

{ case 1:PORTD = 0b01001000; // c2/b2/a2/z2/y2/x2/0/0

OVDCOND = 0b00001001; // 0/0/z1/y1/x1/c1/b1/a1

if(stare == 0)sens = 2;

else sens = 6;

break;

case 2:PORTD = 0b01001000; // c2/b2/a2/z2/y2/x2/0/0

OVDCOND = 0b00010100; // 0/0/z1/y1/x1/c1/b1/a1

if(stare == 0)sens = 3;

else sens = 1;

break;

case 3:PORTD = 0b00100100; // c2/b2/a2/z2/y2/x2/0/0

OVDCOND= 0b00010100; // 0/0/z1/y1/x1/c1/b1/a1

if(stare == 0)sens = 4;

else sens = 2;

break;

case 4:PORTD = 0b00100100; // c2/b2/a2/z2/y2/x2/0/0

OVDCOND = 0b00100010; // 0/0/z1/y1/x1/c1/b1/a1

if(stare == 0)sens = 5;

else sens = 3;

break;

case 5:PORTD = 0b10010000; // c2/b2/a2/z2/y2/x2/0/0

OVDCOND = 0b00100010; // 0/0/z1/y1/x1/c1/b1/a1

if(stare == 0)sens = 6;

else sens = 4;

break;

case 6:PORTD = 0b10010000; // c2/b2/a2/z2/y2/x2/0/0

OVDCOND = 0b00001001; // 0/0/z1/y1/x1/c1/b1/a1

if(stare == 0)sens = 1;

else sens = 5;

break; }

…..//secvențe de cod

}

Timerului TMR0 este setat pe 8 biți și incrementează de la valoarea încărcată x1. Acesta va produce o întrerupere la o perioadă de timp T :

(3.3.2.5)

Setarea prescalerului și activarea timerului au fost realizate în funcția Init_Timer0().

void Init_Timer0(void)

{T0CON =0b11000110; // TMR0 activat pe 8 biți cu 1:128 prescaler

TMR0 = x1; //TMR0 este încărcat cu valoarea lui x1. TMR0IE = 1; //activare întrerupere generată de TMR0

}

Dacă x1=45 → (3.3.2.5)

Această perioadă reprezintă cât timp va fi activă fiecare din cele șase secvențe din logica de comandă a invertoarelor. Perioada de execuție a celor șase secvențe de comandă va fi de șase ori perioada T, 0.0162 secunde. La ieșirea invertorului o fază va avea frecvența de 61.7 Hz.

Registrul OVDCOND permite sau nu celor 6 canale PWM să fie controlată de valoarea din registrul Duty Cycle și baza de timp PWM. Acestea sunt controlate în mod independent. Logica de comandă a celor două invertoare pentru direcția înainte este prezentată în tabelul 3.3.2.1.

Tabel 3.3.2.1 Logica de comandă a celor două invertoare pentru direcția înainte

În funcția principală de program, void main(), sunt apelate funcțiile de inițializare prezentate anterior, configurația pinilor porturilor și de asemnenea activarea întreruperilor. Funcția principală de program este următoarea:

void main(void)

{ TRISA = 0b00000000;

TRISE = 0b00000000;

ANSEL0 = 0b00000000;

ANSEL1 = 0b00000000;

TRISB = 0b00000000;

PORTB = 0b00000000;

TRISD = 0b00000000;

PORTD = 0b00000000;

Init_Timer0();

Init_uart();

GIE = 1;

PEIE = 1;

Init_PWM();

while(1)

{ m=Check_receive();

if(m!=n) for(i=30;i<=x1;i++)

{ Directie(m);

x2=i+plus_p;

PWM_Duty_Cicle( x2 );

__delay_ms(10);

}

else{ Directie(m);

x2=x1+plus_p;

PWM_Duty_Cicle( x2 ); }

n=m;

m=0;

} }

În bucla infinită while(1) este dezvoltat un algoritm de incrementare a factorului de umplere de la o valoare inferioară până la valoarea normală în momentul schimbării direcției de mers a platformei, astfel motoarele nu se vor bloca la schimbarea sensului de rotație.

3.3.3 Software interfață grafică

.

Capitolul 4. Rezultate.Concluzii

Capitolul 5. Anexe

Capitolul 6. Bibliografie

[BLDC,2014]

[1] http://www.rasfoiesc.com/inginerie/electronica/MODELUL-DINAMIC-AL-MOTORULUI-D52.php, (24 mai 2014);

[2] Controlul unui motor BLDC – Modoranu Alexandru, http://81.180.214.82/aE/Stud2011/SCI_spatiu_de_lucru.html, (24 mai 2014);

[3] Brushless DC (BLDC) Motor Fundamentals – Microchip Application Note , (24 mai 2014);

[4] http://en.wikipedia.org/wiki/Brushless_DC_electric_motor, (24 mai 2014);

[5] Mașini sincrone speciale (cu magneți permanenți), curs MS, Universitatea tehnică din Cluj, http://users.utcluj.ro/~birok/MS/4-Masini_cu_MP.pdf , (26 mai 2014);

[6] Vas P.–Sensorless Vector and Direct Torque Control ( Vector and direct torque control of synchronous machines, p.87), (26 mai 2014);

[7] Jacek F. Gieras and Mitchell Wing –Permanent magnet motor technology ,United Technologies Research Center (p.227), (27 mai 2014);

[Invertor,2014]

[1] Dr. Ing. Mihai Albu –Invertorul PWM trifazat de tensiune, laborator electronică de putere Facultatea IEEI,(14 iunie 2014);

[2] Florin Ionesc, Dan Floricău, Smaranda Nitu, Jean-Paul Six, Philippe Delarue, Cristian Bogu –Electronică de putere (p.322), (14 iunie 2014);

[3] http://en.wikipedia.org/wiki/Pulse-width_modulation, (15 iunie 2014);

[4] Datasheet IRF3205Pbf, (15 iunie 2014);

[5] http://ro.wikipedia.org/wiki/Tranzistor_unipolar, (15 iunie 2014);

[6] Datasheet IR2101,( 15 iunie 2014);

[Microcontrolere ,2014]

[1] http://ro.wikipedia.org/wiki/Microcontroler, ( 20 iunie 2014);

[2] Datasheet PIC16F887, ( 20 iunie 2014);

[3] Datasheet PIC18F4431,(20 iunie 2014);

[4] Nebojsa Matic –PIC microcontrollers for beginners,too!, (20 iunie 2014);

[5] http://www.scritub.com/stiinta/informatica/Notiunea-de-microcontroller-De95575.php, (21 iunie 2014);

[6] http://www.mcu-labs.com/2012/11/intreruperi-programe-cu-intreruperi.html, (21 iunie 2014);

[7] Vasile Surducan, Wouter van Ooijen –Microcontrolere pentru toți, (21 iunie 2014);

[Senzori,2014]

[1] http://www.teguna.ro/wiki/Senzor_de_distan%C5%A3%C4%83_cu_ultrasunete_HC-SR04, (22 iunie 2014 );

[2] HC-SR04 datasheet, (22 iunie 2014 );

[3] http://users.utcluj.ro/~mbirlea/a/06a.htm, (22 iunie 2014 );

[4] http://ro.wikipedia.org/wiki/Detector_de_metale, (22 iunie 2014 );

[5] http://www.talkingelectronics.com/projects/200TrCcts/MetalDetectors/MetalDetectors-1.html, (22 iunie 2014 );

[Comunicare,2014]

[1] http://invataelectronica.blogspot.ro/2011/08/usart.html, (22 iunie 2014 );

[2] Bluetooth HC-06 datasheet, (22 iunie 2014 );

[Interfata,2014]

[1] Conferențiar Dr.Ing. Dan Marius Dobrea –Laborator 1 EPIOC, (22 iunie 2014 );

Capitolul 6. Bibliografie

[BLDC,2014]

[1] http://www.rasfoiesc.com/inginerie/electronica/MODELUL-DINAMIC-AL-MOTORULUI-D52.php, (24 mai 2014);

[2] Controlul unui motor BLDC – Modoranu Alexandru, http://81.180.214.82/aE/Stud2011/SCI_spatiu_de_lucru.html, (24 mai 2014);

[3] Brushless DC (BLDC) Motor Fundamentals – Microchip Application Note , (24 mai 2014);

[4] http://en.wikipedia.org/wiki/Brushless_DC_electric_motor, (24 mai 2014);

[5] Mașini sincrone speciale (cu magneți permanenți), curs MS, Universitatea tehnică din Cluj, http://users.utcluj.ro/~birok/MS/4-Masini_cu_MP.pdf , (26 mai 2014);

[6] Vas P.–Sensorless Vector and Direct Torque Control ( Vector and direct torque control of synchronous machines, p.87), (26 mai 2014);

[7] Jacek F. Gieras and Mitchell Wing –Permanent magnet motor technology ,United Technologies Research Center (p.227), (27 mai 2014);

[Invertor,2014]

[1] Dr. Ing. Mihai Albu –Invertorul PWM trifazat de tensiune, laborator electronică de putere Facultatea IEEI,(14 iunie 2014);

[2] Florin Ionesc, Dan Floricău, Smaranda Nitu, Jean-Paul Six, Philippe Delarue, Cristian Bogu –Electronică de putere (p.322), (14 iunie 2014);

[3] http://en.wikipedia.org/wiki/Pulse-width_modulation, (15 iunie 2014);

[4] Datasheet IRF3205Pbf, (15 iunie 2014);

[5] http://ro.wikipedia.org/wiki/Tranzistor_unipolar, (15 iunie 2014);

[6] Datasheet IR2101,( 15 iunie 2014);

[Microcontrolere ,2014]

[1] http://ro.wikipedia.org/wiki/Microcontroler, ( 20 iunie 2014);

[2] Datasheet PIC16F887, ( 20 iunie 2014);

[3] Datasheet PIC18F4431,(20 iunie 2014);

[4] Nebojsa Matic –PIC microcontrollers for beginners,too!, (20 iunie 2014);

[5] http://www.scritub.com/stiinta/informatica/Notiunea-de-microcontroller-De95575.php, (21 iunie 2014);

[6] http://www.mcu-labs.com/2012/11/intreruperi-programe-cu-intreruperi.html, (21 iunie 2014);

[7] Vasile Surducan, Wouter van Ooijen –Microcontrolere pentru toți, (21 iunie 2014);

[Senzori,2014]

[1] http://www.teguna.ro/wiki/Senzor_de_distan%C5%A3%C4%83_cu_ultrasunete_HC-SR04, (22 iunie 2014 );

[2] HC-SR04 datasheet, (22 iunie 2014 );

[3] http://users.utcluj.ro/~mbirlea/a/06a.htm, (22 iunie 2014 );

[4] http://ro.wikipedia.org/wiki/Detector_de_metale, (22 iunie 2014 );

[5] http://www.talkingelectronics.com/projects/200TrCcts/MetalDetectors/MetalDetectors-1.html, (22 iunie 2014 );

[Comunicare,2014]

[1] http://invataelectronica.blogspot.ro/2011/08/usart.html, (22 iunie 2014 );

[2] Bluetooth HC-06 datasheet, (22 iunie 2014 );

[Interfata,2014]

[1] Conferențiar Dr.Ing. Dan Marius Dobrea –Laborator 1 EPIOC, (22 iunie 2014 );

Capitolul 5. Anexe

Similar Posts