În primul capitol se prezintă elementele componente ale ultracondensatoarelor, parametrii acestora cât și metodele de încărcare. [305841]

CAPITOLUL 1-[anonimizat].

Elemente componente ale unui ultracondensator

Ultracondensatoarele sunt componente care oferă o [anonimizat]. Acestea sunt situate între condensatoarele electrolitice și acumulatorii reâncărcabili. Puterea acestora și durata foarte mare de stocare le face să poată fi utilizate într-o [anonimizat], [anonimizat], transporturi grele și în multe alte domenii.

[anonimizat], temperatura de funcționare fiind între C și C și oferind tensiuni de pâna la 2,8V.

[anonimizat]-o [anonimizat]. [anonimizat], [anonimizat]. Rezistența internă a ultracondensatoarelor este foarte mică (0,12 mΩ), ceea ce înseamnă că pot lucra cu o eficientă de aproape 100%. Acestea sunt mult mai ușoare decât bateriile și de obicei nu conțin substanțe chimice dăunatoare sau metale toxice.

[anonimizat]. (EDLC – [anonimizat]).

[anonimizat], iar aceștia fiind lipiți de doi separatori pentru a preveni deplasarea între doi electrozi cu polarități diferite.

Electrozii sunt colectori metalici de conductivitate mare reprezentând partea de conducție principală. Aceștia sunt separați de o membrană (separator) , pentru a [anonimizat] a împiedica conducția electronică.

[anonimizat], în funcție pentru ce a fost proiectat.

Tensiunea de funcționare a ultracondensatoarelor este data de tensiunea de separare a electrolitului și în special depinzând de temperatura mediului înconjurător.

[anonimizat], distanțelor mici dintre sarcinile electrozilor si electroliților.

[anonimizat] o suprafață specifică mare pentru a forma un dublu strat de ioni electrolitici. [anonimizat]. Electrozii cei mai buni ajung la suprafața de 3/ gram de material.

[anonimizat]. [anonimizat] 4 ori mai mare deoarcere tensiunea de disociere este mai mare de 2.7 V, iar la electroliții hidrolitici tensiunea de disociere este sub 1.35 V și sunt alcătuiți de obicei din H2SO4.

Separatorul

Separatoarele permit transferal de ioni și blochează contactul dintre electrozi. [anonimizat]. În funcție de tipul de electrolit se folosesc diferite tipuri de separatoare. Pentru un electrolit hidrolitic se folosesc separatoare construite din fibră de sticlă, daca se utilizează electroliți organici atunci se vor utiliza separatoare polimerice.

Colectorul

Colectorii de curent au rolul de a conecta electrozii la bornele ultracondensatorului. Colectorul este pulverizat pe electrod sau poate fi o folie metalică. Aceștia trebuie să fie în măsură să distribuie curenți de până la 100A. În cazul în care carcasa este facută dintr-un metal (de obicei aluminiu), colectoarele trebuie sa fie făcute din același material, pentru a Evita formarea unei celule galvanice corozive.

Tehnologia de înfășurare

Producerea electrozilor se poate face prin amestecarea carbonului ionizat într-o matrice polimetrică ceea ce înseamnă că avem si performanțe ridicate dar și costuri reduse. Folia de carbon poate fi reutilizabilă și se poate obține în diferite mărimi.

1.2 Parametrii: tensiune nominală, curent încărcare-descărcare, capacitate,temperature rezistentă internă

Tensiune nominală

Ultracondensatoarele sunt componente de joasă tensiune. Pentru a se opera în condiții de siguranță se impune ca tensiunea să rămână în limitele specificate. Tensiunea nominală este tensiunea maximă sau tensiunea de vârf care poate fi aplicată în mod continuu fără să depășească intervalul de temperatură specificat. Condensatorii nu ar trebui să fie supuși unor tensiuni în mod continuu în plus față de tensiunea nominală.

Tensiunea nominală include o marjă de siguranță pentru defalcarea electrolitului , la care acesta se descompune. Tensiunea de defalcare descompune moleculele de solvent în Helmholtz dublu strat ,apa împarțindu-se în hidrogen si oxid. În moleculele de solvent nu se pot separa sarcinile electrice (una față de cealaltă). Tensiunile mai mari decât tensiunea nominală pot determina formarea de gaz sau chiar un scurt-circuit.

Ultracondensatoarele standard cu electrolitul apos, în mod normal au o tensiune nominală de la 2,1 până la 2,3 V, cele ce solvent organic au o tensiune nominală de la 2,5 până la 2,7V. Ultracondensatoarele cu Lithium-Ion cu electrozi dopați pot ajunge la o tensiune nominală de la 3,8 până la 4 V, dar au o limită inferioară de tensiune de aproximativ 2,2V.

Operarea ultracondensatoarelor sub tensiunea nominală îmbunătățește comportamentul pe termen lung al parametrilor electrici. Capacitatea acestuia și rezistența internă pe tot parcursul unui ciclu sunt mult mai stabile ceea ce rezultă că putem vorbi de o îmbunătățire a ciclurilor de încărcare-descărcare.

Operarea ultracondensatoarelor la tensiuni mai mari necesită conectarea unor celule în serie. Deoarece fiecare component are o ușoară diferență a capacității, este necesar ca acestea să se echilibreze în mod active sau pasiv pentru stabilizarea tensiunii aplicate. Stabilizarea pasivă utilizează rezistențe in parelel, iar cea active include managementul electronic al tensiunii la un prag în care curentul variază.

Capacitatea poate fi descrisă ca suma unei constant și un termen dependent de tensiune,

unde este capacitatea la 0 V. Curentul în limită normală este dat de relația,

Luând în considerare dependența de timp a capacității, ea devine

Valoarea capacității diferențiale , pentru o tensiune polarizată este dată de relația,

Și capacitatea nominală, , este definită ca fiind media valoarea reprezentând valoarea tensiunii nominale și jumătate din valoarea acestuia:

Această relație prevede, că, pentru o variație de tensiune data, mai mare curenții sunt disponibili într-o gamă mai largă de tensiune.

Rezistența internă

Pentru încărcarea/descărcarea unui ultracondensator acesta este conectat la mișcarea ionilor în electrolit peste separatorul electrozilor. Pierderile apar în timpul mișcării, și pot fi măsurate ca o rezistență de curent continuu.

Cu modelul electric al elementelor în cascadă, conectate în serie RC(rezistență/condensator) în porii electrozilor, rezistența internă crește odată cu adâncimea de penetrare a purtătorilor de sarcină în pori. Rezistența internă este dependentă de timp și crește timpul de încărcare/descărcare. În aplicații doar intervalul de pornire și oprire este interesant. Rezistența internă poate fi calculată din căderea de tensiune ∆V2 în momentul descărcării, începând cu descărcare la curent constant . Acesta se obține de la intersecția liniei auxiliare extinse bazate pet imp, la momentul pornirii descărcării.

Rezistența internă poate fi calculată cu formula:

Curentul de descărcare pentru măsurarea rezistenței interne poate fi luat din STAS IEC 62391-1. Această rezistență internă nu ar trebui să fie confundată cu rezistența internă numită rezistență echivalentă (RES) care sunt specificate în mod normal pentru condensatori. Se măsoară la 1kHz. Rezistența echivalentă este mult mai mică decât rezistența internă. Rezistența internă determină mai multe proprietăți ale ultracondensatoarelor. Aceasta limitează incărcarea și descărcarea curenților de vârf cum și timpul de încărcare/descărcare. Rezistența internă și capacitatea rezultă dintr-o constantă de timp τ,

Această constantă de timp determină timpul de încărcare/descărcare. De exemplu un ultracondensator cu o capacitate de 100 F și cu o rezistență internă de 30 mΩ, are o constantă de timp de 0,03*100=3s. După o încărcare de 3 secunde cu un curent limitat de rezistența internă, ultracondensatorul are 63,2 din încărcarea completă (sau este descărcat 36,8 din încărcarea completă). Ultracondensatoarele standard cu o rezistență internă constantă au o perioadă de încărcare completă de 5 τ. Din moment ce rezistența internă crește odată cu numărul de încărcări/descărcări, timpul de încărcare nu se poate calcula cu formula de mai sus. Astfel timpul de încărcare/descărcare depinde de specificațiile ultracondensatoarelor.

Dependența de temperature

Ultracondensatoarele fucnționează într-o gamă largă de temperaturi. Atât la încărcare cât și la descărcare ele fucnționează de la C și până la C. Creșterea temperaturii are ca efect principal reducerea vâscozității electrolitului și de a îmbunătății accesibilitatea ionilor pe suprafața de joc. Ei vor fi în măsură să ajungă la cea mai profundă suprafață într-un timp cât mai scurt. În consecință operând la temperaturi extreme se va reduce durata de viață a celulelor, iar dacă operăm la temperaturi joase rezistența internă crește.

Capacitatea

Valorile capacității pentru ultracondensatoarele comerciale sunt specificate ca “Cr capacitate nominală”. Aceasta este valoarea pentru care ultracondensatorul a fost proiectat. Valoarea pentru o component reală trebuie să se încadreze în limitele date de toleranța specificată. Valorile tipice sunt în intervalul de F, de trei până la șase ordine de mărime mai mari decât cele ale condensatoarelor electrolitice. Condensatorul electrolytic oferă capacitate mai mare decât condensatorul electrostatic și este evaluat în microfarazi (µF) , care este de un million de ori mai mare decât un (pF). Valoarea capacității rezultă din energia W încărcată printr-o tensiune de curent continuu.

Dependența de frecvență

Capacitatea și rezistența serie au valori care nu sunt constante asupra spectrului de frecvențe. Performanța poate fi determinate cu un spectru de impedanță analizator. În principiu capacitatea disponibilă este maximă la frecvențe reduse. Acest lucru se explică prin acordarea unei perioade de timp mai mare ionilor din electrolit de a ajunge la suprafață, care sunt situați adânc în porii de carbon. La o frecvență mai mare, numai suprafața superficială a carbonului este disponibilă pentru ioni. Prin urmare, capacitatea este mult mai mică. Rezistența serie este compusă dintr-o parte electronica și o parte ionică. Contribuția electronica vine de la rezistența ohmică în conductorului și în particule de carbon. Contribuția ionică provine din mobilitatea ionilor din electrolit.

Eficiența ultracondensatoarelor

Recent, Maxwell a dezvoltat un nou ultracondensator cu performanțe până la 350 F, dimensiunea acestuia fiind asemănătoare unei baterii. Aceast nou ultracondensator combină performanțele a 3 ultracondensatoare legate, și cu toate acestea costurile sunt foarte scăzute. Datorită rezultatelor remarcabile, precum și prețul scăzut al design-ului acest nou ultracondensator este ideal pentru aplicații în sisteme medicale, zone electrice etc. Eficiența acestuia nu este data de rezistența internă, ci de pulsația constantă în aplicații. Specificațiile lui BCAP0350 sunt date în tabelul de mai jos:

Tabelul 1.1 Speficiții BCAP0350

este rezistența internă a ultracondensatorului;

m este greutatea acestuia;

C este capacitatea;

este tensiunea nominală;

I este intensitatea electrică;

este puterea ultracondensatorului;

τ este produsul dintre rezistența internă și capacitate;

T este constanta curentului pe durata încărcării sau descărcării ultracondensatorului.

Curentul de încărcare/descărcare

Toți ultracondensatorii au limite de tensiune, acestea se limitează la 2.5-2.7 V. Tensiunile de 2.8 V sau mai mari sunt posibile, dar reduc durata de exploatare a acestuia. Pentru obținerea de tensiuni mai mari acestea trebuiesc conectate în serie. Conexiunea în serie reduce capacitatea totală dar crește rezistența internă. Mulți de trei ultracondensatori legați în serie au nevoie de o echilibrare de tensiune pentru a preveni intrarea a unuia dintre ultracondensatori în supra-tensiunem, bateriile Lithium-ion având un circuit de protecție similar.

Energia specific a ultracondensatoarelor variază între 1Wh/kg la 30Wh/kg, între 10-50 de ori mai puțin decât la bateriile Li-ion. Curba de descărcare este un dezavantaj deoarece tensiunea scade, reducând spectrul de putere utilizabil. De exemplu acesta este alimentat de la sursă cu 6V, apoi fiind lăsat să se descarce la 4.5 înainte ca echipamentul să fie dat jos. În momentul în care ultracondensatorul atinge acest prag de tensiune, o descărcare liniară asigură doar 44% din energia sa, restul de 56% fiind rezervată. Un convertor DC-DC ajută la recuperarea energiei pierdută în banda de joasă tensiune. O baterie cu o curbă de descărcare plată, în comparație, livrează de la 90 până la 95% din rezerva de energie până la atingerea pragului de tensiune.

Figurile de mai jos ne arată caracteristicile tensiunii și ale curentului la încărcarea și descărcarea unui ultracondensator. La încărcare tensiunea crește liniar, iar curentul scade în mod implicit, fărăa fi nevoie de un circuit de detecție full-charge(încărcare plină). La descărcare tensiunea scade liniar. Pentru a menține un nivel de putere constant la scăderea tensiunii, convertorul DC-DC începe să injecteze din ce în ce mai mult curent. Descărcarea este gata atunci când cerințele de încărcare nu mai pot fi îndeplinite.

Ultracondensatoarele au timpii de încărcare/descărcare similari cu timpii condensatorilor obișnuiți. Este posibil să se obțină curenți mari de la încărcare sau descărcare datorită rezistenței interne reduse. Bateriile durează de obicei până la câteva ore pentru a ajunge la starea de încărcare complete. Un exemplu bun este o simplă baterie de telefon mobil, deoarece timpul acestei baterii de a se încărca complet este mult mai mare decât timpul unui ultracondensator de a face aceeași operație, în doar două minute comparative cu 2-4h.

Tensiunea crește liniar în timpul unei încărcări la curent constant.

Tensiunea scade liniar la descărcare. Convertorul DC-DC menține un nivel de putere constant prin injecții cu curent la scăderea tensiunii.

Timpul de încărcare al unui ultracondensator este foarte mic. Caracteristica de încărcare este similar cu cea a unei baterii electrochimice, curentul de încărcare fiind limitat de capacitatea încărcătorului. Încărcarea inițială poate fi facută foarte repede. Inițial trebuie să se vadă limita de curent admisă de ultracondensator deoarece dacă acesta este gol, la prima încărcar, o să tragă cât mai mult curent. Ultracondensatoarele nu este supus supraîncălzirii așa că nu necesită detector de încărcare completă, pur și simplu curentul se oprește atunci când acesta este încărcat complet.

Tabel 1.2 Comparație Ultracondensator-Lithium-ion

Ultracondensatoarele pot fi încărcate și descărcate practic de un număr nelimitat de ori, spre deosebire de bateria electrochimică care are un ciclu de viață definit, durata de viață fiind mai mare. În condiții normale, un ultracondensator pierde din procentul de la 100% la 80% în 10 ani. Aplicând tensiuni mai mari decât cele specificate îi scurtăm durata de viață. Un avantaj îl mai constituie și temperaturile deoarece putem opera cu acesta și la temperaturi foarte scăzute, în comparație cu bateriile care le putem folosi doar la temperaturi pozitive.

Autodescărcarea unui ultracondensator este puțin mai mare decât a unui condensator electrostatic și oarecum mai mare cu cea a unei baterii electrochimice, electrolitul organic contribuind la aceasta. Ultracondensatoarele se autodescarcă de la 100% la 50% în 30-40 de zile, în comparație cu bateriile pe bază de litiu care se descarcă circa 5% pe lună.

Enegia specifică și puterea specifică

Cantitatea de energie care poate fi stocată întru-un ultracondensator pentru fiecare masa a acestuia este numită energie specifică. Energia specifică este exprimată în Wh/kg(wați-oră pe kilogram). Cantitatea de energie poate fi stocată într-un ultracondensator per volumul acestui ultracondensator, numindu-se densitate de energie. Densitatea de energie este exprimată în Wh/l(wați-oră pe litru). Energia specifică variază de la 0.5 până la 15 Wh/kg. De exemplu un condensator electrolitic din aluminiu înmagazinează de la 0.01 până la 0.3 Wh/kg, în timp ce un plumb-acid înmagazinează de la 30 la 40 Wh/kg iar o baterie lithium-ion de la 100 la 265 Wh/kg. Ultracondensatoarele pot înmagazina de la 10 până la 100 de ori mai mulă energie decât condensatorii electrolitici.

Cu toate că energia specifică a ultracondensatoarelor este insuficientă în comparație cu a bateriilor, condensatorii au acest avantaj al puterii specifice. Puterea specifică descrie viteza cu care energia poate fi livrată/absorbită de sarcină. Puterea maximă este data de formula:

V-tensiunea aplicată;

-rezistența internă a ultracondensatorului.

Puterea specifică este descrisă ca fiind puterea maximă(), puterea specifică este o formă dreptunghiulară data de curentul de vârf la aplicarea tensiunii. În circuitele reale curentul de vârf nu este dreptunghiular iar tensiunea este mică, cauzată de caderea de tensiune. STAS IEC 62391-2 a stabilit o formulă reală pentru pentru aplicații de putere:

Puterea specifică a ultracondensatoarelor este de la 10 până la 100 de ori mai mare decât a bateriilor și pot atinge valori de până la 15 kW/kg. Diagramele Ragone sunt legate de la energie la putere și reprezintă un instrument valoros pentru caracterizarea și vizualizarea componentelor de stocare a energiei. Cu o astfel de diagramă, poziția puterii specifice și energia specifică a tehnologiilor de stocare diferite, sunt ușor de comparat.

Durata de viață

Din moment ce ultracondensatoarele nu se bazează pe modificări chimice în electrozi(cu excepția celor cu electrozi de polimer) durata de viață depinde în general de viteza de evaporare a lichidului electrolitic. Această evaporare este în general o funcție a temperaturii, de încărcare a curentului și a tensiunii, generând căldură internă astfel încât temperatura de evaporare este suma căldurii și a mediului ambient intern. Această temperatură este măsurată ca fiind temperatura miezului ultracondensatorului din centrul corpului acestuia. Cu cât temperatura miezului este mai mare cu atât scade și durata de viață. Evaporarea generează în general scăderea capacității și creșterea rezistenței interne. În conformitate cu IEC/EN 62391-2 reducerea capacității cu peste 30% sau valoarea rezistenței interne fiind prea mare, ultracondensatorul a ajuns la sfârșitul duratei de viață. Astfel de modificări ale unor parametrii electrici specificați în IEC/EN 62391-2 sunt, de obicei inacceptabili pentru aplicații de încărcare la curenți mari. Componentele care suportă curenți de sarcină mari se încadrează în limite foarte mici, de exemplu, o pierdere de 20% din capacitate sau dublarea rezistenței interne. Definiția mai restrânsă este importantă pentru astfel de aplicații, deoarece creșterile de căldură sunt liniare cu creșterea rezistenței interne, iar temperature maximă nu trebuie depășită. Temperaturile mai ridicate decâtcele specificate pot distruge ultracondensatorul. Adevărata durată de viață a ultracondensatoarelor numită și “viața de încărcare” , “speranța de viață” sau “viața de serviciu”, poate ajunge de la 10 până la 15 ani sau chiar mai mult în condiții de funcționare la temperature camerei. Astfel de perioade lungi de timp nu pot fi testate de către producători. Prin urmare, aceștia precizează durata de viață a ultracondensatorului la temperaturi maxime și tensiuni maxime. Rezultatele sunt specificate în catalogul producătorului folosind notația “timp testat(ore)/temperature maximă(°C)”, cum ar fi “5000h/65°C”. Cu aceste valori și cu expresii derivate din catalogul producătorului, durata de viață a ultracondensatorului poate fi estimate în condiții de utilizare la temperature mai mică. În timpul funcționării la temperaturi mai mari, dacă reducem temperatura cu 10°C, durata de viață estimată se dublează.

-durata de viață estimate;

-durata de viață specificată;

-temperatura de vârf speficată;

-temperatura efectivă de lucru a unei cellule.

Calculând cu această formula, ultracondensatoarele specificate cu 5000 de ore la o temperature de 65°C, au o durată de viață estimată la 20000 de ore la o temperatură de 45°C.

Durata de viață este de asemenea dependentă de tensiunea de lucru, deoarece dezvoltarea gazului în electrolitul lichid depinde de tensiune. Cu cât tensiunea este mai mica cu atât dezoltarea gazului se face mai greu si astfel durata de viață scade. Curbele de dependență a tensiunii prezentate în imaginea de mai jos sunt rezultate de la producători. Speranța de viață pentru aplicații de putere poate fi, de asemnea, limitată de curentul de sarcină sau de numărul de cicluri.

Curentul de sarcină și stabilirea ciclului

Pentru că ultracondensatoarele funcționează fără a forma legături chimice, curenții de sarcină, inclusiv încărcarea, descărcarea și curenții de vârf nu sunt constrânși de reacție. Curentul de sarcină și stabilirea ciclului poate fi mult mai mare decât la bateriile reâncărcabile. Curenții de sarcină sunt limitați de o rezistență internă, care pot fi mult mai mici decât în cazul bateriilor. Rezistența internă și curenții de încărcare/descărcare sau curenții de vârf generează pierderi de căldură interne , în conformitate cu:

Această căldură trebuie să fie eliberată și distribuită în mediul ambiant pentru a menține temperaturile de funcționare sub temperatura maximă specificată.

Autodescărcarea și curentul de scurgere

Autodescărcarea este un parametru important în aplicațiile în care ultracondensatorul nu este conectat la o sursă electrică care să mențină o stare de încărcare. În aceste aplicații dispozitivul ar trebui să fie capabil să ofere putere cu performanțe care nu s-au deteriorate odată cu trecerea timpului. Un exemplu este motorul unei mașini obișnuite care a stat o săptămână în parcare nepornit. În acest caz, este necesar ca dispozitivul de stocare să mențină o tensiune cât mai mare posibil deoarece puterea disponibilă si energia stocată decline cu suprafața acestei tensiuni. Căderea de tensiune în timpul încărcării unui ultracondensator într-un mod flotant se poate datora unor mecanisme diferite de descărcare, cum ar fi:

curentul de scurgere;

redistribuirea încărcării.

Redistribuirea sarcinii corespunde cu deplasarea sarcinii cu acces ușor electrozilor, cu un timp de acces redus, la una mai dificilă, cu o constantă de timp mai mare. Aceasta poate duce la creștere a tensiunii care poate fi măsurată la bornele ultracondensatorului. După o descărcare rapidă a ultracondensatorului, tensiunea poate crește puțin din cauza sarcinilor din zonele lente. Curentul de scurgere poate fi cauzat de reacțiile redox, prin difuzie de încărcare ionică sau/și de descărcare parțială electronica prin separator. Amplitudinea autodescărcării este determinate, fie prin măsurarea curentului necesar pentru a menține o tensiune constantă, sau prin înregistrarea tensiunii ultracondensatorului în funcție de timp. Diagnosticul poate fi reaziliat în conformitate cu dependența dintre tensiune și timp. În cazul în care tensiunea scade cu o unitate logaritmică, U(t) vs. log t, mecanismele sunt controlate de impuritățile redox.

În cazul în care tensiunea scade cu o rădăcină pătrată a timpului, U(t) vs. t, mecanismul este controlat prin difuzie. Aceste dependențe pot fi demonstrate prin comportamentul autodescărcării al diferiților ultracondensatori. BCAP0007 și BCAP0008 sunt produce Maxwell cu o singură difuzie condusă de autodescărcare, în timp ce BCAPproto este un prototip cu un conținut foarte ridicat de impurități, care este supus reacților redox. Cele două loturi diferite arată căderile liniare respective într-o reprezentație. Măsuratorile recente au arătat că avem nevoie de 10 ani pentru ca noile ultracondensatore să se descarce automat la temperatura camerei. Producătorii ar putea folosi un separator pentru a îmbunătăți retenția de tensiune, dar această operațiune ar crește în același timp, seria rezistenței ionice.

Un alt mod de a caracteriza autodescărcarea unui ultracondensator este măsurarea curentului de scurgere. În graficul următor curentul de scurgere a fost măsurat la temperaturi diferite și tensiuni diferite. Într-o primă aproximare ambele reacții vor urmări comportamentul ButlerVolmer și, prin urmare, panta liniilor poate fi numită o pantă efectivă Tafel. Panta efectivă Tafel pentru curentul de scurgere este de aproximativ 0.4V la 20°C. La 60°C panta Tafel crește până la 0.6V. Acest comportament este foarte important pentru considerațiile care trebuiesc făcute pentru determinarea strategiei de echilibrare celulară utilizată în modulul ultracondensatoarelor.

1.3 Metode de încărcare a ultracondensatoarelor

Primul model de circuit pentru un ultracondensator este prezentat în figura de mai jos. Acesta constă într-o rezistență serie și o inductanț, iar curentul de scurgere este reprezentat de un rezistor în paralel cu un condensator. Rezistența serie variază de la câțiva mΩ până la câțiva zeci de mΩ. Inductanța depinde de construcție și poate fi ignorată pentru funcționarea la frecvențe joase. Rezistența de scurgere poate fi, de asemenea, ignorată pe termen scurt. De fapt, curentul de scurgere al unui ultracondensator cu capacitate de 500 F(Farazi) este mai mic decât 10mA și curentul nominal este de peste 100A.

Un ultracondensator poate accepta o gamă largă de curenți de încărcare, prin urmare nu este necesară o precizie pentru acest curent. Criteriul pentru terminarea încărcării este dat de maximul tensiunii nominale dintr-un ultracondensator.

Următoarea figură ne arată profilul încărcării pentru un ultracondensator de 680F(Farazi) cu diverse variații de curent. Rezultatul arată că caracteristica ultracondensatorului este închisă față de cea a unui condensator ideal. Componenta este supusă la curenti de încărcare constanți de 1.5A, 2.5A și respective 3A. Capacitatea sau energia stocată in amperi-oră pentru o baterie depinde de curentul de încărcare. Pentru un ultracondensator, rezultatele experimentale arată că energia stocată este aproape constantă sub diferite încărcări.

Practic, metodele de încărcare pentru baterii sunt aplicabile și pentru ultracondensatoare, dar mai multe probleme ar trebui să fie luate în considerare. O sursă de alimentare liniară este inadecvată, deoarece eficiența acesteia este scăzută. Pierderea de energie este foarte mare, deoarece diferența este mare, mai ales în condiții de încărcare inițiale 0. Un convertor dc-dc cu modulație de lățime a pulsului(PWM) este un candidat bun pentru încărcare. O baterie este de obicei încărcată câteva ore iar apoi încărcătorul poate fi închis sau chiar să fie deconectat de la sursa de alimentare. Un ultracondensator este supus la încărcări repetitive într-un timp cât mai scurt. Acesta poate fi descărcat complet în câteva minute sau chiar câteva secunde, și apoi complet încărcat din nou într-o perioadă scurtă de timp. Încărcătorul trebuie să funcționeze astfel încât să ofere curent maxim de încărcare pentru o perioadă scurtă de timp și apoi se reduce la zero până la ciclul de încărcare următor. Operațiunea de pulsații impune solicitări pe un încărcător PWM. Ori de câte ori un convertor PWM comun este pornit de la zero la ieșirea maximă, este necesar un curent moale suplimentar pentru pornirea circuitului. O altă diferență majoră între încărcătorul bateriei și încărcătorul ultracondensatorului este că tensiunea de ieșire a ultracondensatorului oscilează de la 0 la tensiunea la valoarea sa nominală, în timp ce a bateriei variază într-un interval îngust. De fap, tensiunea unui ultracondensator crește încet în timpul încărcării, iar încărcătorul este practic scurt-circuitat pentru o durată relativ lungă de timp.

Pentru a dezvolta un încărcător pentru ulracondensator, următoarele puncta sunt luate în considerare:

Cost redus;

Supunerea la funcționarea pulsatorie și curentul de ieșire oscilează de la 0 la maxim frecvent;

Capabil de a oferi o gamă largă de tensiune la ieșire, de la zero la tensiunea nominală a unui ultracondensator;

Protejare încărcător de a fi scurt-circuitat atunci când nu există nici o încărcare inițială a ultracondensatorului;

Circuitul ar trebui să rămână stabil peste diferitele tensiuni de intrare și ieșire precum și curenții extremi de ieșire;

Pierderi reduse.

Pentru a minimiza costurile de producție și complexitatea încărcătorului, un traductor de curent este exclus din circuit. Cu toate acestea, curentul de intrare ar trebui să fie păstrat în limitele de funcționare. Circuitul de încărcare este prezentat în figura de mai jos, care este format din cinci componente majore. Energia este transferată de la sursa de tensiune sursă la ultracondensator printr-un inductor. Circuitul funcționează la frecvență fixă și ciclu de lucru. Cu toate că în circuit nu avem nici un traductor de curent sau un circuit de comandă în buclă închisă, curentul de intrare este limitat deoarece curentul de vârf al inductorului este limitat printr-un timp fix de pornire. Înalta frecvență de comutare poate fi ușor de filtrat cu ajutorul unui condensator electrolitic obișnuit plasat la sursa de tensiune. Prin urmare, curentul de alimentare este plat și fără fluctuație.

Inductorul L este responsabil cu transferul de energie;

Rezistența serie reprezintă rezistența internă a inductorului;

este rezistența totală a firelor conectate la ultracondensator;

Condensatorul C este reprezentat de un prim model de comandă cu rezistența serie ;

Inductanța serie și rezistența de scurgere sunt neglijabile pentru funcționarea încărcătorului.

Există două stări de funcționare pe ciclu, și anume energia absorbită și stadiul de transfer energetic. Pe parcursul primei stări, inductorul absoarbe energia de la sursă. Apoi, acesta oferă energie ultracondensatoarelor, iar la a doua stare ultracondensatorul poate dobândi cantitate constantă de energie pe comutare. Cele două comutatoare, și anume SW1 și SW2, sunt aprinse simultan în prima stare, iar curentul de intrare este o funție de inductanță. Rezistența firului este mai mica de 0.5Ω pentru a minimiza pierderea în conducție. Timpul de turn-off și frecvența de comutare este determinate prin raportul dintre inductanța L și rezistențele serie totale ,,. Cu toate acestea, rezistența totală și este mai mare decât rezistența serie echivalentă a ultracondensatorului, precum și influențele diferitelor caracteristici ale ultracondensatoarelor furnizate de diferiți producători sunt neglijabile. În scopul de a minimiza dimensiunea circuitului și de a avea o mai bună utilizare, circuitul funcționează în modul discontinuu. Din moment ce nici un curent continuu de reziduri care curge prin inductor pentru fiecare ciclu de comutare, saturația magnetică poate fi evitată. În timpul perioadei on, inductorul este încărcat ca și cum ar fi un convertor boost sau flyback. În a doua stare cele două comutatoare sunt dezactivate, iar diodele și conduc. Bobina este în serie cu rezistențele serie și ultracondensatorul. Spre deosebire de comuna pierdere mică a circuitului serie RLC, curentul prin inductor nu poate fi descris prin ecuații, deoarece capacitatea este mult mai mare decât rezistențele serie și inductanța.

Atunci când comutatoarele sincrone, SW1 și SW2 sunt pornite, curentul inductor poate fi exprimat prin:

este căderea de tensiune pe un comutator;

este tensiunea de intrare;

Valorile și , iar căderea de tensiune este neglijabilă în acest stadiu.

În cazul în care timpul on este scurt, acesta poate fi exprimat printr-o ecuație liniară. Astfel, curentul de vârf inductor este dat de:

În timpul stării de transfer energetic, comutatoarele sincrone. SW1 și SW2 sunt oprite. Curentul inductor poate fi exprimat prin:

este tensiunea anterioară a ultracondensatorului;

este căderea de tensiune pe fiecare diodă.

Ca o condiție extremă, este zero, atunci când ultracondensatorul este complet descărcat. Curentul inductor al acestei etape poate fi exprimat ca:

Unde,

Atunci când nu există nici o încărcare inițială stocată în ultracondensator, este 0. Pentru asigurarea circuitului operat la starea limită, curentul prin inductor ar trebui redus la 0 la sfărșitul etapei când transferul de energie este gata.

Încărcare la tensiune constantă

Încărcarea la tensiune constantă este numită și potențialul constant de încărcare utilizat pentru a menține aceeași tensiune de intrare indiferent de starea de încărcare a ultracondensatorului. Încărcarea la tensiune constantă furnizează un curent ridicat ultracondensatorului datorită potențialului superior diferit între ultracondensator și încărcător.

este sursa de tensiune;

este curentul de încărcare;

;

Sw este comutatorul;

UC este ultracondensatorul ;

Vc este tensiunea de încărcare.

În următoarea figură sunt prezentate încărcarea la tensiune constantă împreună cu forma de undă pentru curent, care sunt de fapt o sursă de alimentare de curent continuu care constă într-un redresor coborâtor. Încărcarea poate reveni la fel de mult la 70% din prima descărcare în primele 20 de minute. Pe măsură ce ultracondensatorul se încarcă tensiunea crește rapid, cu o scădere a curentului de încărcare. Prin urmare chiar dacă ultracondensatorul ajunge la o încărcare parțială rapidă, este nevoie de un timp prelungit de încărcare pentru a obține o încărcare completă.

Încărcarea la curent constant

Încărcarea la curent constant furnizează un nivel relativ de curent constant, indiferent de temperatura ultracondensatorului sau de starea acestuia de încărcare.

Încărcarea rapidă

Acest lucru este mult mai avantajos pentru un autobuz electric pentru a fi reâncărcat. Încărcarea rapidă se face prin alimentarea rapidă a autobuzului electric prin intermediul ultracondensatorului. Când autobuzul oprește, un conector situat pe plafonul autobuzului este atașat la sistemul electric, care constă în încărcarea completă a ultracondensatorului. Acesta oferă în mod uniform 400kW timp de 15 secunde.

Metodă matematică de încărcare prin combinarea tensiunii nominale cu curentul constant

În figura de mai jos este prezentat un ultracondensator de 430F, 16V care este conectat la o sursă de tensiune de 16V cu un curent de 10A. Pentru V=16V și I=10A, când comutatorul SW1 este închis avem:

Această rezistență scade curentul la jumătatea ei. Prin urmare curentul din punctul A01 devine 5A. Tensiunea este:

Pentru timpul avem:

Ultracondensatorul s-a încărcat de la 0 la 8V în aproximativ 3.45 min. Similar pentru A02 până la A04, timpul trebuie calculat.

Pentru o încărcare completă avem nevoie de aproximativ 14 minute, ceea ce înseamnă că această metodă este cea mai bună.

Capitolul 2-Prezentare structură hardware a sistemului

În acest capitol se va studia principiul de funcționare al sistemului și elementele componente.

2.1 Schema bloc și funcționarea sistemului

Elemente componente:

Placă de dezvoltare Arduino Uno

Diplay Arduino

Buton 1

Buton 2

Buton 3

UC(Ultracondensator)

Releu 1

Releu 2

Traductor de curent

Convertor DC-DC XL-6009

Rezistență de putere(HS50 2R2 J)

Principiul de funcționare

Se alimentează plăcuța Arduino Uno cu 5V, diplay-ul este alimentat și el prin intermediul placuței Arduino tot cu 5V, se alimenteză Releele 1 și 2 cu 5V, se alimenteză convertorul XL-6009 cu o baterie de 9V. Display-ul Arduino va afișa starea releului, dacă este apasat butonul 1 acesta va afișa un text “Încărcare“, dacă se apasă butonul 2 “Stop“ și dacă se apasă butonul 3 “Descărcare“. Convertorul primește la intrare 9V și scoate la ieșire o tensiune constantă de 2.7V necesară încărcării ultracondensatorului. Apăsându-se butonul 1, placuța Arduino trimite un semnal către releul 1, acesta închizând circuitul. În acest moment ultracondensatorul se încarcă iar traductorul de curent ne arată tot prin intermediul display-ului curentul de încărcare. Pentru a opri încărcarea se apasă butonul 2, astfel releul 1 se decuplează și deschide circuitul. Pentru descărcare se apasă butonul 3, plăcuța Arduino trimite un semnal către releul 2 și acesta se cuplează. Ultracondensatorul se descarcă cu ajutorul rezistenței de putere care este legată la minusul său. Pentru oprire se apasă butonul 2, astfel releul 2 este decuplat. Elementele componente prezentate în principiul de funcționare vor fi detaliate mai jos.

Arduino Uno

Arduino este o placă de dezvoltare concepută cu un singur microcontroler ce permite extinderea unor programe mult mai accesibile.

Hardware-ul plăcuței este constituit dintr-o placă hardware open-source cencepută în jurul unui microcontroler Atmel AVR pe 8 biți, sau pe ARM Atmel pe 32 de biți.

Software-ul este conceput dintr-un compilator care are propriul limbaj de programare și un bootloader ce este executat de microcontroler.

Plăcile Arduino pot fi achiziționate pre-asamblate sau sub formă de kit-uri. Deasemeni pe internet se gasesc diferite proiecte legate de acest mediu de programare, fapt ce permite pasionaților să își producă propriile versiuni.

O caracteristică importantă al placilor de dezvoltare Arduino îl constituie modulul standard în care sunt expuși conectorii plăcii, acest lucru permițând conectarea la o varietate de module care sunt cunoscute sub numele de scuturi Arduino.

Unele scuturi comunică cu placa Arduino prin anumiți pini, însă cele mai multe scuturi comunică individual prin Bus-ul serial , permițând utilizarea mai multor scuturi în paralel. Plăcile Arduino folosesc chip-uri din seria megaAVR (ATmega8, ATMEGA168, ATmega328, ATmega1280 și ATmega2560). Majoritatea plăcilor includ un regulator liniar de 5V și un oscilator de 16MHz. Microcontroler-ul Arduino este pre-programat pentru a simplifica încărcarea programelor în memoria flash a acestuia, comparativ cu alte dispozitive care au nevoie de un programator extern.

Toate plăcile Arduino sunt programate printr-o conexiune serială RS-232, modul acestora de aplicare fiind diferit în funcție de hardware. Plăcile Arduino conțin un circuit schimbator logic, pentru convertirea RS-232 și nivelul de semnal TTL. Plăcile Arduino sunt programate prin USB(FTDI FT232). Arduino Mini și plăcile neoficiale Boarduino au o în construcția lor o placă detașabilă cu adaptor USB, Bluetooth sau alte metode.

Plăcile Arduino au mai mulți pini I/O ai microcontrolerului pentru a fi utilizați în alte circuite, plăcile Diecimila, Duemilanove și Uno oferind 14 pini digitali I/O, iar 6 dintre aceștia pot produce semnale de puls(PWM), și 6 intrari analogice. Pinii sunt situați pe partea superioară a plăcii Arduino, fiind grupați în 3 mufe mamă de 2,5mm. Arduino Nano cât și anumite plăci Arduino pot avea pe partea inferioară pini de tip tată pentru a permite conectarea acesteia pe breadboard. Până în prezent au fost produse 16 variante oficiale Arduino.

Scuturile pot permite controlul motoarelor, GPS, ethernet, display-uri LCD, etc. Mediul de dezoltare integrat Arduino (IDE) este o aplicație cross-platform scrisă în Java, fiind conceput pentru introducerea în mediul de programare nefamiliarizații cu dezvoltarea software. Mediul de programare Arduino include un editor de cod cu o serie de caracteristici, cum ar fi evidențierea sintaxei, indentarea automata și este capabil de a compila și încărca programul printr-un singur click. Un program sau un cod scris pentru mediul de dezvoltare Arduino este numit schiță (sketch).

Programele Arduino sunt scrise în C sau în C++. Pentru execuția unui program utilizatorul trebuie să definească două funcții:

Setup( ): este o funcție ce rulează o singură dată la începutul unui program, ce are rolul de a inițializa setările programului;

Loop( ): este o funcție ce rulează în mod automat până la întreruperea alimentării.

Un exemplu de program pentru microcontroler este acela de a face un LED să cliplească la un anumit interval de timp. În limbajul de programare Arduino se introduce următorul cod:

int led = 13; – Se setează pinul pe care va fi conectat LED-UL

void setup( ) { – Se declară funcția ce rulează o singură data

pinMode(led, OUTPUT); – Se inițializează un pin ca ieșire digital

}

Void loop( ) { – Se declară funcția ce rulează până la întreruperea alimentării

DigitalWrite(led, HIGH) – aprindem led-ul

Delay(1000); – întârziere de 1 secundă

DigitalWrite(led, Low) – stingem led-ul

}

Arduino Uno este un microcontroller bazat pe ATmega328. Acesta are 14 pini digitali de intrare / ieșire (dintre care 6 pot fi utilizați ca ieșiri PWM), 6 intrări analogice, un oscilator cu cristal de 16 MHz, o conexiune USB, o mufă de alimentare, un antet ICSP și un buton de resetare.

Acesta conține tot ce este necesar pentru a sprijini microcontroler-ul, având nevoie doar de o simplă conectare la calculator prin intermediul unui cablu USB sau de alimentare cu un convertor AC-DC, dar se poate conecta și la o baterie. Arduino Uno diferă de toate plăcile precedente deoarece aceasta nu utilizează FTDI-USB, în schimb este dotat cu ATmega8U2 programat ca un convetor USB-serial. “Uno” înseamnă “unul” în limba italiană și este numit pentru a marca lansarea viitoare a Arduino 1.0 Uno.

Specificații tehnice:

Microcontroler: ATmega328;

Tensiune de operare: 5V;

Tensiune de intrare (recomandată): 7-12V;

Tensiune de intrare (maximă): 6-20V;

Pini digitali I/O: 14 (6 pot fi folosiți ca ieșiri PWM);

Intrări analogice: 6;

Curent continuu pe pinii I/O: 40mA;

Curent continuu pentru pinul de 3.3V: 50mA;

Memorie Flash: 32KB;

SRAM: 2KB;

EEPROM: 1KB;

Viteza de răspuns: 16MHz.

Arduino Uno poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de alimentare externă. Puterea sursei este selectată automată. Placuța poate funcționa de la o sursă externă de la 6 până la 20V. Dacă este alimentată cu mai puțin de 7V, pin-ul 5V poate poate furniza mai puțin de 5V dar placa poate fi instabilă. În cazul în care utilizați mai mult de 12V, regulatorul de tensiune se poate supraîncălzi, acest lucru ducând la deteriorarea plăcii. Intervalul recomandat este de la 7 până la 12V.

Pinii de alimentare sunt:

VIN, este tensiunea de intrare atunci când folosește o sursă de alimentare externă;

5V, este un regulator de tensiune utilizat pentru alimentarea microcontrolerului și a altor componente de pe plăcuță;

3.3V, este o sursă de 3.3V generată de regulatorul de tensiune de pe placa Arduino. Curentul maxim pe care îl poate furniza este de 50mA;

GND, legarea la pământ.

Memoria

Arduino Uno folosește ATmega328 de 32KB (0,5KB sunt utilizați pentru bootloader). Aceasta are, de asemenea, 2KB SRAM și 1KB de EEPROM.

ATmega328 este un circuit integrat care se bazează pe un microcontroler, combinând 32KB cu o memorie ce are capacitatea de a citi datele în timp ce le scrie, o memorie EEPROM de 1KB, o memorie SRAM de 2KB, dispozitivul funcționând 1,8-5,5V.

Flash: 32KB;

RAM: 2KB;

Pini: 28;

Frecvența maximă de funcționare: 20MHz;

CPU: 8-biți AVR;

Numărul de variabile Canale: 16;

Pini maximi de E/S: 26;

Întreruperile externe: 24.

EEPROM, este o memorie nevolatilă fiind folosită în industria IT și echipamentele electronice pentru stocarea de date ce trebuie să persiste și după oprirea alimentării. Memoria este formată dintr-o matrice de celule de memorie care, la rândul lor, sunt formate din perechi de tranzistori ce au între ei un strat subțire de oxid isolator. Un tranzistor este numit poartă flotantă, iar celălalt poartă de control. Pentru memoriile apărute recent în industrie, acestea se pot reprograma ușor aplicând o tensiune mai mare decât cea generată de circuitul intern sau extern, în timp ce memoriile vechi trebuiesc înlăturate din circuit pentru a putea fi reprogramate.

Metodele care ajută la comunicarea cu memoriile EEPROM sunt:

Interfața paralelă;

Interfața serială.

Intefața serială RS-232 este cel mai răspândit echipament periferic. Transmisia și recepția datelor se face bit cu bit, având nevoie doar de un singur fir de transmitere. RS-232 permite transferul datelor doar pe distanțe scurte (20m) iar viteza de transmitere a datelor fiind de maxim 19600 bps. Ulterior s-au dezvoltat alte interfețe ce permit transmiterea pe distanțe mai lungi, viteze de transfer mult mai mari și conectarea mai multor dispozitive pe același cablu. Datele seriale se pot transmite sincron sau asincron. Dacă interfețele sunt asincrone atunci există și interfețe sincrone, acestea fiind utilizate în general pentru distanțe scurte.

Tensiunile de linie

Nivelul 1 logic este corespunzător tensiunilor cuprinse între -3V și -25V, valoarea tipică fiind de -12V. Nivelul 0 logic este corespunzător tensiunilor situate între 3V și 25V, valoarea tipică fiind de 12V. Valorile cuprinse între -3V și 3V reprezintă o stare nedeterminată. Când impulsurile nu se transmit linia stă poziționată pe 1 logic (-12V). Dacă linia este întreruptă sau avem un scurtcircuit atunci nu vom ave o tensiune de 0V.

Tabelul 2.1 Caracteristicile electrice ale interfeței RS-232

Conectori

Interfața RS-232 este alcătuită din două tipuri de conectori: DB25S și DB9S. DB25S asigură funcționarea totală a interfeței în timp ce DB9S, asigură un spațiu minimal pentru instrumentația redusă în dimensiuni. Datele (TxD, RxD), sunt canale de date care permit comunicații full-duplex. Semnalele (RTS, CTS) furnizează suportul prin care se controlează traficul datelor. Pentru sincronizarea receptorului cu emițătorul sunt necesare semnale de tact ( TC, RC).

Interfața paralelă transferă mai mulți biți în același timp. Acestea au nevoie de magistrale de date care transmit pe 8,16 sau mai multe linii. Datele recepționate și transmise sunt fluxuri de 1 și 0. În figura următoare este prezentată o magistrală cu lățimea pe 8 biți, controlată de un semnal de ceas.

SRAM (Static Random Access Memory) sunt memorii semiconductoare utilizate pe scară largă în aplicații electronice, microprocesoare și în general în domeniile de calcul. Datele deținute de către memoriile SRAM sunt ținute în interior într-un mod static, nu se analizează în mod dinamic ca în cazul memoriilor DRAM. SRAM sunt memorii volatile asta însemnând că atunci când puterea este scoasă din dispozitivul de memorie, datele nu sunt salvate, și vor dispărea.

Există două caracteristici de bază ale memoriei SRAM, acestea fiind diferite de celelalte memorii disponibile:

Datele sunt deținute static, asta înseamnă că datele sunt stocate în memoria semiconductoare fără a fi nevoie de actualizare, atâta timp cât puterea este aplicată în memorie;

SRAM este o formă de memorie cu acces aleator, asta înseamnă că memoria are acces aleator, datele pot fi scrise sau citite în orice ordine, indiferent de ultima locație din memorie care a fost accesată.

Circuitul pentru o celulă individuală SRAM cuprinde de obicei patru tranzistori configurați ca două invertoare cuplați în cruce. În acest caz, circuitul are două stări stabile, acestea fiind egale cu sterile logice „0“ și „1“. Pe lângă cele patru tranzistoare, în celula de bază din memorie sunt necesare două tranzistoare pentru a controla accesul la celula de memorie în timpul de scriere și citire, acest lucru făcând un total de șase tranzistori de unde și termenul de 6T. Uneori tranzistorii suplimentari sunt utilizați pentru a da 8T sau 10T celule de memorie. Acești tranzistori suplimentari sunt utilizați pentru funcții, cum ar fi punerea în aplicare a proturilor suplimentare într-un fișier registru, pentru memoria SRAM.

Deși orice dispozitiv de comutare cu trei borne poate fi utilizat într-un SRAM, MOSFETs și în special în tehnologia CMOS, sunt utilizate pentru a se asigura că nivelurile foarte scăzute ale consumului de energie sunt atinse. Cu memoriile semiconductoare de extindere la dimensiuni foarte mari, fiecare celulă trebuie să atingă un nivel foarte scăzut al consumului de energie pentru a se asigura că cipul nu disipă prea multă putere.

Operarea celulei de memorie SRAM este relativ simplă. Când este selectată celula, valoarea care urmează să fie scrisă este stocată în „cross-coupled flip-flops“. Celulele sunt aranjate într-o matrice, cu fiecare celulă adresată individual. Cele mai multe memorii SRAM selectează un întreg șir de celule la un moment dat, și citește conținutul tuturor celulelor care sunt situate de-a lungul liniilor și coloanelor.

Deși nu este necesar să existe două linii de biți, folosim semnalul și inversul, aceasta este o practică normală care îmbunătățește integritatea datelor. Cele două linii de biți sunt transmise prin cele două porturi de la intrare către un comparator, pentru a permite avantajele modulului de date diferențiale care urmează să fie accesate, iar micile oscilații de tensiune prezente pot fi detectate cu mai multă precizie.

Accesul către celula de memorie SRAM este activat de linia Word. Acest lucru controlează cele două tranzistoare de control al accesului care controlează dacă celula trebuie să fie conectată la liniile de biți. Aceste două linii sunt utilizate pentru a transfera date pentru ambele operații de citire și scriere.

O celulă SRAM are trei stări de funcționare diferite:

Standby – atunci când circuitul este în repaus;

Citire – atunci când datele au fost deja cerute;

Scriere – atunci când se modifică conținutul datelor.

Standby apare atunci când linia de primire informație nu este folosită, tranzistorii și deconectează celula de la liniile de biți. Cei doi invertori vor continua să se încarce reciproc cât timp vor rămâne conectați la rețea.

Se presupune că în dreptul lui Q avem stocată valoarea 1. Citirea este inițializată atunci când se încarcă ambele linii de biți cu 1, apoi se activează tranzistorii și linia de cuvânt WL. Pasul doi are loc atunci când valorile care au fost stocate în Q și sunt transferate la liniile de biți, valoarea BL fiind lăsată preîncărcată, dar valoarea se descarcă prin la 0 logic, tranzistorii legând linia de bit cu , adică cu 1 logic, între liniile BL și apărând o diferență de tensiune. Liniile vor fi conectate la un amplificator pentru a sesiza care linie are o tensiune mai mare. Cu cât amplificatorul are o viteză mai mare cu atât va fi mai mare și viteza de citire a memoriei.

Scrierea se face prin aplicarea de valori la liniile de biți. Pentru a scrie 0, se aplică 1 la și 0 la BL. Prin inversarea liniilor de biți scriem 1 logic, WL fiind activat iar valoarea scrisă este memorată. Memoria SRAM este mai scumpă decât memoria DRAM dar este mai rapidă și are un consum de energie foarte redus, fiind și mai ușor de controlat în comparație cu memoria DRAM. Când este extrem de utilizată la frecvențe înalte, memoria SRAM are un consum ridicat de energie, dar la frecvențe reduse aceasta consumă foarte puțină energie, undeva aproape de 0.

Descrierea pinilor Arduino Uno

Power USB – Placa Arduino poate fi alimentată utilizând un cablu USB din calculator, tot ce trebuie făcut este să conectăm cablul USB la conexiunea USB (1);

Power (Barrel Jack) – Placa Arduino poate fi alimentată direct de la sursa de alimentare de curent alternativ prin conectarea la mufa Barrel (2);

Regulator de tensiune – Funcția regulatorului de tensiune este de a controla tensiunea dată plăcuței Arduino și de a stabiliza tensiunile de curent continuu utilizate de procesor și de alte elemente (3);

Oscilatorul de cristal – Oscilatorul de cristal ajută Arduino în problemele legate de timp. Oscilatorul de cristal calculează timpul prin numărul imprimat pe partea de sus a cristalului Arduino. De exemplu dacă avem 16.000H9H, Arduino ne spune că frecvența este 16.000.000 Hertz sau 16 MHz (4);

Arduino Reset – Se poate reseta plăcuța Arduino, prin resetare se înțelege rularea programului de la început. Placa Arduino se poate reseta în două moduri. În primul rând, folosind butonul de resetare (17) de pe placă. În al doilea rând, ne putem conecta cu un buton extern de resetare la RESET, care este marcat pe plăcuța Arduino (5);

Descrierea pinilor (3.3V, 5V, GND, Vin):

3.3V (6) – Furnizează la ieșire o tensiune de 3.3V;

5V (7) – Furnizează la ieșire o tensiune de 5V;

GND (8) – Plăcuța Arduino dispune de mai multe porturi GND, oricare dintre acestea pot fi folosite ca masă pentru circuitul folosit;

Vin (9) – Acest port poate fi folosit pentru a alimenta placa Arduino de la o sursă de alimentare externă, cum ar fi rețeaua de curent alternativ.

Intrările analogice (10) – Arduino UNO dispune de cinci intrări analogice, de la A0 până la A5. Acești pini pot citi semnalul de la un senzor analogic asemănător senzorului de umiditate sau senzorul de temperatură și îl transformă într-o valoare digitală, care poate fi citită de către microprocesor;

Microcontroler-ul principal (10) – Fiecare plăcuță Arduino are propriul microcontroler, fiind considerat și creierul plăcuței. Acesta diferă de la plăcuță la plăcuță;

Pinul ICSP (12) – În general, ICSP este un AVR, un progrămel micuț pentru Arduino constând din MOSI, MISO, SCK, RESET, VCC și GND. Acesta este adesea menționat ca un SPI, care poate fi considerat ca o „extindere“ a ieșirii;

Indicator LED (13) – Acest LED trebuie să se aprindă atunci când conectați Arduino la o sursă de alimentare pentru a indica faptul că aceasta este alimentată corect. Dacă această lumină nu se aprinde, atunci există ceva în neregulă cu conexiunea;

Led-urile TX și RX (14) – Pe plăcuță se găsesc două etichete: TX (emitor) și RX (receptor). Ele apar în două locuri de pe placa Arduino UNO. În primul rând, la pinii digitali 0 și 1, pentru a indica pinii responsabili pentru comunicarea în serie. În al doilea rând, TX și RX și aprind led-urile. TX a conduce flash-urile cu o viteză diferită în timpul trimiterii datelor seriale. Viteza de clipire depinde de rata de transfer utilizată de plăcuță, flash-urile RX clipesc în timpul procesului de recepție;

Digital I/O (15) – Placa Arduino UNO are 14 pini digitali I/O (din care 6 pot funcționa ca PWM). Acești pini pot fi configurați pentru a lucra ca pini digitali de intrare, pentru a citi valorile logice ( 0 sau 1) sau pini digitali de ieșire pentru a conduce module diferite cum ar fi LED-uri, relee, butoane, etc.;

AREF (16) – Uneori este utilizată pentru a seta o tensiune de referință externă (între 0 și 5V) ca limită superioară pentru pinii analogici.

Pinii de pe placa Arduino pot fi configurați fie ca intrări sau ieșiri. Este important faptul că o parte din pinii analogici Arduino, pot fi configurați și utilizați exact în același mod ca și pinii digitali.

Configurarea pinilor ca intrare

În mod implicit pinii Arduino sunt configurați ca intrare, astfel aceștia nu necesită să fie declarați ca intrare cu pinMode() când sunt utilizați ca intrare. Se spune că pinii configurați în acest fel sunt într-o stare de înaltă impedanță. Pinii configurați ca intrare au cereri foarte mici într-un circuit, echivalent cu rezistor de 100MΩ poziționat în fața pinului. Acest lucru înseamnă că acesta are nevoie de un curent foarte mic de comandă pentru comutare în altă stare. Acești pini sunt foarte utili pentru sarcini mici, cum ar fi punerea în aplicare a unui senzor capacitive tactil sau citirea unui LED ca fotodiodă. Pinii configurați ca intrare cu funția pinMode dar care nu au nimic conectat în ele, sau au fire conectate dar acestea nu sunt introduse în circuit, semnalează schimbări apparent aleatorii în starea pinului, ridicarea de zgomot electric în mediu, sau cuplarea capacitivă a stării altui pin din apropiere.

Rezistențele ridicătoare (PULL-UP)

Rezistențele PULL-UP sunt adesea utilizate pentru a dirija un pin coinfigurat ca intrare către o stare necunoscută, dacă nici o intrare nu este prezentă. Acest lucru se poate face prin adăugarea unui rezistor PULL-UP (la + 5V), sau un rezistor PULL-DOWN la intrare. Un rezistor cu valoarea de 10K este bun pentru PULL-UP sau PULL-DOWN.

Utilizarea unui rezistor ridicător incorporat cu pini configurați ca intrare

Există 20.000 de rezistențe PULL-UP construite în interiorul chip-ului ATmega, care pot fi accesate din software. Aceste rezistențe sunt accesate prin setarea pinMode() ca INPUT_PULLUP. Acesta inversează în mod eficient comportamentul modului de intrare, în cazul în care este HIGH înseamnă că senzorul este oprit și când este LOW înseamnă că senzorul este pornit. Valoarea acestei rezistențe depinde de utilizarea microcontrolerului. Pe cele mai multe plăci bazate AVR, valoarea este garantată între 20kΩ și 50kΩ. Pe Arduino Due, este între 50kΩ și 150kΩ. Pentru valoarea exactă se consultă fișa tehnică a microcontrolerului.

La conectarea unui senzor cu un pin configurat cu INPUT_PULLUP, celălalt capăt trebuie să fie conectat la pământ (GND). În cazul unui simplu commutator, acest lucru face ca pin-ul să citească HIGH când comutatorul este deschis și LOW când comutatorul este apăsat. Rezistențele PULL-UP furnizează suficient curent pentru a aprinde un led slab conectat la un pin configurat ca intrare.

Configurarea pinilor ca ieșire

Se spune că pinii configurați ca ieșire cu pinMode() sunt într-o stare de joasă impedanță. Acest lucru înseamnă că aceștia pot furniza o cantitate substanțială de curent la alte circuite. ATmega poate furniza curent pozitiv sau curent negative de până la 40 mA la alte dispozitive / circuite. Acest lucru este suficient pentru a aprinde un led sau pentru a lega mai mulți senzori de curent, dar nu suficient pentru a rula relee, solenoizi sau motoare.

Încercarea de a rula dispozitive mari de curent prin pinii de ieșire, poate distruge sau deteriora tranzistorii de la ieșirea din pin, sau poate deteriora întreg chip-ul ATmega. De multe ori, acest lucru duce la un pin „mort“ în microcontroler, dar chip-urile rămase încă funcționează în mod adecvat. Din acest motiv, este o idee bună pentru a conecta pinii de ieșire la alte dispozitive prin 470Ω sau 1k de rezistențe, cu excepția cazului unde este necesar extragerea unui curent maxim din pini pentru anumite aplicații.

Funcția digitalWrite ()

Funcția digitalWrite() este folosită pentru a scrie o valoare HIGH sau o valoare LOW pentru un pin digital. Dacă pin-ul a fost configurat ca o ieșire cu pinMode(), tensiunea sa va fi setată la valoarea corespunzătoare: 5V (sau 3.3V pe plăci de 3.3V) pentru HIGH , 0V pentru LOW. Dacă pin-ul a fost configurat ca intrare, digitalWrite() va active (HIGH) sau dezactiva (LOW) cu un PULL-UP intern pe pinul de intrare. Se recomandă ca pinMode() să fie setat pentru INPUT_PULLUP, pentru a permite un rezistor PULL-UP intern.

Dacă pinMode() nu este setat la ieșire, și se conectează un led la acest pin, atunci când se apelează digitalWrite (HIGH), led-ul poate să lumineze. Fără a se stabili pinMode(), digitalWrite() va active rezistența PULL-UP internă care o să acționeze ca un rezistor mare de limitare a curentului.

Funcția analogRead()

Arduino este capabil să detecteze dacă există o tensiune aplicată unui pin și sa îl raporteze prin funcția digitalRead(). Există o diferență între un senzor on/off (care detectează prezența unui obiect) și un senzor analog, a cărui valoare se schimbă în mod continuu. Pentru a citi acest tip de senzor, avem nevoie de un alt tip de pini.

În partea din drepta jos a plăcii Arduino, avem 6 pini analogici. Acești pini nu numai că ne spun dacă există o tensiune aplicată acestora, dar, de asemenea, valoarea sa. Prin utilizarea funcției analogRead(), putem citi tensiunea aplicată la unul dintre pini.

Această funcție returnează un număr între 0 și 1023, care reprezintă teniunea între 0 și 5V. De exemplu, în cazul în care există o tensiune de 2.5V aplicată la pinul numărul 0, analogRead(0) returnează 512.

Principiul de bază al PWM

PWM este o tehnică comună utilizată pentru a varia lățimea pulsurilor într-un puls de tren. PWM are multe aplicații, cum ar fi controlul servomecanismelor și controlării de viteză, limitând puterea efectivă a motoarelor și ledurilor.

Modulația în lățime este, în principiu, un val pătrat care variază într-o perioadă de timp. Un semnal PWM de bază este prezentat în figura următoare.

Există diferiți termini asociați cu PWM:

ON-TIME – Durata de timp a semnalului este mare;

OFF-TIME – Durata de timp a semnalului este scăzută;

PERIOADA – Este reprezentată ca suma dintre ON-TIME și OFF-TIME și a semnalului PWM;

CICLU DE LUCRU – Este reprezentat ca procentul de semnal de timp, care rămâne în timpul perioadei semnalului PWM.

După cum se observă în figură denotă timpul on-time iar denotă timpul off-time al semnalului. Perioada se calculează astfel:

Durata unui ciclu se calculează după timpul on-time într-o perioadă de timp, aceasta fiind:

Funcția analogWrite() scrie o valoare analogică (undă PWM) la un pin. Acesta poate fi folosit pentru a aprinde un led de luminozitate variabilă sau poate conduce un motor la diferite viteze. După un apel al funcției analogWrite(), pin-ul va genera o undă pătrată al ciclului de funcționare specificat, până la următorul apel analogWrite() sau digitalRead() pe același pin. Frecvența semnalului PWM pe majoritatea pinilor este de 490Hz. Pe plăcile UNO, pinii 5 și 6 au o frecvență de aproximativ 980Hz.

Întreruperile Arduino

Întreruperile Arduino opresc activitatea curentă astfel încât plăcuța să poată face alte lucrări. Întreruperile se folosesc atunci când vrem ca lucrurile să se întâmple în mod automat în programele de microcontroler, și pot ajuta la rezolvarea problemelor de sincronizare, sarcini bune pentru utilizarea unei întreruperi poate include citirea unui codificator rotativ, sau de monitorizare, datele fiind introduse de utilizator.

Programul principal rulează și realizează funcții într-un circuit. Cu toate acestea, atunci când o întrerupere are loc programul principal se oprește iar cel secundar pornește. Când programul secundar își termină treaba procesul principal își reia funcția.

Întreruperile pot proveni din diverse surse. În acest caz, folosim o întrerupere hardware care este declanșată de o schimbare de stare pe unul dintre pinii digitali. Cele mai multe modele Arduino au două întreruperi hardware (denumite „interrupt0“ și „interrupt1“) la pinii digitali 2 și respectiv 3. Arduino Mega are șase întreruperi hardware, inclusive întreruperile suplimentare („interrupt2“ până la „interrup5“) pe pinii 21, 20, 19 și 18. Putem define o rutină utilizând o funcție special numită „interrupt Service Routine“ (de obicei, cunoscută sub numele de ISR).

ISR sunt tipuri speciale de funcții care au unele limitări unice, cele mai multe dintre acestea nu au limitări. Un ISR nu are nici un parametru, și nu ar trebui să nimic. În general, un ISR trebuie să fie cât mai scurt și mai repede posibil. Dacă circuitul în cauză utilizează mai multe ISR, numai unul poate rula la un moment dat, restul vor fi executate după terminarea celui curent, într-o ordine ce depinde de proprietatea pe care o au. Millis() se bazează pe o întrerupere numărată, așa că niciodată nu va crește în interiorul unui ISR. Deoarece întârzierea necesită întreruperi pentru a lucra, aceasta nu va funcționa dacă este utilizată în interiorul unui ISR, aceasta funcționând la început dar după 1-2 ms va începe să se comporte haotic. DelayMicroseconds() nu folosește nici un numărător, astfel încât va funcționa normal. De obicei variabilele globale sunt folosite pentru transmiterea datelor între ISR și programul principal. Pentru a ne asigura că variabilele transmise între ISR și programul principal sunt actualizate în mod corect acestea trebuiesc declarate volatile.

Arduino dispune de două tipuri de întreruperi, acestea fiind:

Întreruperi Hardware – Acestea apar ca un răspuns la un eveniment extern, cum ar fi un pin setat pe HIGH sau LOW;

Întreruperi Software – Acestea apar ca un răspuns la o instrucțiune trimisă în software. Singurul tip de întrerupere suportat este dat de funcția attachInterrupt().

Constantele predefinite pentru utilizarea întreruperilor sunt:

LOW – Declanșarea întreruperii se face atunci când pin-ul este LOW;

CHANGE – Declanșarea întreruperii se face atunci când pin-ul își schimbă valoarea;

FALLING – Declanșarea întreruperii se face atunci când pin-ul își schimbă starea de la HIGH la LOW.

Convertorul Analog – Digital Arduino

Un convertor Analog-Digital (ADC) este o caracteristică utilă, care convertește o tensiune analogică citită de un pin într-un număr digital. Nu orice pin de pe placa Arduino are capacitatea de a face conversia, acești pini având un „A“ în fața lor (A0 până la A5), pentru a indica capacitatea pinilor de a citi tensiuni analogice.

Convertorul Analog-Digital poate varia mult între microcontrolere. Pe Arduino este un ADC pe 10 biți, ceea ce înseamnă că are capacitatea de a detecta 1.024 (210) nivele analogice discrete. Unele microcontrolere au ADC pe 8 biți (28 = 256 nivele discrete), iar alte convertoare A-D au 16 biți (216 = 65.536 de nivele discrete).

Modul în care funcționează un ADC este destul de complex. Există câteva moduri diferite de a realiza acest lucru, dar una dintre cele mai comune tehnici utilizează o tensiune analogică pentru încărcarea unui condensator intern și apoi se măsoară timpul necesar la descărcare peste un rezistor intern. Microcontrolerul mărsoară numărul de cicluri de ceas înainte de descărcarea condensatorului. Acest număr de cicluri este numărul care este returnat odată ce conversia este completă.

Când ADC măsoară o tensiune acesta raportează o valoare rațiometrică. Acest lucru înseamnă că ADC egalează cei 5V cu 1023, iar dacă avem mai puțin de 5V îi va calcula ca un raport între 5V și 1023.

Convertorul Analog-Digital este dependent de tensiunea sistemului, deoarece folosim predominant ADC pe 10 biți pe un sistem de 5V, ecuția aceasta fiind simplificată ușor:

Dacă sistemul este 3.3V, se schimbă pur și simplu 5V cu 3.3V în ecuație. Dacă sistemul este de 3.3V și ADC-ul raportează o valoare de 512, asta înseamnă că măsoară 1.65V.

Comunicațiile Arduino

Pentru realizarea schimbului de date au fost definite sute de protocoale de comunicare. Fiecare protocol poate fi clasificat într-una din cele două categorii: Paralel sau serie.

Conexiunea paralelă dintre Arduino și periferice se face prin porturile de intrare / ieșire, fiind soluția perfectă pentru distanțe mici de până la câțiva metri. Cu toate acestea, în alte cazuri, atunci când este necesar să se stabilească o comunicare între două dispozitive pentru distanțe mai mari, nu este posibilă utilizarea conexiunii în paralel. Interfețele paralele transferă mai mulți biți în același timp. Ele necesită de obicei, bus de date, transmiterea datelor se face prin opt, șaisprezece, sau mai multe fire, datele fiind transferate în valuri uriașe.

Conexiunea paralelă cu siguranță are avantajele sale. Aceasta este mai rapidă decât conexiunea serie, simplă și relativ ușor de implementat. Cu toate acestea, este nevoie de mai multe porturi și linii de intrari / ieșiri. Dacă vrem să mutăm un proiect de pe un Arduino UNO pe un Arduino Mega, trebuie să știm că liniile intrare / ieșire de pe un microprocessor sunt prețioase și puține. De aceea, preferăm comunicarea în serie.

Cele mai multe plăci Arduino sunt construite cu mai multe sisteme diferite pentru comunicația serială ca echipament standard.

Unul dintre cele mai importante lucruri în ceea ce privește comunicarea serială este protocolul, care trebuie respectat cu strictețe. Acesta este un set de reguli, care trebuiesc applicate astfel încât dispozitivele pot interpreta corect datele pe care le schimbă reciproc. Din fericire, Arduino are în mod automat grijă de acest lucru, astfel încât activitatea program / utilizator este redusă la o simplă scriere (datele care urmează să fie trimise) și o simplă citire (datele care au fost primite).

Comunicațiile seriale se clasifică în:

Date sincrone – dispozitivele care sunt sincrone folosesc același ceas, timpul lor fiind în sincronizare unul cu celălalt;

Date asincrone – dispozitivele care sunt asincrone au propriile lor ceasuri și sunt declanșate de ieșirea din starea anterioară.

Este ușor să aflăm dacă un dispozitiv este sincron sau nu. În cazul în care același ceas este dat la toate dispozitivele conectate ele sunt sincrone.

Protocolul serial asincron are un număr de reguli. Aceste reguli nu sunt altceva decât mecanisme care să contribuie la asigurarea transferurilor solide și fără erori de date. Aceste mecanisme, pe care le obține pentru semnalul de ceas extern, sunt:

Biți de sincronizare;

Biți de date;

Biți de paritate;

Rata de transfer.

Sunt două sau trei tipuri de biți de sincronizare speciali, care transferă fiecare pachet de date. Ei sunt numiți și biții de start și biții de stop, aceștia marcând începutul și sfârșitul unui pachet respectiv. Există întotdeauna un singur bit de start, dar numărul biților de oprire este configurat la unu sau doi (deși în mod normal se lasă la unu). Bitul de start este întotdeauna indicat printr-o linie de date de mers în gol de la 1 la 0, în timp ce bitul de stop va trece înapoi la starea de inactivitate ținând linia de 1.

Cantitatea de date din fiecare pachet poate fi setată la orice dimensiune cuprinsă între 5 și 9 biți. Cu siguranță dimensiunea standard de date este de 8 biți, dar alte dimensiuni au utilizările lor. Un pachet de date pe 7 biți poate fi mai eficient decât unul pe 8 biți, mai ales dacă transferăm caractere ASCII pe 7 biți.

Utilizatorul poate selecta dacă trebuie să fie paritate sau nu, și dacă selectează da, paritatea ar trebui să fie pară sau impară. Bitul de paritate este 0 dacă numărul 1 din biții de date este impar.

Rata de transfer este utilizată pentru a indica numărul de biți transferați pe secundă. De obicei, este nevoie de un accept al protocolului pentru transferul unui byte împreună cu mai mulți biți de control. Asta înseamnă că un byte în fluxul de date de serie poate fi transferat de 11 biți.

Display Arduino cu interfață I2C

Pentru a utiliza un alt tip de display pe Arduino avem nevoie de o conectare cu 6 pini între display și placă, aceștia fiind: RS, EN, D7, D6, D5 și D4. Dacă faci mai mult decât un proiect simplu, vei avea nevoie de mai multe porturi disponibile pentru conectarea componentelor la placa Arduino. Soluția cea mai eficient este folosirea unui display cu interfață I2C deoarece acesta se conectează la plăcuță cu ajutorul a 4 fire, acestea fiind: SDA, SCL, GND, VCC.

Pe cele mai multe plăci Arduino, SDA (linia de date) se conectează pe pin-ul analogic de intrare 4, și SCL (linia de ceas) se conectează pe pin-ul analogic de intrare 5. Pe noua plăcuță Arduino UNO R3, pinii SDA și SCL sunt așezați în partea stângă a plăcuței.

Tip afișaj : LCD alfanumeric;

Tehnologia afișajului: STN Negative;

Număr de caractere (coloane x rânduri): 16×2;

Culoarea fondului: albastru;

Dimensiuni exterioare: 80 x 36 x 13.5 mm;

Dimensiuni fereastră: (înălțime x lungiune): 64 x 13.8 mm;

Culoare caractere: alb;

Alimentare: 5V.

Interfața I2C

Interfața I2C este o interfață serie, apărută dintr-o necesitate pentru realizarea sistemelor ieftine cu microcontrolere, care au fost destinate în general conducerii proceselor industriale. Un astfel de sistem este construit, de regulă, dintr-unul sau mai multe microcontrolere și o serie de echipamente periferice (de intrare / ieșire, memorie). Conectarea acestora printr-o interfață serie satisface cerințele enunțate. Viteza mică de transfer, caracteristica interfețelor serie, nu constituie un neajuns pentru aplicațiile principale avute în vedere (conducerea proceselor).

Sistemele I2C se realizează prin interconectarea circuitelor integrate prin două linii de semnal și o linie de masă. Liniile de semnal se numesc SDA (serial data) și SCL (serial clock). Circuitele integrate pe interfața I2C au adresă unică și pot funcționa ca transmițător sau receptor, în alte tipuri de circuite ele fiind coordonator sau executant.

Circuitul care transferă date, dar care tot el generează semnalele pentru inițializarea transferurilor se numește circuit integrat coordonator.

Interfața I2C este o structură multi-coordonator, cee ace înseamnă că se pot interconecta mai multe circuite cu rolul de coordonator.

Într-un sistem mai multe circuite pot avea rolul de coordonator, de aceea este necesară o procedură de arbitrare a cererilor de transfer. Fiecare circuit coordonator generează propriile impulsuri de tact. Pentru a evita funcționarea dezordonată a impulsurilor de tact, acestea trebuiesc sincronizate cu ajutorul funcției logice ȘI, care se realizează legarea împreunată a tuturor terminalelor SCL.

Prima tranziție 1 – 0 este cea a semnalului CLK1. CLK2 se resetează prin aducerea liniei SCL la nivel de coborâre de către CLK1. CLK1 și CLK2 încep să genereze starea 0 a impulsului de tact. CLK1 trece în starea 1, dar SCL rămâne pe 0 deoarece CLK2 nu și-a încheiat activitatea. Până la încheierea acesteia CLK1 introduce o stare de așteptare. În momentul în care CLK2 trece în 1, linia SCL este eliberată, CLK1 și CLK2 începând să genereze impulsuri, urmând ca primul semnal care trece din 1 în 0 să aducă din nou linia SCL la nivel coborât, în acest fel făcându-se sincronizarea semnalelor de tact.

Linia SDA realizează arbitrarea coordonatorilor, coordonatorul care transmite un nivel ridicat își pierde arbitrarea dacă în același timp un alt coordonator transmite un nivel coborât, etajul de date al acestuia deconectându-se pentru a nu influența starea SDA. Arbitrarea poate continua pe mai mulți biți, la început comparându-se doar biții de adresă. Dacă ambii coordonatori încearcă să adreseze același executant, arbitrarea continua cu compararea biților de date, informația rămâne păstrată deoarece arbitrarea folosește biți de adresă și de date. Coordonatorul care își pierde arbitrarea poate transmite impulsuri până la sfârșitul octetului în care și-a pierdut arbitrarea. Dacă în faza de adresare un coordonator își pierde arbitrarea, cel care o câștigă îl poate adresa, acesta trecând în regim de executant.

Procedura de sincronizare se poate utiliza și pentru adaptarea vitezei de transfer la nivel de octet sau la nivel de bit.

În transferul la nivel de octet, executantul recepționează datele în ritmul impus de coordonator, dar are nevoie de un timp mai mare pentru memorarea acestora, linia SCL fiind coborâtă de către executant, forțând coordonatorul să introduce o stare de așteptare.

În transferul la nivel de bit, executantul care nu poate recepționa datele în ritmul impus de coordonator încetinește transferul prin extinderea stării 0, viteza coordonatorului adaptându-se la viteza executantului.

Pentru conectarea la magistrala I2C, circuitul este prevăzut cu câte un etaj de interfață pentru fiecare linie a magistralei.

Liniile SDA și SCL sunt linii bidirecționale, fiind conectate la plusul sursei de alimentare prin câte un rezistor pull-up. Liniile sunt la nivel ridicat numai dacă magistrala este liberă. Pentru a permite realizarea funcției ȘI, etajele de ieșire ale circuitelor trebuie să aibă o ieșire de tip colector sau de tip drenă. Numărul circuitelor care se pot conecta la magistrală este limitat numai de capacitatea liniei (400 pF), rata maximă de transfer fiind de 100 kbit/s.

Inițierea transferului de date se face prin aducerea magistralei în condiție de START, iar încheierea transferului prin aducerea magistralei în condiție de STOP.

Condiția de START se realizează prin trecerea liniei SDA din 1 în 0, în același timp linia SCL fiind menținută la nivel ridicat.

Condiția de STOP se realizează prin trecerea liniei SDA din 0 în 1, în același timp linia SCL fiind menținută la nivel ridicat.

Condițiile de START și STOP sunt prezentate în figura de mai jos, acestea fiind generate de către coordonator. Datele trebuie să fie stabile pe toată durata impulsurilor, modificarea datelor făcându-se pe durata pauzelor generate de către impulsuri.

Datele sunt transferate pe magistrală sub formă de octeți. După transmiterea tuturor octeților transmițătorul trebuie să verifice dacă datele au fost recepționate de către receptor. Verificarea datelor se face după transmiterea celui de-al 8-lea bit, acesta lăsând în starea sus linia de date SDA, apoi dacă recepția s-a făcut corect receptorul trage jos linia de date SDA pe durata celui de-al 9-lea tact de pe linia SCL.

Numărul octeților care pot fi transmiși în cadrul unui transfer este nelimitat, primul bit transferat fiind cel mai semnificativ. Pe lângă cele opt impulsuri necesare transmiterii unui octet, pentru verificarea transferului avem nevoie de un al nouălea impuls. Dacă, după ce un octet a fost recepționat, receptorul nu permite transferul unui nou octet, acesta poate menține linia SCL la nivel coborât pentru a forța ca transmițătorul să intre într-o stare de așteptare. La eliberarea liniei SCL transferul poate continua, dar doar numai atunci când receptorul este gata. După condiția de START primul octet transmis reprezintă adresa unui subordonat, împreună cu timpul operației solicitate ( de scriere sau de citire). Primii șapte biți ai unui octet reprezintă adresa, al 8-lea bit reprezentând tipul operației care a fost solicitată și se notează R/W. Astfel, dacă R/W = 1 – coordonatorul va citi date de la subordonatul adresat, iar dacă R/W = 0 – coordonatorul va transmite date subordonatului adresat.

Pentru asigurarea unui transfer corect de date se utilizează tehnica de recunoaștere. Tehnica de recunoaștere se face cu ajutorul transmițătorului care eliberează linia SDA și cu ajutorul receptorului care pe toată durata impulsului menține linia SDA la nivel coborât, această tehnică garantând efectuarea corectă a unui octet. Dacă receptorul subordonat nu poate să recunoască adresa care i-a fost transmisă pe magistrală, subordonatul trebuie să lase linia SDA la nivel ridicat. În aceste condiții coordonatorul poate genera o condiție de STOP pentru abandonarea transferului.

Dacă receptorul subordonat recunoaște adresa care i-a fost trimisă, dar după transferul unui număr oarecare de octeți nu mai poate recepționa alții, atunci coordonatorul trebuie să abandoneze din nou transferul. Pentru aceasta, după primul octet care nu mai poate fi recepționat, subordonatul nu mai poate genera recunoașterea, adică lasă linia SDA la nivel ridicat. În situația data, coordonatorul poate genera condiția de STOP pentru a putea abandona transferul.

Dacă cituitul coordonator este receptor și nu mai poate recepționa date, atunci el semnalează această informație transmițătorului prin faptul că nu mai generează recunoașterea după ultimul octet pe care îl poate recepționa.

În această situație, pentru generarea condiției de STOP transmițătorul subordonat trebuie să elibereze linia de date SDA.

În magistrala I2C ca primul octet transmis după condiția de START să conțină adresa subordonatului cu care coordonatorul dorește să facă transferul, adresa urmând după condiția de START. O excepție de la această regulă este situația de adresare generală la care toate elementele din sistem trebuie să răspundă.

La adresarea obișnuită, octetul codifică primii 7 biți care sunt mai semnificativi, urmând ca bitul care este mai puțin semnificativ să fie bitul R/W și să arate sensul în care se face transferul. La primirea adresei, fiecare element din circuit verifică adresa recepționată cu propria adresă. Dacă cele două adrese sunt egale, dispozitivul devine subordonat receptor sau subordonat transmițător, în funcție de al 8-lea bit R/W.

Adresa unui subordonat poate avea o parte fixă și o parte programabilă, partea fixă definind clasa dispozitivului iar partea programabilă indentificând dispozitivul din clasa respectivă. Mărimea părții programabile depinde de numărul de pini pentru adresă pe care îi are circuitul. În sistemele I2C de mare întindere adresele „11110xx” sunt rezervate pentru adresarea cu 10 biți.

Adresarea generală se folosește pentru toate dispozitivele din cadrul sistemului I2C. Această adresare se face pe doi octeți, primul fiind 0000.0000 iar al doi-lea octet specificând acțiunea pe care o realizează subordonații.

În funcție de valorile bitului B din octetul 2 avem următoarele cazuri:

Dacă B=0, în funție de valoarea în hexazecimal al doilea octet are următoarele specificații:

02h – Elementele care obțin partea programabilă a adresei lor prin program intră într-un regim prin care pot fi programate;

04h – Elementele care obțin partea programabilă a adresei lor prin starea unor circuite vor încărca în registrul intern de adresă partea fixă de adresă;

06h – Cu ajutorul elementelor se realizează două operații: se inițializează și își preiau adresa, atât partea fixă cât și partea programabilă și în ordinea stabilită de proiectantul sistemului;

00h – În adresarea generală acest cod nu se utilizează.

La punerea sub tensiune nici un element din interiorul sistemului nu trebuie să tragă în jos linia SCL sau SDA.

Dacă B=1. În cazul acesta secvența de transmitere pentru cei 2 octeți se numește „adresare general din partea unui coordonator hardware”. Coordonatorul hardware reprezintă orice element din sistem care nu poate să fie programat să transmită adresa unui subordonat atunci când acesta trebuie să devină coordonator. În acest caz el generează o adresare generală, specificând pe câmpul celui de al doilea octet propria adresă, acest lucru fiind recunoscut de un microprocessor care la rândul lui va prelua și va direcționa informația.

Un microprocessor se poate conecta la o interfață I2C în două feluri: poate avea circuite suplimentare incorporate care pot să recunoască mesajele date de linia SDA, fie prin depistarea condiției de START deoarece microprocesorul monitorizează continuu liniile SDA și SCL. Procesul de monitorizare a liniile mănâncă foarte multe resurse microprocesorului, astfel acesta devenind mai lent pentru atribuțiile ce îi revin.

Pentru ca timpul microprocesorului să fie redus, monitorizarea făcută de către acesta condiției de START intră în regimul „sleep”. Microprocesorul părăsește acest regim numai dacă pe SDA se transmit 7 biți consecutive cu valoarea 0. După îndeplinirea acestei condiții, microprocesorul monitorizează fiecare impuls dat de liniile SDA și SCL. Pentru eficiența acestei metode se impune ca fiecare transfer de date să fie precedat de transmisia unui octet de START, metoda fiind prezentată mai jos:

Se inițializează condiția de START de către coordonatorul magistralei;

Coordonatorul transmite octetul de START (0000.0001);

Linia SDA este data jos de către coordonator odată cu transmiterea impulsului de tact;

Se inițializează repetare a condiției de START data de coordonator apoi continându-se procedura obișnuită de transfer a datelor prin transmiterea adresei subordonatului.

Microprocesorul ce nu este coordonator iese din modul „sleep” atunci când detectează condiția repetării pentru inițializarea START-ULUI, observă aresa subordonatului, o verifică și dacă nu este a lui intră din nou în modul „sleep”.

Magistrala I2C poate transmite date unui receptor prin intermediul sistemului CBUS, acest sistem având 3 linii: SDA, SCL și DLEN. Pe linia SCL nu se transmite impulsul de confirmare, aceasta realizându-se cu ajutorul liniei DLEN. Ca urmare transmițătorul trebuie să transmită octet după octet, să suprime bitul de confirmare și să activeze linia suplimentară DLEN. Restul elementelor din I2C nu necesită răspuns la un mesaj CBUS. De aceea există o adresă specială pentru conectări CBUS (0000.001x). La transmiterea acestor adrese, elementele I2C nu răspund și se activează linia DLEN. Revenirea în sistemul I2C făcându-se după identificarea condiției de STOP.

Buton Arduino

Un comutator este o componentă electrică care permite închiderea sau deschiderea unui circuit electric. Similar cu ieșirea digital, intrarea digital consideră doar tensiuni ridicate (HIGH) sau tensiuni scăzute (LOW).

În continuare este prezentat un mod simplu de conectare a comutatorului la plăcuța Arduino pentru a aprinde un led.

Se conectează trei fire la placă. Primul fir merge de la un pin al butonului printr-un rezistor pull-down (10k ohm) până la legarea la pământ (GND). Al doilea fir care este folosit pentru alimentarea butonului la plăcuța Arduino în portul de 5V. Al treilea fir se conectează la un pin digital de I/O, în cazul nostrum pin-ul 2, pentru a citi starea butonului.

Atunci când butonul este deschis (neapăsat) nu există nici o legatură între cei doi pini ai butonului, astfel încât pin-ul este conectat la GND (prin rezistorul pull-down) și se citește valoarea LOW. Când butonul este închis (apăsat), se face o legătură între cei doi pini, conectarea la pin-ul de tensiune, astfel încât se citește un nivel ridicat. Pinul este încă conectat la masă, dar rezistorul are capacitatea de a rezista fluxului de curent, astfel încât calea de rezistență minima este de +5V.

Dacă se deconectează pin-ul digital I/O, led-ul poate clipi dezordonat. Acest lucru se datorează faptului că intrarea este plutitoare, adică nu este conectată la o tensiune sau la GND. Acesta își va reveni la poziția HIGH sau LOW, de aceea avem nevoie de un rezistor pull-down în circuit.

Rezistența de putere HS50-2R2J

Rezistențele sunt proiectate în conformitate cu standardele MIL 18546 și IEC 115, sunt fabricate cu radiatoare directe dintr-un compus termic pentru a atinge performanțe maxime.

Specificații:

Tip rezistor: bobinat, cu radiator;

Montare: înșurubare;

Rezistență: 2.2Ω;

Putere: 50W;

Toleranță: ±5%;

Tensiune de lucru maximă:1250V;

Dimensiuni carcasă: 49.1 x 29.7 x 14.8 mm;

Coeficient de temperatură: C;

Caracteristici ale rezistorilor: necesită radiator suplimentar;

Teminale: pentru lipit;

Raster orificii montaj: 39.7 x 21.4 mm;

Putere fără radiator suplimentar: 14W;

Masă brută: 0.02 kg.

Pentru un transfer maxim de căldură se recomandă montarea unui compus absorbant de căldură între rezistor și radiatorul de suprafață. Este esențial ca temperatura maximă de utilizare să nu depășească C. Drept urmare este necesară montarea unui radiator suplimentar pentru ca puterea să se disipe.

Ultracondensator KAMCAP 2.7V / 350F

Specificații:

Tensiune nominală: 2.7V;

Capacitate nominală: 350F;

Intervalul de eroare al capacității: 0% – 10%;

Rezistența la DC: 3.2 Ω;

Curentul continuu maxim de operare: 35A;

Curentul maxim de vârf: 220A;

Curentul maxim de scurgere (72 h / mA): 0.3 mA;

Densitatea de putere (W / kg): 4600;

Energia maximă (Wh): 0.35;

Densitatea energetică (W/kg): 5.9;

Temperatura de lucru: -40 – 65 grade;

Intervalul de temperature de depozitare: -40 – 65 grade;

Greutate (g): 63.3

Dimensiune (mm diametru x lungime): 33.3 x 61.5;

Ciclul de viață: 500000.

Aplicații tipice:

Sisteme mici UPS;

Capacitate auto audio mare;

Mașini de jucărie, alimentare aeronave jucărie;

Unelte electrice de putere;

Stație de distribuție electrică;

Sistem fotovoltaic de iluminat cu led-uri;

Pornirea sistemului de ardere internă a motorului;

Sistemul energetic pentru un vehicul electric;

Sisteme de control variabil;

Sisteme de joasă temperatură pentru pornirea automobilelor.

Senzor de curent Hall ACS 712

Atunci când curentul electric străbate un semiconductor, acesta fiind plasat sub acțiunea unui camp magnetic, avem apariția unei tensiuni electrice, proporțională cu curentul electric și fiind perpendiculară pe direcția câmpului magnetic și a curentului electric, efectul manifestat în aceste materiale semiconductoare numindu-se efect HALL.

În figura de mai sus avem prezentat funcționarea detaliată a efectului HALL, elementele prezentate fiind:

B – inducția câmpului magnetic;

– tensiunea de alimentare;

– curentul electric de alimentare;

– tensiunea HALL măsurată.

Câmpul magnetic influențează curentul electric care parcurge semiconductorul. Liniile de flux magnetic exercită o forță asupra electronilor (forța Lorenz). Datorită acestei forte, electronii sunt deviați către o extremitate a semiconductorului, în funcție de intensitatea și direcția liniilor de camp. Această deviere de electroni produce o diferență de potențial numită tensiune HALL.

Un element sensibil HALL detectează câmpuri magnetice de intensități relative reduse (0.1 mT – 10T) și produce tensiuni electrice între 1 – 10 mV. De asemenea, dimensiunile acestuia sunt extrem de reduse, grosimea semiconductorului fiind în jur de 0.01 mm iar laturile de ordinul milimetrilor.

Senzorii HALL sunt senzori activi, care sunt dependenți de alimentarea cu energie electrică. Astfel, cei mai simpli senzori au 3 pini, aceștia fiind:

Tensiune de alimentare (UA, intrare);

Masă;

Tensiune HALL (UH, ieșire).

Tensiunea de ieșire este direct proporțională cu intensitatea câmpului magnetic. Deoarece valoarea tensiunii este foarte mică, toți senzorii de tip HALL au integrate amplificatoare electronice și circuite de reglare pentru a ridica tensiunea de ieșire a senzorului în jurul valorii de +5V.

Caracteristici:

Tensiunea de alimentare: 5V;

Curentul consumat: 10mA;

Tensiunea maximă a curentului măsurat: 2.1kVRMS;

LED indicator la alimentare;

Rezistența internă: 1.2 mΩ;

Output de 100 mV/A;

Dimensiuni: 27 x 12 x 14mm;

Curentul măsurat: ± 20.

Senzorul de curent ACS712 este un senzor bidirectional, asta înseamnă că atunci când prin circuit nu circulă curent, pe ieșire se găsește jumătatea tensiunii de alimentare. Când se alimentează la 5V, cum este cazul cuplării la intrarea analogică a unui microcontroler, pe ieșire sunt 2.5V. La senzorul ACS712 tensiunea de ieșire variază între 0.5V și 4.5V, deci nu apar probleme la inversarea curentului și pe intrarea analogică nu apar tensiuni negative, deci nu îi poate cauza nimic.

Conectarea pinilor:

VCC – 5V;

GND – GND;

OUT – A0- A5.

Releul SPDT

Releul este un comutator acționat electric. Multe relee folosesc un electromagnet pentru operarea unui comutator mecanic, dar și alte principii de funcționare sunt folosite, cum ar fi releele „solid-state”. Releele se folosesc în cazul în care este necesară controlarea unui circuit printr-un semnal de putere mică separate, sau în cazul în care vrem să controlăm mai multe circuite printr-un singur semnal. Releele au fost utilizate pe scară largă în centralele telefonice, la apariția primelor calculatoare pentru efectuarea operațiilor logice.

Specificații:

Tensiune de alimentare: 5V;

Rezistența bobinei: 63Ω;

Curentul bobinei: 79.4 mA;

Tensiunea maximă admisă: 240V;

Curentul maxim admis: 10A;

Puterea consumată: 400mW;

Greutatea: 33g;

Lungimea: 19 x 22.5 mm.

SPDT are trei terminale de înaltă tensiune (NC, COM și NO), care se conectează la dispozitivul pe care vreți să îl controlați. Cealaltă parte a releului are trei pini de joasă tensiune (GND, VCC și EN) care se conectează la Arduino.

NC: Normal închis 120-240V;

NO: Normal deschis 120-240V;

COM: Terminal comun;

GND: Se conectează la pin-ul GND de pe Arduino;

VCC: Se conectează la pin-ul 5V de pe Arduino;

EN: Este pin-ul de semnal care se conectează pe Arduino.

În interiorul releului este un comutator de 120-240V care este conectat la un electromagnet. Atunci când releul recepționează un semnal înalt de la pin-ul care este conectat pe plăcuța Arduino, electromagnetul se încarcă și mută contactul comutatorului pe poziția deschis sau închis.

În configurația NO, când releul primește un semnal HIGH, închide comutatorul și permite trecerea curentului de la COM la NO. Când primește un semnal LOW acesta dezactivează releul iar apoi deschide contactul.

În configurația NC, când releul primește un semnal HIGH, deschide comutatorul și nu mai permite trecerea curentului. Când primește un semnal LOW acesta închide comutatorul și permite trecerea curentului de la COM la NC.

Convertorul BUCK-BOOST XL6009

Convertorul Buck-Boost este un convertor DC-DC, care are o magnitudine a tensiunii de ieșire mai mare sau mai mică decât tensiunea de intrare. Acesta se aseamănă cu convertorul Flyback deoarece folosește un singur inductor în locul unui transformator. De aceea, în literature de specialitate se mai numesc convertoare de curent continuu de raport oarecare sau convertoare flyback neizolate.

În figura 2.29 este prezentat convertorul buck-boost, partea de forță a acestuia fiind alcătuită din comutatorul comandat S, diode D, inductanța L și condensatorul C. Sursa de tensiune continuă E furnizează convertorului o tensiune , iar acesta debitează putere în rezistența de sarcină R, la tensiunea de ieșire . Comutatorul S, de tip tranzistor bipolar este comandat de un semnal periodic, cu perioada T și factorul de umplere al semnalului de comandă τ.

Tensiunea de ieșire este în general de aceeași polaritate cu tensiunea de intrare. Un astfel de convertor buck-boost poate folosi un singur inductor care este utilizat atât pentru modul buck cât și pentru modul boost, folosind comutatoare în loc de diode, uneori numit „convertorul buck-boost cu 4 comutatoare”. Acest convertor combină convertoarele buck și boost. Acesta poate funcționa în orice mod, un singur comutator controlează ciclul de lucru, altul este de comutare și funcționează invers proportional cu celălalt, iar cele două comutatoare rămase sunt într-o poziție fixă.

Principiul de bază al invertorului Buck-Boost este destul de simplu. În timpul ON-STATE, sursa de tensiune de intrare este conectată direct la inductor. Acest lucru acumulează energie în bobină, condensatorul furnizând energie la ieșire. În timpul OFF-STATE, bobina este conectată la sarcina de ieșire și la condensator, astfel încât energia este transferată de la bobină la condensator și la rezistență. Comparativ cu convertoarele buck-boost, caracteristicile invertorului buck-boost sunt:

Polaritatea tensiunii de ieșire este opusă celei de intrare;

Tensiunea de ieșire poate varia continuu de la 0 la ∞ (pentru un convertor ideal);

Intervalele tensiunii de ieșire pentru un convertor buck și boost sunt (0) până la (∞).

Modul continuu:

În cazul în care curentul care trece prin inductorul L nu scade la zero în timpul unui ciclu de comutație, spunem că funcționează în mod continuu. O formă ideală a tensiunii și curentului putem vedea în figura următoare:

De la t=0 până la t=T, convertorul este în ON-STATE, deci comutatorul S este închis. Rata de schimbare a curentului ( prin inductor este:

La sfârșitul ON-STATE, devine:

D este ciclul de lucru. Acesta reprezintă fracțiunea perioadei de comutare T în care comutatorul este pornit. De aceea, D variază între 0 și 1. În timpul OFF-STATE, comutatorul S este deschis, astfel curentul inductor se deplasează prin sarcină. Dacă presupunem căderea de tensiune zero, în diodă, și un condensator suficient de mare pentru ca tensiunea nominală să rămână constantă, evoluția lui este:

În timpul perioadei OFF-STATE, variația curentului este:

Așa cum considerăm că, convertorul funcționează în condiții de stare de echilibru, cantitatea de energie în fiecare dintre componentele sale trebuie să fie aceeași la început și la sfârșitul unui ciclu de comutare. Energia dintr-un inductor este data de

Valoarea curentului de la inceputul ciclului o să fie aceeași cu valoarea de la sfârșitul ciclului, adică suma variațiilor o să fie zero:

Substituind și , ecuația devine:

Aceasta se poate scrie ca:

Din expresia de mai sus se poate observa că polaritatea tensiunii de ieșire este întotdeauna negativă (deoarece ciclul de lucru merge 0-1), și că valoarea absolute crește cu D.

Modul discontinuu:

În unele cazuri, cantitatea de energie necesară sarcinii este suficient de mică pentru a fi transferată într-un timp mai mic decât întreaga perioadă de comutație. În acest caz, curentul prin inductor scade la zero, în timpul unei părți a perioadei. Singura diferență dintre principiul descris mai sus este acela că inductorul este complet descărcat, la sfârșitul ciclului de comutare. Deși ușoară, diferența are un efect puternic asupra ecuației tensiunii de ieșire este:

Curentul de sarcină este este egal cu media curentului care trece prin diodă . După cum putem vedea în figura 2.32, curentul care trece prin diodă este egal cu curentul inductor în OFF-STATE. Forma curentului de ieșire se poate scrie ca:

Forma tensiunii de ieșire se poate scrie ca:

Comparativ cu expresia tensiunii de ieșire a modului continuu, această expresie este mult mai complicate. Mai mult decât atât, în funcționarea discontinue, tensiunea de ieșire nu depinde numai de ciclul de lucru.

Efectul rezistențelor parasite

Rezistențele parazite se găsesc în toate circuitele, datorită rezistivității materialelor din care sunt realizate. Prin urmare, o fracțiune din puterea administrate de convertor este disipată prin aceste rezistențe parazite.

Buck-Boost XL6009

Prezentare pini:

IN+ intrarea pozitivă;

IN- intrarea negativă;

OUT+ ieșirea pozitivă;

OUT- ieșirea negativă.

Caracteristici:

Tensiunea de intrare: 3V-32V;

Tensiunea de ieșire: 1.24V-35V;

Curentul de intrare: 4A;

Eficiența conversiei: 94%;

Frecvența de comutare: 400 KHz;

Unda de ieșire: 50 mV;

Temperatura de funcționare: -40/+80 grade;

Dimensiuni: 43 x 21 x 14 mm;

Eroarea admisă: ±0.5%.

Capitolul 3- Prezentare structură software a sistemului

În acest capitol găsim explicarea codului folosit la funcționarea schemei, fiecare funcție fiind explicată pe larg.

3.1 Organigrama software

Prezentarea funcțiilor folosite

Funcțiile permit structurarea unui program în segmente de cod pentru efectuarea sarcinilor individuale. Cazul tipic pentru crearea unei funcții este atunci când trebuie să efectuați aceeași acțiune de mai multe ori într-un program. Standardizarea fragmentelor de cod în funcții constituie mai multe avantaje:

Funcțiile ajută programatorul să rămână organizat. Adesea, acest lucru ajută la conceptualizarea programului;

Funcțiile codifică o acțiune într-un singur loc astfel încât funcția trebuie gândită și depanată o singură dată;

Aceasta reduce, de asemenea, șansele de eroare în ceea ce privește modificarea, dacă codul trebuie modificat;

Funcțiile fac ca întreaga schiță să fie mai mică și mai compactă, deoarece secțiunile de cod sunt reutilizate de mai multe ori;

Acestea facilitează reutilizarea codului în alte programe, făcându-l modular, iar utilizarea funcțiilor face adesea codul mai ușor de citit.

Există două funcții necesare într-un program Arduino, setup() și loop(). Alte funcții trebuie create în afara parantezelor acestor două funcții.

O funcție este declarată în afara oricăror altor funcții, deasupra sau sub funcția loop(). Putem declara funcții în două moduri diferite.

Prima cale este doar prin scrierea unei părți a funcției numită prototip de funcție deasupra funcției buclă, care constă în:

Returnează funcția;

Numele funcției;

Tipul argumentului funcției, nu este nevoie să scrieți numele argumentului.

A doua parte, care se numește definirea funcției sau declararea funcției, trebuie declarată sub funcția loop(), care constă în:

Returnează funcția;

Numele funcției;

Tipul argumentului functional, aici trebuie adăugat numele argumentului;

Organismul de funcții (instrucțiuni din interiorul funcției care se execute atunci când funcția este apelată).

Funcția #include este utilizată pentru adăugarea bibliotecilor în programul folosit, aceasta oferind programatorului acces la un spectru larg de biblioteci standard C (grupuri de funcții pre-realizate), precum și biblioteci scrise special pentru Arduino.

Funcția #define este o componentă C utilă care permite programatorului să dea un nume unei valori constante înainte de compilarea programului. Constantele definite în Arduino nu ocupă nici un spațiu de memorie programat pe chip. Compilatorul va înlocui referințele acestor constante cu valoarea definită în momentul compilării. Acest lucru poate avea efecte secundare nedorite, deși, dacă, de exemplu, un nume constant care a fost definit cu funcția #define este inclus într-un alt nume constant sau variabil.

Funcția float este folosită pentru a aproxima valorile analogice și continue deoarece au o rezoluție mai mare decât numerele întregi, acestea fiind la fel de mari ca 3.4028235E+38 și mai mici decât -3.4028235E+38, și sunt stocate ca 32 de biți (4 octeți) de informații. Plăcile au doar 6-7 cifre zecimale de precizie, însemnând numărul total de cifre, nu numărul din dreapta punctului zecimal.

Funcția int reprezintă tipul de date principale pentru stocarea numerelor. Pe Arduino Uno, un int stochează o valoare de 16 biți (2 octeți). Aceasta are un domeniu cuprins între -32.768 până la 32.767. Arduino are grijă să rezolve numerele negative, astfel încât operațiile aritmetice să funcționeze transparent în modul așteptare. Limbajul de programare Arduino distribuie fiecărui program trei zone diferite în memoria internă în care se găsesc memorate variabilele programului:

Segment de date;

Segment de stivă;

Heap.

Accesul către date este mai rapid numai dacă acesta memorează variabilele într-un registru al microprocesorului. O variabilă este formată din 4 caracteristici:

Clasa de memorare: adresa unde este memorată variabila respective. Adresele de memorare se împart în:

Segment de date (variabile globale);

Segment de stivă (în mod implicit, variabile locale);

Heap;

Registru al microprocesorului (în mod explicit, variabile locale).

Vizibilitatea: Reprezintă liniile textului sursă din care variabila respective poate fi accesată, aceasta se împarte în:

Vizibilitate la nivel de bloc (instrucțiune compusă) (variabile locale);

Vizibilitate la nivel de fișier (se folosește doar în cazul în care programul sursă ocupă doar un singur fișier) (variabile globale, dacă sunt declarate înaintea tuturor funcțiilor);

Vizibilitate la nivel de clasă (aceasta este în legătură cu programarea orientate pe obiecte).

Durata de viată: Reprezintă timpul alocat variabilei în memoria internă, aceasta se împarte în:

Durata statică: timpul alocat variabilei este alocat pe toată durata programului (variabile globale);

Durata locală: variabila are alocat spațiu în timpul în care se execută instrucțiunile blocului respectiv (variabile locale);

Durata dinamică: alocarea și dezalocarea spațiului necesar variabilei se face de către programator prin operatori și funcții special.

Tipul variabilei.

Parametrii actuali trebuie să corespundă parametrilor formali, ca număr și tip de date. Tipul parametrilor actuali trebuie fie să coincide cu tipul parametrilor formali, fie să poată fi convertit implicit la tipul parametrilor formali.

Pentru memorarea parametrilor, Arduino folosește segmentul de stivă, la fel ca pentru variabilele locale;

Memorarea parametrilor se face în ordinea în care aceștia apar în antet;

Parametrii transmiși și memorați în stivă sunt variabile;

Variabilele obținute sunt variabile locale;

Conținutul variabilelor memorate în stivă se pierde în momentul în care se revine în blocul apelant;

Transmiterea parametrilor se poate realiza cu ajutorul a două mecanisme:

Transmitere prin intermediul valorii;

Transmitere prin intermediul referinței.

Transmiterea prin intermediul valorii se utilizează atunci când se dorește ca programul să lucreze cu o valoare, dar, în prelucrare, nu ne interesează ca parametrul actual să rețină valoarea modificată în program. Dacă nu ar exista decât acest tip de transmitere, ar fi totuși posibilă modificarea valorii anumitor variabile din blocul apelant, acest lucru fiind realizat cu ajutorul variabilelor de tip pointer.

Transmiterea prin intermediul referinței se utilizează atunci când dorim ca la revenirea din program variabila să rețină valoarea stabilită în timpul execuției programului. În momentul compilării programului, orice referință la o variabilă este tradusă ca adresare indirectă.

Funcția const este utilizată pentru a transforma o variabilă obișnuită într-o variabilă "read-only". Asta înseamnă că variabila poate fi utilizată la fel ca orice altă variabilă de tipul ei, dar valoarea să nu poată fi modificată. Constantele definite îndeplinesc regulile de domeniu de variabile care guvernează alte variabile, de aceea este de preferat să folosim funcția #define.

Toate programele Arduino conțin două funcții: setup și loop. Funcția setup este executată o singură data atunci când plăcuța Arduino este pornită sau atunci când este apăsat butonul de resetare. Funcția loop() este executată în mod repetat după terminarea funcției setup.

Variabilele globale definite în antet sunt împărtășite de toate funcțiile din program. Valoarea pinului LED este disponibilă pentru toate funcțiile din fișierul blink.pde. O valoare este atribuită pinului LED în antet. Variabila pinului LED este folosită o singură dată în funcția setup și de două ori în funcția loop. Funcția setup din program efectuează o singură sarcină, configurând pinul digital ca ieșire. Funcția loop pornește LED-ul, așteaptă o secundă, oprește LED-ul și așteaptă încă o secundă. Acest model este repetat la infinit, determinând LED-ul să clipească. Clipirea este realizată fără a fi nevoie să scrieți o altă funcție loop în interiorul funcției loop.

Un program Arduino poate conține funcții definite de utilizator, concepute pentru a efectua o sub-sarcină specifică unui program complex. Scripturile de programare sunt încapsulate în blocul de cod care formează un corp al funcției. Acest bloc de coduri este izolat de alte blocuri de cod, iar această izolare este un mecanism important pentru păstrarea blocurilor de coduri negative interacționând unul cu celălalt. Desigur, programele au, de asemenea, nevoie de un mecanism pentru a obține datele într-o funcție și pentru a obține rezultatele de la o funcție. Intrarea și ieșirea de la o funcție este implementată cu parametrii de intrare și de returnare valori. Programatorul decide ce valori sunt necesare (ce intrări) pentru a efectua un calcul. Programatorul decide, de asemenea, ce rezultat (ce ieșire) trebuie returnată părții din program care a apelat funcția. Funcțiile permit programelor Arduino să construiască bucăți reutilizabile de cod pentru activități care apar de mai multe ori într-un program. Funcțiile oferă, de asemenea, o modalitate de a utiliza același cod în alte programe. Toate funcțiile Arduino au potential multiplu pentru parametrii de intrare și au o singură valoare de returnare. Intrările și valorile de returnare sunt specificate în funcția numită one-line, funcție care este necesară la orice început de program.

Figura de mai sus prezintă o funcție loop. Funcția este definite de la început cu void, declarând că aceasta nu va reveni la o valoare. Pentru a indica faptul că funcția nu întoarce nici o valoare, funcția se declară cu o valoare de returnare nulă. Funcția setup are un scop diferit față de funcția loop. Cu toate acestea, funcția setup este similar cu funcția loop în sensul că nu returnează o valoare și nu are parametri de intrare. În concluzie avem:

Funcțiile setup și loop nu au valori de întoarcere. Prin urmare, definirea funcțiilor începe cu void setup și void loop;

Funcțiile setup și loop nu au valori de intrare.

Mediul de dezvoltare Arduino efectuează unele operații pe ascuns, lucru care simplifică scrierea codului. După convertirea codului cu ajutorul compilatorul, IDE combină codul binar generat cu alte elemente suplimentare pentru a forma un singur program executabil care este descărcat la bordul Arduino. IDE adaugă un un program principal ascuns care apelează funcțiile setup și loop.

Funcția begin() inițializează interfața de pe ecranul LCD și specifică dimensiunile afișajului (lățimea și înălțimea). Begin() trebuie să fie apelat înainte de orice alte comenzi ale bibliotecii LCD. Parametrii funcției sunt:

lcd: o variabilă de tip LiquidCrystal;

rânduri: numărul de rânduri afișate;

coloane: numărul de coloane afișate.

Funcția pinMode() configurează pinul specificat să se comporte fie ca intrare, fie ca ieșire.

Funcția digitalWrite() setează un pin digital pe HIGH sau LOW. Dacă pinul a fost configurat ca OUTPUT cu pinMode(), tensiunea acestuia va fi setată la valoarea corespunzătoare: 5V pentru HIGH, și 0V pentru LOW. Dacă pinul este configurat ca INPUT, digitalWrite() va activa (HIGH) sau va dezactiva (LOW) tragerea internă pe pinul de intrare.

Funcția digitalRead() citește valoarea pinul digital specificat (HIGH sau LOW).

Funcția AnalogWrite() scrie o valoare analogică unui pin. Această funcție poate fi folosită pentru a aprinde un LED la o luminozitate diferită sau pentru a conduce un motor la diferite viteze. După apelarea funcției, pinul va genera un val pătrat constant al ciclului de sarcină specificat până la următorul apel. Frecvența semnalului PWM pe majoritatea pinilor este de aproximativ 490 Hz. Pe panourile UNO și similar, pinii 5 și 6 au o frecvență de aproximativ 980 Hz. Pinii 3 și 11 de pe Leonardo rulează de asemenea la frecvența de 980 Hz. Pe cele mai multe plăci Arduino (ATmega168 sau ATmega328), această funcție funcționează pe pinii 3, 5, 6, 10 și 11. Pe Arduino Mega funcționează pe pinii 2 – 13 și 44 – 46. Plăcile Arduino mai vechi care utilizează ATmega8 suportă această funcție numai pe pinii 9, 10 și 11. Arduino Due suportă analogWrite() pe pinii 2 – 13, plus pinii DAC0 și DAC1. Spre deosebire de pinii PWM, DAC0 și DAC1 sunt convertoare digital – analogice, astfel acestea funcționează ca ieșiri analogice adevărate. Nu este necesar să apelați pinMode() pentru a seta pinul ca ieșire înainte de a apela analogWrite(). Funcția analogWrite nu are nimic de-a face cu pinii analogici sau cu funcția analogRead.

Funcția AnalogRead() citește valoarea de pe pinul analogic specificat. Placa Arduino conține 6 canale (8 canale pe Mini și Nano, 16 pe Mega), și un convertor analog – digital pe 10 biți. Acest lucru înseamnă că va transforma tensiunile de intrare care oscilează între 0 – 5 V în valori întregi care oscilează între 0 și 1023. Aceasta oferă o rezoluție de citire de 5 V/ 1024 de unități sau 0.0049 V (4.9 mV) pe unitate. Intervalul de intrare și rezoluția pot fi modificate utilizând analogReference(). Este nevoie de aproximativ 100 de microsecunde (0.001 s) pentru a citi o intrare analogică, astfel încât rata maximă de citire este de aproximativ 10000 de ori pe secundă.

Funcția if este utilizată împreună cu un operator de comparație, testează dacă a fost atinsă o anumită condiție, cum ar fi o intrare care depășește un anumit număr. Operatorii de comparație sunt:

x == y (x este egal cu y);

x! = y (x nu este egal cu y);

x < y (x este mai mic decât y);

x > y (x este mai mare decât y);

x <= y (x este mai mic sau egal decât y);

x >= y (x este mai mare sau egal decât y).

Structurile de luare a deciziilor prevăd că programatorul specifică una sau mai multe condiții care trebuiesc evaluate sau testate de către program. După declararea condițiilor se va executa o condiție adevărată sau optional o condiție falsă.

if decizie: Este nevoie de o expresie între paranteze și o declarație sau un bloc de declarații. Dacă expresia este adevărată atunci declarația sau blocul de instrucțiuni este executat, altfel aceste declarații sunt sărite;

if – else decizie: O instrucțiune if poate fi urmată de o instrucțiune else, care să se execute atunci când expresia este falsă;

if – else if: Instrucțiunea if poate fi urmată de o instrucțiune opțională else if, care este foarte utilă pentru a testa diferitele condiții utilizând instrucțiunea singulară if, else if decizie.

Arduino oferă patru funcții diferite de manipulare a timpului, ele fiind prezentate mai jos:

funcția delay(): modul în care aceasta funcționează este foarte simplu. Acceptă un singur argument întreg (sau număr). Acest număr reprezintă timpul (măsurat în milisecunde);

funcția delayMicroseconds(): Această funcție acceptă un singur argument întreg (sau număr). Există o mie de microsecunde într-o milisecundă și un million de microsecunde într-o secundă;

funcția millis(): Această funcție este utilizată pentru a returna numărul de milisecunde la momentul respectiv, placa Arduino începând să ruleze programul curent;

funcția micros(): Această funcție returnează numărul de microsecunde din momentul respectiv, placa Arduino începând să ruleze programul curent. Acest număr revine la zero după aproximativ 70 de minute.

Operatorul este un simbol care îi spune compilatorului să efectueze anumite funcții matematice sau logice. Limbajul C este bogat în operatori încorporați și oferă următoarele tipuri de operatori:

Prezentarea codului sursă

#include <Wire.h>

//inițializare bibliotecă Wire

#include <LCD.h>

//inițializare bibliotecă LCD

#include <LiquidCrystal_I2C.h>

//inițializare bibliotecă LiquidCrystal_I2C

#define I2C_ADDR (0x3F)

//setare adresă display

#define BACKLIGHT_PIN 3

//setează emitorul la 2N3904, colectorul la VCC, și baza D10 la o rezistență de 10k

#define En_pin 2

#define Rw_pin 1

#define Rs_pin 0

#define D4_pin 4

#define D5_pin 5

#define D6_pin 6

#define D7_pin 7

//definire pini Display

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

//inițializare librărie cu numărul de pini de interfață

#define TensiunePin A1

//Definește pin-ul A1 ca pin de citire a tensiunii

int ValoareTensiune=analogRead(A1);

/Definește pin-ul A1 ca pin de citire a tensiunii

float Tensiune;

////Aproximare valoare analogică

const int releuUNU = 6;

const int releuDOI = 7;

//Declararea pinilor digitali pentru conectarea releelor

const int schimbarereleuUNU = 2;

const int schimbarereleuDOI = 3;

const int schimbarereleuTREI = 4;

//Declarare stare relee

int starebutonUNU = 0;

int starebutonDOI = 0;

int starebutonTREI = 0;

//Declarare stare butoane

void setup(){

//inițializare setup

lcd.begin(16, 2);

//setează numărul de caractere și numărul de rânduri

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

//setează pinul LCD-ului pozitiv

lcd.setBacklight(HIGH);

//setează LCD-ul pe HIGH(ON)

lcd.home ();

//setează poziția cursorului

pinMode(releuUNU, OUTPUT);

pinMode(releuDOI, OUTPUT);

//Setează releele ca ieșire

pinMode(schimbarereleuUNU, INPUT);

pinMode(schimbarereleuDOI, INPUT);

pinMode(schimbarereleuTREI, INPUT);

//Setează butoanele ca intrare

digitalWrite(releuUNU, LOW);

digitalWrite(releuDOI, LOW);

//La aprinderea plăcuței Arduino releele sunt oprite

lcd.setCursor(0,0);

//setează display-ul pe poziția 0,0

lcd.print(" PRESS START ");

//afișare mesaj

}

void loop(){

starebutonUNU = digitalRead(schimbarereleuUNU);

starebutonDOI = digitalRead(schimbarereleuDOI);

starebutonTREI = digitalRead(schimbarereleuTREI);

//Asociază butoanele cu releele

lcd.setCursor (0,0);

//setează display-ul pe poziția 0,0

if (starebutonUNU == HIGH) {

//realizare acțiune la apăsarea butonului

digitalWrite(releuUNU, HIGH);

//îndeplinire acțiune – releul își schimbă starea

lcd.print(" DESCARCARE ");

//afișare mesaj

}

else if (starebutonDOI == HIGH) {

//realizare acțiune la apăsarea butonului

digitalWrite(releuUNU, LOW);

//îndeplinire acțiune – releul își schimbă starea

lcd.print(" STOP ");

//afișare mesaj

}

if (starebutonTREI == HIGH) {

//realizare acțiune la apăsarea butonului

digitalWrite(releuDOI, HIGH);

//îndeplinire acțiune – releul își schimbă starea

lcd.print(" INCARCARE ");

//afișare mesaj

}

else if (starebutonDOI == HIGH) {

//realizare acțiune la apăsarea butonului

digitalWrite(releuDOI, LOW);

//îndeplinire acțiune – releul își schimbă starea

}

//masurare tensiune

lcd.setCursor (0,1);

//setare LCD pe rândul 2

ValoareTensiune = analogRead(TensiunePin);

//setare pin de măsurare a tensiunii

Tensiune = ValoareTensiune*(5.0/1023.0);

//calculare tensiune

lcd.print("U=");

lcd.print(Tensiune);

lcd.print("V");

//afișare mesaj

delay(50);

//așteptare pentru 50 de ms

//masurare curent

lcd.setCursor (7,1);

//setează cursorul pe coloanal 2 rândul 7

{

unsigned int x=0;

//declarare valoare la începutul inițializării

float AcsValue=0.0;

//declarare valoare la începutul inițializării

float Samples=0.0;

//declarare valoare la începutul inițializării

float AvgAcs=0.0;

//declarare valoare la începutul inițializării

float AcsValueF=0.0;

//declarare valoare la începutul inițializării

for (int x = 0; x < 150; x++){

//condiție pentru creșterea valorii

AcsValue = analogRead(A0);

//setare pin de citire a curentului

Samples = Samples + AcsValue;

//efectuare calcule

delay (3);

//așteptare 3 ms

}

AvgAcs=Samples/150.0;

//efectuare calcule

AcsValueF = (2.5 – (AvgAcs * (5.0 / 1024.0)) )/0.100;

//efectuare calcule

lcd.print(" I=");

lcd.print(AcsValueF);

lcd.setCursor (15,1);

lcd.print("A");

//afișare rezultat

delay(50);

//așteptare 50 de ms

}

}

CAPITOLUL 4 – DETERMINĂRI EXPERIMENTALE

În acest capitol se vor analiza și reprezenta grafic tensiunile de încărcare și descărcare a ultracondensatorului și tensiunile de ieșire ale convertorului BUCK-BOOST.

Analiza tensiunilor convertorului BUCK-BOOST:

Convertorul BUCK-BOOST a fost alimentat cu o sursă de curent continuu de 12 V. Deoarece ultracondensatorul se poate încărca cu o tensiune de maxim 2.7 V, convertorul a fost setat să scoată la ieșire o tensiune de aproximativ 2.7 V. Timpul de măsurare a fost de 10 secunde cu un pas de 0.04 secunde. Se observă că tensiunea de ieșire este aproape constantă, cu mici oscilații. Convertorul BUCK-BOOST ne facilitează încărcarea ultracondensatorului în maxim 5 minute.

Starea de încărcare a Ultracondensatorului

În figura de mai sus s-au realizat măsurători asupra stării de încărcare a ultracondensatorului la o tensiune constantă. Ultracondensatorul a fost testat timp de 60 de secunde cu pasul de 0.024 secunde și după cum se poate observa odată cu întreruperea alimentării tensiunea stocată în interiorul acestuia scade, ceea ce înseamnă că acesta a fost supus unei încărcări forțate. În decursul acestui timp tensiunea de la bornele ultracondensatorului indica 2.4 V, putem spune că avem o încărcare aproape complete, asta însemnând că, sistemul funcționează corespunzător.

Starea de descărcare parțială a ultracondensatorului

În figura de mai sus se analizează starea de descărcare parțială a ultracondensatorului. Acesta a fost descărcat timp de câteva secunde. Analiza descărcării s-a efectuat cu un pas de 0.024 de secunde. După cum se poate observa descărcarea acestuia este constantă iar odată cu întreruperea procesului de descărcare tensiunea de la bornele ultracondensatorului începe să crească ușor.

Starea de descărcare completă a ultracondensatorului

În figura de mai sus este prezentată starea de descărcare completă a ultracondensatorului. Descărcarea s-a efectuat în decursul a 60 de secunde. Pentru o precizie cât mai bună s-a ales un pas de 0.024 de secunde. Descărcarea ultracondensatorului s-a realizat cu ajutorul unei rezistențe de descărcare (rezistență de putere) de 2.2 Ω. După cum se poate observa odată cu întreruperea descărcării tensiunea de la bornele ultracondensatorului crește, cee ace înseamnă că, ultracondensatorul a fost descărcat forțat.

Concluzii

Bibliografie

Similar Posts