duminică, 19 februarie 2012

Panou Termic Solar DIY - Partea II (Electronica)

Comanda pompei - partea electronică
Având în vedere că e iarnă şi construirea instalaşiei e mai dificil de făcut, m-am gândit că cel mai simplu ar fi să mă ocup de partea electronică şi de partea sofware a instalaţiei. Astfel m-am pus pe treabă şi mi-am făcut o listă cu funcţionalităţile care trebuie să le aibă circuitul electronic. Am început prin a face o schiţă generală a montajului (schema bloc).
1. Schema bloc
Circuitul electronic controlează funcţionarea instalaţiei este compusă dintr-o parte de comandă şi una de control a pompei. Partea de comandă are rolul de a permite utilizatorului să modifice sau să verifice anumiţi parametri ai circuitului. Pe lângă asta, partea de comandă are şi rolul de a decide pornirea sau oprirea pompei, pe baza temperaturilor măsurate cu ajutorul celor doi senzori amplasaţi în panou, respectiv în bazinul de stocare.

M-am gândit că o să-mi fie mai uşor de realizat schema electrocnică dacă împart circuitul îm mai multe blocuri specializate: controlul pompei, afişarea datelor pe ecran, tastatura, citirea temperaturii etc. Toate aceste blocuri funcţionale vor avea ca punct central microcontroller-ul ATmega8, care va controla întregul montaj.
2. Schema electronică
Mai jos se poate vedea schema detaliată:


2.1 Partea de alimentare
Partea de alimentare e compusă din două stabilizatoare de tensiune (IC1 şi IC2), pentru tensiunile de 12V şi 5V folosite în motaj. Pe lângă stabilizatoare mai sunt şi o serie de condensatori folosiţi în mare parte pentru filtrarea zgomotului ce poate să apară.
Între cele două stabilizatoare am montat o diodă urmată de doi condensatori de capacitate mai mare. Din cauze ce ţin de aranjarea pieselor pe placă, unul din condensatori a fost montat după 7805. Rolul acestor condensatori împreună cu dioda e de a acumula energie, care poate fi folosită în cazul unei căderi a tensiunii de alimentare.
Astfel, în momentul în care tensiunea de alimentare scade suficient de mult, dioda se va bloca, iar energia stocată în condensatori va menţine montajul alimentat o perioadă scurtă de timp. Această perioadă e proporţională cu capacitatea condensatorilor folosiţi. Am folosit doi condensatori de 1000uF şi 3300uF, care în total însumează peste 4000uF. În cazul montajului de faţă, această capacitate permite menţinerea tensiunii de 5V aproximativ o jumătate de secundă după ce tensiunea de alimentare a fost oprită. Această perioadă e suficient de mare pentru a permite microcontroller-ului să salveze starea curentă a sistemului în memoria EEPROM internă.
2.2 Monitorizarea tensiunii de alimentare
Nivelul tensiunii de alimentare e monitorizat permanent de către microcontroller prin cele două intrări ale comparatorului său analogic (AIN0 şi AIN1). AIN0 este intrarea neinversoare a comparatorului, iar AIN1 este cea inversoare. Pe pinul AIN0 va cădea o tensiune ce e obţinută din cea de 5V printr-un divizor de tensiune. Rezistenţele din divizorul de tensiune (R5 şi R6) au fost alese în aşa fel încât să obţin 4.5V la AIN0. Aceasta va fi tensiunea de referinţă. Pe pinul AIN1 va ajunge o tensiune obţinută din tensiunea de 12V. Rezistenţele R7 şi R8 fac ca din celălalt divizor de tensiune să ajungă, pe AIN1, aproximativ 5.5V.
În momentul în care tensiunea de alimentarea începe să scadă (din cauza unei pene de curent), tensiunea de 12V va fi prima afectată, şi va începe să scadă. Astfel tensiunea  pe pinul AIN1 va coborî sub valoarea tensiunii de pe pinul AIN0. În acel moment comparatorul analogic va declanşa o întrerupere (Analog Comparator IRQ) care va scrie în EEPROM-ul intern toate configuraţiile sistemului, data, ora, etc. Datorită circuitului descris în paragraful precedent (2.1), tensiunea de 5V va fi menţinută suficient de mult timp pentru a permite microcontroller-ului să stocheze toate datele în EEPROM.
2.3 Comunicarea cu senzorii de temperatură
De microcontroller-ul sunt legaţi doi senzori de temperatură (DS18B20) ce pot comunica prin protocolul 1-Wire. Acest protocol permite transmiterea bidirecţională a datelor pe un singur cablu pe distanţe foarte lungi (peste o sută de metri). Eu am folosit un cablu lung de aproximativ 20 metri. Distanţa la care se pot transmite date depinde foarte mult de tipul cablului, şi poate varia de la câţiva centrimetri, până la zeci de metri. După mai multe teste cu diferite cabluri am ales să folosesc cablu panglică (asemănător cu cel de la Hard-disk-urile pe IDE).
Viteza protocolului 1-Wire nu e foarte mare. Transmisia unui bit prin protocolul 1-Wire se face în 60us, ceea ce înseamnă că viteza de transmisie a datelor e de aproximativ 16k Baudrate (adică 16 kilo-biţi de date pe secundă sau 2 kilo-octeţi pe secundă).
Linia de date a protocolului are nevoie de o rezistenţă la plus externă (pull-up extern) de 4.7k ohmi (poate să difere cu distanţa).
Deşi protocolul suportă mai mulţi senzori pe aceelaşi cablu de date, am ales să folosesc câte un cablu separat pentru fiecare cablu. Motivul e coplexitatea ridicată a algoritmului folosit pentru identificarea senzorilor de pe magistrala de date.
2.4 Tastatura
Tastatura e formată din patru butoane: Enter, Escape, Plus şi Minus. Cu ajutorul lor se poate naviga prin meniu şi se pot face toate setările necesare instalaţiei. Circuitul pentru fiecare buton e foarte simplu. Fiecare pin al microcontroller-ului e configurat în aşa fel încât să aibă o rezistenţă internă la plus ("internal pull-up resistor" de 20k ohmi). Pe partea celalată, butonul, odată închis va lega la masă pinul. Astfel, de fiecare dată când butonul va fi apăsat, pe pin vor fi 0V, iar în rest 5V.
2.5 Afişarea datelor pe ecran
Am folosit un ecran alfa-numeric cu două rânduri şi 16 coloane RC1202D. Ecranul se alimentează de la 5V, poate fi comandat prin 4 linii de control şi 8 (respectiv 4) linii de date. Liniile de control ale ecranului sunt digitale, cu excepţia pinului VO, care e analogic şi prin care se poate regla contrastul display-ului. Pentru aceasta am folosit un semi-reglabil de 4.7k (P1).
Linia de control R/W a fost conectată la masă deoarece, pentru aplicaţia asta e nevoie doar de transmisia datelor de la microcontroler la ecran şi nu viceversa.
Display-ul mai are doi pini (LED+ şi LED-) pentru alimentarea led-urilor care luminează ecranul. Am vrut ca iluminarea ecranului să poată fi controlată de microcontroller, aşa că am legat pinul LED+ la portul PD5 al microcontroller-ului.
Toţi pinii de date ai display-ului (DBx) sunt legaţi la portul PBx (x = 0 .. 7).
2.6 Controlul pompei prin releu
Circuitul de comandă al pompei este realizat prin comanda unui releu de 220Vac. Aceasta este şi partea de putere a montajului. Comanda releului se face printr-un optocuplor (IC6) care deschide tranzistorul T1, care comandă, la rândul lui bobina releului K5.
La cuplarea, respectiv decuplarea, bobinei releului vor apărea vârfuri scurte de tensiune care pot afecta restul circuitului. Aceste impulsuri sunt aşa de scurte încât ele pot trece prin circuitul de alimentare, şi pot ajunge la microcontroller, cauzând un Reset. Pentru a filtra aceste impulsuri, am adăugat de o parte şi de alta a releului câte un condensator de 100pF (C9 şi C10).
Pentru protejarea tranzistorului T1 am legat dioda (D8) paralel cu bobin releului, în sens invers de conducţie. Această diodă are rolul de a descărca bobina cât mai repede, în momentul în care T1 este blocat. Fără această diodă, energia acumulată în bobina releului, ar putea străpunge tranzistorul.

Comanda începe prin punerea pinului PD4 pe "1" logic, adică o tensiune de aproximativ 5V. Asta va face ca optocuplorul IC6 să se deschidă şi să deschidă, la rândul lui tranzistorul T1. În momentul în care T1 s-a deschis, bobina releului este alimentată, iar releul va cupla, alimentând astfel pompa.
Rolul optoculplorului e de a izola cât mai bine parte de putere de partea de comandă. În cazul în care T1 este străpuns (din orice motiv), tensiunea de 12V nu poate ajunge la pinii microcontroller-ului, datorită optocuplorului.
2.7 Detectarea prezenţei releului
E foarte important ca atunci când apare o defecţiune, aparatul cu care lucrezi să îţi poată da cât mai mute informaţii legate de problema apărută. Din acest motiv am încercat să fac montajul să detecteze cât mai multe defecţiuni. M-am gândit că partea de comandă a releului e foarte împortantă aşa că am vrut să am o confirmare (feedback) că releul e conectat la regulator şi că funcţionează.
Pentru a face lucrul ăsta m-am folosit de un amplificator operaţional, care compară tensiunea ce cade pe rezistenţa R10, cu tensiunea de alimentare de 12V. În cazul în care releul lipseşte (sau cablul de comandă e întrerupt), pe R10 nu va fi nici o cădere de tensiunea (nu circulă curent prin rezistenţă). În situaţia asta amplificatorul va semnaliza microcontroller-ului lipsa releului prin intermediul pinului PD4 (pompă feedback).

În cazul în care releul e prezent în circuit, la comanda de pornire a pompei, prin R10 va trece curent. Asta va duce la apariţia unei căderi de tensiune pe R10, care va face ca amplificatorul să nu comute din 0V în 12V.
Desigur partea asta de circuit nu e esenţială, ea poate lipsi. Pentru mine a fost o provocare să găsesc o metodă de a face detecţia releului, folosindu-mă de ce am avut la dispoziţie prin casă.
3. Programarea
În schemă nu apare şi interaţa pentru AVR Prog, prin care am programat microcontroller-ul.
În asta constă circuitul electronic al regulatorului. Nu am experienţă în electronică aşa că schema are cu siguranţă multe greşeli de proiectare, aşa că orice sfat sau observaţie e binevenită! :-)