lucreare de disertaȚieacse.pub.ro/wp-content/uploads/2013/07/disertatie_udrea_mircea_castr.pdf ·...

46
Universitatea Politehnica București Facultatea de Automatică și Calculatoare Departamentul de Automatică și Ingineria Sistemelor LUCREARE DE DISERTAȚIE Comunicație radio pentru Smart Grid-uri Absolvent: Mircea Udrea Coordonator: Conf. dr. ing. Cătălin Petrescu București, 2013

Upload: others

Post on 14-Jan-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

Universitatea Politehnica București

Facultatea de Automatică și Calculatoare Departamentul de Automatică și Ingineria Sistemelor

LUCREARE DE DISERTAȚIE

Comunicație radio

pentru Smart Grid-uri

Absolvent: Mircea Udrea

Coordonator: Conf. dr. ing. Cătălin Petrescu

București, 2013

Page 2: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

1

Cuprins: 1. Întroducere 2

1.1. Necesitate 2 1.2. Smart grid-uri 2 1.3. Celule fotovoltaice 3

2. Modelul rețelei de comunicație 6 2.1. Topologia retelei 6 2.2. Frame-ul radio 7 2.3. Sincronizarea ceasurilor interne 7 2.4. Pachetul de intrare standby 8 2.5. Tabela de rutare 9 2.6. Pachetul de date 12

3. Echipamentul fizic 14 3.1. NRF24l01+ 14

3.1.1. Interfațarea prin SPI 15 3.1.2. Setul de instrucțiuni SPI 16 3.1.3. Timpi de acces 17 3.1.4. Modul Power Down 18 3.1.5. Modurile Standby 18 3.1.6. Modul RX (receptor) 18 3.1.7. Modul TX (transmițător) 18 3.1.8. Conexiunea wireless 19 3.1.9. Modul Enhanced Shockburst 19 3.1.10. Încapsularea și decapsularea pachetelor 21 3.1.11. Mecanismul de tranzactionare pachete automat 23 3.1.12. MultiCeiver 24 3.1.13. Întruperi 25 3.1.14. Regiștrii interni ai integratului 25

3.2. Atmega8A-PU 27 3.2.1. Modulul de comunicație SPI 28 3.2.2. Protocolul I2C 29

3.3. Atmel 24C128 EEPROM 32 3.4. Realizarea echipamentului de comunicație 33

3.4.1. Modulul radio 33 3.4.2. Modulul de comandă 34

4. Software-ul de comunicație 37 4.1. Configurarea SPI 37 4.2. Configurare I2C 37 4.3. Interfatarea NRF24L01 39

5. Concluzii 43 6. Bibliografie 44

Page 3: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

2

1. Introducere

Această lucrare își propune să evidențieze modul de realizare a unei comunicații radio bazate pe integratul NRF24L+ și are ca obiectiv stabilirea unei comunicații între diverse noduri ale unei rețele de tip Smart Grid. Lucrarea este structurată în 6 capitole. Primul capitol, intitulat sugestiv Întroducere, prezintă scopul și necesitatea întreprinderii unui astfel de demers științific, raportate la cerințele actuale din domeniul economiei de energie. Acest capitol abordează și noțiunea de Smart Grid și câteva detalii despre celulele fotovoltaice, având în vedere faptul că primul pas în implementarea practică a lucrării îl reprezintă studierea celulelor fotovoltaice.

1.1. Necesitatea Tendința la ora actuală în domeniul energiei verzi sau eco este introducerea în România în

producție a centralelor fotovoltaice. Această tendință a luat amploare în ultimii 2 ani pe fundalul intențiilor statului de a elimina certificatele verzi pentru centralele eoliene, care pot produce dereglări majore în sistemul de producție și transport al energiei electrice.

Motivul pentru care se dorește trecerea către panourile fotovoltaice îl reprezintă incertitudinea mai mică în producție. Modulul de comunicație radio prezentat în această lucrare va servi la strângerea de informații legate de evoluția producției zilnice de energie electrică. Cu ajutorul acestor date se poate stabili, de pildă, care este influența unui nor asupra producției, în această situație putându-se modela un sistem care să fie cât mai puțin perturbat și perturbabil, prin introducerea bateriilor în circuit. Pentru a putea beneficia de date cât mai bune despre evoluția producției de la o zi la alta, în ciclul complet al unui an, se intenționează ca, pe o suprafață relativ mare, să fie plasate celule fotovoltaice de probă, astfel încât să poată simula o centrală aflată pe o suprafață considerabilă. Numărul foarte mare de panouri care ar urma să fie montate face dificilă extragerea datelor din fiecare echipament în parte, dat fiind faptul că, cel mai probabil, în locul unde este montat nu există conexiune la internet sau la surse de curent electric. Rețeaua de comunicație prezentată în această lucrare poate acoperi o arie foarte mare. Fiecare modul are o rază de acoperire de aproximativ 1 km. Amplasând mai multe astfel de module se poate obține o rază de acțiune foarte mare. Totuși, în compensare cu raza de acțiune, rata de comunicație nu este foarte mare, dar este suficientă pentru a putea fi folosită cu succes în aplicația curentă.

1.2. Smart grid-uri Lucrarea de față are ca scop principal comunicația între panourile fotovoltaice, care pot fi

văzute ca o înlănțuire de microcentrale solare. Practic, sistemul acesta poate fi gândit ca o rețea de centrale aflate într-un cartier sau într-un sat. Astfel, fiecare gospodărie care produce curent electric este în permanență conectată la un dispecerat care decide dacă are nevoie de energia produsă de aceste centrale.

Rețeaua actuală de electricitate a fost proiectată în urmă cu 50-60 de ani în contextul în care cererea de energie electrică nu era așa de ridicat ca în prezent. Un efect al supraîncărcării rețelei sunt penele de curent provocate de suprasolicitarea transformatoarelor locale. Noțiunea de smart grid vine în întâmpinarea chiar a acestei probleme.

Prin implementarea tehnologiei smart grid se dorește ca fiecare consumator, fie el casnic sau comercial, să poată fi monitorizat în vederea stabilirii cantității de curent necesare în fiecare moment. În momentul de față, estimarea necesarului de energie electrică la nivelul unei zone nu

Page 4: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

3

poate fi realizat cu exactitate, astfel încât, în cazul unei supraîncărcări a unui transformator, furnizorul de energie electrică nu poate transfera o parte din utilizatori pe alt transformator pentru a proteja rețeaua. O cădere a rețelei electrice poate produce pagube atât utilizatorilor, cât și furnizorului.

O altă problemă a sistemului energetic este producerea unei cantități mai mari de energie, în fiecare moment, pentru a putea preîntâmpina creșterile de consum. În acest caz producătorul va fi obligat să elimine surplusul. O consecință primă ar fi că prețul plătit de utilizatorul de rând va fi mai mare. De asemenea, se consumă resurse fosile fără a fi necesar, producându-se totodată emisii de gaze cu efect de seră în mod inutil.

Utilizarea unei rețele de tip smart grid va oferi un feedback din partea utilizatorilor. Astfel se va produce energie doar în momentul în care vor apărea cereri. Monitorizarea fiecărei zone arondate unui transformator va preveni căderile de tensiune, deoarece o parte dintre utilizatori vor fi mutați, în timp real, pe alt transformator mai liber, sau în cazul unei defectări totale a unui transformator, utilizatorii vor fi preluați de alte transformatoare.

O altă idee introdusă de acest concept o reprezintă procesul de conștientizare orientat către utilizatorul de rând în legătură cu prețul energiei electrice pe care o plătește. În acest fel, fiecare utilizator își va alege momentul când va utiliza, de exemplu, mașina de spălat rufe. În momentele de încărcare mică a rețelei, sursele de energie vor fi surse regenerabile(vânt, soare), generând un preț mic al curentului, însă în cazul unei încărcări mari a rețelei, vor fi pornite și centralele pe bază de combustibili fosili, ceea ce se va traduce într-un preț al energiei electrice mai mare. Fiecare își va putea seta consumatorii să funcționeze fie raportat la un preț mic al energiei, fie la nivelul de emisii de gaze de seră, fie la momentul respectiv, indiferent de prețul plătit sau de impactul asupra mediului înconjurător.

În viitor, fiecare dintre noi va putea să producă energie electrică folosind panouri fotovoltaice sau turbine eoliene, însă problema cea mai mare o constituie utilizarea surplusului de energie.

Bineînțeles, se poate stoca o parte în baterii sau, mai inteligent, în pile de hidrogen, dar ce se mai poate face cu ce mai rămâne? Tehnologia smart grid va putea monitoriza și surplusul, în așa fel încât, în cazul unor cereri de energie, fiecare utilizator să poată introduce energie în sistemul național, fiind implicit remunerat pentru acest lucru.

Un exemplu foarte interesant este acela al unui american care și-a instalat pe casă un sistem de panouri fotovoltaice care produce aproximativ 3 kWh. În timpul zilei surplusul îl vinde cu 45 de cenți kWh, iar seara cumpără energie electrică cu doar 10 cenți.

O altă abordare o reprezintă stocarea energiei în timpul nopții când prețul este mai mic, pentru ca ziua, în momentele de cerere mare, furnizarea în sisteme să se facă pe baza unui preț mai mare.

Tehnologia va permite comunicare bidirecțională, asftel că furnizorul de energie va ști când va exista o creștere de consum, iar utilizatorul va ști când costurile sunt mai mici.

O implementare reală se va face folosind ideea de microgrid, care, de fapt, este un smart grid zonal, iar toate microgridurile vor fi conectate între ele sub un smart grid.

Implementarea ce are la bază smart grid și microgrid va face posibilă comunicarea între utilizatorul casnic si furnizorul de energie electrică.

1.3. Celule foto Semiconductoarele, în principiu, sunt construite precum niște fotodiode cu suprafață

mare, care însă nu se utilizează ca detectoare de radiații, ci ca sursă de curent. Interesant la acest tip de semiconductoare este că, prin absorbție de energie (căldură sau lumină), eliberează purtători de sarcină (electroni și goluri). Este nevoie de un câmp electrostatic intern pentru ca din

Page 5: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

4

acești purtători să se creeze un curent electric, dirijându-i în direcții diferite. Acest câmp electric intern apare în dreptul unei joncțiuni p-n. Fiindcă intensitatea fluxului luminos scade exponențial cu adâncimea, această joncțiune este necesar să fie cât mai aproape de suprafața materialului și să pătrundă cât mai adânc. Această joncțiune se creează prin impurificarea controlată. Pentru a realiza profilul dorit, în mod normal se impurifică „n”, un strat subțire de suprafață și „p”, stratul gros de dedesubt în urma căruia apare joncțiunea.

Sub acțiunea fotonilor apar cupluri electron-gol în joncțiune, din care electronii vor fi accelerați spre interior, iar golurile spre suprafață. O parte din aceste cupluri electron-gol se vor recombina în joncțiune, rezultând o disipare de căldură, restul curentului putând fi utilizat de un consumator, încărcat într-un acumulator sau prin intermediul unui invertor livrat în rețeaua publică. Tensiunea electromotoare maximă la bornele unei celule solare (de exemplu la cele mai utilizate, celulele de siliciu cristaline) este de 0,5 V. Structura celulelor solare se realizează în așa fel încât să absoarbă cât mai multă lumină și să apară cât mai multe sarcini în joncțiune. Pentru aceasta, electrodul de suprafață trebuie să fie transparent, contactele la acest strat să fie pe cât posibil de subțiri, pe suprafața se va aplica un strat antireflectorizant pentru a micșora gradul de reflexie a luminii incidente. Acestui strat antireflectorizant i se atribuie culoarea negru-albastruie a celulelor solare care fără aceasta ar avea o culoare gri-argintie. La celulele solare moderne se obține din nitrat de siliciu prin procedeul PE-CVD (pe o suprafață încălzită se depun în urma unei reacții chimice componente extrase dintr-o fază gazoasă) un strat antireflectorizant de cca 70 nm grosime (un sfert de lungime de undă la un coeficient de refracție de 2,0). Se mai utilizează straturi reflectorizante din SiO2 și TiO2 ce se depun prin procedeul AP-CVD. Grosimea stratului influențează culoarea celulei (culoarea de interferență). Grosimea stratului trebuie să fie cât se poate de uniformă, deoarece abateri de câțiva nanometri măresc gradul de reflexie. Celulele își datorează culoarea albastră realizării unei grosimi ce corespunde lungimii de undă a culorii roșii, culoarea cea mai bine absorbită de siliciu. În principiu însă, în acest mod se pot realiza celule roșii, galbene sau verzi conform unor cerințe arhitectonice deosebite, dar cu un randament mai slab. În cazul nitratului de siliciu și al bioxidului de siliciu, stratul antireflectorizant mai are și un rol de a reduce viteza de recombinare superficială. Un generator fotovoltaic este un ansamblu de componente dintre care se va modela doar rețeaua de celule fotovoltaice. Această rețea poate fi modelată la nivel celular, iar legarea celulelor individuale se poate face fie în serie, pentru a avea o tensiune mai mare, fie în paralel, pentru a avea un curent mai mare.

Celula fotovoltaică este realizată dintr-o joncțiune p-n fabricată într-un strat de semiconductor. Când energia solară (fotonii) cade pe joncțiune, electronii din atomi sunt eliberați, producându-se astfel perechi electroni-goluri. Datorită câmpului electric intern al joncțiunii, aceste perechi sunt îndepărtate, generând o mișcare a electronilor și creându-se astfel un curent electric direct proporțional cu intensitatea luminoasă.

În cazul în care celula fotovoltaică este conectată la un consumator, curentul va trece prin

acesta, iar în cazul în care celula este lăsată în circuit deschis, curentul va trece prin dioda formată de joncțiunea p-n. Caracteristica diodei intrinseci va genera caracteristica tenisunii celulei în circuit deschis.

Astfel, modelarea cea mai simpla a unei celule fotovoltaice se poate face folosind o diodă în paralel cu o sursă de curent. Totuși există mai multe modele care pot fi implementate. De exemplu, se poate concepe un model cu două sau trei diode care se deschid la diverse intensități luminoase. Acest model are rolul de liniariza pe porțiuni curba curent-tensiune (figura următoare).

Punctul de putere maximă

Page 6: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

5

Puterea electrică livrată de o celulă fotovoltaică nu este suficientă pentru majoritatea aplicațiilor domestice sau industriale. Din acest motiv, celulele fotovoltaice se asociază în serie pentru a mări valoarea tensiunii la borne și pentru a realiza astfel un panou (modul). Apoi, modulele se asociază fie în serie pentru creșterea și mai mare a tensiunii, fie în paralel pentru creșterea curentului prin circuit. Aceste asocieri serie-paralel formează câmpurile fotovoltaice.

Page 7: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

6

2. Modelul rețelei de comunicație Deoarece modulul radio nu contine un layer de comunicație care sa poate fi acoperitor cazurilor posibile în reteaua wireless pe care dorim sa o implementam, vom realiza un algoritm de comunicație custom.

Pentru proiectare se pleaca de la premisa ca reteaua este realizata din N noduri și un Master, se poate, totusi, gandi o rețea cu M noduri de tip Master. Comunicatia este totdeauna initiate de catre un Master, iar fiecare nod are obligatia sa raspunda.

Un alt aspect care trebuie luat în calcul este ca atunci cand modulele fotovoltaice sunt asezate în teren, fiecare modul(sau Nod) trebuie sa aiba cel putin un vecin în raza sa de actiune, asftel încât sa poata realiza conxiunea, prin acest vecin, cu Master-ul.

Pentru a reduce consumul de curent modulul radio este pornit la un interval fix de timp, Master-ul fiind obligat sa termine conexiunea prin trimiterea unui pachet care va face ca modulele sa intre în stand-by.

În cadrul aplicației se consideră că nu se pot conecta în rețea un numar mai mare de 240 de noduri, deși adresele posibile depasesc 16 milioane. Adresa efectiva din cei 3 octeti de adresa este doar octetul cel mai nesemnificativ.

2.1. Topologia Retelei

Plecand de la ipoteza ca fiecare nod are cel putin un vecin si, adaugand ca, exista cel putin un

Nod care nu este conectat la toate celelalte noduri, inclusiv la Master, putem spune ca topologia rețelei este una de tip Mesh. O astfel de rețea este prezentata în imaginea urmatoare.

Figura 2.1: Topologia Mesh

În reteaua prezentata în Figura 2.1 se considera nodul M Master-ul, iar celelate noduri de

la A la E noduri conectate intre ele în configuratia respectiva. Intr-o astfel de rețea pot exista noduri care sunt conectate la Master prin mai multe rute,

un astfel de exemplu este nodul D. Acesta poate comunica cu Master-ul prin B și A, sau prin E și A. Exista și posibilitatea de a avea noduri care comunica printr-o singura cale, ca de exemplu C care comunica cu M doar prin A.

În momentul în care nodurile sunt dispuse în teren, este obigatoriu ca fiecare nod sa aiba conexiune cu Master-ul, neimportant prin cate noduri. Totusi trebuie avut în vedere, acolo unde este posibil ca fiecare fiecare nod sa aiba cel putin 2 rute catre Master. în acest fel se realizeaza o ruta de siguranta în cazul în care conexiunea cu un nod nu mai poate fi stabilita.

Un exemplu, bazat pe Figura 2.1 poate aparea în cazul în care nodul B este indisponibil. în aceasta situatie, presupunand ca nodul D are ruta principala prin B, nodul D trimite un pachet catre B, acesta nu va raspunde în timpul setat, semnaland nodului D ca nu mai exista conexiune

Page 8: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

7

cu B. în acest moment, nodul D citeste tabela de rutare și observa ca poate comunica și prin E. Astfel exista o ruta alternativa de comunicație catre Master.

2.2. Frame-ul radio

Modulul radio poate oferi comunicație până la 100 de metrii, în cazul unui modul de raza

scurta, și 1 km pentru modulul de raza lunga. Ambele comunica prin acelasi protocol, proprietar, care are la baza urmatoarea structura a frame-ului radio.

Preambul 1 octet

Adresa integratului 3 - 5 oceti

Camp control 9 biti

Date 0 - 32 octeti

CRC 1 - 2 octeti

În capitolul 3.1 va fi prezentat pe larg modulul radio și se vor da detalii suplimentare

legate de acesta, inclusiv frame-ul radio, în acest moment avem în vedere doar adresa integratului și CRC-ul.

Avantajul pe care il ofera modulul radio este ca poate avea mai multe canale de comunicație peste aceeasi frecventa. Dezavantajul protocolului de comunicație intern integratului este ca nu poate avea o adresa de Broadcast, implicit.

Protocolul de comunicație va folosi cate o adresa individuala pentru fiecare nod și o adresa de Broadcast care va fi configurata pe unul dintre canalele secundare. în acest fel folosim cat mai bine capacitatile integratului.

Un alt aspect important este posibilitatea trimiterii implicite a unui mesaj de acknowledge implicit, fara interventia UC-ului.

CRC-ul este un alt atu al integratului, acesta este calculat de catre integrat și poate avea 1 sau 2 octeti. în cazul în care CRC-ul calculat este diferit de cel receptionat se nu se trimite mesajul de acknowledge.

Fiecare tip de mesaj sau adresa predefinta are un ID special evidentiat în tabelul urmator:

Denumire Valoare Dimensiune Descriere ADBR 0xABCABC 3 octeti Adresa de broadcast ADRM 0xA0A0A0 1 octet Adresa Master STCLK 0xCA 1 octet Resetare ceas intern STBY 0xB3 1 octet Intrare stand-by TRUT 0xAC 1 octet Mesaj tabela rutare TRUSL 0xAF 1 octet Mesaj tabela rutare

nod neinitializat DATA 0XF0 1 octet Pachet de tip date

Tabelul 2.1: Adresele și tipurile de pachete predefinite

2.3. Sincronizarea ceasurilor interne

Un aspect important al masuratorilor parametrilor pe care ii furnizeaza panoul fotovoltaic este sincronizarea ceasurilor interne ale modulelor. Orice integrat care tine un ceas, fie el UC-ul sau un Real-Time Clock(RTC), este supus erorilor datorate necalibrarii corecte a oscilatorului intern sau variatii de temperatura. în functie de acesti factori se poate observa ca pe durata a catorva zile masuratorile se decaleaza atât de mult încât poate deveni dificila folosirea lor.

Page 9: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

8

Pentru a rezolva aceasta problema se va folosi un pachet special care va sincroniza toate ceasurile din retea. Acest pachet nu va contie efectiv ora, dar va reseta ceasul intern la 0 la un interval de 6 ore.

Fiecare nod va primi un pachet pe adresa de broadcast cu dimensiunea de 8 octeti, din care 1 octet reprezinta codul operatiei de resetare ceas intern. Fiecare nod care primește acest pachet are doua obligatii. Prima obligatie este sa verifice daca pachetul a fost primit pentru prima data, în acest caz se seteaza un fanion care marcheaza primirea pachetului, se reseteaza ceasul și se retrimite pachetul. în cazul în care fanionul era deja setat, mesajul a fost reprimit, acest pachet este ignorat și nici nu este retrimis.

Preambul 1 octet

ADBR Camp control 9 biti – Fara ACK

STCLK CRC 1 octet

Figura 2.2 Mașina de stări mesaj de ceas

2.4. Pachetul de intrare standby

Master-ul este obligat ca atunci cand o sesiune s-a terminat sa trimită un mesaj de sfarsit

sesiune. Acest mesaj este un mesaj de broadcast și este trimis catre toate nodurile. În momentul în care un nod primește acest mesaj este obligat sa retrimita mesajul catre

toate nodurile după care sa intre în stand-by. Intrarea imediata în aceasta stare evita primirea repetata a aceluiasi mesaj.

În cazul în care timp de 3 minute un nod nu primește nici un pachet, nodul intra automat

în stand-by.

Preambul 1 octet

ADBR Camp control 9 biti – Fara ACK

STBY CRC 1 octet

Page 10: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

9

2.5 Tabela de rutare

Pentru a avea o conexiune cat mai rapida cu Master-ul fiecare nod contine o tabela de

rutare cu vecinii sai care au conexiune cu Masterul. Aceasta tabela de rutare este stocata în EEPROM și are urmatoarea structura de 4 octeti.

Adresa vecin (1 octeti) Numar noduri până la Master

(1 octet) Activ (1 octet)

Se consideră că vecinii care au 0 ca numar de noduri până la Master sunt vecini prin care

nu se poate ajunge la Master. Având numarul de hop-uri până la master putem sa trimitem pachetele eficient, din

punctul de vedere al numarului minim de hop-uri, atât timp cat octetul Activ este setat(0xAA). în aceasta situatie nu se ia în considerare și calitatea semnalului.

Realizarea tabelei de rutare se face în doua moduri: • Initiata de Master • Initata de un nod care a fost inactiv

La cerea Master-ului se poreste mecanismul de creare a tabelei de rutare prin trimiterea unui pachet de broadcast cu forma:

Preambul 1 octet

ADBR Camp control 9 biti – Fara ACK

TRUT 1 octet

Adresa transmitatorului 1 octet

30 de octeti cu fanioane pentru fiecare nod parcurs

CRC 1 octet

Pachetul trimis de Master contine adresa transmitator cu valoarea ADRM. Fiecare nod

care primteste acest tip de pachet stocheaza în memori adresa transmitatorului și numarul de noduri până la Master(se aduna bit cu bit) și setaza octetul Activ pe adevarat.

Fiecare nod are obligatia sa retrimita pachetul TRUT o singura data cu adresa sa și bitul coresunzator setat.

Problema apare atunci cand un nod primește inapoi un pachet TRUT trimis de el. Deoarece frame-ul contine 30 de octeti cu bitul corespunzator fiecarui nod parcurs setat. Cand nodul K primește un frame cu bitul K setat inseamna ca frameul respectiv provine de la unul dintre vecinii sai de rang egal cu rangul sau + 1(rangul se refera la distanța fata de Master). în acest caz nodul trebuie sa ignore pachetul și sa nu-l mai retrimita.

Page 11: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

10

Figura 2.3 Mașina de stări mesaj tabela rutare

Procedura de detectie se termina în momenutl în care nu mai circula mesaje intre noduri. La sfarsitul procedurii fiecare nod va avea memorata tabela de rutare cu numarul de noduri până la Master și vecinii care ii ofera aceasta posibilitate. A doua posibilitate de realizare a tabelei de rutare se refera la trimiterea unui pachet de catre fiecare nod neintializat. La primirea mesajului de resetare ceas, nodul incepe și realizarea tabelei de rutare. Acest lucru se face trimitand un mesaj de timp broadcast cu adresa nodului și tipul pachetului TRUSL. Fiecare receptor trimie inapoi un pachet cu adresa lui și distanța minima(activa) până la Master.

Formatul pachetului de obtinere a tabelei de rutare este: Preambul 1 octet

ADBR Camp control 9 biti – Fara ACK

TRUSL 1 octet

Adresa transmitatorului 1 octet

CRC 1 octet

Formatul pachetului cu care un nod raspunde la TRUSL este:

Page 12: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

11

Preambul 1 octet

Adresa nodulului care a initiat primul pachet

Camp control 9 biti – Fara ACK

TRUSL 1 octet

Adresa hopului catre Master 1 octet

Numarul de hopuri până la Master 1 octet

CRC 1 octet

Tabela de rutare pe care fiecare dintre noduri o are salvata în EEPROM este ordonata în functie de cel mai aproiat nod de Master. Pentru a realiza o cautare rapida a celui mai rapid nod, exista o ierarhie de noduri unde primul este cel mai aproape, iar ultimul cel mai indeparat.

Figura 2.4: Maparea memoriei EEPROM

Memoria este organizata conform imaginii de mai sus. Primul octet reprezintă adresa

nodului curent. Prima zona, cuprinsă între adresele 1 și 240 conţine adresele din EEPROM unde se afla adresele nodurilor și a distanţelor până la Master. în aceasta zonă adresele sunt ordonate în așa fel încât ele distantele sa fie ordonate în ordine crescatoare, de exemplu, adresa de pe pozitia 1 pointează către nodul cu distanța minimă.

Adresa EEPROM Nod1

Adresa EEPROM Nodk

Adresa EEPROM Nodn=240

Adresa Nodt1

Adresa Nodtk

Distanta Nodt1

Nodt1 Activ

1

k

240

241

241+3·(k-1)

Adresa Nodt240

Adresa Nodt240

958

959

Adresa Nodului radio 0

Distanta Nodtk

Nodtk Activ

Nodt240 Activ 960

Page 13: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

12

Incepând cu adresa 241 fiecare grup de 3 octeti reprezinta un nod, la această adresă pointează fiecare dintre adresele din zona anterioară. Aceste date sunt introduse în ordine sosirii în nodul respectiv.

Pentru a accesa mai ușor datele prima zonă este continuu sortată. Atunci cand se primește un pachet de tip TRUT sau TRUSL, adresa nodului vecin și distanța până la Master sunt stocate în zona a doua, zona de date, iar alogritmul binar de căutare incepe să caute pozitia de introducere a noului vecin.

Alogoritmul împarte lista cu adrese în doua și stabileste în care parte trebuie sa o parcurga prin accesarea zonei date de aceasta adresa și de distanța fata de Master aferenta acesti zone. în momentul în care s-a stabilit pozitia unde noul nod trebuie introdus, se citeste zona de memorie respectiva, până la adresa 240. La aceasta zona se ataseaza noua pe pozitia și se rescrie zona care trebuie modificata.

Un nod ruteaza orice pachet pe care il primește pe adresa de broadcast sau care trebuie trimis catre Master, mai exact pachetele de tip DATA. în aceasta rețea nodurile nu pot sa își trimită date, singurul care primește date este Master-ul, iar acesta le primește prin intermediul hop-urilor, în cazul în care nodurile nu se conecteaza direct la el.

2.6. Pachetul de date Dupa cum am mentionat mai sus, pachetele de date au un fanion special care înștiințează

nodul respectiv ca trebuie sa ruteze pachetul catre Master prin trimiterea mai departe a pachetului.

Preambul 1 octet

Adresa nod cu distanța cea mai scurta - activ

Camp control 9 biti ACK activ

DATA 1 octet

Numar pachet 2 octeti

1-29 octeti de date

CRC 1 octet

Se poate observa ca în acest caz bitul de ACK este setat, așa ca nodul emitator asteapta

primierea semnalului ca mesajul a fost receptionat corect. în caz contrar, acesta retrimite pachetul până cand, fie primește un ACK sau depaseste numarul de încercări .

Primul pachet trebuie sa contina și numarul maxim de pachete trimise în cadrul comunicației. Acesti 2 octeti nu sunt marcati în diagrama, dar sunt cititi de catre Master atunci cand primește un pachet DATA cu numarul pachetului 0.

Pentru initierea mecanismului de trimitere a datelor, nodul principal(Master) trimite pe adresa de broadcast un pachet de tip DATA care contine adresa modului de la care se doreste citirea informatiilor. Acest pachet este prezentat mai jos. Preambul 1 octet

ADBR Camp control 9 biti – fara ACK

DATA 1 octet

Adresa destinatie 1 octet

Pachet OK/NOK

CRC 1 octet

Master-ul este obligat sa trimită mesajul anterior de fiecare data cand primește un pachet

corect, adica a primit pachetul cu numarul corect. în cazul în care timp de 3 secunde de la trimiterea fiecarui pachet nu primește un raspuns de la nod, Masterul considera lipsa conexiune și marcheaza ca nu a primit raspuns la cererea de trimitere date. De asemenea și nodul reactioneaza în acelasi fel în cazul în care nu primește

Mecanismul de trimitere a datelor este prezentat în diagrama urmatoare.

Page 14: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

13

Figura 2.4: Mecanism trimitere date

În diagrama prezentata anterior nu se considera lipsa de conexiune cu vecinii. Aceast

lucru se realizeaza la fiecare pas de transmitere, nefiind important prin care nod pachetul ajunge la destinatie, atât timp cat acesta ajunge. Acest mecanism este schita în diagrama de stari urmatoare.

Figura 2.5: Mecanism conexiune vecini

Page 15: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

14

3. Echipamentul fizic

Echipamentul fizic constă în 2 module. Primul modul este cel care măsoară și stochează datele măsurate la terminalele celulei fotovoltaice. Al doilea modul este cel care este descris în această lucrare. Acest modul poate fi împărțit în două sub-module, modulul de comunicație care are la baza integratul NRF24L01+ și este comandăt de al doilea modul, proiectat și executat în cadrul lucrării.

Figura 3.1: NRF24L01+

3.1. NRF24L01+

Acest integrat este produs de către Nordic Semicondutor. Frecvența de funcționare este între 2.4 – 2.525 GHz. O parte din caracteristicile integratului sunt prezentate în continuare:

• 250kbps, 1Mbps și 2Mbps rata de transmisie on air • Ultra low power operation • 11.3mA TX la 0dBm output power • 13.5mA RX la 2Mbps air data rate • 900nA în power down • 26µA în standby-I • regulator de tensiune intern • 1.9 - 3.6V tensiune de alimentare • Enhanced ShockBurst™ • mod automatic de procesare a pachetelor • trimitere/recepționare de mesaje de tip ACK/NAK • 6 data pipe MultiCeiver™ • Accepta 5V pe pinii de date

Page 16: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

15

Figura 3.2: Schema de funcționare a integratului

3.1.1. Interfațarea prin SPI Acest integrat foloseste protocolul de comunicație SPI(serial peripheral interface). SPI

este o interfața sincronă care poate funcționa la mare viteză, în modul full duplex. Denumirea a fost data de catre Motorola. Aici, modul master/slave înseamnă, că dispozitivul (circuitul) digital master inițiază cuvântul de date. Mai multe dispozitive (circuite) digitale slave sunt permise cu slave select individual, adică cu selectare individuală.

• SCLK - Ceas serial (output din master) – SCK • MOSI/SIMO - Master Output, Slave În put (output din master) • MISO/SOMI - Master În put, Slave Output (output din slave) • SS - Slave Select (active low; output din master) - CSN

În cazul nostrum modulul va funcționa în mod Slave, iar modulul de comandă va fi

Master. Se va seta o viteza de comunicație de 1 Mb deși sistemul poate funcționa și al 2Mb. Pentru a putea comunica prin 24L01 trebuie ca pinul CSN să fie coborat în 0 pentru a

semnala modulului ca se doreste trimiterea unei cereri. Pe toata perioada în care CSN este în 0 modulul are activa comunicatia SPI. De asemenea pinul CE trebuie să fie setat pentru a scoate cipul din starea de standby.

Page 17: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

16

Figura 3.3: Citire/Scriere prin SPI

3.1.2. Setul de instrucțiuni SPI Pentru fiecare comandă trimisa pinul CSN trebuie să faca o tranzitie din 1 în 0.

Comandă Codul comenzii

Octeții de date Explicatie

R_REGISTER 000A AAAA 1-5 octeți, cel mai nesemnificativ primul

Comandă de citire regiștrii stare, AAAAA reprezintă adresa registrului

W_REGISTER 001A AAAA 1-5 octeți, cel mai nesemnificativ primul

Comandă de scriere regiștrii stare, AAAAA reprezintă adresa registrului. Activ doar în power down sau standby.

R_RX_PAYLOAD 0110 0001 1-32 octeți, cel mai nesemnificativ primul

Comandă citire buffere receptionate 1-32 octeți, se începe totdeauna cu octetul 0. Bufferele sunt curatate când transmisia catre microcontroller-ul s-a incheiat.

W_TX_PAYLOAD 1010 0000 1-32 octeți, cel mai nesemnificativ primul

Comandă scriere în buffere transmisie(1-32 octeți), se începe totdeauna cu octetul 0

FLUSH_TX 1110 0001 0 Curatare buffere transmisie FLUSH_RX 1110 0010 0 Curatare buffere receptie. Nu

trebuie apelata în modul receptie (RX)

REUSE_TX_PL 1110 0011 0 Refolosire ultimul pachet. Se foloseste același pachet până când se apeleaza comandă W_TX_PAYLOAD sau FLUSH_TX. Funcția nu trebuie activata/dezactivata în timpul unei transmisii.

ACTIVATE 0101 0000 1 Aceasta comandă de scriere, urmată de comandă 0x73 activeaza urmatoarele 3 funcționalitati. Fiecare mesaj

Page 18: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

17

ACTIVATE il neaga pe cel anterior. în cazul în care funcționalitatile nu sunt active, orice operatie asupra lor nu are nici un efect.

R_RX_PL_WID 0110 0000 Citieste dimensiunea primului buffer de receptie.

W_ACK_PAYLOAD 1010 1PPP 1-32 octeți, cel mai nesemnificativ primul

Scrie datele care vor fi trimise impreuna cu pachetul de tip ACK. Activ doar în modul RX. PPP reprezintă numărul canalului pe care se va trimite acest pachet.

W_TX_PAYLOAD_ NO_ACK

1011 0000 1-32 octeți, cel mai nesemnificativ primul

Specifica transmițătorului să dezactiveze funcția de primiere mesaj de ACK Activ doar în modul TX

NOP 1111 1111 0 Nici o comandă. Tabelul 3.1: Lista comenzilor folosite de NRF24L01+

Pentru a citi date din regiștrii integratului se trimite comanda de citire și adresa de la care

se citește, apoi se trimit numărul de octeți fără date egal cu numărul de octeți pe care îi dorim. De exemplu, dacă dorim să citim valoarea adresei integratului, trecem pinul CSN din 1 în

0 și așteptăm cel puțin 2 ns (acest lucru poate fi omis atunci când frecvența de funcționare este mai mică de 2 MHz). Microcontroler-ul începe să transmită comanda 0b00010000, după care, pentru fiecare octet trimis, integratul raspunde cu un octet, în cazul nostru între 3 și 5. Datele conținute octeți trimiși de microcontroller nu sunt importante, ele semnalizând doar numărul de octeți. Integratul va răspunde cu cei 3-5 octeți ceruți.

3.1.3. Timpi de acces Pentru a garanta că avem o conexiune corectă, trebuie sa avem în vedere timpii de

sincronizare. Acești timpi sunt prezentați în imaginea următoare și explicați în tabelul 3.2.

Figura 3.4: Diagrama de timp

Simbol Parametru Min Max Unitate masura

Tdc Setare SCK 2 ns Tdh Achizite valoare 2 ns Tcsd CSN pentru validare

bit 38 ns

Page 19: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

18

Tcd SCK pentru validare bit

55 ns

Tcl Timp SCK low 40 ns Tch Timp SCK high 40 Fsck Frecventa

comunicație 0 10 MHz

Tr, Tf Timp creștere, scădere

100 ns

Tcc Timp între setarea CSN și pornirea SCL-ului

2 ns

Tcch Timp minim de SCK și CSN 0

2 ns

Tcwh Timp minim în care CSN trebuie să fie 1 după o sesiune de 0

50 ns

Tcdz Timpul în care SPI trece în modul idle

38 ns

Tabelul 3.2: Timpii modulului SPI 3.1.4. Modul Power Down În modul Power down integratul este oprit pentru a consuma cât mai puțin. Toți regiștrii și

modulul SPI sunt active, pentru a permite trecerea în Power On atunci când bitul PWR_UP din registrul CONFIG este setat pe 0.

Timpul necesar ca integratul să fie complet activ este de aproximativ 170 us deoarece, mai întâi integratul trebuie să treacă în modul Stand by (150 us), apoi pinul CE trebuie menținut în 1 pentru cel puțin 10 us, iar CSN poate fi activat după alte 4 us.

3.1.5. Modurile Standby Există două moduri standby, denumite Standby-I si Standby-II. În ambele cazuri regiștrii

interni sunt salvați. Primul mod se activează când PWR_UP este setat, adică tot timpul cât nu se trimite ceva.

Intrarea în acest mod se face atunci când CE trece în 1 și iese atunci când CE trece în 0. Avantajul acestui mod este timpul mic de trecere în mod RX/TX, dar și consumul mediu mic.

Al doilea mod, este folosit atunci când modul de funcționare pe mai multe canale este setat. Integratul intră în acest mod atunci când CE este 1 și nu există nimic în bufferul de ieșire. Când intră ceva în buffer, cipul iese din acest mod.

3.1.6 Modul RX (receptor) În acest mod modulul se află în modul receptor. În acest mod integratul ascultă mediul și,

atunci când primește un pachet cu adresa și CRC-ul corecte, decapsulează pachetul și stochează în buffere mesajul. Dacă bufferele sunt pline, mesajul este ignorat.

Pentru a intra în modul RX, pinul CE trebuie menținut în 1, la fel și biții PWR_UP și PRIM_RX.

Tot în acest mod se poate folosi și detectorul de semnal (RPD – Received Power Detector). Acest semnal este activ când în mediu există un semnal cu puterea mai mare de -64

Page 20: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

19

dBm pentru mai mult de 40 us. Bitul se află în registru 0x09 pe poziția 0 și poate fi citit în modul RX, oferind astfel un indicativ asupra mediului. Sensibilitatea față de -64 dBm este – 5dB la -40 de grade, respectiv +5 dB la 85 de grade.

3.1.7. Modul TX (transmițător) Modul TX este activ atunci când sistemul dorește să transmită date prin radio. Condițiile

care trebuie îndeplinite pentru a intra în acest mod sunt: • Bitul PWR_UP setat • Bitul PRIM_RX (modul RX dezactiva) desetat • CE ținut pe 1 pentru mai mult de 10us • Date în bufferele de transmisie

Cât timp bufferele nu sunt goale integratul va încerca să trimită toate datele. Un aspect important este acela că modul TX nu trebuie să fie activ pentru mai mult de 4 ms deoarce sistemul se află în buclă deschisă, nu poate primi feedback de la destinatar.

Modurile de operare ale integratului sunt descrise în tabelul următor:

Mod funcționare PWR_UP PRIM_RX Pin CE Starea buffere RX 1 1 1 - TX 1 0 1 Goliere buffere

pe RF TX 1 0 Pulse de min 10

us Un singur

pachet e trimis din buffere

Standby-II 1 0 1 Buffere goale Standby-I 1 - 0 Nu se transmite

nimic Power Down 0 - - -

Tabelul 3.3: Modurile de funcționare ale integratului 3.1.8. Conexiunea wireless Modulul poate funcționa la mai multe viteze de transmisie/recepție. Se pot seta

următoarele viteze: 250kbps, 1Mbps si 2Mbps. Cu cât viteza este mai mică, cu atât sensibilitatea este mai bună, oferind astfel o conexiune mai sigură, dar lentă. O viteză mai mare, în schimb, oferă un consum mai mic (integratul stă mai puțin timp în modul TX/RX) și reduce posibilitatea coliziunilor on-air.

Pentru a seta valoarea ratei de comunicație se va seta registrul RF_SETUP, în funcție de rata dorită, se setează RF_DR_LOW pentru 250kbps sau cei 2 biți din RF_DR_HIGH. În cazul în care RF_DR_LOW e setat, RF_DR_HIGH se ignora.

Un alt aspect important al comunicației radio este frecvența de funcționare. Domeniul de frecvențe este cuprins între 2,4 GHz și 2,525 GHz. Pentru comunicația la 250kbps și 1Mbps, lățimea de bandă este de 1MHz, iar pentru 2Mbps 2 MHz. Pentru a evita suprapunearea canalelor se recomandă diferențierea de cel puțin 2 MHz între canale.

Pentru a seta frecvența de funcționare se va seta registrul RF_CH. Fiecare bit din cei 7 configurabili reprezintă 1 MHz. Pentru calculul frecvenței se va folosi formula:

Page 21: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

20

F = 2400 kHz + RF_CH (MHz) Pentru a avea conexiune cu alt modul, ambele module trebuie sa functioneze pe acelasi canal, pe aceeasi frecventa si la aceasi rata de transmisie/receptie.

O alta caracteristica a integratului este posibilitatea setarii puterii oferite de amplificatorul de semnal. Pentru configurarea acestei functii se vor seta bitii RF_PWR din registrul RF_SETUP, valorile sunt prezentate mai jos:

RF_PWR Amplificarea antenei Curentul

consumat 11 0 dBm 11,3mA 10 -6 dBm 9 mA 01 -12 dBm 7,5 mA 00 -18 dBm 7 mA

Tabelul 3.4: Configurarea puterii de ieșire 3.1.9. Modul Enhanced Shockburst Acest layer de comunicație bazat pe pachete este proprietar producatorului integratului si

ofera: • Incapsulare automata si sincronizare • Trimitere si receptie de mesaje de acknoledgement • Retrimiterea automata a pachetelor • Mesajul are o dimensiune variabila intre 1 si 32 de octeti • 6 data pipes pentru conexiunea în stea • Posibilitatea folosirii CRC-ului pe 0-2 octeti

Mecanismul de functionare este foarte simplu. Receptorul asculta mediul si când primeste un pachet cu adresa sa salveaza si restul pachetului, datele si CRC-ul. în cazul în care CRC-ul calculat si cel primit sunt identice, se trimite un mesaj de ACK si apoi se salveaza datele intr-unul dintre bufferele libere. în cazul în care CRC-ul nu este valid, se ignora pachetul si se trimite NAK. în acest caz transmitatorul retrimite pachetul pana când acesta este receptionat corect sau pana când numarul de reincercari a fost atins.

Diagrama de functionare este prezentata mai jos.

Page 22: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

21

Figura 3.5: Diagrama de funcționare

Formatul pachetului trimis prin aer este format din 5 zone.

Preambul 1 octet

Adresa integratului 3 - 5 oceti

Camp control 9 biti

Date 0 - 32 octeți

CRC 1 - 2 octeți

Preambulul este o zona de 1 octet care are ca functie sincronizarea receptorului și a

demodulatorului. Preambulul poate avea 2 forme: • 01010101 - dacă adresa transmițătorului începe cu 0 • 10101010 - dacă adresa transmițătorului începe cu 1

Aceste 2 valori sunt folosite pentru a avea cât mai multe tranziții. Adresa integratului este similară cu adresa MAC a unei placi de retea. Dimensiunea poate

să fie între 3 și 5 octeți și se seteaza în registru SETUP_AW. Stabilirea valorii adresei se face de catre utilizator prin scrierea regiștrilor RX_ADDR_P0-5, corespunzători fiecarui pipe.

De notat că adresele în care exista o singura tranzitie din 0 în 1, sau 1 în 0 poate fi detectata greșit, astfel creste rata de eroare. De asemenea, o adresă în care exista tranziții continue, ca la preambul, poate fi detectata greșit.

Câmpul de control este format din 9 biti, conform figurii:

Page 23: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

22

Payload 6 biti PID 2 biti No_ACK 1 bit Câmpul payload este folosit atunci când frameul are dimensiune variabila și contine

lungimea zonei de date (0-32 octeți). Pentru setarea acestei functii se seteaza registrul DYNPD. Valoarea 000000 reprezintă 0 octeți în zona de date, respectiv 100000, care reprezintă 32

de octeți. Oricare altă valoare în acest câmp se neglijeaza. Câmpul PID(packet identification) marcheaza pachetul ca fiind nou sau retrimis. Aceasta

functie este necesara pentru a detecta dacă pachetul a fost receptionat deja. Acest lucru se face dacă ultimul pachete are același PID ca penultimul pachet. dacă și CRC-urile sunt identice atunci pachetul a fost deja receptionat, iar noul pachet este ignorat. Un modul poate primi 2 pachete consecutive cu același PID atunci când se pierd multe pachete iar PID-ul ajunge la ultima valoare receptionata.

Câmpul No_ACK, adică nu trimite mesaj de ACK. Aceasta posibilitate este valabila doar dacă este setat modul de raspuns.

Cel mai important câmp este cel de date. Acest câmp poate avea dimensiune variabila în functie de dorinta utilizatorului, dar este limitata la 32 de octeți. Cele doua moduri sunt static și dinamic. Valoarea default este cea statica, și este setata pentru fiecare pipe în parte la receptor. Transmitatorul trebuie să aiba setata aceeasi dimensiune pentru a nu avea probleme de comunicație.

În varianta dinamica, lungimea este trecuta în câmpul de control. Astfel dimensiunea este citita automat și pusa în registrul R_RX_PL_WID, dacă la citire aceasta are valoare mai mare de 32 inseamanca pachetul a fost salvat eronat și trebuie ignorat.

Ultimul câmp este cel de CRC, el este calculat de catre integrat și poate avea valoarea de 1 sau 2 octeți. Acest mecanism de detectie de erori este activ implicit pe 1 octet, el putand fi modificat în registrul CONFIG la bitul CRCO.

Pentru calculul CRC-ului se folosesc 2 polinomiale: • 1 octet: X8 + X2 + X +1, cu valoarea de inceput 0xFF • 2 octeți: X16 + X12 + X5 +1, cu valoarea de inceput 0xFFFF

3.1.10. Încapsularea și decapsularea pachetelor Încapsularea și decapsularea se face folosind un algoritm simplu. Cele doua mecanisme

sunt prezentate în schemele logice urmatoare:

Page 24: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

23

Figura 3.6: Decapsularea pachetelor

Page 25: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

24

Figura 3.7: Încapsularea pachetelor

3.1.11. Mecanismul automat de tranzacționare de pachete Mecanismul este realizat din două părți. Prima parte este cea de autotrimitere de mesaj

ACK atunci când un pachet a fost primit corect. A doua parte este cea care retrimite un mesaj atunci când ACK nu a fost recepționat.

Modul de trimitere a mesajului de ACK este activat prin setarea EN_AA registrului EN_AA. De asemenea, se poate stabili ca pachetul de ACK să conțină și payload.

Modul de retransmitere automată retrimite ultimul pachet până în momentul în care primește un mesaj de ACK sau până când numărul maxim de încercări a fost depășit. Pentru setarea numărului maxim de reîncercări se vor seta biții ARC din registrul SETUP_RETR.

De asemnea, se poate seta și timpul de așteptare a mesajului de ACK. Valoarea suficientă pentru transmisia la 1 sau 2 Mbps este de 500us, pentru 250kbps este variabilă în funcție de dimensiunea segementului de date, variind între 500 us și 1500 us.

Modul de retransmisie funcționează în 3 etape: • Setare mod TX, trimitere frame • Setare mod RX, ascultare mediu

Page 26: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

25

• Mesaj ACK primit sau nu, schimbare în TX și rinitalizare transmisie. Toate aceste schimbări din TX în RX și înapoi TX sunt realizate automat atunci când

modul de retransmisie este activ. Totuși se poate crea și o variantă manuală, prin intermediul căreia utilizatorul să trimită un mesaj de ACK custom, pe care software-ul din microcontroler îl realizează. Dezavantajul constă în reducerea puterii de calcul a procesorului.

3.1.12. MultiCeiver

Această funcție se referă la capacitatea modulului de a asculta 6 pipe-uri, mai exact, posibilitatea de a avea 6 adrese la care acesta să răspundă. La un moment dat doar un singur canal logic poate primi date. Un pipe este de fapt un canal logic peste canalul fizic. În cazul nostru integratul poate să răspundă celor 6 canale logice peste același canal fizic.

Figura 3.8: Modul MultiCeiver

Pentru toate canalele logice se aplică aceleași setări și anume:

• CRC activ/inactiv ( activ tot timpul cu Enhaced ShockBurst) • Modul de calcul CRC (1 sau 2 octeți) • Dimensiunea adresei • Frecventa canalului • Viteza de comunicație • Amplificarea semnalului

Implicit, doar canalele logice 0 și 1 sunt active, celelalte putând fi activate prin scrierea registrului EN_RXADDR. Adresele pentru canalele 0 și 1 pot fi complet diferite, în timp ce canalele 1-5 folosesc aceiași 4 cei mai importanți octeți, doar cel mai puțin semnificativ fiind diferit.

Trebuie avut în vedere ca adresele canalelor să fie diferite pentru a elimina erorile posibile.

Fiecare receptor poate primi frame-uri de la mai mulți transmițători pe canale diferite. Pentru a nu trimite mesajul de ACK greșit, către alt transmițător, adresa de transmitere este cea a

Page 27: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

26

canalului logic pe care s-a recepționat, iar transmițătorul trebuie să aibă setată ca adresă de recepție tot adresa canalului logic la care a trimis inițial mesajul.

3.1.13. Întreruperi

Integratul are un pin de întrerupere activ pe 0. În momentul în care a fost primit sau trimis un pachet sau când a fost primit un mesaj ACK, pinul IRQ trece din 1 în 0 și rămâne în această stare până când microcontrolerul resetează valoarea registrului SETUP, mai exact setarea biților RX_DR sau TX_DS.

3.1.14. Regiștrii interni ai integratului

Integratul are un număr de 29 de rigiștrii. În acest moment vor fi prezentati acei regiștrii importanți, des utilizați.

Adresa (hex)

Denumire Bit Valoare reset

Tip Descriere

0x00 CONFIG Registru configurari Rezervat 7 0 R/W Doar valoare 0 e permisă MASK_RX_DR 6 0 R/W Mascare întreruperi RX_DR

1: pinul IRQ nu este afectat 0: pinul IRQ este dat de RX_DR

MASK_TX_DS 5 0 R/W Mascare întreruperi TX_DS 1: pinul IRQ nu este afectat 0: pinul IRQ este dat de TX_DS

MASK_MAX_RT 4 0 R/W Mascare întreruperi MAX_RT 1: pinul IRQ nu este afectat 0: pinul IRQ este dat de MAX_RT

EN_CRC 3 1 R/W CRC activ CRCO 2 0 R/W Număr octeți CRC

1: 2 octeți 0: 1 octet

PWR_UP 1 0 R/W 1: Pornit 0: Oprit

PRIM_RX 0 0 R/W Modul de funcționare: 1: PRX – receptor 0: TRX – transmițător

0x05 RF_CH Canalul radio Rezervat 7 0 R/W Permite doar 0 RF_CH 6:0 0000010 R/W Frecvența de operare

0x06 RF_SETUP Registru setare canal radio CONT_WAVE 7 0 R/W Activează transmiterea semnalului

de purtător când e setat Reserved 6 0 R/W Rezervat RF_DR_LOW 5 0 R/W Setare viteza 250 kbps când e setat

1. PLL_LOCK 4 0 R/W Blocarea semnaluli PLL, doar

Intest

Page 28: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

27

RF_DR_HIGH 3 1 R/W Viteza de transmisie, împreună cu RF_DR_LOW. [RF_DR_LOW, RF_DR_HIGH] 00: 1 Mbps 01: 2 Mbps 10: 250 kbps 11: Rezervat

RF_PWR 2:1 0 R/W Valoare puterii de transmitere 00: -18 dBm 01: -12 dBm 10: -6 dBm 11: 0 dBm

Obsolete 0 0 R/W Don’t care 0x07 STATUS Registru de status Reserved 7 0 R/W Se permite doar 0 RX_DR 6 0 R/W Întreruperea de pachet primit, 1 –

niciun pachet primit TX_DS 5 0 R/W Întreruperea de transmisie

terminată, în cazul în care este setat modul de autorăspuns, această valoare este schimbată atunci când se primește ACK. 1- pentru a reseta bitul

MAX_RT 4 0 R/W Întreruperea de număr maxim de retransmiteri atins. 1 – pentru a reseta bitul

RX_P_NO 3:1 111 R Numărul canalului logic pentru care există date în buffere. 000-101: numărul canalului 110: Nefolosit 111: Buffer gol

TX_FULL 0 0 R 1: Buffer plin 0: Buffer-ul nu este plin

0x0A RX_ADDR_P0 39:0 0xE7E7E 7E7E7

R/W Adresa canalului 0. Scrierea în registru se face începând cu cel mai nesemnificativ octet.

0x0B RX_ADDR_P1 39:0 0xC2C2C 2C2C2

R/W Adresa canalului 1. Scrierea în registru se face începând cu cel mai nesemnificativ octet.

0x0C RX_ADDR_P2 7:0 0xC3 R/W Adresa canalului 2. Se scrie doar cel mai nesemnificativ octet, ceilalți sunt preluați de la RX_ADDR_P1

0x0C RX_ADDR_P3 7:0 0xC4 R/W Adresa canalului 2. Se scrie doar cel mai nesemnificativ octet, ceilalți sunt preluați de la RX_ADDR_P1

0x0C RX_ADDR_P4 7:0 0xC5 R/W Adresa canalului 2. Se scrie doar

Page 29: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

28

cel mai nesemnificativ octet, ceilalți sunt preluați de la RX_ADDR_P1

0x0C RX_ADDR_P5 7:0 0xC6 R/W Adresa canalului 2. Se scrie doar cel mai nesemnificativ octet, ceilalți sunt preluați de la RX_ADDR_P1

0x10 TX_ADDR 39:0 0xE7E7E 7E7E7

R/W Adresa la care se dorește să se transmită pachetul. În cazul în care se dorește și primirea ACK-ului, acest registru trebuie să aibă valoarea RX_ADDR_P0

Tabelul 3.5: Lista cu regiștrii importanți 3.2. Atmega8A-PU Microcontroller-ul Atmega8A-PU produs de Atmel face parte din clasa AVR pe 8 biti și

arhitectura RISC (Reduced instruction set computing). Acesta este unul dintre cele mai folosite microcontrollere deoarece oferă un raport/preț foarte bun, având de asemena un consum redus de curent și o plajă foarte bună de tensiuni de alimentare, 2,5 – 5.5 V. De exemplu, consumul la 4 MHz și 3V este de doar 3.6 mA. În cazul nostru, microcontroller-ul va fi alimentat la 3.3V și va funcționa la 8 MHz folosind oscilatorul intern, cablajul fiind totuși gândit în așa fel încât să poată fi alimentat și la 5V și să poată folosi oscilatorul extern de 16MHz.

A fost ales procesor întrucât oferă atât conectivitate prin SPI, cât și I2C. De asemenea, poate comunica și pe serială. Toate aceste interfețe sunt necesare pentru a putea interfața modulul de comandă de modulul radio, de EEPROMul care va stoca datele legate de vecini și rutele către master și de modulul care stochează datele de la panoul solar.

Printre alte proprietăți se poate enumera: • Memorie eeprom de 512 octeți • Memorie ISP de 8 kB • 2 timere și 1 watchdog • 6 ADC-uri cu rezoluția de 10 biti • Mod de power-save, power-down și standby • Temperaturi de funcționare între -40 și 85oC

În următoarele secțiuni vor fi detaliate modurile de comunicație SPI, I2C și serial, și modulul de întreruperi, cu o atenție sporită asupra modului de întreruperi externe.

Figura 3.9: Microcontroller-ul Atmega8A-PU

Page 30: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

29

3.2.1. Modulul de comunicație SPI Deoarece modulul NRF24L01+ folosește comunicația prin SPI trebuie să configurăm și

microcontroller-ul să poată funcționa pe acest protocol. Conform protocolului este nevoie de 4 conexiuni pentru funcționarea comunicației, acestea fiind descrise mai jos.

• SCK - Ceas serial (output din master) – pinul 19 • MOSI/SIMO - Master Output, Slave In put (output din master) – pinul 17 • MISO/SOMI - Master In put, Slave Output (output din slave) – pinul 18 • SS - Slave Select (active low; output din master) – pinul 16

Interfața SPI a microcontroller-ului are câteva carateristici pe care le vom folosi în comunicația cu 24L01:

• Funcționarea ca Master și Slave, întrebuințată fiind doar funcția Master • Posibilitatea setării cărui bit din buffer să fie trimis primul, 24L01 așteaptă în

permanență cel mai nesemnificativ bit în primul rând. • Full-duplex • Întrupere de sfârșit de transmisie

Viteza de comunicație poate fi setată și poate avea 7 valori, în funcție de divizorul de

frecvență folosit și de valoarea frecvenței la care funcționează procesorul. Cele 7 valori ale divizorului sunt 2, 4, 8, 16, 32, 64, 128 și pot fi setate în registrul SPCR și SPSR.

În modul Master interfața SPI nu are control asupra pinului SS, de aceea utilizatorul trebuie să deseteze acest pin (activ pe 0) când dorește să inițieze o comunicație cu Slave-ul. După ce SS a fost desetat, generatorul de semnal va fi activat doar atunci când a fost scris ceva în registrul de date. În acest moment, octetul va fi trimis către Slave, bit cu bit pe fiecare creștere sau descreștere a semnalului de ceas. Frontul crescător sau descrescător poate fi setat în funcție de necesitate. Comunicația se termină atunci când pinul SS este trecut în 1.

Figura 3.10: Funcționarea SPI

Pentru pornirea interfeței SPI trebuie configurați mai întâi regiștrii. Aceștia sunt prezentați

în tabelul următor. Registrul SPCR – registrul de control al interfeței SPI Denumire Bit Valoare reset Tip Descriere SPCR Registrul de control al interfeței SPI

0: Dezactivat 1: Activat

SPIE 7 0 R/W Activare întreruperi SPI SPE 6 0 R/W SPI activat.

0: Dezactivat 1: Activat

DORD 5 0 R/W Ordinea de parcurgere a registrului

Page 31: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

30

de date 0: MSB primul 1: LSB primul

MSTR 4 0 R/W Master/Slave 0: Slave 1: Master

CPOL 3 0 R/W Stabilește valoarea SCK în modul idle. 0: 0 logic 1: 1 logic

CPHA 2 0 R/W Stabilește cum se va face citirea în funcție de SCK 0: Front crescător 1: Front descrescător Frecvența SPI, în conjuncție cu SPI2X. SPI2X = 0 SPI2X = 1

SPR1-SPR0 1:0 0 R/W

00: fosc/4 01: fosc/16 10: fosc/64 11: fosc/128

00: fosc/2 01: fosc/8 10: fosc/32 11: fosc/64

SPSR Registrul de stare SPIF 7 0 R Fanion întrerupere SPI. Când o

transmisie a luat sfârșit, acest bit este setat. Valoarea este resetată atunci când este tratată întreruperea de către vectorul de întreruperi. Sau când este citit registrul SPSR apoi SPDR

WCOL 6 0 R Fanion coliziune la scriere, adică registrul SPDR este scris în timp ce o transmisie are loc. Valoarea este resetată când este citit SPSR apoi SPDR

Rezervat 5:1 0 - SPI2X 0 0 R/W Folosit în conjuncție cu SPR1-0 SPDR 7:0 x R/W Registru de date. Scrierea unei

valori în acest registru pornește transmisia. Tot aici se primesc și datele de la Slave

Tabelul 3.6: Regiștrii SPI 3.2.2. Protocolul I2C În cazul UC-urilor Atmel, protocolul I2C este denumit TWI ( two wire interface). Această

interfață este folosită în cazul nostru pentru comunicația cu EEPROM-ul 24LC128. Pentru comunicația cu acesta, vom considera următoarele proprietăți:

• Doar doi pini folosiți

Page 32: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

31

• Operarea se face atât ca transmițător și receptor • Viteza maximă de comunicație 400kHz • Circuit de filtrare a zgomotului pe linii, zgomote mai mici de 50ns

Cei doi pini folosiți sunt SCL (serial clock) și SDA (serial data line). Ambele linii sunt conectate la VCC prin două rezistențe de pull-up. Tensiunea de alimentare a liniilor este de 3,3V sau 5V.

Fiecare bit transmis prin interfață este acompaniat de semnalul de ceas. Pentru fiecare citire, linia de date trebuie să ajungă într-o stare stabilă înainte să fie citită. Singura excepție apare atunci când se generează semanale de start și stop. În imaginea următoare este prezentată zona de citire corectă, respecitv incorectă.

Figura 3.11: Sincronizarea SDA-SCL bit

Interfața I2C este o interfață pe care pot fi conectate până la 128 de echipamente cu adrese

diferite. Comunicația este inițiată de Master prin trimiterea semnalului de Start și este terminată tot de Master prin semnalul de Stop. Între Start și Stop, linia se consideră ocupată și nici un alt echipament nu poate transmite. Totuși, în acest interval se poate trimite încă o comandă de Start (repeated start) care sugerează că același Master dorește să transmită informații. Semnalul de Start sau Stop este generat prin tranziția linei SDA atunci când linia SCL este în 1.

Figura 3.12: Conexiunea I2C

Pentru comunicare prin interfață trebuie trimis un pachet cu adresa device-ului pe care

dorim să îl accesăm. Acest pachet are 9 biti, 7 sunt biți de adresă, un bit de Citire/Scriere (1: Citire, 0: Scriere) și un bit de ACK. Bitul de ACK nu este trimis explicit de Master, dar Slave-ul cu adresa cerută trebuie să pună linia SDA pe 0 dacă este pregătit de comunicație sau să o lase în 1 dacă nu este disponibil. Practic al nouălea bit este bitul de ACK. În cazul în care se trimite NAK, Masterul trimite START sau STOP.

Adresa 0000 000 este adresa de broadcast, la această adresă toate echipamentele ascultând mesajul.

Page 33: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

32

Figura 3.13: Pachet I2C

În contiunare vor fi prezentati regiștrii interfetei I2C. Denumire Bit Valoare

reset Tip Descriere

TWBR 7:0 0 R/W Valoarea lui se folosește la calculul frecvenței de funcționare a interfeței (SCL)

TWCR Registru control I2C TWINT 7 0 R/W Fanionul de întrerupere apare

atunci când comunicația s-a terminat. Trebuie resetat de utilizator

TWEA 6 0 R/W Activare bit de ACK 0: Dezactivat 1: Activat

TWSTA 5 0 R/W Când bitul este setat se trimite semnalul de start dacă linia este liberă, în caz contrar așteaptă până când se trimite STOP. Se resetează după ce semnalul a fost trimis.

TWSTO 4 0 R/W Trimite semnalul de STOP. Se resetează după ce semnalul a fost trimis.

TWWC 3 0 R Fanion care marchează o încercare de scriere în registrul de date când acesta este folosit.

TWEN 2 0 R/W Activare I2C 0: Dezactivat 1: Activat

Rezervat 1 Rezervat TWIE 0 0 R/W Activare întrerupere pe I2C

0: Dezactivat 1: Activat

TWSR Registru de stare TWS 7:3 11111 R Stare interfață Rezervat 2 Rezervat TWPS 1:0 00 R/W Valoare prescaler folosit la

calcularea frecvenței de ceas (SCL) 00: 1

Page 34: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

33

01: 4 10: 16 11: 64

TWDR 7:0 0xFF R/W Registru de date. În modul de transmitere aici se scrie octetul care trebuie trimis, în modul receptor aici se primește octetul recepționat. Registrul nu poate fi reinițializat până când nu apare prima întrerupere.

TWAR Adresa în modul Slave TWA 7:1 1111111 R/W Adresa în modul Slave TWGCE 0 0 R/W Aceptare mod broadcast.

0: Dezactivat 1: Activat

Tabelul 3.7: Regiștrii I 2C Pentru a putea interfața microcontroller-ul cu 24LC128 trebuie să avem în vedere că la

scriere microcontroller-ul rămâne în mod Master Transmitter, acesta trimițând pachetul inițial, cu adresa, iar mai apoi adresa (2 octeți) la care dorește să scrie și apoi valoarea pe care vrea să o scrie.

La citire se diferențiază 2 cazuri, care vor fi detaliate în secțiunea 3.3. • Citire de la adresa curentă, microcontroller-ul trimite pachetul cu bitul setat pe

citire apoi așteaptă octetul. • Citirea de la o adresă oarecare, microcontroller-ul trimite pachetul în modul

scriere, după care trimite adresa de la care vrea să citească. După aceea trimite semnalul de START și apoi pachetul în modul citire, după care așteaptă octetul.

3.3. Atmel 24C128 EEPROM Memoria EEPROM (electrical erasable programable read-only memory) 24C128 produsă

de Atmel are o capacitate de 128 Kb, tensiunea de alimetare între 2,5 – 5,5 V și funcționează la frecvență maximă de 1MHz, fiind alimentat la 3,3V, viteza maximă fiind de 400kHz. De asemenea, corespunde din punct de vedere termic, putând fi folosită în aplicația curentă deoarece plaja de funcționare se află între -40 și 85oC.

Integratul folosește interfața I2C și este conectat la microcontroller-ul Atmega8A prin linia de date SDA și prin cea de ceas SCL.

Figura 3.14: Memoria EEPROM

Din figura anterioara SCL și SDA sunt deja prezentati, WP (write protect) și este activ dacă este conectat la VCC (nu se poate scrie pe cip). VCC este alimentarea, în cazul nostru 3,3 V, VSS este masa. Pini 1-3 (A0-A1) sunt pinii de adresă, adică într-o rețea se pot pune maximum 4 integrate.

Page 35: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

34

Memoria se accesează prin trimiterea unei adrese de forma:

1 0 1 0 0 A1 A0 Unde A1 și A0 sunt definiți de utilizator prin conectarea lor la VCC respectiv GND.

Astfel se pot face 4 combinații, deci se pot conecta 4 asftel de memorii într-un circuit. În cazul nostru, A1 și A0 vor fi conectate la masă pentru că este folosit doar un singur integrat. În acest fel adresa pe care o vom trimite este 0xA0.

Scrierea informațiilor se poate face în două moduri, primul constă în scrierea unui singur octet, al doilea în scrierea unei pagini, adică 64 de octeți. Modul de scriere este prezentat în automatul din Anexă. Diferența între scrierea unei pagini și scrierea unui octet este că semnalul de STOP este trimis de MASTER după cel mult 64 de octeți trimiși.

Scrierea începe atunci când EEPROM-ul primește semnalul de START și apoi adresa sa, iar ultimul bit, cel de R/W, este setat pe 0 (scriere). Memoria răspunde prin ACK, după care Master-ul trimite prima parte a adresei la care vrea să scrie. Memoria răspunde cu ACK, după care Master-ul trimite a doua parte a adresei. Memoria răspunde cu ACK, Master-ul trimite octetul corespunzător, după care poate trimite alt octet care va fi scris la adresa ințială + 1. Sfârșitul transmisiei se face prin semnalul de STOP.

Citirea se face în mod asemănător cu scrierea, dar cu bitul R/W setat pe 1. Există posibilitatea citirii de la adresa curentă. În acest caz se trimite pachetul de start (START+ adresa+R/W) după care memoria răspunde cu ACK, apoi cu octetul de la adresa curentă.

De asemenea, se poate face o citire de la o adresă oarecare, în acest mod, mai întâi, se trimite pachetul de start cu R/W setat pe 0 (scriere), după care 2 octeți cu adresa curentă, urmând ca Master-ul să trimită un nou pachet de start cu R/W setat pe 1 (citire). Memoria răspunde cu un octet, în cazul în care microcontroller-ul trimite un ACK, memoria răspunde cu un nou octet, aflat la următoarea adresă. Transmisia se termină când microcontroller-ul nu mai trimite ACK, după care trimite semnalul de STOP.

Mașinile de stare pentru citire sunt prezentate în Anexă. 3.4. Realizarea echipamentului de comunicație Modulul de comunicație este realizat din două submodule, cel radio și cel de comandă. În

continuare vor fi prezentate modulele. 3.4.1. Modulul radio Modulul radio are ca nucleu integratul NRF24L01+.

Figura 3.15: Modulul radio

Page 36: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

35

Acest modul a fost achiziționat ca atare și este disponibil în mai multe variante. Varianta din figura anterioară nu are amplificator de semnal, de aceea raza de acțiune este de aproximativ 100 metri în câmp deschis. Variantele cu amplificator de semnal pot ajunge până la 1 km raza de acțiune, însă viteza de comunicație este de doar 250kbps.

Figura 3.16: Modulul cu rază lungă de acțiune.

Din punct de vedere al software-ului nu sunt diferențe între cele două module, de aceea pentru lucrarea aceasta s-a încercat realizarea și validarea la scară mică, folosindu-se module cu raza de acțiune minimă

.

Figura 3.17: Cablajul modulului radio

3.4.2 Modulul de comandă

Modulul de comandă este realizat în cadrul acestei lucrări. Modulul are microcontroller-ul Atmega8A ca integrat central, acesta realizează comunicația cu modulul radio prin SPI, cu memoria EEPROM care va salva datele despre modulele cu care nodul respectiv poate comunica și prin interfața Serială cu PC-ul și cu modulul de stocare a datelor din panoul fotovoltaic.

Modulul de comandă poate funcționa atât la 3,3V dar și la 5V. Deoarece modulul de comunicație trebuie alimentat la 3,3V, modulul de comandă are adăugat și un regulator de tensiune care poate alimenta atât modulul radio, cât și microcontroller-ul și EEPROM-ul. Selecția între cele 2 moduri de alimentare se face prin conectarea jumper-ului JP3. Pentru alimentarea la 5V se deconectează JP3 și se conetează JP2. Pentru programarea UC-ului, alimentarea se va face prin mufa programatorului și activarea jumper-ului JP1. În orice moment, un singur Jumper trebuie să fie activ altfel pot interveni probleme care duc la distrugerea circuitului.

Page 37: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

36

Figura 3.18: Schema electrică a modulului de comandă

Descrierea conectorilor:

• J1: conectorul de alimentare; aici ajung 5V stabilizați de către un integrat LM7805 care se află pe alimentare. De asemenea, se poate alimenta de la orice sursă care are tensiunea de alimentare cuprinsă între 4 și 5,5 V. Totuși, trebuie remarcat că atunci când se alimentează cu o tensiune mai mică de 4,5V, microcontroller-ul nu va putea funcționa corect la frecvența de 16MHz. În acest caz trebuie setat oscilatorul intern cu frecvența de 8MHz.

• J2: conectorul pentru programator. Acesta are și sursa de alimentare așa că trebuie activat și jumper-ul JP1 pentru a alimenta microcontroller-ul direct din programator.

• J3: conectorul pentru modulul radio. Singura atenționare asupra acestui conector este posibilitatea de a introduce modulul radio într-o poziție greșită.

După cum am menționat mai sus, microcontroller-ul poate funcționa cu o frecvență de până la 16MHz, circuitul proiectat conținând și un quartz de 16MHz care poate fi activat doar dacă tensiunea de alimentare este mai mare de 4,5 V. În cazul în care nu se poate alimenta la o tensiune mai mare de 4,5 V, se va activa oscilatorul intern care funcționează la 8MHz și are nevoie de orice tensiune mai mare de 2,5V, caz în care se activează alimentarea la 3,3V.

Integratul 24C128 poate fi alimentat între 1,8V și 5.5V, în cazul nostru putând fi alimentat la 3,3V sau între 4,5V și 5,5V. Viteza de funcționare fiind de aproximatv 200kHz, se respectă specificațiile legate de viteza-tensiune alimentare.

Integratul LM1117 este un regulator de tensiune care primește la intrare o tensiune cuprinsă între 4V și 15V și scoate la ieșire 3,3V.

Page 38: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

37

Integratele LM1117 și 24C128 sunt montate pe suprafață, pe partea de jos pentru a câștiga spațiu și pentru a obține trasee mai scurte.

În imaginea următoare este prezentat cablajul care a fost proiectat și realizat în cadrul acestei lucrări. Execuția lui a fost realizată folosind tehnica bazată pe expunere la UV. Plăcuța cuprată are un strat de fotorezist care este excitat de UV. În prezența unui developant, zonele de fotorezist expuse sunt eliminate rămânând astfel, cablajul dorit. Pentru realizarea efectivă, placa cuprată trebuie introdusă într-o soluție corodantă, în urma acestui proces rezultând traseele și pad-urile pentru lipit. Se observă că în afară de traseele albastre există și câteva trasee roșii. Aceste trasee reprezintă partea superioară a cablajului. Deoarece sunt foarte puține trasee care ar fi trebuit realizate, aceste trasee vor fi realizate dintr-un conductor electric.

Figura 3.19: Cablajul modulului de comandă

Page 39: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

38

4. Aplicația Software

Pentru realizarea software-ului a fost folosit limbajul de programare C și programul Avr Studio 6. Software-ul este realizat modular, fiecare modul fiind dedicat unui integrat, sau modulului de comunicatie. Pentru scrierea binarului în microcontroller se foloseste un programator care transfera informatia prin SPI în memoria integratului.

4.1. Configurarea SPI

Conform protocolului SPI prezentat în capitolele anterioare, al fiecare octet trimis, integratul partener raspunde cu un octet, de aceea nu exista 2 functii diferite pentru Scriere și pentru Citire. Vom folosi doar functia ReadWriteSPI. /* Initializare SPI */ void InitSPI(void) { DDRB |= (1<<DDB5) | (1<<DDB3) | (1<<DDB2) |(1<<DDB1); SPCR |= (1<<SPE)|(1<<MSTR);// |(1<<SPR0) |(1<<SPR1); } /* Functie citire/scriere SPI */ uint8_t ReadWriteSPI(uint8_t data) { /*octet în registru */ SPDR = data; /* asteapta transmiterea octetului */ while(!(SPSR & (1<<SPIF))); return SPDR; /* Octet trimis de Slave */ } 4.2 Configurarea I2C

In cazul microcontroller-elor Atmel, protocol I2C se numeste TWI, de aceea registrii de configurare au în denumire grupul ”TW”. /* Functie Start */ void TwiInit(void) { /* setare SCL 200kHz, Procesorul functioneaza la 8MHz */ TWSR = 0x00; TWBR = 0x0C; TWCR = (1<<TWEN); /* activare I2C */ } /* Functie Start */ void TWIStart(void)

Page 40: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

39

{ TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); while ((TWCR & (1<<TWINT)) == 0); } /* Functie Stop */ void TWIStop(void) { TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN); } /* Functie Sciere octet */ void TWIWrite(uint8_t data) { TWDR = data; TWCR = (1<<TWINT)|(1<<TWEN); while ((TWCR & (1<<TWINT)) == 0); } /* Functie Citire octet cu ACK */ uint8_t TWIReadACK(void) { TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWEA); while ((TWCR & (1<<TWINT)) == 0); return TWDR; } /* Functie Citire octet fara ACK */ uint8_t TWIReadNACK(void) { TWCR = (1<<TWINT)|(1<<TWEN); while ((TWCR & (1<<TWINT)) == 0); return TWDR; } /* Functie Citire status interfata */ uint8_t TWIGetStatus(void) { return TWSR & 0xF8; /* Returnare status biti 7:3 */ } /* Functie Citire status interfata */ uint8_t WriteByteEEPROM(uint16_t u16addr, uint8_t u8data) { TWIStart(); if (TWIGetStatus() != 0x08) return ERROR; /* setare adresa și trimitere primul octet*/ TWIWrite((EEDEVADR)|(uint8_t)((u16addr & 0x0700)>>7));

Page 41: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

40

if (TWIGetStatus() != 0x18) return ERROR; /* trimitere adresa scriere */ TWIWrite((uint8_t)(u16addr)); if (TWIGetStatus() != 0x28) return ERROR; /* trimitere octet */ TWIWrite(data); if (TWIGetStatus() != 0x28) return ERROR; TWIStop(); return SUCCESS; } uint8_t ReadByteEEPROM(uint16_t u16addr, uint8_t *data) { TWIStart(); if (TWIGetStatus() != 0x08) return ERROR; /* setare adresa și trimitere primul octet*/ TWIWrite((EEDEVADR)|((uint8_t)((u16addr & 0x0700)>>7))); if (TWIGetStatus() != 0x18) return ERROR; /* trimtere al doilea octet */ TWIWrite((uint8_t)(u16addr)); if (TWIGetStatus() != 0x28) return ERROR; /* Start */ TWIStart(); if (TWIGetStatus() != 0x10) return ERROR; TWIWrite((EEDEVADR)|((uint8_t)((u16addr & 0x0700)>>7))|1); if (TWIGetStatus() != 0x40) return ERROR; *data = TWIReadNACK(); if (TWIGetStatus() != 0x58) return ERROR; TWIStop(); return SUCCESS; }

4.3. Interfatare NRF24L01 Pentru interfatarea integratului trebuie sa avem functiile definite în subcapitolul 4.1.

Page 42: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

41

void nrf24L01_init(void) { _delay_ms(100); uint8_t val[5]; val[0]=0x01; WriteToNrf(W, EN_AA, val, 1); val[0]=0x2F; WriteToNrf(W, SETUP_RETR, val, 1); val[0]=0x01; WriteToNrf(W, EN_RXADDR, val, 1); //enable data pipe 0 val[0]=0x03; WriteToNrf(W, SETUP_AW, val, 1); val[0]=0x01; WriteToNrf(W, RF_CH, val, 1); //RF channel registry 0b0000 0001 = 2,401GHz //RF setup t val[0]=0x07; WriteToNrf(W, RF_SETUP, val, 1); //00000111 bit 3=0 int i; for(i=0; i<3; i++) { val[i]=0x12; } WriteToNrf(W, RX_ADDR_P0, val, 3); for(i=0; i<3; i++) { val[i]=0x12; //RF channel registry 0b10111100 } WriteToNrf(W, TX_ADDR, val, 3); // payload width setup – val[0]=dataLen; WriteToNrf(W, RX_PW_P0, val, 1); //CONFIG reg setup – val[0]=0x1E; //0b0000 1110 config registry WriteToNrf(W, CONFIG, val, 1); //device need 1.5ms to reach standby mode _delay_ms(100); }

Page 43: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

42

uint8_t *WriteToNrf(uint8_t ReadWrite, uint8_t reg, uint8_t *val, uint8_t antVal) { cli(); //disable global interrupt if (ReadWrite == W) { reg = W_REGISTER + reg; } static uint8_t ret[dataLen]; _delay_us(10); CLEARBIT(PORTB, 2); _delay_us(10); WriteByteSPI(reg); _delay_us(10); int i; for(i=0; i<antVal; i++) { if (ReadWrite == R && reg != W_TX_PAYLOAD) { ret[i]=WriteByteSPI(NOP); _delay_us(10); } else { WriteByteSPI(val[i]); } } SETBIT(PORTB, 2); sei(); //enable global interrupt return ret; } void receive_payload(void) { sei(); //Enable global interrupt SETBIT(PORTB, 1); //CE IR_High _delay_ms(1000); CLEARBIT(PORTB, 1); cli(); //Disable global interrupt } void transmit_payload(uint8_t * W_buff) { WriteToNrf(R, FLUSH_TX, W_buff, 0);

Page 44: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

43

WriteToNrf(R, W_TX_PAYLOAD, W_buff, dataLen); sei(); //enable global interrupt- _delay_ms(10); SETBIT(PORTB, 1); _delay_us(20); CLEARBIT(PORTB, 1); _delay_ms(10); }

Page 45: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

44

5. Concluzii Pe parcursul lucrarii s-a încercat dezvoltarea unui mecansim de comunicatie radio folosind integratul NRF24L01+ și a microcontroller-ului Atmega8A. Comunicatia are loc în zona de 2,4GHz la o viteza de 250 kbps, raza de actiune poate ajunge pana la 1 kilometru. Alegerea acestor componente a fost facuta avand în vedere costurile de productie a unui modul. în discutii au fost luate și modulele ZigBee și Xbee, insa dezavantajul acestora este pretul per modul. Pentru un modul care poate ajunge la 100 de metrii pretu poate ajunge pana la 30 de dolari, fata de modulele pe care le folosim, care costa 2,5 dolari. în schimb, modulele ZigBee au deja o stiva peste comunicatia radio care ofera functionaliatile descriese în acest proiect. Modulele vor putea fi folosite în cadrul proiectului pentru conectarea a cat mai multe noduri de masurare a intensitatii solare, fara ca un operator uman sa ajunga la fiecare dintre ele. Pentru aceasta se vor alege modulele care au raza de actiune de 1 km. în acest fel se va acoperii o zona foarte mare și astfel se poate realiza un model mai apropiat de realitate. Modul de comanda este proiectat și executat în cadrul proiectului, asftel s-au dobandit notiune de realizare de cablaje, atat teoretic cat și practic deoarece realizarea fizica a fost executata manaul. In momentul de fata pe piata nu exista o solutie software open-source care sa ofere o stiva de comunicatie utila proiectului, cele mai multe sunt implementate pentru topologia tree în care fiecare nod este bine definit și plasat intr-o anumita pozitie în teren. Solutia ofera o conexiune pentru o rețea de tip Mesh în care oricare nod are conexiune cu unitatea centrala direct sau prin mai multe noduri. Aplicatia poate avea și latura comerciala, folosirea în cadrul unei retele de senzori wireless, sau chiar în cadrul unui sistem Smart grid, în care producatorii casnici de energie electrica furnizeaza date unui dispecer local(acolo unde introducerea unei retele ethernet este prea scumpa).

Page 46: LUCREARE DE DISERTAȚIEacse.pub.ro/wp-content/uploads/2013/07/Disertatie_Udrea_Mircea_CASTR.pdf · 2 1. Introducere Aceast ă lucrare î și propune s ă eviden țieze modul de realizare

45

6. Bibliografie Documentatie microcontroller: http://www.atmel.com/Images/Atmel-8159-8-bit-AVR-microcontroller-ATmega8A_datasheet.pdf Documentatie NRF24L01+: http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P Application note nAN24-12: http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P Documentatie EEPROM: http://www.atmel.com/Images/doc0670.pdf Smart grid: – http://en.wikipedia.org/wiki/Smart_grid Rețea Mesh: – http://en.wikipedia.org/wiki/Mesh_networking