Microcontrollere

Cuprins

Capitoul 1. Introducere

Capitolul 2. Microcontrollere

2.1 Schema bloc generală [1]

Schema bloc simplificată a unui microcontroller se prezintă în fig. 2.1:

Fig. 2.1 Schema simplificată a unui microcontoler

Ca intrări se folosesc de regulă semnale provenind de la comutatoarele individuale sau de la traductoare (de temperatură, de presiune, foto, traductoare specializate). Intrările pot fi digitale sau analogice. Intrările digitale vehiculează semnale discrete, informația ”citită” fiind informația ce se eșantionează la momentul citirii liniei respective. Intrările analogice vehiculează informații exprimabile prin funcții continue de timp. "Citirea" acestora de către microcontroller presupune prezența unor circuite capabile să prelucreze aceste informații, fie comparatoare analogice, fie convertoare analog-numerice, ale căror ieșiri sunt citite de către microcontroller.

Ieșirile sunt fie analogice, caz în care reprezintă de fapt ieșiri ale convertoarelor numeric-analogice, fie sunt digitale, caz în care informația este în general memorată pe acestea până la o nouă scriere operată de către unitatea centrală la un port al microcontrollerului. Ieșirile pot comanda dispozitive de afișare, relee, motoare, difuzoare, etc.

Se poate distinge o primă diferență față de calculatoarele personale, unde intrările se fac de regulă de la tastatură și ieșirile pe monitorul TV sau la imprimantă. Dacă un calculator personal este folosit pentru a prelucra informații și a afișa rezultatele pe monitor sau hârtie, un microcontroller comandă un proces.

Un element important, fără de care un microcontroller nu poate funcționa, este programul (sau programele), care se stochează în memoria proprie. Un microcontroller poate fi definit ca un sistem de calcul complet pe un singur chip. Acesta include o unitate centrală, memorie, oscilator pentru tact și dispozitive I/O.

O structură mai detaliată, care include blocurile principale, este reprezentată în fig. 2.2:

Fig. 2.2 Schema bloc a unui microcontroller

2.2 Arhitectura microcontrollerelor

Arhitectura unui microcontroller definește atributele sistemului așa cum sunt ele văzute de un programator în limbaj de asamblare. Deoarece un microcontroller este un caz particular de calculator, acesta este compus din cele cinci elemente de bază: unitate de intrare, unitate de memorie, unitate aritmetică și logică, unitate de control și unitate de ieșire. Unitatea de control împreună cu unitatea aritmetică și logică compun împreună unitatea centrală de procesare.

Blocurile componente ale microcontrollerului sunt legate între ele printr-o magistrală internă (bus), ce vehiculeaza semnale de adresă, de date și de control. Prin magistrala de adrese unitatea centrală de prelucrare (CPU) selectează o locație de memorie sau un dispozitiv I/O, iar pe magistala de date se face schimbul de informație între CPU și memorie sau dispozitivele I/O. Între CPU și memorie sunt transferate atât date cât și instrucțiuni. Acestea se pot transfera pe o singură magistrală de date sau pe magistrale de date diferite.

Arhitectura von Neumann prevede existența unui bus unic folosit pentru circulația datelor și a instrcțiunilor. Când un controller cu o astfel de arhitectură adresează memoria, bus-ul de date e folosit pentru a trensfera întîi codul instrucțiunii, apoi pentru a transfera datele. Accesul fiind realizat în 2 pași, este destul de lent.

Arhitectura Harvard prevede un bus separat pentru date și instrucțiuni. Când codul instrucțiunii se află pe bus-ul de instrucțiuni, pe bus-ul de date se află datele instrucțiunii anterioare. Structura microcontrollerului este mai complexă, dar performanțele de viteză sunt mai bune.

Magistralele interne, după numele lor, nu sunt accesibile în exterior la nivel de pin. Această stare caracterizează regimul normal de funcționare. În regimuri speciale de funcționare, numite diferit la diferitele tipuri de microcontrollere, semnalele magistralelor de adrese și de date sunt accesibile la nivel de pin sacrificând funcțiile inițiale ale pin-ilor respectivi. Totodată este necesar să fie livrate în exterior și semnale de comandă (cel puțin comandă de scriere -WR și comandă de citire –RD). Această facilitate este utilă pentru extensii de memorie sau pentru a atașa sistemului interfețe suplimentare. Ea nu e posibilă în mod normal de funcționare deoarece aceasta ar presupune existența unui număr foarte mare de pini, ceea ce ar fi neeconomic. Magistralele de adrese și de date pot fi aduse la pin multiplexat sau nemultiplexat.

Ca urmare a celor prezentate se poate apreci performanța unui microcontroller din punct de vedere al magistalei interne după următoarele criterii:

dimensiunea magistralei de date;

dimensiunea magistralei de adrese;

accesibilitatea în exterior la magistrale;

magistrale accesibile multiplexat sau nemultiplexat.

2.3 Unitatea centrală de prelucrare

Unitatea centrală de prelucrare este compusa din unitatea aritmetică și logică (ALU) și din unitatea de control.

Unitatea aritmetică și logică este secțiunea responsabilă cu efectuarea operațiilor aritmetice și logice asupra operanzilor ce îi sunt furnizați. Modul de implementare a operațiilor este transparant pentru utilizator; important pentru utilizatorul de microcontroller este repertoriul operațiilor implementate pentru a aprecia posibilitatea implementării optime a aplicației particulare de control. De asemenea este important timpul de execuție al fiecărei operații pentru a aprecia dacă timpul necesar procesării complete satisface cerințele de timp ale aplicației.

Unitatea de control este responsabilă cu decodificarea codului operației conținut de codul unei instrucțiuni. Pe baza decodificării unitatea de control elaborează semnale pentru comanda celorlalte blocuri funcționale pentru a finaliza executarea unei instrucțiuni. Modul de implementare al acestui bloc este de asemenea transparent utilizatorului.

Unitate centrală de prelucrare conține un set de registre interne, similare unor locații de memorie, folosite pentru memorarea unor date des apelate sau pentru programarea unor anumite funcții. Diferitele familii de microcontrollerefolosesc seturi diferite de regiștrii.

Există însă câteva registre comune.

A (Accumulator) – registrul acumulator – este folosit deseori pentru a stoca un operand și rezultatul operației aritmetice și logice.

PC (Program Counter) – registrul numărător de program – este registrul care stochează adresa următoarei instrucțiuni de executat.

SP (Stack Pointer) – registrul indicator de stivă – conținutul acestui registru indică adresa curentă a stivei. Stiva reprezintă o zonă de memorie accesibilă rapid în care se depun temporar informații importante în desfășurarea programului. Stiva este definită de obicei în RAM.

Un aspect important ce se reflectă în arhitectura unui microcontroller este modul de programare. Prin arhitectură înțelegem felul în care sunt dispuse ”resursele” unui microcontroller. Cu cât structura, funcționalitatea și accesul la acestea sunt mai profund standardizate și simetrizate, cu atât numărul de instrucțiuni de care dispune microcontrollerul este mai redus și viteza de execuție a programelor crește.

Conceptul CISC (Complex Instruction Set Computer) pe baza căruia sunt construite majoritatea microcontrollerelor, prevede existența unui număr mare de instrucțiuni, ceea ce face mai ușoară munca programatorului. Evoluția microcontrollerelor este spre arhitectura RISC (Reduced Instruction Set Computer), în cadrul căreia un microcontroller are un număr mic de instrucțiuni. Avantajele sunt un chip mai mic, cu un număr de pini mai mic, cu un consum mai redus și cu o viteză mai mare.

2.4 Memoria

Microcontrollerele folosesc diferite tipuri de informații, care sunt stocate în diferite tipuri de memorie. Instrucțiunile care controlează funcționarea microcontrollerului trebuie stocate într-o memorie nevolatilă, unde informațiile se păstrează și după oprirea și repornirea sursei de alimentare. Rezultatele intermediare și variabilele pot fi înscrise într-o memorie volatilă, la acestea este important să se poată face scrierea/citirea rapid și simplu în timpul funcționării.

Memoria RAM (Random Acces Memory) este o memorie volatilă care poate fi citită sau scrisă de unitatea centrală. Locațiile din RAM sunt accesibile în orice ordine. Pe chip, memoria RAM ocupă mult loc și implicit costurile de implementare sunt mari. De aceea un microcontroller include de obicei puțin RAM. Memorie RAM static alimentată de la baterie se folosește pentru stocarea nevolatilă a cantităților mari de date, la o viteză de acces mare și cu un număr nelimitat de ștergeri și reînscrieri.

Memoria ROM (Read Only Memory) este cea mai ieftină și cea mai simplă memorie și se folosește la stocarea programelor în faza de fabricație. După posibilitatea de ștergere, această memorie poate fi de mai multe feluri:

Memoria PROM (Programmable Read Only Memory) este similară cu memoria ROM, dar ea poate fi programată de către utilizator. După posibilitatea de ștergere, această memorie poate fi de mai multe feluri:

Memoria EPROM (Erasable PROM) care se poate șterge prin expunerea la raze ultraviolete. Microcontrollerele cu EPROM au un mic gram de cuarț care permite ca chip-ul să fie expus la radiația ultravioletă. Ștergerea este neselectivă, adică se poate șterge doar întreaga informațiie și nu numai fragmente. Memoria poate fi ștearsă și reînscrisă de un număr finit de ori. Programarea EPROM-ului necesită o procedură specială, iar microcontrollerele cu EPROM au nevoie de regulă pentru înscrierea EPROM-ului de o tensiune auxiliară, de 12V de exemplu.

OPT (One Time Progrmmable PROM) se folosește pentru multe serii se microcontrollere. Memoria OTP este de fapt o memorie EPROM, dar chip-ul a fost capsulat într-o capsulă de material plastic fără fereastră, care este mult mai ieftin. Memoria nu se poate șterge sau reprograma. Prețul unui microcontroller cu OTP este mic, viteza este bună, dar aplicațiile sunt lipsite de flexibilitate.

Memoria EEPROM (Electrically EPROM) poate fi ștearsă electric de către unitatea centrală, în timpul funcționării. Ștergerea este selectivă, iar pentru reînscriere trebuie parcuși mai mulți pași. Memoria este lentă și numărul de ștergeri/scrieri este limitat (tipic 10000)

Memoria FLASH este o memoria asemănătoare EPROM și EEPROM în sensul că poate fi ștearsă și reprogramată în sistemul în care este folosită. Are capacitatea unui EPROM, dar nu necesită fereastră pentru ștergere. Ca și EEPROM, memoria FLASH poate fi ștearsă și programată electric. Memoria FLASH nu permite ștergerea individuală de locații, utilizatorul poate să șteargă doar întregul conținut.

Pentru a aprecia un microcontroller sub aspectul componentei memorie este necesar să se considere următoarele caracteristici:

– varietatea tipurilor de memorie pe chip: RAM, ROM /OTP /EPROM /EEPROM /FLASH;

– capacitatea memoriei aflată pe chip;

– ușurința cu care se poate programa (programare în circuit sau nu, necesitatea unor tensiuni de programare suplimentare).

2.5 Dispozitive I/O

Dispozitivele I/O implementează funcții speciale degrevând unitatea centrală de toate aspectele specifice de comandă și control în funcția respectivă. Există o varietate mare de dispozitive I/O; dispozitivele I/O conduc operații generale de comunicație (transfer serial sau paralel de date), funcții generale de timp (numărare de evenimente, generare de impulsuri), operații de conversie analog/numerică, funcții de protecție, funcții speciale de comandă, și enumerarea poate continua. Parte din resurse acoperă funcțiile de control propriu-zis, iar o parte asigură funcțiile necesare aplicațiilor în timp real.

Dispozitivele I/O sunt ”văzute” de unitatea centrală ca porturi. Există două filozofii de alocare a adreselor (mapare) pentru apelarea porturilor de către unitatea centrală. Porturile sunt mapate fie în spațiul de memorie, fie într-un spațiu propriu.

Avantajele mapării în spații separate:

metoda nu poate provoca erori soft deoarece se folosesc instrucțiuni diferite pentru a acesa memoria și dispozitivele I/O;

dispozitive I/O nu ocupă spațiu de memorie;

decodificatorul de adrese pentru dispozitivele I/O este mai siplu doarece spațiul de adresare al dispozitivelor I/O este mai mic.

Dezavantaje ale mapării în spații separate:

instrucțiunile I/O sunt mai puțin flexibile în comparație cu instrucțiunile de lucru cu memoria;

instrucțiunile I/O nu permit folosirea modurilor de adresare folosite în lucrul cu memoria.

Avantajele mapării în spațiul comun:

toate instrucțiunile de lucru cu memoria și toate modurile de adresare sunt utilizabile și în tratarea dispozitivelor I/O;

Dezavantajele mapării în același spațiu:

este predispus la erori software;

spațiul de adresare disponibil pentru memorie este mai mic.

2.5 Porturi paralele

Porturile paralele I/O facilitează transferul simultan al mai multor biți între microcontroller și mediu. Numărul de biți transferați ca urmare a executării unei instrucțiuni depinde de organizarea particulară a porturilor în cadrul microcontrollerului; unele porturi sunt organizate pe 8 biți, altele pe un număr mai mare de biți. Sensul transferului, I (input) sau O (output) este programabil și se stabilește de obicei într-un registru de sens. Pentru a veni în întâmpinarea cerințelor specifice de interacțiune cu mediul sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilor paralele I/O. Mecanismul presupune o structură hardware corespunzătoare și instrucțiuni pentru manipularea informației la nivel de bit. Astfel, la execuția unei instrucțiuni orientată pe bit, există posibilitatea de a transfera un singur bit, de a masca biții care nu sunt folosiți într-o operație particulară și de a efectua operații logice pe un singur bit al unui port paralel I/O.

Circuitul de interfață al portului paralel este responsabil de corectitudinea transferului cu dispozitivul I/O. În acest scop se folosește una din următoarele metode de sincronizare:

Transfer direct (brute-force method) – în cadrul acestei metode interfața are doar rolul de a transfera semnalele de la unitatea centrală spre dispozitivul I/O (dacă e o operație de ieșire) sau de la dispozitivul I/O la unitatea centrală (dacă e o operație de intrare). Se folosește acest tip de transfer dacă se citește nivelul unui potențial, dacă se comandă la ieșire un nivel logic.

Transfer strobat (strobe method) – această metodă folosește semnale de strobare pentru a indica starea stabilă a semnalelor la porturile de intrare sau de ieșire. Într-o operație de intrare, dispozitivul de intrare generează semnalul de strobare când datele sunt stabile la pinii portului de intrare al interfeței. Stocarea informației în registrul de date al interfeței se face cu semnalul de strobe. Dacă este vorba de o operație de ieșire, când semnalele de date sunt stabile, interfața elaborează semnal de strobare cu care dispozitivul I/O preia efectiv datele. Această metodă poate fi folosită dacă interfața și dispozitivul I/O lucrează la viteze comparabile.

Transfer cu protocol (handshake method) – există cazuri în care vitezele de lucru ale celor două părți implicate în tansfer sunt mult diferite și metodele mai sus amintite nu oferă cadrul potrivit pentru transferul datelor. Soluția este ca interfața și dispozitivul I/O să poarte un dialog numit handshake. Sunt necesare două semnale de protocol; unul din ele este elaborat de circuitul de interfață iar celălalt de dispozitivul I/O.

2.7 Module de comunicații seriale

Comunicația serială este o metodă bine agreată și în contextul microcontrollerelor deoarece oferă compatibilitatea cu o gamă extinsă de dispozitive și necesită un număr minim de fire, implicit un număr minim de conexiuni (pini puțini).

În transferul serial de date este necsar să se cunoască începutul și sfârșitul informației transferate. Pentru a identifica cele două coordonate emițătorul și receptorul trebuie să fie sincronizați. Sincronizarea se poate realiza prin trei metode, dintre care numai două sunt folosite în microcontrollere, urmând să le considrăm doar pe acestea în continuare. Oricare din metode presupune că durata unui bit este aceeași atât la emițător cât și la receptor (este folosit același semnal de ceas pentru serializarea informației). Numărul de biți transmiși într-o secundă reprezintă rata de transfer numită baud rate; aceasta se măsoară în biți/secundă (bps).

Durata unui bit este 1/(baud rate).

2.7.1 Modul serial asincron

Prima metodă considerată este transferul serial asincron. Modul serial asincron este referit ca UART (Universal Asynchronous Receiver Transmiter). Într-un transfer serial asincron începutul fiecărui byte este marcat de o tranzitie a liniei menținută pe durata corespunzătoare unui bit. Sfârșitul este marcat de asemenea de un bit de stop; bitul de stop constă în menținerea liniei pe durata unui bit într-o stare predefinită. Într-e bitul de start și bitul de stop sunt transferați biții de informație. O secvență completă este compusă dintr-un bit de start , opt sau nouă biți de date și un bit de stop, în total 10 sau 11 unitați de cod. Interfața serială asincronă poate fi implementată în două moduri într-un microcontroller.

Cea mai puțin costisitoare soluție din punct de vedere al cheltuielilor de resurse hardware este un program care să genereze secvența de transfer ca și componență și ca durată a fiecarui bit. Programul trebuie să măsoare durata fiecărui bit. Soluția este costisitoare din punct de vedere al timpului consumat în rularea programului.

A doua soluție de impelmentare a intefeței seriale este și cea mai des întâlnită în microcontrollere. Interfața este realizată cu un modul hardware specializat.Unitatea centrală înscrie informația de transferat într-un registru al interfeței după care sarcina serializării și a generării secvenței este finalizată de către hardware-ul interfeței. În cazul recepției interfața preia secvența recepționată, extrage elementele de sincronizare și înscrie datele efective într-un registru. Datele recepționate sunt accesibile unității centrae în acest registru al interfeței. În cayul în care registrul de transmisie este gol sau registrul de recepție este plin interfața semnalizează starea și poate chiar suspenda temporar execuția programului principal prin întreruperi hardware.

2.7.2 Modul serial sincron

Urmatoarele două metode de sincronizare posibile la transferul serial sunt transfer serial sincron și transfer serial autosinconizat. Transferul autosincronizat se bazează pe utilizarea unui sistem special de codificare a datelor. Această metodă nu este folosită în microcontrollere.

Transferul serial sincron este folosit pentru comunicații locale între procesoare sau cu dispozitivele periferice. În transferul sincron datele transferate sunt însoțite de semnalul de clock. Semnalul de clock este transferat pe o linie dedicată. Transferul serial sincron neceită trei conexiuni: emisie, recepție și clock. Interfața hardware este mai simplă decât la transferul asincron. Protocolul dintre emițător și receptor include o scurtă perioadă de sincronizare la inițierea unui transfer de date. Spre deosebire de transferul asincron, la care sincronizarea se face prin bitul de start al fiecărui octet, la transferul sincron aceasta are loc o singură dată, la începutul transferului unui bloc de date. Transferul serial sincron permite rate de transfer mai mari decât transferul serial asincron; rate de 1Mbps.

Într-o conexiune serială unul din dispozitive este master iar celălalt este slave. Un transfer poate fi inițiat doar de un master. Master-ul scrie un octet în registrul de transmisie de date al interfeței seriale sincrone. Datele sunt transferate unui registru de deplasare unde sunt serializate și transmise pe linia de emisie numită MOSI (Master Output Slave Input). Pe linia SCK (Serial Clock) este transmis clock-ul. La slave datele ajung tot pe linia MOSI într-un registru de deplasare unde sunt deplasate cu ceasul recepăionat pe linia SCK. La umplerea registrului de deplasare datele sunt transferate în registrul de recepție de date. Conexiunile interfeței seriale sincrone sunt disponibile la pini cu funcții multiple la unul din porturile parelele. Pinii asociați unei conexiuni seriale sincrone sunt următorii:

MISO – Master In Slave Out – Pinul MISO este configurat ca intrare într-un master și ieșire dintr-un slave. Este conexiunea prin care se transmit date într-un sens (de la slave la master).

MOSI – Master Out Slave In – Pinul MISO este configurat ca ieșire dintr-un master și intrare într-un slave. Este cea de-a doua conexiune prin care se transmit date în celălalt sens (de la master la slave).

SCK – Serial Clock – Pinul SCK este ieșire la un master și intrare la un slave. Prin această conexiune se transmite semnalul de sincronizare pentru transferul datelor pe liniile MISO și MOSI. Pe durata a opt perioade ale SCK se transferă între master și slave un byte de informație.

nSS – non Slave Select – La pinul nSS se aplică semnalul care selectează un dispozitiv slave; pentru un dispozitiv slave, semnalul trebuie să fie activ (low) pe toată durata unei tranzacții în care este implicat. Pentru un dispozitiv master, intrarea nSS se conectează permanent la 1 logic.

Interfețele seriale amintite sunt întâlnite în microcontrollere cu următoarele nume:

SCI (Serial Comunications Interface) este un subsistem I/O serial independent, de tipul full duplex asincron (UART) numit astfel la microcontrollerul Motorola.

SPI (Serial Peripheral Interface) este un modul serial folosit pentru a comunica sincron la distanțe mici cu viteze până la 4Mbps.

SCI+ este similar cu SCI, are în plus suport pentru comunicații seriale sincrone. Dispune de o ieșire de ceas folosită pentru a transfera date în mod sincron cu un periferic de tip SPI.

SIOP (Spimple I/O Port) este o implementare mai simplă a SPI.

2.8 Module Timer

Timer-ul este folosit pentru a măsura timpul și pentru a genera semnale cu perioade și frecvențe dorite. Timer-ele nu sunt doar circuite cu funcții de temporizare; în modulul timer sunt implemntate câteva mecanisme care pun la dispoziția utilizatorului funcții specifice.

Mecanismul de comparare permite controlul unor semnale de ieșire; mecanismul de captură permite monitorizarea unor semnale de intrare ; numărătoarele interne permit generarea de referințe de timp interne, necesare în bucle de întârziere, multiplexarea diferitelor sarcini software, ș.a. Timer-ul poate fi folosit practic pentru orice funcție de timp, inclusiv generarea unor forme de undă sau conversii D/A simple.

Funcțiile oferite de un timer sunt:

Captură la intrare (IC – input capture) – această funcție se bazează pe posibilitatea de a stoca valoarea numărătorului principal la momentul apariției unui front activ al unui semnal extern. Facilitatea permite măsurarea lățimii unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosită și ca referință de timp pentru declanșarea altor operații.

Comparare la ieșire (OC – output compare) – se compară la fiecare impuls de ceas valoarea numărătorului principal cu cea a unui registru. Dacă se constată egalitate, în funcție de programarea anterioară pot avea loc următoarele evenimente: declanșsarea unei acțiuni la un pin de ieșire (opțional), setarea unui flag într-un registru sau generarea unei întreruperi pentru unitatea centrală (opțional). Funcția este folosită pentru a genera întârzieri sau pentru a genera o formă de undă cu valori dorite pentru frecvență și pentru factorul de umplere.

Întreruperi în timp real (RTI – real-time interrupt) – într-un sistem există sarcini care trebuiesc executate periodic sau care nu permit depășirea unui interval limită între două execuții. Aceste sarcini sunt lansate ca rutine de tratare a întreruperii generate de timer.

COP (computer operating properly) watchdog – această funcție este folosită pentru a reseta sistemul în cazul în care din erori de programare (bugs) sau erori în desfășurarea programului datorate perturbațiilor mediului, registrul COP nu este accesat într-un interval de timp prescris.

Acumulare de pulsuri (pulse accumulator) – este funcția folosită pentru a număra evenimentele ce apar într-un interval de timp determinat sau pentru a măsura durata unui impuls.

2.9 Module A/D și D/A

Intrările/ieșirile și convertoarele A/D nu sunt considerate ca parte definită în contextul unui calculator; aceste elemente sunt importante în schimb atunci când considerăm un microcontroller. Prezența modulelor A/D și D/A în structura unui microcontroller contribuie la „puterea” acestuia în aplicații deoarece interfațarea cu mediul presupune necesitatea de a prelucra sau de a elabora mărimi analogice.

Convertoarele A/D sunt des întâlnite printre perifericele on-chip. Convertoarele D/A nu sunt întâlnite în mod uzual printre unitățile componente deoarece sunt relativ ușor implementate în exterior. Un convertor D/A simplu poate fi realizat folosind un timer în mod PWM și integrând pulsul în exteriorcu un simplu ciruit RC.

Convertoarele A/D integrate pe chip sunt convertoare cu aproximații succesive sau mai rar, convertoare cu integrare. Însușirile convertoarelor nu sunt deosebite; sunt convertoare lente în comparație cu cele implementate în circuite independente. Timpii de conversie obișnuiți sunt plasați în intervalul 10us-25us. Modul de conversie este prevăzut și cu un multiplexor analogic, astfel sunt disponibile mai multe canale de intrare. Unele microcontrollere sunt echipate și cu circuit de eșantionare/memorare. În cazul în care circuitul de eșantionare/memorare lipsește, semnalul analogic trebuie menținut constant pe durata unei conversii. Tensiunea de referință necesară convertorului poate fi generată în circuit sau dacă nu, este necesar să fie furnizată din exterior.

Modulul A/D folosește un registru de control prin care se selectează canalul de conversie și modul de lucru pentru circuitul de eșantionare/memorare. Declanșarea și terminarea conversiei sunt semnalizate cu câte un bit tot în registrul de control. Rezultatul conversiei este stocat în registrul de date. Registrul de date va conține întotdeauna rezultatul ultimei conversii, de aceea acest registru trebuie citit înainte de terminarea următoarei conversii, în caz contrar se pierde informația.

Conversia poate fi declanșată intern, considerând bitul asociat din registrul de control, sau din exterior printr-un semnal de comandă aplicat la pin. Declanșarea unei conversii la un moment de timp dorit, fără intervenția unității centrale, se poate realiza folosind un timer. Modulul poate fi programat să execute o conversie a unui canal și să se oprească. Un alt mod de operare al modulului poate fi conversia continuă a unui canal până la recepționarea unei comenzi de încheiere. Un alt mod de operare este conversia ciclică în care modulul execută pe rând conversia fiecărui canalm după care se oprește. În acest ultim mod sunt folosite de obieci mai multe registre de date pentru memorarea rezultatelor conversiilor. Rezultatele sunt citite după încheierea unui ciclu. La terminarea unui ciclu de conversie, opțional, se poate genera o întrerupere către unitatea centrală.

În aplicații de precizie se recomandă ca pe durata conversiei să se comute unitatea centrală în stare incativă pentru ca aceasta să nu perturbe convertorul.

2.10 Sistemul de întreruperi

Sistemul de întreruperi reprezintă mecanismul ce asigură sincronizarea funcționării unității centrale cu evenimentele. Acest mecanism asigură implementarea unui răspuns prompt și specific al sistemului la orice cerere de întrerupere. Evenimentele, sunt acele stări din funcționarea sistemului care trebuie avute în vedere la controlul acestuia. Ele trebuie să declanșeze, cu o întârziere minimă, un răspuns adecvat din partea sistemului, raspunsul trebuie să fie descris de către proiectant prin instrucțiuni incluse în cadrul unor rutine de servire a întreruperilor.

În cazul microcontroller-elor, ca de altfel și în acela al microprocesoarelor, aceste evenimente trebuie privite ca informații de stare a sistemului, informații ce rezultă fie urmare a prelucrării de către UC a datelor, (evenimente ce generează așa numitele întreruperi interne), fie urmare instrucțiunii sistemului cu mediul înconjurător (numite și întreruperi externe). Acest din urmă aspect este preponderent în cazul microcontrollere-elor.

Unitatea centrală a microcontrollerului analizează în cadrul ultimei perioade de ceas corespunzătoare fiecărui ciclu instrucțiune eventualele cereri de întrerupere postate pe parcursul execuției instrucțiunii curente.

Realizarea stărilor generatoare de cereri de întrerupere este urmată de analiza acestora de către CI (controler de întreruperi). Această analiză presupune următoarele;

identificarea sursei generatoare a cererii de întrerupere;

determinarea ordinii de servire a cererilor de întrerupere, în cazul apariției simultane a mai multor astfel de cereri.

Ambele etape pot fi implementate atât hard cât și soft, neexcluzându-se posibilitatea unor implementări mixte. Identificare sursei generatoare de întrerupere se face prin corelația ce este stabilită între canalul de transfer al cererii, registrul/registrele de memorare al acesteia și adresa de memorie la care este plasată adresa rutinei de servire a întreruperilor sau prima instrucțiune a rutinei de servire a întreruperilor.

Determinarea ordinii de servire, sau analiza priorității cererilor de întrerupere, presupune scanarea în faza de naliză a tuturor canalelor de transfer pentru cererile de întrerupere sau a registrelor corelate cu acestea într-o anumită ordine prestabilită hard. Multe microcontrollere dispun de mecanismul (implementat hard) ce permite ‚prioritizarea’ unora dintre aceste canale, ceea ce implică implementarea unor unități de memorare a priorităților (registre de setare a priorităților pe două sau mai multe nivele) și instituirea unor reguli de arbitrare.

În procesul de scanare, primul canal ‚activ’ – care generează o cerere de întrerupere – va fi cel ‚servit’, respectiv va declanșa procesul de execuție a rutinei de servire a întreruperilor corespunzătoare. Sunt întâlnite atât microcontrollere care permit întreruperea unei rutine de servire a întreruperilor de către o altă cerere de întrerupere mai prioritară, cât și microcontrollere care nu permit o astfel de acțiune.

Mulți producători pun la dispoziția proiectantului câte un flag (fanion) de validare/invalidarea globală a întreruperilor, ceea ce perimite ca utilizatorul să modifice cum dorește mecanismul de acțiune la apariția unei întreruperi: perimte sau inhibă o întrerupere prioritară apărută ulterior uneia mai puțin prioritare, dar pe durata cât aceasta este servită. Multe microcontrollere dispun de un mecanism bazatr pe flag-uri (fanioane) de validare/invalidare a întreruperilor. Registrele de memorare a cererilor de întrerupere sunt dublate de registre ce memorează informația de validare a canalelor întrerupătoare (‚registre de validare a întreruperilor’ sau ‚registre de mascare a întreruperilor’), un canal corespunzător unei cereri de întrerupere invalidată va fi ignorat în procesul de scanare a cererilor de întrerupere.

Domeniul de adrese de memorie în care sunt plasate instrucțiunile de start a rutinelor de servire a întreruperilor poartă denumirea de ‚tabelă a vectorilor de întrerupere’. Unele microcontrollere prezintă o tabelă a vectorilor de întrerupere cu adrese fixe, specifice canalelor întrerupătoare (I8051, Atmelm PIC), altele permit plasarea tabelei vectorilor de întrerupere la adrese de memorie ce sunt stabilite de către proiectant (familia Z80). Tabela vectorilor de întrerupere este cuprinsă între adresele: 0003H și 0023H.

2.11 Managementul puterii

Pentru aplicațiile în care consumul de energie de la sursa de alimentare este critic sunt implementate sisteme prin care pot fi dezactivate temporar parte din modulele componente. Economia de energie este esențială în cazul alimantării de la baterii. Prin intrarea în starea de economie de energie memoria RAM nu-și schimbă conținutul și ielirile nu-și schimbă valorile logice. Sistemul de economie de energie oferă două moduri de operare care diferă prin numărul componentelor dezactivate. Aceste moduri sunt numite Idle, Power Down la microcontrollerele Intel și wait, Stop la microcontrollerele Motorola. Intrarea în unul din modurile de operare cu economie de energie se face prin comenyi software. Microcontrollerele Motorola dispun de instrucțiuni care determină intrarea în mod Wait sau Stop. Microcontrollerele Intel intră în mod Idle sau Power Down prin controlul unor biți din registrul PCON (Power Control Register).

În ambele moduri de operare este ”înghețată” funcționarea unității centrale.

În mod Power Down (Stop) este vlocat oscilatorul intern ceea ce atrage după sine blocarea tuturor funcțiilor interne. Timer-ul va ”îngheța” și interfețele seriale își vor opri activitatea. Sistemul de întreruperi, după caz, este dezactivat sau poate să rămână activ. Conținutul memoriei și al registrelor interne nu este alterat, iar liniile I/O rămân neschimbate. Din această stare se poate ieși fie doar cu Reset, sau fie la sesizarea unei întreruperi externe.

În mod Idle (Wait) este înghețată doar funcționarea unității centrale, celelalte funcții rămân active (timer+-ul, interfețele seriale și sistemul de întreruperi).Starea unității centrale și a tuturor registrelor este păstrată cât timp microcontrollerul se menține în mod Idle (Wait). Din modulul Inter se poate ieși prin Reset sau la sesizarea unei întreruperi interne sau externe.

Consumul de energie este minim atunci când sunt activate cele mai puține funcții. Consumul minim de energie se obține în modul de operare Power Down (Stop). În modul Idle (Wait) consumul este redus față de regimul de operare normală dar este mai mare decât în mod Power Down (Stop). În același timp, consumul în modul Idle (Wait) este cu atât mai redus cu cât sunt mai puține funcții active la intrare în mod.

OnNow este o inițiativă actuală pentru modernizarea metodelor de economie de energie în sistemele cu microprocesoare. Se intenționează obținerea unui consum de energie (pentru un calculator PC) de o treime de cel actual și un timp de ieșire din starea incativă mai mic de 5 secunde. Un alt aspect important al alimentării sistemelor construite cu microcontrollere este calitatea semnalului furnizat de sursa de alimentare. Dacă nivelul tensiunii de alimentare nu se încadrează într-o plajă permisă este posibil ca programul să funcționeze defectuos, să se abată de la cursul firesc. Pentru a elimina acest risc, pe care nu ni-l putem permite în sistemele de control, în microcontrollere sunt implementate module de monitorizare a tensiunii de alimentare. Acestea pot genera un Reset de sistem sau o întrerupere în cazuri considerate limită.

LVR (Low Voltage Reset) este un circuit care monitorizează tensiunea de alimentare a unității centrale și forțează un reset dacă se constată că aceasta este mai mica decât un minim predefinit.

LVI (Low Voltage Interrupt) este un circuit care monitorizează tensiunea de alimentare a unității centrale și generează o întrerupere dacă se constată că aceasta este mai mica decât un minim predefinit.

2.12 Familii și clasificarea microcontrollerelor

Microcontroller-ele se produc într-o mare diversitate în care există totuși elemente comune care permit o prezentare sistematica a produsului. Pe baza unui nucleu comun au fost definite familiile de microcontrollere; nucleul este constituit dintr-o unitate centrală, aceeași pentru toți membrii unei familii, și o serie de interfețe și periferice. Din punct de vedere al programatorului, toți membrii unei familii folosesc același set de instrucțiuni, permit aceleași moduri de adresare și folosesc aceleași registre. Diferența între membrii unei familii constă în primul rând în echiparea chip-ului ce memorie (tip de memorie și capacitatea memoriei). Alte diferențe pot fi găsite la frecvența de clock pentru unitatea centrală sau în interfețele on-chip suplimentare față de cel mai simplu reprezentant al familiei. O altă diferență între membrii unei familii poate fi și modul în care sunt conectate semnalele la pin – respectiv tipul capsulei de prezentare a circuitului integrat.

Câteva exemple de familii de microcontrollere: Intel 4048 (a fost primul microcontroller apărut pe piață având o structură Harvard modificată, cu 64-256 octeți de RAM și care este încă folosit în multe aplicații datorită prețului scăzut)/Intel 8051/Intel 80C196/Intel 80168 și 80188 (produse de Intel), 65C02/W65C816S/W65C134S (create de Western Design Center), Pic (realizat de MicroChip), Cop400/Cop800/Hpc (produse de National Semiconductors) ș.a.

Se pot considera multe criterii de clasificare a microcontrollerelor; de exempu după dimensiunea magistralelor, după interfețele pe care le au incluse în configurație, după aplicațiile în care se folosesc, după furnizor etc. O clasificare sumară a celor mai uzuale microcontrollere, după compatibilitatea software, este:

Microcontrollere cu arhitectură CISC

Compatibile 8051

MOTOROLA 68xx

Compatibile x86

COP8 (National Semiconductor)

TMS370 (Texas Instruments)

ST (Thomson)

Alte arhitecturi (microcontrollere low cost) HITACI – 4biți, Z8 – 8biți

Microcontrollere cu arhitectură RISC

Super H – Hitachi

PIC – MicroChip

AVR și ARM – Atmel

2.13 Instrucțiuni ale microcontrollerelor

Este evident că în cazul programării microsistemelor un rol deosebit de important îl joacă setul de instrucțiuni ale microcontrollerului. Dacă în limbajele de nivel mediu sau înalt, limbajele prezintă un caracter independent de structura procesorului, limbajele mașină sunt limbaje specifice. Aceasta presupune un grad de detaliere mult mai ridicat ceea ce implică și cunoașterea registrelor interne și a flag-urilor indicatoare de condiție specifice unității centrale, cunoașterea structurii interne, respectiv a memoriei interne și a modului în care aceasta este organizată, cunoașterea porturilor de intrare/ieșire și a canalelor numărătoare/temporizatoare. Cu toate acestea, reprezentarea grafică a evoluției unui sistem capătă o anumită răspândire din ce în ce mai largă, ea oferă o reprezentare generală a algoritmilor de funcționare ai sistemelor.

Spre exemplu, reprezentarea EBNF (Extended Backus-Naur Form) utilizează simbolurile terminale (acei atomi lexicali care nu mai pot fi descompuși în continuare) și neterminale (sunt simboluri rezultate ca urmare a compunerii unor simboluri terminale) care sunt conectate în diagrame (grafuri)sintactice ce formează un graf orientat. În cadrul acestor grafuri săgeata exprimă o formulare sintactică acceptată. Pot fi întâlnite următoarele reprezentări: succesiunea, ramificația sau alternatica, bucla sau reptiția. Corespunzător acestor formulări, limbajele de programare a microcontrollerelor, oferă instrucțiunice implementează traiectoriile definite cu ajutorul grafului de fluență. Trebuie manționat că în setul de acțiuni se disting câteva clase de insreucțiuni prezentate la toate microcontrollerele, și anume:

Instrucțiuni ce pot fi succesive (pot fi înșirate unele după altele) și care realizază în general fie un transfer de informație, fie o operație aritmetico-logică, fie o altă acțiune la nivelul unitații centrale.

Instrucțiuni de decizie (test), care implementează o ramificație a grafului, în general, la nivelul limbajului mașină, acestea sunt instrucțiuni ce implementează două alternative (deci sunt de tip binar). În cazul microcontrollerelor nu întâlnim decât bifurcații.

Instrucțiuni de tip repetitiv, sau instrucțiuni ce implementează o buclă de program și care sunt reprezentate prin instrucțiuni de test ce se execută fie la începutul, fie la sfârșitul unui bloc de program.

2.14 Familia de microcontroller PIC16

Familia PIC16[2] face parte din clasificarea microcontrollerelor cu arhitectură RISC, având o arhitectură asemănătoare familiei PIC12, dar cu câteva îmbunătățiri:

35 de instrucțiuni față de 33;

frecvența maximă 20MHz față de 4;

posibilitatea de lucru în întreruperi, cu 7 surse interne și o sursă

externă;

stivă automată cu 8 nivele;

13 linii I/O cu posibilitatea stabilirii individuale a sensului de transfer

și cu o linie de putere pentru comanda directă a unui LED;

magistrala de instrucțiuni este pe 14 biți, față de 12 biți;

memoria ROM este de 512 x 14 cuvinte până la 2K x 14 cuvinte;

memoria RAM este de 80-128 de octeți.

Aceste microcontrollere sunt livrate în capsule cu 20 de pini.

Întreruperile sunt controlate de un registru de comandă a întreruperilor care

poate valida sau invalida global sistemul de întreruperi și individual pe fiecare linie. Fiecare interfață care poate cere întrerupere are atașat un bit care poate fi testat pentru a determina sursa întreruperii.

Datorită posibilității de lucru în întreruperi, timerul 0, care funcționează la fel ca la PIC12 poate cere întrerupere la trecerea numărătorului de la FFh la 00h. Întreruperea poate fi mascată.

Pentru creșterea siguranței în funcționare familia PIC16 are integrat un circuit de protecție care generează un RESET la scăderea tensiunii de alimentare (Brown-Out Reset). Acest circuit poate fi validat sau invalidat cu un bit de comandă.

Microcontrollerele din familia PIC 16 pot fi echipate cu o diversitate mult mai mare de interfețe, cum ar fi comparatoare, convertoare ADC și DAC, USART, I2C, SPI, PWM etc.

Circuitul PIC16C64x este echipat cu 2 comparatoare analogice. Intrările lor sunt multiplexate cu pinii I/O 0-3 și cu o referință de tensiune care poate fi folosită pentru comaparatoare. Cu un registru de comandă în zona registrelor cu funcții speciale se poate programa modul de comparare. Se poate programa ca ieșirea comparatoarelor să ceară întrerupere. Comparatoarele pot fi programate să lucreze cu referință externă sau internă. În modul SLEEP comparatoarele rămân active și pot trezi circuitul. Dacă curentul consumat de comparatoare în mod SLEEP este prea mare, ele pot fi dezactivate prin registrul de comandă. Modulul care generează referința de tensiune este un grup de 16 rezistențe care divizează tensiunea de intrare cu un factor programabil. Modulul poate fi validat sau invalidat pentru economia de energie.

Circuitul PIC16C71x este echipat cu convertor A/D și un bloc suplimentar de timere. Convertorul A/D este un convertor cu aproximații succesive pe 8 biți, cu 4 intrări analogice multiplexate și cu circuit de eșantionare-memorare. Tensiunea de referință poate fi cea de alimentare sau o referință externă la un pin I/O cu semnificație dublă. Convertorul A/D poate lucra și în modul SLEEP, pentru acest mod de lucru fiind integrat în circuit un oscilator propriu pentru convertor. Convertorului îi sunt atașate 3 registre, 2 de comandă și unul de date. Cu registrele de comandă se poate programa:

selecția tactului pentru convertor (Fosc/2, /8, /32 sau ceas propriu);

selecția canalului analogic;

un bit pentru START conversie;

un bit pentru terminare conversiei – poate fi citit și testat prin program, sau poate cere o întrerupere;

un bit pentru oprirea convertorului pentru a nu mai consuma curent, dacă nu este folosit în mod SLEEP.

Modulul suplimentar de timere este numit CCP (Capture Compare PWM), după funcțiile pe care le poate îndeplini (un MC poate avea unul sau mai multe module CCP). Modulul CCP conține un registru de 16 biți și folosește timerele suplimentare 1 și 2. Modurile de lucru posibile pentru modulul CCP sunt:

mod captură – la apariția unui eveniment la pinul exterior 3, registrul CCP se încarcă cu valoarea din timerul 1. Un eveniment poate fi un front crescător, unul descrescător, la fiecare 4 sau 16 fronturi crescătoare (prescalare). În momentul evenimentului se poate cere o întrerupere.

mod comparare – registrul CCP este permanent comparat cu conținutul timerului 1. Dacă apare o coincidență, se semnalizează prin schimbarea stării pinului extern 3. În același moment se poate cere o întrerupere.

mod PWM – se folosesc 2 timere, 1 și 2, unul pentru a determina

perioada semnalulu ui și celălalt factorul de umplere. Ieșirea PWM se face tot la pinul 3.

Setul de instrucțiuni pentru acest MC este dat în tabelul 2.1:

Tabelul 2.1

Capitolul 3. Senzori și actuatori

3.1 Senzori

Senzorul este definit[3] ca fiind ”un dispozitiv care detectează sau măsoară unele condiții sau proprietăți și înregistrează, indică sau uneori răspunde la informația primită”. Astfel, senzorii au funcția de a converti un stimul într-un semnal măsurabil, cuprinzând atât traductorul, care transformă mărimea de intrare în semnal electric util, cât și circuite pentru adaptarea și conversia semnalelor, și eventual pentru prelucrarea și evaluarea informațiilor. Stimulii pot fi mecanici, termici, electromagnetici, acustici sau chimici la origine, în timp ce semnalul măsurabil este tipic de natură electrică, deși pot fi folosite semnale pneumatice, hidraulice, optice sau bioelectrici.

În gestionarea proceselor industriale, deosebit de importante sunt sistemele inteligente de conducere, sisteme ce sunt bazate pe sisteme de calcul integrat sau nu.

Senzorii și traductoarele elemente esențiale ale sistemelor de automatizare a dispozitivelor civile și industriale și se bazează pe un domeniu larg de principii fizice de operare. De asemenea sunt utilizați și în cazul cercetării, analizelor de laborator – senzorii și traductoarele fiind incluse în lanțuri de măsurare complexe, care sunt conduse automat.

Exista foarte multe clasificari ale senzorilor si traductoarelor: cu sau fara contact, absoluți sau incrementali (in functie de marimea de intrare), analogici sau digitali (în funcție de mărimea de ieșire) etc.

Alegerea senzorilor si traductoarelor trebuie făcută ținând cont de proprietatea de monitorizat, de domeniul în care variază aceasta, de dimensiunile ce trebuie respectate sau de geometria sistemului, de condiții speciale de mediu sau de lucru, de tipul mărimii de ieșire și nu în ultimul rând de cost.

3.1.1 Caracteristici

Caracteristicile principale ale senzorilor pot fi definite prin următorii parametrii:

domeniul de utilizare;

rezoluția (sensibilitatea – cel mai mic increment măsurabil al stimulului);

frecvența maximă a stimulului ce poate fi detectat (selectivitatea);

acuratețea (eroarea de măsurare raportată, în procente, la întreaga scală);

dimensiunile și masa senzorului;

temperatura de operare și condițiile de mediu, durata de viață (în ore sau număr de cicluri de operare);

stabilitatea pe termen lung;

costul.

3.1.2 Clasificarea senzorilor

Există mai multe criterii de clasificare a senzorilor utilizați în sistemele de

comandă ale proceselor industriale:

– dacă intră sau nu în contact cu obiectul a cărui proprietate fizică o măsoară, distingem:

senzori cu contact;

senzori fără contact;

– după proprietățile pe care le pun în evidență:

senzori pentru determinarea formelor și dimensiunilor (pentru evaluarea în mediu de lucru);

senzori pentru determinarea proprietăților fizice ale obiectelor (de forță, presiune, de cuplu, de densitate și elastici);

senzori pentru proprietăți chimice (de compoziție, de concentrație, analizatoare complexe);

după mediul de culegere a informației:

senzorii pentru mediul extern;

senzorii pentru funcția internă;

după distanța la care sunt culese informațiile:

senzori de contact.

Astfel pot fi identificați senzori de proximitate, traductoare de tip Hall, traductoare de deplasare si viteză, senzori și traductoare de forță, senzori de temperatură, senzori de umiditate, senzori pentru gaze, senzori de curent, switch-uri optice, senzori de presiune, cititoare de coduri de bare etc.

3.1.3 Măsurarea temperaturii

Măsurarea temperaturii[4] constituie una dintre cele mai uzuale procese de măsurare. Probabil, cel mai simplu și mai des folosit fenomen în măsurarea temperaturii este dilatarea termică. Acesta este principiul ce stă la baza termometrelor din sticlă cu lichid. Pentru a transforma energia termică în semnal electric se folosesc detectori rezistivi, termoelectrici, optici și piezoelectrici.

Când un senzor (sonda) este introdus într-un obiect sau plasat pe suprafața obiectului, va exista un transfer de căldură între sondă și obiect: senzorul se va răci sau se va încălzi. Același fenomen va apărea și în cazul transferului de energie termică sub forma de radiație energetică în IR, senzorul va absorbi sau emite radiație IR în funcție de temperatura corpului monitorizat. Orice senzor, indiferent de cât de mic este, va perturba rezultatele măsurătorii și deci este o problemă majoră în a minimiza erorile introduse de senzor și în a adopta o metodă optimă de măsurare.

Există două metode de procesare a semnalului în măsurătorile de temperatură: metoda echilibrării și metoda predictivă.

În primul caz, temperatura se va măsura doar în momentul în care nu mai există gradient de temperatură între senzor și obiect (au aceeași temperatură), iar în cazul metodei predictive, punctul de echilibru nu este atins niciodată, ci este determinat din viteza de schimbare a temperaturii senzorului. Folosind metoda echilibrării, timpul necesar atingerii temperaturii de echilibru poate fi de durată foarte mare (mai ales când suprafața de contact este uscată). De exemplu dacă pentru a lua cu un termometru medical temperatura apei dintr-un rezervor este nevoie de 10 secunde, pentru a lua temperatura corpului uman este nevoie de 3 – 4 minute.

3.1.4 Măsurarea umidității

Relațiile numerice [5] de bază pentru exprimarea umidității sunt:

1. Umiditatea relativă RH [%]: RH 100 * p / ps

2. Umiditatea absolută U [g/m3]: U 804 * p / (1 + 0,00366 * θ) * P0

unde:

p [Pa] – presiunea reală a vaporilor de apă în aer;

ps [Pa] – presiuena de saturație a vaporilor de apă în aer;

θ [°C] – temperatura ambiantă;

P0 [Pa] – presiunea atmosferică.

Relația între umiditatea relativă și umiditatea absolută este:

RH [%] 100 * p / ps 100 * U / Us (3)

unde:

Us [g/m3] – este umiditatea absolută de saturație.

Valori numerice pentru ps și Us se dau în tabele psihrometrice funcție de temperatura ambiantă. Pentru măsurarea umidității (absolută sau relativă) în tehnică se folosesc diferiți senzori capabili să furnizeze la ieșire un semnal electric proporțional cu mărimea fizică U respectiv RH.

3.1.4.1 Senzori cu termistori destinați măsurării umidității absolute (U).

Pe scurt, principiul de măsurare este: o pereche de termistori capsulați în sticlă, sortați și împerecheați sunt amplasați în capsule distincte; unul este montat în capsula cu găurele de ventilație și reprezintă elementul sensibil, în contact cu aerul atmosferic umed și celălalt este montat în capsula ermetic etanșă cu aer uscat, fiind folosit ca element de compensare cu temperatura.

Deoarece senzorii de umiditate absolută utilizează diferența de conductivitate termică între vaporii de apă și aerul uscat rezultă că au sensibilitate și față de alte gaze (H2, CH4, NH3 etc) care conduc la erori ale Uieșire. De asemenea senzorii de umiditate absolută sunt sensibili față de presiunea atmosferică: modificarea sa are ca efect erori (+ sau -) ale Uieșire.

3.1.4.2 Senzori capacitivi de umiditate

Sunt utilizați pentru determinarea sau măsurarea umidității relative (RH [%]). Principiul de funcționare: elementul sensibil este o peliculă de polimer care absoarbe sau degajă vaporii de apă din sau în aerul înconjurător, după cum umiditatea relativă ambiantă crește sau scade. Proprietățile dielectrice ale peliculei de polimer depind de cantitatea de vapori de apă pe care o conține; astfel, capacitatea electrică a senzorului se modifică în funcție de umiditatea aerului ambiant.

Circuitele electronice ale aparatului de măsură convertesc valoarea capacității senzorului în valori de umiditate relativă pe tot domeniul de variație. Senzorii capacitivi de umiditate se caracterizează prin: precizie ridicată, stabilitate foarte bună în timp, imunitate la praf și la o mare diversitate de agenți chimici.

Domenii de utilitzare: aplicații industriale (industria hârtiei, industria alimentară etc), în construcții, în meteorologie și desigur în E.I.V.A.C.

3.1.4.3 Senzori rezistivi de umiditate

Senzori rezistivi de umiditate sunt utilizați pentru măsurarea umidității relative RH [%]. Constructiv constau dintr-un suport ceramic prevăzut cu electrozi metalici intercalați și placați cu un strat de polimer higroscopic. În condiții de excitare cu un semnal alternativ simetric de nivel redus (tipic 1Vac), impedanța senzorului variază după o lege invers logaritmică cu umiditatea relativă, având o excursie mare a valorilor: de la peste 10MΩ (la o umiditate de 10% RH) la mai putin de 2kΩ (la 90% RH umiditate) cu o precizie de ±2%.

Semnalul de excitare (sinus sau dreptunghi) are o frecvență în domeniul 60Hz 10kHz (tipic 1kHz), fără componentă de curent continuu. Comportarea senzorilor rezistivi este influențată de temperatura ambiantă , necesitând un factor de corecție. Senzorii rezistivi au o bună stabilitate în timp și sunt ieftini. Figura 3.1 prezintă un exemplu de formă constructivă dar și caracteristicile de ieșire al senzorilor rezistivi de umiditate.

3.2 Actuatori

Elementele de execuție mecanică din sistemele mecatronice, deplasări, rotiri, etc au nevoie de sisteme de acționare alimentate de la diferite tipuri si forme de energie. Pentru cuprinderea tuturor acestor dispozitive tehnice într-o singură notiune, se utilizează, termenul de actuator (de la verbul englez „to act” = a actiona).

Actuatorul poate fi considerat un subansamblu care converteste o formă de energie (electrică, pneumatică, termică, chimică etc.) în energie mecanică. Structura acestuia nu mai poate fi descompusǎ în sub-structuri decât cu riscul de a pierde capacitatea de generare a miscării. Miscarea simplǎ, elementarǎ generatǎ de un actuator poate fi utilizatǎ direct pentru un anumit scop sau poate fi transmisǎ, transformatǎ si amplificatǎ, sau corelatǎ cu miscarea obtinutǎ de la alti actuatori.

Dintre diferitele metode de acționare, interacțiunea câmpurilor, interacțiune mecanică si deformații limitate, interacțiunea câmpurilor magnetice, a curentului electric cu câmpuri magnetice precum si interacțiunea sarcinilor electrice permit materializarea unor actuatori care au cursă teoretic nelimitată sau limitată, putând fi concepuți ca actuatori liniari sau rotativi.

Schema bloc a unui actuator se prezintă în fig. 3.2:

Fig. 3.2 Schema bloc a unui actuator

Acționarea bazată pe interacțiunea mecanică presupune asigurarea fluxului de energie prin intermediul unui agent fizic, de regulă un lichid sau un gaz, a cărui presiune sau debit determină deplasarea sau deformarea unor elemente active.

Astfel, actuatorii cu elemente deplasabile rotative sunt motoarele cu palete cu rotație parțală sau totală, turbinele iar actuatorii liniari de acest tip sunt reprezentați de cilindri. Actuatorii liniari cu elemente deformabile sunt cei cu tub flexibil si cei cu tub Bourdon iar cei de rotație au în structură elemente active sub formă de tub răsucit sau tub anizotropic, curbat.

Actuatorii a căror funcționare se bazează pe deformațiile liniare si unghiulare limitate au în structură unul sau mai multe elemente din materiale "inteligente" – materiale care au capacitatea de a se deforma controlat, confecționate sub formă lamelară dreaptă sau curbată preformată, cilindrică, formă de disc, bară, bară de torsiune, membrană, arc spiral sau elicoidal, astfel încât se obțin atât deplasări liniare cât si deplasări unghiulare.

O caracteristică esențială a elementelor din structura actuatorilor este faptul că au un triplu rol:

rol structural (de a prelua încărcările si sarcinile transmise);

prin efectul invers pe care îl suportă de la sarcină, au un rol senzorial (oferind suplimentar posibilitatea integrării în structură a senzorilor si traductorilor, pentru a obține un control în buclă închisă);

unul dintre cele mai importante roluri este cel de acționare.

Într-un sistem, un actuator conectează partea de procesare a informației din unitatea de control a sistemului cu procesul care trebuie investigat.

Actuatorii se clasifică din punct de vedere al tipului de energie în : electrici, electromagnetici, electromecanici, pneumatici și hidraulici.

Principiile de funcționare [7] a acutuatorilor sunt urmatoarele :

actuatori electrici reprezintă cea mai bună alegere ca actuatori pentru comenzi pornit/oprit;

actuatori electromagnetici sunt solenoizii iar aceștia sunt cei mai comuni actuatori electromagnetici;

actuatori electromecanici sunt motoarele electrice care transformă energia electrică în energie mecanică;

actuatorii hidraulici și pneumatici in mod obisnuit, actuatorii hidraulici și cei pneumatici sunt de tip motor rotativ, motor liniar piston/cilindru sau distribuitor , aceștia reprezentând alegerea potrivită în cazul în care se doresc sarcini și curse de valori medi și mari;

actuatori din materiale inteligente sunt cei mai utilizați actuatori, care sunt fabricați folosind materiale inteligente care au proprietatea memorării formei, piezoelectrice și magnetostrictive.

3.3 Criterii de selecție a senzorilor și actuatorilor

Criteriile de selecție[8] a senzorilor și actuatorilor se prezintă în tabelul 3.1:

Tabelul 3.1

3.4 Motoare electrice

Un motor electric [9] (sau electromotor) este un dispozitiv electromecanic ce transformă energia electrică în energie mecanică. Transformarea în sens invers, a energiei mecanice în energie electrică, este realizată de un generator electric. Nu există diferențe de principiu semnificative între cele două tipuri de mașini electrice, același dispozitiv putând îndeplini ambele roluri în situații diferite.

Fiind construite într-o gamă extinsă de puteri, motoarele electrice sunt folosite la foarte multe aplicații: de la motoare pentru componente electronice (hard disc, imprimantă) până la acționări electrice de puteri foarte mari (pompe, locomotive, macarale).

Motoarele electrice pot fi clasificate după tipul curentului electric ce le parcurge: motoare de curent continuu și motoare de curent alternativ. În funcție de numărul fazelor curentului cu care funcționează, motoarele electrice pot fi motoare monofazate sau motoare polifazate (cu mai multe faze).

3.4.1 Comanda motoarelor de curent continuu cu microcontroller

Într-un sistem mecatronic [10], microcontrollerele formează partea logică de comandă sau decizie iar motoarele, partea de execuție. Partea de comandă operează cu nivele de tensiuni de 5V și puteri mici iar partea de execuție cu tensiuni și puteri mai mari. Interfața dintre cele două parți ale sistemului se face prin circuit de amplificare care are frecvent și rolul de separare galvanică între cele două sisteme.

Datorită tensiunii si curentului de valori foarte mici furnizate la iesirea microcontrollerelor, este nevoie de circuite de amplificare pentru acționarea motoarelor de curent continuu. O schemă simplă si eficientă pentru comanda acestor motoare este reprezentată de puntea H (H-bridge) prezentă în fig. 3.3.

Aranjarea de tip punte H este în general folosită pentru a inversa polaritatea motorului, însă poate fi folosită și pentru frânarea motorului (motorul se opreste brusc datorită scurtcircuitării terminalelor sale) sau pentru a lăsa motorul să se rotească liber până la oprire.

În funcție de puterea cerută pe sarcină, punțile H pot fi construite din componente electronice sau se găsesc într-un singur circuit integrat. Dacă puterea cerută pe sarcină este mare, se vor folosi dispozitive semiconductoare de execuție: tranzistoare, GTO, eventual tiristoare. De cele mai multe ori aceste dispozitive nu se pot lega direct la ieșirile microcontrollerului, prin rezistențe, ci au nevoie de amplificatoare de putere. Dacă puterea cerută pe sarcină este mică, maxim de ordinul sutelor de mA/A, se pot folosi circuite integrate specializate, ale căror ieșiri vor fi legate direct sau prin diverse interfețe la motor.

Fig. 3.3 Schema electrică simplă punte H

Capitolul 4. Descrierea sistemului proiectat

4.1 Microcontrollerul PIC16F690

PIC16F690 este un microcontroller RISC (Reduced Instruction Set Computer), aceasta înseamnă că are un set redus de instrucțiuni, mai precis 35 de instrucțiuni. Toate aceste instrucțiuni sunt executate într-un ciclu cu excepția instrucțiunilor jump și branch.

4.1.1 Descrierea pinilor:

Microcontrollerul PIC16F690 are un număr total de 20 pini. Cel mai adesea se găsește într-o capsulă de tip DIP18 (Dual In Package ) dar se poate găsi de asemenea și într-o capsulă SMD (Surface Mount Devices).

Descrierea pinilor microcontrollerului PIC16F690 se găsește în fig. 4.1:

Fig. 4.1 Descrierea pinilor microcontrollerului PIC16F690

Semnificația pinilor se prezintă în tabelul 4.1

Tabelul 4.1

4.1.2 Structura internă a microcontrollerului PIC16F690

Structura internă a microcontrollerului utilizat în proiect de tipul PIC16F690 se prezintă în fig. 4.2:

Fig. 4.2 Structura internă a microcontrollerului PIC16F690

4.1.3 Organizarea memoriei

PIC16F690 [11] are un numărător de program pe 13 biți capabil să adreseze o memorie de program formată din 14 blocuri a câte 8K. Vectorul de Reset se află la adresa 0000h iar vectorul de întrerupere la adresa 0004h.

Memoria de date este împărțită în patru bancuri care conțin registrele GPR (General Purpose Registers – Registre cu Scop General) și registrele SFR (Special Function Registers – Registre ai Funcției Speciale). Registrele SFR sunt situate în primele 32 de locații al fiecărui banc, iar registrele GPR se află în ultimele 96 de locații al fiecărui banc.

PIC16F690 are un fișier de registre organizat ca 256 x 8 biți. Fiecare registru poate fi

accesat direct sau indirect prin intermediul registrului de selecție (FSR).

Registrele cu funcții speciale sunt registre folosite de către procesor și de funcțiile periferice pentru a putea controla operația întreprinsă. Aceste registre pot fi clasificate în două categorii: nucleu și periferice.

4.1.4 Numărătorul de program

Numărătorul de program (PC) are o lățime de 13 biți. Octetul inferior provine din registrul PCL, care poate fi scris și citit. Octetul superior nu poate fi accesat direct, el provine din registrul PCLATH. La Reset numărătorul de program este șters

PIC16F690 are o stivă cu adâncimea de 8 nivele și o lățime de 13 biți. Spațiul de memorie al stivei nu face parte nici din memoria de program, nici din memoria de date, iar indicatorul de stivă nu poate fi citit sau scris. Stiva se comportă ca o memorie circulară. Acest lucru înseamnă că după ce s-au introdus 8 elemente, a noua scriere în stivă va rescrie prima valoare introdusă.

4.1.5 Modulul oscilator (cu sistem de monitorizare al ceasului)

Modulul oscilator oferă o gamă variată de surse de ceas și posibilități de selectare permițând utilizarea microcontrollerului pentru diverse aplicații având o performanță ridicată și un consum scăzut de energie.

Sursele de ceas pot proveni de la oscilatoare externe, rezonatoare cu cristal de cuarț, rezonatoare cermaice și circuite RC. În plus, ceasul de sistem poate fi configurat pentru a folosi unul dintre cele două oscilatoare interne cu opțiunea de a selecta frecventa prin software.

Modulul oscilator poate fi configurat într-unul din cele opt moduri de ceas:

EC – ceas extern cu I/O pe pinul OSC2/CLKOUT;

LP – mod de lucru pentru consum redus de energie, 32 kHz;

XT – rezonator ceramic sau cristal de cuarț cu câștig mediu;

HS – rezonator ceramic sau cristal de cuarț cu câștig ridicat;

RC – circuit RC extern cu ieșire FOSC/4 pe pinul OSC2/CLKOUT;

RCIO – circuit RC extern cu I/O pe pinul OSC2/CLKOUT;

INTOSC – oscilator intern cu ieșire FOSC/4 pe pinul OSC2 și I/O pe pinul OSC1/CLKIN;

INTOSCIO – oscilator intern cu I/O pe pinii OSC1/CLKIN și OSC2/CLKOUT.

Selecția sursei de ceas se face configurând bitii FOSC din Registrul de Configurare (CONFIG). Ceasul intern poate fi generat de două oscilatoare interne: HFINTOSC – oscilator calibrat de înaltă frecvență care funcționează la 8MHz și LFINTOSC – oscilator necalibrat de frecvență joasă care funcționează la 31kHz.

Sursa de ceas de sistem poate fi comutată între surse de ceas externe și interne prin soft folosind bitul de selectare a ceasului de sistem (SCS – System Clock Select) din registrul OSCCON.

4.1.6 Porturile I/O

Microcontrollerul PIC16F690 include 3 registre PORT: PORTA registru pe 6 biți, PORTB registru pe 4 biți și PORTC registru pe 8 biți. Fiecărui registru PORT îi corespunde un registru TRIS care permite configurarea că intrare sau ieșire a portului respectiv.

4.1.7 Modulele Timer

Microcontrollerul PIC16F690 dispunde de 3 module Timer/Numărător.

4.1.7.1 Modulul Timer0

Timer0 este un timer/numărător pe 8 biți cu următoarele caracteristici:

registru timer/counter pe 8 biți (TMR0);

sursa de ceas internă sau externă programabila;

posibilitate de selecție a frontului de ceas;

întrerupere la depășire;

divizor anterior de frecvență pe 3 biți programabil.

Modul de lucru al Timer0 poate fi selectat prin modificarea bitului T0CS din registrul OPTION.

4.1.7.2 Modulul Timer1

Timer1 este un timer/counter pe 16 biți cu următoarele caracteristici:

pereche de regiștri timer/counter totalizând 16 biți (TMR1H:TMR1L);

sursa de ceas internă sau externă programabila;

divizor anterior de frecvență pe 3 biți programabil;

oscilator LP opțional;

mod de operare sincron sau asincron;

poarta timerului 1 poate fi controlată de comparator sau de pinul T1G;

întrerupere la depășire.

Timer1 este un counter crescător pe 16 biți care poate fi accesat prin intermediul perechii de registre TMR1H:TMR1L. Scrierea în TMR1H sau TMR1L actualizează în mod direct counter-ul.

4.1.7.3 Modulul Timer2

Timer2 este un timer pe 8 biți cu următoarele caracteristici:

registru timer pe 8 biți (TMR2);

registru perioada pe 8 biți (PR2);

generează întrerupere atunci când TMR2 și PR2 au aceeași valoare;

divizor anterior de frecvență programabil;

divizor posterior de frecvență programabil.

Valorile registrelor TMR2 și PR2 sunt comparate în mod continuu pentru a determina dacă acestea sunt egale. TMR2 va fi incrementat plecând de la 00h până când va valoarea sa va fi egală cu cea a registrului PR2. Registrele TMR2 și PR2 pot fi scrise și citite. La orice eveniment de reset, registrul TMR2 ia valoarea 00h iar registrul PR2 ia valoarea FFh.

Timer2 poate fi activat sau dezactivat prin modificarea bitului TMR2ON din registrul T2CON.

4.1.8 Modulul Comparator

Comparatoarele sunt folosite pentru a face legătura între un circuit analogic și un circuit digital realizând comparația între două tensiuni analogice. Compărătorul produce un semnal digital care indică relația dintre mărimile celor două semnale analogice de la intrare. Comparatoarele oferă funcționalitate analogică independentă de execuția programului și sunt des folosite în circuitele ce combina semnale analogice și digitale.

4.1.9 Convertorul Analog-Digital (ADC)

Convertorul analog digital permite realizarea conversiei unui semnal analogic de intrare într-o reprezentare binară folsind 10 biți. Acest dispozitiv folosește intrări analogice multiplexate într-un singur circuit de eșantionare și memorare. Ieșirea cicuitului de eșantionare și memorare este conectată la intrarea convertorului. Convertorul generează un rezultat pe 10 biți folosind algoritmul de aproximări succesive și înregistrează rezultatul în regiștrii ADC (ADRESL și ADRESH).

Referință de tensiune folosită de ADC poate fi selectată prin software și poate fi generată intern sau furnizată din exterior.

Convertorul poate genera o întrerupere la finalizarea conversiei. Această întrerupere poate fi utilizată pentru a scoate microcontrollerul din starea de consum redus de energie.

4.1.10 Modulul de Captură/Comparare/PWM (ECCP)

Modulul ECCP este un periferic care permite utilizatorului să cronometreze și să controleze diferite evenimente. În modul captură, perifericul permite măsurarea duratei unui eveniment. Modul comparare permite declanșarea unui eveniment extern după trecerea unui interval de timp predeterminat. Modul PWM poate generă un semnal cu modulație în durata a impulsurilor cu frecvență și factor de umplere variabil.

4.1.11 Transmițător Receptor Sincron Asincron Universal (EUSART)

Modulul EUSART este un periferic de I/O pentru comunicații seriale. Conține generatoare de ceas, registre de deplasare și memorii de date necesare pentru realizară unei transmisiuni sau recepții seriale de date, independent de execuția programului.

EUSART este cunoscut și ca interfața de comunicație serială (SCI) și poate fi configurată ca sistem duplex asincron sau ca sistem semiduplex sincron. Modul de lucru duplex este utilizat în comunicația cu sisteme periferice cum ar fi terminalele CRT și calculatoarele personale. Modul semi-duplex sincron este folosit pentru comunicarea cu dispozitive periferice cum ar fi circuitele integrate A/D sau D/A, memoriile seriale EEPROM sau alte microcontrollere. În mod normal aceste dispozitive nu au surse interne de ceas pentru a genera rata de semn și necesită o sursă externă de ceas furnizată de dispozitivul sincron principal.

Modulul EUSART are următoarele capabilități:

transmisiune și recepție duplex asincrona;

memorie de intrare de 2 caractere;

memorie de ieșire de 1 caracter;

lungimea caracterelor este programabila și poate avea 8 sau 9 biți;

detecția erorii de depășire a dimensiunii memoriei de intrare;

buffer de intrare pentru detectarea erorilor de depașire;

detecția erorii de încadrare;

master sincronic semi-duplex;

slave sincronic semi-duplex;

programare polaritate ceas în modul sincronic.

4.1.12 Modulul port serial sincron (SSP)

Modulul este o interfață serială folosită pentru comunicarea cu alte periferice sau dispozitive ale microcontrollerului. Aceste dispozitive periferice pot fi memorii seriale EEPROM, registre de deplasare, drivere de afișare, convertoare A/D, etc. Modulul SSP poate lucra în unul sau două moduri:

interfața serială SPI (Serial Peripheral Interface);

inerfața I2C (Inter-Integrated Circuit).

Modul SPI permite 8 biți de date pentru sincronizarea simultană transmisiei și recepției. Pentru realizarea comunicării sunt folosiți de obicei 3 pini:

ieșire serială de dată (SDO);

intrare serială de dată (SDI);

clock serial (SCL).

4.2 Realizare hardware

Realizarea hardware a proiectului este prima etapă în care este descris și verificat modul de funcționare. Schema electrică a fost realizată în programul OrCAD produs de către compania cu acelasi nume.

În figura 4.3 sunt prezentate modulele electronice utilizate în acest proiect.

Inima circuitului este microcontrollerul PIC16F690, care folosește un senzor de ploaie și un senzor de temperatură pentru a păstra legătura cu lumea exterioară. Acest tip de microcontrollerul a fost ales ținându-se cont de câteva elemente:

are magistrală I2C integrată;

oscilator intern de 8MHz;

număr pini sufucienți pentru realizarea modulului;

mod de achiziție rapid și avînd un cost redus.

Folosirea pinilor s-a făcut conform tabelului 4.2

Tabelul 4.2

Tensiunea de alimentare necesară utilizării modulului având inclus și motorul pentru

deschiderea și închiderea ferestrei este de 12V. În cazul nostru unde nu avem conectat motorul propriu-zis, putem folosi o baterie de 9V, tensiune suficientă în funcționalitatea modulului. Pentru alimentarea circuitelor integrate s-a folosit regulatorul de tensiune LM7805 tensiunea stabilizată fiind de 5V (fig 4.4):

Fig 4.4 Regulatorul de tensiune LM7805

Senzorul de temperatură folosit în proiect este un LM75. Liniile de adresă A0-A2 pot fi utilizate pentru a conecta până la opt LM75-uri la magistrala I2C, dar în acest caz evident că nu este necesar. Domeniul de temperatură se execută în intervalul -55 – 125o C, cu o precizie de ± 2 grade.

Senzorul de temperatură LM75 are inclus un convertor analog-digital delta-sigma și un detector de supaîncălzire digitală. Comunicția cu microcontrollerul este realizată pe o interfață de 2 fire, SDA și SCL, care funcționează pană la 400kHz. Senzorul de temperatură este citit și monitorizat continuu, și este prezentat în fig 4.5:

Fig 4.5 Senzor de temperatură LM75

Senzorul de umiditate este unul creat manual. Desigur, este posibil să se utilizeze un senzor de ploaie industrial, dar costul realizări modulului devin mai ridicat. Un senzor placat cu aur este, evident, cel mai rezistent la coroziune, dar acest lucru este dificil de implementat.

Senzorul de umiditate are integrat și un rezistor cu valoarea de 10kΩ având rolul de a împiedica trimiterea de eventuale zgomote sau perturbații apărute pe senzor spre microcontroller.

Pentru a nu aștepta un timp îndelungat în uscarea senzorului este indicat să se folosească un rezistor de putere mare care încălzește și usucă senzorul. Acest rezistor este montat direct sub senzor.

Senzorul de ploaie trebuie să fie lăsat să funcționeze în mod natural, complet expus la intemperii exterioare. Senzorul creat este prezentat în fig 4.6:

Fig 4.6 Senzor de ploaie

O importanță în funcționarea modulului sunt si cele 4 butoane având rolul este de a permite închiderea sau deschiderea unui circuit electric. Un buton [12] este în general activat atunci când este apăsat ce permite fluxulului de curent să treacă, iar când nu mai este apăsat revine în poziția inițială.

Primul buton (reset) este folosit pentru resetarea datelor. Al doilea buton (mod) este utilizat pentru a comuta între operarea manuală și automată.

Modul manual permite utilizatorului sa folosescă butonul 4 (inch./dec) pentru inchiderea sau butonul 3 (desch.inc) pentru deschiderea ferestrei.

Când fereastra de mansardă este setată pe modul automat se va deschide atunci când senzorul de ploaie este uscat iar temperatura se află între valorile setate. Fereastra se va închide când temperatura nu se mai află în intervalul setat sau când este detectată ploaie.

Butoanele 3 și 4 folosite tot în modul automat pot fi apăsate simultan pentru a muta cursorul ce indică temperatura setată. Decrementarea valoari se face prin apăsarea butonului 4 (inch/dec) iar incrementarea se face prin apăsarea butonului 3 (desch.inc).

Figura 4.7 arată modul asezări celor 4 butoane.

Fig4.7 Schema de acționare cu butoane

Pentru afișare am folosit un afișaj LCD cu un mod de afișare de 16×2 caractere de tip alfanumerice. Semnalele de la senzori menționați mai sus împreuna cu modul în care se află fereastra într-un moment de timp dat sunt afișate pe lcd. Mai exact, în figura 4.8 vedem datele afișate.

Fig 4.8 Afișorul LCD

Reprezentarea caracterelor afișate:

T:26.0 – temperatura citită de la senzor

Mod:AUT/MAN – modul în care ne aflăm (automat/manual)

10o C – valoarea minimă de temperatură setată

INCH/DESC – modul în care se află fereastra (închisă/deschisă)

>/< – poziționare cursor

25o C – valoarea maximă de temperatură setată

SE INCHIDE/SE DESCHIDE – ceea ce face motorul (închide sau deschide fereastra)

Cele 2 led-uri sunt folosite pentru înlocuitoare motorului și indică sensul in care motorul este rotit.

4.3 Realizare software

Privind realizarea software, proiectul a fost scris și compilat în programul PIC C Compiler, componentă ce face parte din mediul integrat de dezvoltare MPLAB, produs de către firma de microcontrollere Microchip.

Codul sursă complet este atașat în anexa 1234567. Mai jos sunt prezentate principalele linii de cod.

i2c_write(0x91); – citesc datele de la senzorul de tempertură

Schimbarea modului de functionare prin apăsarea butonului MOD este implementat în secvența de cod următoare:

if(!input(PIN_C4)) – se verificã apãsarea butonului de setare a modului de operare

if(!B_MOD){B_MOD=1;} – se verifică starea butonului (dacă fost tinut apăsat)

if(B_MOD){ – se asigură execuratea comenzii doar pentru o singură apăsare indiferent de durată.

if(!mod){mod=1;} – schimbarea modului de functionare din mod 0 in mod 1, adică din automat în manual

else{mod=0;} – schimbarea modului de functionare din mod 1 in mod 0, adică din manual în automat

}}

else{B_MOD=0;} – Resetarea flag-ului ceea ce înseamnă că butonul nu mai este apăsat

Pentru deschiderea ferestrei sau incrementarea temperaturii se folosește următoarea secvență de cod:

if(!input(PIN_C3)){ – se verifică apăsarea butonului de deschidere a ferestrei sau de incrementare a temperaturi

if(!B_INC){B_INC=1;}- se verifică starea butonului, dacă a fost ținut apăsat

if(B_INC){ – se asigură executarea comenzii doar pentru o singură apăsare indiferent de durată

if(!mod){ – se verifică modul de funcționare auto sau manual

if(REGLARE_TEMP){ – se verifică ce temperatură trebuie incrementată sau decrementată

if(TEMP_MAX<TEMP_MAX_ACCEPTAT){TEMP_MAX=TEMP_MAX+1;} – se incrementează valoarea pragului maxim de temperatură dacă REGLARE_TEMP=1 și respectiv valoarea pragului minim de temperatură dacă REGLARE_TEMP=0

}}

else{- dacă modul de funcționare este Manual, atunci motorul trebuie acționat

MOTOR_CH1=1;- setarea flagului pentru a porni motorul (CH1)

}}}

else{B_INC=0;}- resetarea flag-ului, butonul nu mai este apasat.

Aceeași secvență de cod se va folosi și pentru închiderea ferestrei sau decrementarea temperaturii doar folosindu-se de un alt pin (RC6) și alt canal (CH2).

Dacă ne aflăm în modul de functionare auto, atunci se vor lua în calcul senzorul de ploaie și temperatură.

if(!mod){ – verficăm dacă ne aflăm în modul de functionare auto

if(!input(PIN_A2)){ – se verifică senzorul de ploaie

if(!FLAG_PLOAIE){

FLAG_PLOAIE=1; – setarea flagului de ploaie în 1 (ploua)

if(STARE_FEREASTRA){MOTOR_CH2=1;}- se închide fereastra doar dacă aceasta este deschisă

}}

else{ – dacă nu ploauă

FLAG_PLOAIE=0; – setarea flagului de ploaie in 0 (nu plouă)

if(tmp > TEMP_MIN && tmp < TEMP_MAX){ – verific dacă mă aflu în pragul setat

if(!FLAG_TEMP1){FLAG_TEMP1=1}

if(FLAG_TEMP1){

FLAG_TEMP2=0;

if(!STARE_FEREASTRA){MOTOR_CH1=1;}}} – dacă mă aflu în pragul setat se deschide fereastra doar dacă aceasta este închisă.

Capitolul 5. Realizare practică

Realizarea practică a modulului presupune următorii pași:

achiziționare de pise necesare funcționări modulului

verificare funcționaritate piese

verificarea și corectarea diferitelor erori apărute în timpul testării modulului pe placa de test

imprimare circuit pe placă

decapare, găurire, montare si lipirea pieselor

verificare finală a modulului.

Modulul final este prezentat în figura 4.9.

Fig 4.9 Modul final

Capitolul 6. Concluzii și dezvoltări ulterioare

Bibliografie

Similar Posts