Controlul Unei Instalatii Quanser Folosind Microcontrollerul Pic 18f8722

LISTA FIGURILOR

Figura 1: Structura generală a unui sistem de conducere xviii

Figura 2: Raspunsul la semnal treapta xxi

Figura 3: Placa de dezvoltare PICDEM 18 xxv

Figura 4: PICKIT3 xxvii

Figura 5: Microcontroller-ul PIC18F8722 xxviii

Figura 6: Biții de control si configurare ai potului A/D xxxi

Figura 7: Conversie A/D prin aproximari successive xxxiv

Figura 8: Ieșire PWM xxxix

LISTA TABELELOR

Tabel 1: Parametrii de acordare xxiii

Tabel 2: Relațiile de acordare xxiii

Tabel 3: ADCON0: A/D REGISTRUL DE CONTROL xxix

Tabel 4: ADCON1: A/D REGISTRUL DE CONTROL xxx

Tabel 5: ADCON1: A/D REGISTRUL DE CONTROL xxxi

INTRODUCERE

CAPITOLUL I: Sisteme de reglare

Structura generală a unui sistem de conducere

În orice sistem de conducere automată se regăsesc următoarele elemente interconectate:

Obiectul condus;

Dispozitivul de conducere;

Elemente de execuție;

Sistemul informatic de culegere și transmitere a informațiilor privind obiectul condus;

Figura 1: Structura generală a unui sistem de conducere

Structura de mai sus este o structură de conducere în circuit închis, deoarece se ține cont de mărimile măsurate la elaborarea deciziilor.

Deciziile sunt elaborate de dispozitivul de conducere și se aplică obiectului condus, prin intermediul elementelor de execuție pe baza mărimilor măsurate. Deciziile de conducere au ca scop respectarea unor criterii de calitate, a satisfacerii unor restricții când asupra obiectului acționează o serie de factori perturbanți.

Sistemul de mai sus se poate numi sistem de conducere automat deoarece este capabil să elaboreze decizii de conducere folosindu-și mijloacele proprii de informare.

Sistemele de reglare automată constituie un caz particular de sisteme de conducere automată.

“Prin sistem de reglare automată se înțelege un sistem de conducere automată la care scopul conducerii este exprimat prin anularea diferenței dintre mărimea condusă și mărimea impusă, diferență care se mai numește abatere sau eroarea sistemului.”

Cele două principii prin care se anulează eroarea într-un sistem de reglare automată sunt:

Principiul acțiunii prin discordanța – acțiunea de reglare apare numai după ce abaterea sistemului s-a modificat datorită variației mărimii impuse sau a variației mărimii de ieșire provocată de variația unei perturbații.

Principiul compensației – una sau mai multe mărimi sunt măsurate și se aplică la elementele de execuție, comenzi ce trebuiesc să compenseze pe această cale efectul perturbațiilor asupra mărimii de ieșire ce este transmis pe cale naturală.

Orice sistem de reglare care îmbină cele două principii se numește sistem de reglare combinată.

Legile tipizate de reglare

Prezentare generală

În practica industrială a reglării automate s-au impus legile de reglare de tip PID (proporțional – integrator – derivator) ce îndeplinesc în majoritatea situațiilor cerințele tehnice impuse sistemelor de reglare convențională.

Se pot utiliza diverse combinații ale acestor trei componente: proporțional, integrator sau derivator.

Prin folosirea acestor legi tipizate în cadrul unor regulatoare tipizate, proiectarea dimensional valorică a legii de reglare se reduce la alegerea tipului de lege și poziționarea unor butoane unde se prescriu valorile parametrilor acestor legi rezultate în urma proiectării analitice a sistemul.

Nu se poate deduce exact efectul fiecărei componente a unei legi de reglare asupra calității sistemului de reglare automată deoarece depinde foarte mult de instalație.

Componenta proporțională, cu factorul de proporționalitate KP, deternină o comandă proporțională cu eroarea sistemului.

Componenta integrală, exprimată prin constanta de timp de integrare TI , determină o comandă proporțională cu integrala erorii sistemului.

Componenta derivativă, exprimată prin constanta de timp de derivare, TD, determină o comandă proporțională cu derivata erorii sistemului.

Element proporțional Integrator

Funcția de transfer este:

Unde:

KR = factorul de proporționalitate

TI = constanta de timp de integrare

Determinarea experimentală a parametrilor funcției de transfer de ordinul unu

Funcția de transfer, considerând și timp mort este,

Figura 2: Raspunsul la semnal treapta

Determinarea factorului de amplificare K

Se măsoară valorile Du și [y(∞) – yst (t0)] corespunzătoare segmentelor din

grafic.

Se calculează factorul K

,

Determinarea constantei de timp T prin metoda tangentei

În punctul inițial B se duce o tangentă la răspunsul care intersectează ordonata finală în C. Proiecția DE a segmentului BC, pe axa timpului este egalăcu T.

Observație: Tangenta se poate duce în orice punct F al raspunsului păna la intersecția G a ordonatei finale y(∞). Acesta subtinde pe axa timpului un segment PQ egal cu T, oricare ar fi punctul F. Dacă sistemul este de ordinul întâi atunci toate segmentele PQ au o aceeași lungime.

Relații și metode practice de acordare a regulatoarelor tipizate

În acest capitol se prezintă o serie de relații pentru determinarea valorilor optime ale parametrilor regulatoarelor tipizate, în raport cu diferite criterii, considerând parțile fixe ale sistemului cu timp sau fără timp mort, de ordinul I sau II și câteva cazuri particulare de ordin mare.

Acordarea regulatoarelor după metoda Nichols

Se determină experimental si . Pentru aceasta, având = și , se mărește factorul de proporționalitate până apar oscilații întreținute.

Acea valoare a lui este , ce înseamnă o bandă de proporționalitate , iar perioada oscilațiilor este .

Regulator P :  ;

Regulator PI :  ; ;

Regulator PID :  ; ;

Regulator PID cu factor de interdependență ,(q=1):

 ; ;

Acordarea regulatoarelor după metoda Oppelt

Parametrii de acordare sunt:

Tabel 1: Parametrii de acordare

Acordarea regulatoarelor după metoda Chien-Hrones-Reswick (CHR)

Relațiile de acordare a parametrilor regulatorului pentru răspunsul optim la variația mărimii impuse sunt prezentate în tabelul de mai jos:

Tabel 2: Relațiile de acordare

Discretizarea funcției de transfer a unui element PI

Deoarece s-au dezvoltat foarte mult sistemele numerice, a venit și nevoia de a realiza regulatoare sub formă numerică.

Exemple de avantaje ale folosirii sistemelor numerice pentru implementare regulatoarelor:

Ușurința de modificare a regulatoarelor;

Adaptabilitatea;

Posibilitatea de păstrare a evoluției în memorie;

Posibilitatea de realizare software a regulatoarelor.

Semnalele primite de la traductoare trebuiesc discretizate atunci când dorim să implementăm un regulator numeric pentru a controla un proces continuu. Astfel, semnalul nu o să mai fie continuu, ci va fi construit dintr-o multitudine de puncte măsurate la anumite intervale de timp bine determinate.

Perioada dintre două măsurători se numește perioada de eșantionare și este notată cu Te.

Ca urmare a acestor modificări, apare necesitatea de a calcula o forma discretă a funcției de transfer pentru regulatoarele numerice.

Funcția de transfer discretizată are forma:

CAPITOLUL II: Prezentarea plăcii de dezvoltare PICDEM 18

Prezentare generală

Placa de dezvoltare PICDEM 18 a fost dezvoltată de Microchip și reprezintă o soluție bună pentru crearea acestui proiect deoarece dispune de intrări – ieșiri analogice și un număr mare de intrări – ieșiri digitale.

Este ușor de programat de la un calculator prin intermediul unui cablu USB și poate fi alimentat separat de la o sursă a cărei tensiune poate varia între 9V și 15V.

Placa de dezvoltare PICDEM 18 poate fi echipată cu unul din cele două microcontrollere: PIC18F8722 sau PIC18F87J11.

Principalele caracteristici ale plăcii de dezvoltare PICDEM 18

În continuare sunt prezentate unele dintre facilitățile oferite de placa de dezvoltare PICDEM 18. Acestea se pot observa în Figura 3:

Figura 3: Placa de dezvoltare PICDEM 18

1. Microcontroller-ul PIC18F8722, microcontroller-ul primar montat pe placă;

2. Pini tata pentru conectarea modulului PIM. Un PIM permit unui dispozitiv PIC18 să fie conectat alternativ la placă ca microcontroller primar;

3. Conector ICD (In-Circuit Debugger) pentru conectarea la MPLAB ICD 2;

4. Conector cu 6 pini PICkit 3;

5. Potențiometu de 10kΩ pentru intrări analogice;

6. Buton PUSH pentru resetare externă;

7. Conector USB pentru comunicare RS-232;

8. Microcontroler-ul PIC18LF2450, pentru conversia de comunicare RS-232 pentru protocolul USB pentru atașarea la un PC;

9. 12 MHz, pentru microcontroler PIC18LF2450;

10. Soclu RS-232 DB9 și hardware-ul necesar asociat pentru conectarea directă la interfața RS-232;

11. Jumper J13 pentru rutarea comunicației RS-232 fie prin portul USB sau prin RS-232;

12. Jumper J4 pentru selectarea programului din dispozitivului principal PIC folosit prin USB pentru comunicare RS-232;

13. Comutarea butonului S4 pentru desemnarea microcontroller-ului principal, să fie montate pe placa PIC18F8722 sau pe un microcontroler PIM montat;

14. Indicator LED pentru pornire;

15. JP1 pentru deconectarea a celor 8 LED-uri de afișare;

16. 8 LED-uri;

17. 32.768 kHz cristali pentru Timer1 pentru funcționarea ceasului;

18. Două butoane PUSH;

19. Senzor de temperatură microchip MPC9701A;

20. 25LC256 SPI EEPROM;

21. JP2 pentru a activa / dezactiva EEPROM-ul;

22. JP3 pentru a activa / dezactiva LCD-ul;

23. 10 MHz cristali pentru microcontroller-ul principal;

24. Soclu pentru conectori “fiică”;

25. Expander SPI intrare/ieșire pentru display-ul LCD, MCP23S17;

26. Zona prototype pentru hardware-ul utilizatorului;

27. Afișajul LCD;

28. J2 trei pini tata pentru a selecta o tensiune de 3.3V sau5V;

29. J14 cu patru pini tata pentru utilizarea unui PIM, dacă este necesar, pentru a se conecta la o tensiune de 3.3V sau 5V, VIN și ICE MCLR;

PICKIT 3 Programmer/Debugger

Programatorul PICKit 3 este un dispozitiv controlat de calculator pe care lucrează programul MPLAB IDE. Acesta este folosit pentru dezvoltarea aplicațiilor pentru Microcontrollere PIC și dsPIC bazate pe In-Circuit Serial Programming și Enhanced In-Circuit Serial Programming cu interfețe pe două fire. Programatorul PICKIT 3 execută codul programului ca un dispozitiv real.

Avantajele programatorului PICKIT 3:

Execuție în timp real;

Procesoarele rulează cu viteza maximă;

Ștergere orice tip de memorie (ID, EEPROM);

Citirea/scrierea programului și datele în memoria microcontrolerului.

Arhitectura PIC

PIC este o familie de microcontrollere cu arhitectură Harvard produse de Microchip Technology, derivate din PIC1640 dezvoltate inițial de divizia de microelectronice de la General Instrument. Numele PIC se referea inițial la „Peripheral Interface Controller”.

PIC-urile sunt populare atât printre dezvoltatorii industriali cât și pentru hobby-iști datorită costului lor scăzut, disponiblității mari, bazei largi de utilizatori, colecției extinse de note aplicative, disponibilitatea uneltelor de dezvoltare gratuite sau foarte ieftine, și a compatibilității cu programarea serială.

Arhitectura nucleului: Arhitectura PIC este caracterizată de multele sale atribute:

• Spații separate de cod și date (arhitectura Harvard) pentru toate dispozitivele în afara de PIC32, care are o arhitectură Von Neumann;

• un număr mic de instrucțiuni cu lungime fixă;

• majoritatea instrucțiuniilor sunt execuții cu un singur ciclu;

• o stivă hardware pentru a stoca adresele de întoarcere;

• un spațiu relativ mic de spațiu adresabil de date (de obicei 256 bytes) care poate fi extins;

• registre CPU, port și periferice mappate data space;

• contorul de program este de asemenea mappat în spațiul de date și este modificabil (este utilizat pentru a implementa săriturile indirecte).

Nu există diferență între spațiul de memorie și spațiul de registru pentru ca RAM-ul îndeplinește sarcina pentru ambele, iar ram-ul este considerat de obicei fișierul registru sau mai simplu, registru.

Spațiul data (RAM): PIC-urile au un set de registre care funcționează ca un RAM cu scop general. Registrele de control cu scop specific pentru resursele on-chip hardware sunt de asemenea mapp-ate în spațiul de date. Adresabilitatea memoriei variază depinzând de seriile dispozitvelor; de asemenea toate dispozitvele PIC au un mecanism pentru a extinde adresabilitatea și către memoria adițională. Seriile ulterioare de dispozitive prezintă mai multe instrucțiuni care pot acoperi întreg spațiul adresabil, independent de banca aleasă. În dispozitivele timpurii, orice mișcare de registru trebuia arhivată prin acumulator.

Pentru a implementa adresarea indirectă, un „registru de selectare fișier” și un „registru indirect” sunt necesare. Un număr de registru este scris în RSF, după care acesta citește din sau scrie în. Dispozitivele ulterioare au extins acest concept cu post și pre incrementare/decrementare pentru o mai mare efieciență în accesarea datelor stocate secvențial. Aceasta permite RSF-urilor să fie tratate ca un indicator de stivă.

Memoria de date externă nu este adresabilă în mod direct cu excepția dispozitivelor cu număr mare de pini PIC18.

Spațiul de cod Spațiul de cod este în general implementat ca ROM, EPROM sau ROM flash. În general, memoria cod externă nu este direct adresabilă din cauza lipsei unei interfețe cu memoria externă. Excepțiile sunt PIC17 și PIC18.

Mărimea cuvântului: Toate PIC-urile gestionează (și adresează) datele în bucăți de 8 biți. Totuși, unitatea adresabilității spațiului de cod nu este în general acceași cu cea a spațiului de date. De exemplu, PIC-urile din linia de bază și clasa mijlocie au memorie program adresabilă cu aceeași mărime de cuvânt ca și lățimea instrucțiunii, 12 respectiv 14 biți. La polul opus, seria PIC18, memoria program este adresată în incremente de 8 biți (bytes) care diferă de lățimea instrucțiunii de 16 biți.

Pentru a fi clar, capacitatea de memorie de program este de obicei măsurată în număr de instrucțiuni, și nu în bytes.

Stive: PIC-urile au o stivă hardware de apelare, folosită să salveze adresele de întoarcere. Stiva hardware nu este accesibilă pe dispozitivele precedente, dar asta s-a schimbat o dată cu cele din seria 18.

Compatibilitatea hardware pentru o stivă parametru de scop general nu se găsea în seriile timpurii, dar acest lucru s-a îmbunătățit simțitor în seria 18, făcând arhitectura acesteiea mai prietenoasă pentru compilatoarele de limbaj de înalt nivel. Set de instrucțiuni:

Instrucțiunile unui PIC variază de la aproximativ 35 de instrucțiuni pentru PIC-urile low-end până la peste 80 pentru cele high-end. Seturile de instrucțiuni includ instrucțiuni pentru a realiza o varietate de operații direct pe registre, pe acumulator și o constantă literală sau acumulator și registru, și de asemenea pentru o execuție condiționată și branșamentul de programe.

Unele operații, cum ar fi setarea și testarea biților, pot fi efectuate pe orice registru numerotat, dar operațiile aritmetice bi-operande tot timpul implică utilizarea acumulatorului (w), scriind înapoi rezultatul ori W-ului sau altui registru operând. Pe nucleele mai vechi, toate mișcăriile mai vechi trebuiau să treacă prin W, dar asta s-a schimbat odată cu apariția celor high-end.

Nucleele PIC au instrucțiuni de ingnorare care sunt utilizate pentru executarea condiționată și branșament. Instrucțiunile de skip sunt „skip if bit set” și „skip if bit not set”. Pentru că nucleele dinaintea PIC18 aveau doar instrucțiuni de branșă necondiționate, salturile condiționate sunt implementate de un skip.

Arhitecturile PIC au următoarele avantaje:

• Set mic de intrucțiuni de învățat;

• Arhitectura RISC;

• Oscilator integrat cu viteze selectabile;

• Microcontrolere ieftine;

Microcontrolerul PIC 18F8722

Placa de dezvoltare PICDEM 18 folosește microcontrollerele PIC 18F8722 și PIC 18F87J11. Schimbarea microcontrollerului de pe placă se va realiza cu mare atenție, avînd grijă ca pinii să nu se rupă sau să fie îndoiți.

Pinii microcontrollerului sunt conectați la diferite periferice ale plăcii (interfața serial, ethernet, convertoare, etc).

De asemenea, toți pinii sunt conectati la LED-uri, făcând foarte ușoară monitorizarea stării acestora pe timpul aplicațiilor.

Figura 5: Microcontroller-ul PIC18F8722

Conector USB

Placa de dezvoltare PICDEM 18 conține un conector USB prin intermediul căruia se poate realiza o conexiune serială de tip RS – 232.

Convertorul analog numeric (CAN)

Convertorul analog numeric are 12 intrări pentru dispozitivele pe 64 de pini și 16 intrări pentru dispozitivele 80 de pini. Acest modul permite conversia unui semnal de intrare analogic în reprezentarea sa digitală într-un număr pe 10 biți.

Modulul CAN dispune de 5 registrii:

– Registrul rezultat HIGH al conversiei A/D (ADRESH);

– Registrul rezultat LOW al conversiei A/D (ADRESL);

– Registrul de control 0 (ADCON0);

– Registrul de control 1 (ADCON1);

– Registrul de control 2 (ADCON2).

Registrul ADCON0, descris în tabelul 1, controlează modul de operație al modulului A/D. Registrul ADCON1, descris în tabelul 2, configurează funcțiie pinilor portului. Registrul ADCON2, descris în tabelul 3, configurează ceasul sursei, timpul programabil de achiziție și justificarea rezultatului.

Tabel 3: ADCON0: A/D REGISTRUL DE CONTROL

bit 7-6 Neimplementați: Citit ca ‘0’

bit 5-2 CHS<3:0> Canalul analog de selecție al biților(1)

0000 = Canalul 0 (AN0)

0001 = Canalul 1 (AN1)

0010 = Canalul 2 (AN2)

0011 = Canalul 3 (AN3)

0100 = Canalul 4 (AN4)

0101 = Canalul 5 (AN5)

0110 = Canalul 6 (AN6)

0111 = Canalul 7 (AN7)

1000 = Canalul 8 (AN8)

1001 = Canalul 9 (AN9)

1010 = Canalul 10 (AN10)

1011 = Canalul 11 (AN11)

1100 = Canalul 12 (AN12)(1)

1101 = Canalul 13 (AN13)(1)

1110 = Canalul 14 (AN14)(1)

1111 = Canalul 15 (AN15)(1)

bitul 1 GO/DONE: A/D Conversia bitului status

Cât timp ADON = 1:

1 = A/D conversia este în desfășurare

0 = A/D Idle

bit 0 ADON: A/D On bit

1 = A/D modulul convertorului este activat

0 = A/D modulul convertorului este dezazctivat

Nota 1: Aceste canale nu sunt implementate pe dispozitivele ce rulează pe 64 de pini.

Tabel 4: ADCON1: A/D REGISTRUL DE CONTROL

bit 7-6 Neimplementați: Citiți ca și ‘0’

bit 5-4 VCFG<1:0>: Biții care controlează voltajul de referință.

bit 3-0 PCFG<3:0>: A/D Biții de control ce configurează Portul:

Figura 6: Biții de control si configurare ai potului A/D

Tabel 5: ADCON1: A/D REGISTRUL DE CONTROL

bit 7 ADFM: A/D Formatul bitului de selecție rezultat

1 = Aliniat la dreapta

0 = Aliniat la stanga

bit 6 Neimplementat: Citit ca și ‘0’

bit 5-3 ACQT<2:0>: A/D Timpul de achiziție al biților de selecție

111 = 20 TAD

110 = 16 TAD

101 = 12 TAD

100 = 8 TAD

011 = 6 TAD

010 = 4 TAD

001 = 2 TAD

000 = 0 TAD(1)

bit 2-0 ADCS<2:0>: A/D Conversia ceasului de selecție al biților

111 = FRC (ceasul este derivat din oscilatorul A/D RC)(1)

110 = FOSC/64

101 = FOSC/16

100 = FOSC/4

011 = FRC (ceasul este derivat din oscilatorul A/D RC)(1)

010 = FOSC/32

001 = FOSC/8

000 = FOSC/2

Nota 1: Dacă sursa ceasului A/D FRC este selectată, o întârziere a instrucțiunii ciclului TCY este adăugată înainte de startul ceasului A/D. Acesta permite instrucțiunii SLEEP să fie executată înainte de startul conversiei.

Tensiunea de referință poate fi programată software și poate fi aleasă să fie diferența de tensiune între borna pozitiva (VDD ) și masă (VSS ) sau nivelul de tensiune de pe pinii RA3/AN3/VREF+ și RA2/AN2/VREF-.

Convertorul A/D are o caracteristică unică, aceea de a fi capabil să opereze în timp ce dispozitivul este în modul Sleep. Pentru a opera în modul Sleep, ceasul de conversie A/D trebuie să fie derivat din oscilatorul intern RC al A/D-ului.

Ieșirea din așteptare este intrarea în convertor, care generează rezultatul prin succesive aproximări.

Dispozitivul Reset forțează toate registrele din starea Reset. Acesta forțează modulul A/D pentru a fi oprit și orice conversie care este în curs este întreruptă.

Fiecare pin din port asociat cu convertorul A/D poate fi configurat ca o intrare analogică sau ca o intrare-ieșire digitală. Registrele ADRESH și ADRESL conțin rezultatele conversiei A/D. Când conversia A/D este completă, rezultatul este încărcat în registrul pereche ADRESH:ADRESL, bitul GO/DONE (registrul ADCON0) este golit și întreruperea bitului de flag, ADIF (PIR<6>), este setată.

Valoarea din registrii ADRESH:ADRESL nu este modificată după realizarea unei reporniri ca urmare al unui Reset. Regiștrii ADRESH:ADRESL vor conține o valoare necunoscută dupa o resetare.

După ce modulul A/D a fost configurat cum s-a dorit, selectarea canalului trebuie să fie făcută înainte să înceapă conversia. Intrarea canalelor analogice trebuie să conțină biții TRIS corespunzători selectați ca și intrare. Pentru a determina timpul de achiziție de folosește formula:

TACQ = Amplifier Settling Time + Holding Capacitor Charging Time + Temperature Coefficient

= TAMP + TC + TCOFF

După ce timpul de achiziție a ajuns la final, conversia A/D trebuie să înceapă. Timpul de achiziție poate fi programat să se desfașoare setând bitul GO/DONE si timpul actual de incepere a conversiei.

Pentru realizarea unei conversii analog numerice trebuie urmați pașii următori:

1. Configurarea modului A/D:

– Se configurează pinii analogici și tensiunea de referință (folosnd registrul ADCON1);

– Se selectează canalul de intrare (ADCON0);

– Se selectează timpul necesar pentru achiziție (ADCON2)

– Se selectează ceasul ce controlează conversia (ADCON2)

– Se activează modulul A/D (ADCON0)

2. Configurarea întreruperii A/D (dacă se dorește):

– Se resetează bitul ADIF;

– Se setează bitul ADIE;

– Se setează bitul GIE;

3. Se așteaptă timpul necesar pentru achiziție;

4. Se porneste conversia:

– Se setează bitul GO/DONE (din registrul ADCON0);

5. Se așteaptă terminarea conversiei:

– Se verifică dacă bitul GO/DONE a fost resetat sau

– Se așteaptă întreruperea A/D;

6. Se citește rezultatul conversiei din registrul ADRESH:ADRESL;

7. Pentru următoarea conversie se merge la pasul 1 sau la pasul 2. Se definește timpul TAD ca timpul de conversie pe bit. Pentru inceperea următoarei achiziții trebuie așteptat minim 2TAD.

Principiul conversiei analog numerice este prezentat in figura de mai jos:

Figura 7: Conversie A/D prin aproximari successive

CAPITOLUL IV: Modulația în durată a impulsurilor (PWM)

Familia de dispositive, PIC18F8722, are un total de 5 module CCP (Capture/Compare/PWM). Două dintre acestea (CCP4 si CCP5) implementează modul standard Capture, Compare și modul Pulse-Width Modulation (PWM) ce urmează a fi discutate. Celelalte trei module (ECCP1, ECCP2, ECCP3) implementează modul standard Capture și modul Compare, la fel ca și modul PWM.

Modul de configurare CCP

Fiecare modul Capture/Compare/ PWM este asociat cu un registru de control (în general, CCPxCON) și un registru de date (CCPRx). Registrul de date, în schimb, este alcătuit din două registere de 8 biți: CCPRxL (octetul cel mai putin semnificativ) și CCPRxH(octetul cel mai semnificativ). Toate registrele pot fi citite și scrise.

Modulele CCP și Timer

Modulele CCP/ECCP utilizează Timerele 1,2,3 sau 4, în funcție de modul selectat. Timer1 și Timer2 sunt disponibile pentru module în modul Capture sau Compare, pe când Timer2 și Timer4 sunt disponibile pentru module în modul PWM.

Atribuirea unui anumit timer unui modul este determinată de biții de enable Timer la CCP din registrul T3CON. În funcție de configurația selectată, până la patru timere pot fi active simultan, cu modulele în acceași confiurație (Capture, Compare sau PWM) împărțind aceeași resursă timer.

Pinul de atribuire ECCP2

Pinul de atribuire pentru ECCP2 (Capture Input, Compare și ieșirea PWM) se poate schimba, în funcție de configurație. Bitul de configurare CCP2MX determină care pin ECCP2 este multiplexat. Implicit, este asignat pinului RC1 (CCP2M = 1). Dacă bitul de configurare este șters, ECCP2 este multiplexat cu RE7 în modul microcontrolerului, sau cu RE3 în toate celelalte moduri.

Schimbând pinul de atribuire al ECCP2 nu se schimba automat toate cerințele pentru configurarea pinului port. Utilizatorul trebuie să verifice întotdeauna ca registrul TRIS adecvat este configurat correct pentru ca operația ECCP2 să funcționeze indiferent de locul în care se află.

Modul Capture

În modul Capture, perechea de regiștrii CCPRxH:CCPRxL reține valoarea de 16-biți a registrelor TMR1 sau TMR3 atunci când apare un eveniment pe pinul CCPx corespunzător. Un eveniment este definit ca fiind unul din următoarele:

Fiecare front descrescător

Fiecare front crescător

Fiecare al 4-lea front crescător

Fiecare al 16-lea front crescător.

Evenimentul este selectat de biții de selecție ai modului utilizând biții CCPxM<3:0> (CCPCON<3:0>). Atunci când o captură este făcută, bitul pentru flagul de cerere de întrerupere, CCPxIF, este setat; Acesta trebuie să fie adus în zero prin software. Dacă apare o altă captură înainte ca valoarea din registrul CCPRx să fie citită, vechea valoare capturată este suprascrisă de noua valoare capurată.

Pinul de configurație CCPx

În modul Capture, pinii adecvați CCPx trebuie să fie configurați ca intrări prin setarea în mod corespunzător a bitului de direcție TRIS.

Nota: Dacă un pin CCPx este configurat ca o ieșire, o scriere în port poate fi considerată o condiție de captură validă.

Modul de selecție TIMER1/TIMER3

Timerele care urmează să fie folosite cu caracteristica de captură (TIMER1 și/sau TIMER3) trebuie să ruleze în modul timer sau modul counter sincronizat. În modul counter asincron, operațiunea de captură nu va funcționa. Fiecare modul CCP din timerul care urmează să fie folosit poate fi selectat în registrul T3CON.

Întreruperea Software

Atunci când modul Capture se schimbă, exista posibilitatea să se genereze o întrerupere de captură falsă. Utilizatorul trebuie să păstreze bitul de acceptare a întreruperilor CCPxIE în zero pentru a evuta apariția de întreruperi false. Bitul de fanion de întrerupere CCPxIF ar trebui de asemenea să se șteargă după fiecare schimbare în modul de operare.

Prescaler-ul CCP

Există patru setări ale prescaler-ului în modul Capture. Ele sunt specificate ca parte a modului de funcționare prin biții de selecție ai modului (CCPxM<3:0>). Ori de câte ori modulul CPP este oprit, sau modul Capture este dezactivat, contorul prescaler-ului este șters. Asta inseamnă că orice Reset va șterge counter-ul prescaler-ului.

Trecerea de la un prescaler Capture la altul poate să genereze o întrerupere. De asemenea, counter-ul prescaler-ului nu va fi resetat; de aceea prima captura s-ar putea să nu fie de la un prescaler diferit de zero.

Modul de comparare

În modul Compare, valoarea de 16 biți a registrului CCPRx este constant comparată cu valoarea pereche a registrului TMR1 sau TMR3. Când acest lucru se întâmplă, pinul CCPx trebuie să fie:

– pus în high;

– pus în low;

– comutat (high to low sau low to high);

– rămân neschimbate (reflectă starea de blocare I/O).

Acțiunea asupra pinului se bazează pe valoarea modului de selecție al biților (CCPxM<3:0>). În același timp, întreruperea flagului bit, CCPxIF, este setată.

Pinul de configurare CCPx

Userul trebuie să configureze pinul CCPx ca ieșire, resetand bitul corespunzator TRIS.

Notă: Resetând registrul CCPxCON se va forța compararea latch-ului de ieșire (în funcție de configurarea dispozitivului) să fie setat la nivelul implicit low. Acesta nu este latch-ul de date al port-ului I/O.

Modul de selecție TIMER1/TIMER3

Timer1 și/sau Timer 3 trebuie să ruleze în modul Timer sau modul counter sincronizat dacă modulul CCP este folosit pentru a compara. În modul counter asincronizat, operația de comparare s-ar putea să nu funcționeze.

Modul întreruperii software

Atunci când modul de generare al întreruperii software este ales (CCPxM<3:0>=1010), pinul CCPx corespunzător nu este afectat. Doar o întrerupere CCP este generată, dacă este activată și bitul CCPxIE este setat.

Evenimentul special TRIGGER

Toate modulele CCP sunt echipate cu un Trigger pentru eveniment special. Acesta este un semnal intern hardware generat în modul Compare pentru a declanșa acțiuni de către alte module. Trigger-ul pentru evenimente speciale este activat prin selectarea modului Compare specific acestuia (CCPxM<3:0>=1011).

Pentru toate modulele CCP, trigger-ul pentru evenimente speciale resetează perechea registrului timer pentru orice resursă timer care este atribuit în prezent ca bază de timp al modulului. Aceasta permite registrelor CCPRx să servească ca un registru cu perioada programabilă pentru oricare timer.

Trigger-ul pentru evenimente speciale ECCP2 poate să înceapă cu conversia A/D. Pentru a se putea realiza, convertorul A/D trebuie să fie deja pornit.

Modul PWM

În modul PWM, pinul CCPx poate să producă o ieșire PWM cu o rezoluție de până la 10 biți. Deoarece pinii CCP4 și CCP5 sunt multiplexați cu un latch de date din PORTG, bitul TRISG corespunzător trebuie să fie resetat pentru a face pinul CCP4 sau CCP5 ca ieșire.

Frecvența PWM-ului este inversul perioadei(1/[PWM period]).

Figura 8: Ieșire PWM

Prin scrierea registrului PR2 (sau PR4) al modulului Timer2, respectiv Timer 4, putem obține perioada PWM-ului.

Această perioadă se poate calcula folosind următoarea formula:

Unde

TPWM -> reprezintă perioada PWM-ului

TOSC -> reprezintă perioadă de oscilație a ceasului

TMR2PRE -> reprezintă valoarea de prescalare.

Pot avea loc următoarele acțiuni, atunci când TMR2 este egal cu PR2:

Se resetează TMR2;

Se resetează pinul CCPx, cu excepția cazului în care factorul de umplere este egal cu 0;

Se transferă valoarea registrului CCPRxL în registrul CCPRxH.

Factorul de umplere este obținut prin scrierea biților 5 și 4 din registrul CCPxCON și scrierea registrului CCPR1L. Acesta se calculează cu următoarea relație:

Notă: ”Resetarea registrului CCP4CON sau CCP5Con va forța ieșirea latch RG3 sau RG4 (depinzând de configurarea dispozitivului) la nivelul low implicit. Acesta nu este latch-ul de date al PORTG de I/O”.

Tratarea întreruperilor

Familia de dispozitive PIC18F8722 dispune de numeroase surse de întrerupere și posibilitatea de asignare de priorități întreruperilor, ceea ce permite celor mai multe surse de întreruperi să le fie asignate întreruperi de un nivel mai înalt sau de un nivel mai scăzut de prioritate. Întreruperea cu prioritatea cea mai inaltă se găsește la adresa 0008h și întreruperea scăzută se găsește la adresa 0018h.

Evenimentele de întrerupere de mare prioritate vor întrerupe orice întrerupere cu prioritate scăzută care pot rula în acel moment.

Microcontroler-ul dispune de 10 regiștrii ce se folosesc pentru a controla operațiile de întrerupere. Aceștia sunt:

RCON;

INTCON;

INTCON2;

INTCON3;

PIR1, PIR2, PIR3;

PIE 1, PIE2, PIE3;

IPR1, IPR2, IPR3.

În general, sursele întreruperilor dispun de trei biți ce controlează aceste operații. Cei trei biți sunt:

Bitul de flag (flag bit) ce indică dacă a avut loc o întrerupere.

Bitul de activare (enable bit) ce permite executarea programului de ramură la adresa vectorului de întrerupere atunci când bitul flag este setat.

Bitul de prioritate (priority bit) ce selectează prioritatea înaltă sau scăzută.

Caracteristica priorității întreruperii este să permită setarea bitului IPEN (RCON<7>). Atunci când prioritatea întreruperii este activată, există doi biți ce activează întreruperile globale. Setând bitul GIEH (INTCON<7>) se activează toate întreruperile ce au setat bitul de prioritate (high priority). Setând bitul GIEL (INTCON<6>) se activează toate întreruperile ce au prioritatea bitului scazută (low priority). Atunci când flagul de întrerupere, bitul de activare și bitul de setare al întreruperii globale corespunzătoare sunt setați, întreruperea va fi trimisă imediat la adresa 0008h sau 0018h, în funcție de prioritatea bitului setat. Individual, întreruperile pot fi dezactivate prin intermediul resetării bitilor corespunzători.

Atunci când IPEN este resetat, prioritatea întreruperii este dezactivată și întreruperile sunt compatibile cu dispozitivele din gama de mijloc PIC. În modul de compatibilitate, biții priorității de întrerupere pentru fiecare sursă nu au niciun efect. INTCON<6> este bitul PEIE ce permite activarea/dezactivarea tuturor surselor de întrerupere periferice. INTCON<7> este bitul GIE ce permite activarea/dezactivarea tuturor surselor de întrerupere. Toate întreruperile se găsesc la adresa 0008h în modul de compatibilitate.

Atunci când o întrerupere răspunde, întreruperea globală permite bitului să fie resetat pentru a dezactiva întreruperile suplimentare. Dacă bitul IPEN este resetat, acesta va reseta și bitul GIE. Dacă nivelul priorității întreruperii este folosit, bitul va fi GIEH sau GIEL. Sursele de întreruperi cu prioritatea înaltă pot întrerupe o întrerupere cu o prioritate scăzută. Întreruperile cu prioritatea scăzută nu rulează cât timp întreruperile cu prioritate înaltă rulează.

Adresa returnată este impinsă într-o stivă și PC-ul este încărcat cu adresa vectorului de întrerupere (0008h sau 0018h). O data aflați în rutina de tratare a întreruperii, sursa întreruperilor poate fi determinata prin interogarea biților de flag ai întreruperii. Biții de flag ai întreruperii trebuie să fie resetați software înainte de reactivarea întreruperilor pentru a evita întreruperile recursive.

Instrucțiunea “întoarcerea de la întrerupere”, RETFIE, închide întreruperile de rutină și setează bitul GIE (GIEH sau GIEL în funcție de nivelele priorității folosite), care reactivează întreruperile.

Pentru evenimentele întreruperilor externe, cum ar fi pinii INTx sau schimbarea intrării întreruperii PORTB, latenta întrerupere va fi de la trei la patru cicluri program. Latenta exactă este aceeași pentru una sau două cicluri ale instrucțiunilor. Biții fanion ai întreruperilor individuale sunt setați, indiferent de statusul biților de activare corespunzători sau de statusul bitului GIE.

CAPITOLUL V: Controlul debitului de aer În instalația labvolt 3522-05

Prezentarea instalației de laborator LabVolt 3522-05

Scopul primar al controlului este menținerea unei variabile fizice, numită variabilă controlată, la o valoare specifică cerută sau într-o gamă cerută. Această variabilă ar putea fi, de exemplu, temperatura, debitul, etc. Pentru a controla procesul, pot fi utilizate controlul sistemului în buclă deschisă sau controlul sistemului în buclă închisă.

Instalația are două părți, una pentru controlul temperaturii și cealaltă pentru controlul debitului de aer. Cele două componente pot fi folosite simultan pentru diferite configurații.

Partea de reglare a temperaturii este alcătuită dintr-o rezistență electrică și un traductor de temperatură. Rezistență electrică poate fi comandată prin tensiune între 0-5V sau curent 4-20mA. Traductorul de temperatură transmite o tensiune între 0-5V sau curent 4-20mA.

Pe lângă traductor și elementul de execuție se mai găsesc și două potențiometre pentru calibrarea senzorului de temperatură.

Partea de reglare a temperaturii este prezentată în Figura 26

Figura 29 – Reglarea temperaturii

Pentru reglarea debitului de aer instalația folosește un traductor de debit ce măsoară debitul de aer trecut printr-un tub venturi. Ca element de execuție se folosește un ventilator.

La fel ca la partea de reglare a temperaturii sunt folosite semnale unificate de tensiune 0-5V și curent 4-20mA.

Partea de reglare a debitului arată ca în Figura 27 .

Figura 30 – Reglarea debitului de aer

Pentru a se face reglarea corect, masa instalației trebuie conectată la masa regulatorului.

Componentele instalației de reglare a debitului

Instalația de control a proceselor de temperatură sau debit LabVolt permite controlul temperaturii și debitului. Mai mult, temperatura procesului poate fi controlată fie în modul “încălzire” fie în modul “răcire”.

În esență instalația constă dintr-un tub ce permite trecerea aerului, un ventilator utilizat pentru circularea aerului, un amortizor utilizat pentru modificarea de sarcini sau generarea perturbațiilor, un element de încălzire și traductoare de temperatură și debit.

Figura 31 arată interiorul instalației. Identificarea și descrierea fiecărei componente a instalației este prezentată mai jos.

1. Canalul de intrare: deschidere cu grilaj prin care aerul intră în tub.

2. Încălzitorul: constă dintr-un element de încălzire care convertește energia electrică în căldură și un radiator pentru disiparea căldurii.

3. Tub Venturi: secțiune îngustată a tubului de-a lungul căreia este creată o presiune diferențială când este parcursă de aer. Cu cât debitul de aer care trece prin tub este mai mare, cu atât presiunea diferențială este mai mare.

4. Amortizorul: un orificiu în tub care este utilizat pentru crearea de perturbații prin modificarea debitului de aer care curge prin tub.

5. Ventilatorul: este utilizat pentru a crea un debit de aer prin tub. Când ventilatorul se rotește, el trage aerul în tub prin orificiul de intrare și îl trimite către ieșire.

6. Ieșirea tubului: deschidere cu grilaj prin care aerul părăsește tubul.

Figura 9: Instalația de control a proceselor de temperatură și debit

7. Motorul ventilatorului: convertește tensiunea sau curentul de la intrarea de control a ventilatorului într-o putere proporțională utilizată pentru antrenarea ventilatorului.

8. Traductorul de debit: măsoară presiunea diferențială de-a lungul tubului și produce o tensiune standardizată (0-5 V) sau un curent (4-20 mA) proporționale cu presiunea ce pot fi transmise la regulator.

9. Traductorul de temperatură: produce o tensiune (0-5 V) și un curent (4-20 mA) proporționale cu temperatura radiatorului. În acest scop, traductorul măsoară o tensiune generată de un senzor semiconductor și o convertește într-una utilă, tensiune sau curent standardizate care pot fi transmise la regulator.

10. Motorul încălzitorului: convertește tensiunea sau curentul de la intrarea de control a încălzitorului într-o putere proporțională utilizată pentru antrenarea încălzitorului.

Așa cum se observă în Figura 31, ventilatorul face ca aerul să circule prin crearea unei presiuni foarte mici la ieșirea din tub. Acest lucru face ca presiunea atmosferică de la intrarea tubului, să forțeze circulația aerului prin tub. Cu cât viteza ventilatorului este mai mare, cu atât diferență de presiune este mai mare și deci cu atât debitul de aer ce va circula prin tub va fi mai mare.

Conform legii conservării masei, masa de aer ce intră în tub în orice moment de timp este egală cu masa aerului care părăsește tubul. Acest lucru implică faptul că debitul de aer este constant.

Pentru a menține un debit constant, viteza aerului trebuie să crească atunci când aerul trece prin tubul Venturi, datorită scăderii secțiunii transversale a canalului. Acest lucru înseamnă că viteza aerului la intrarea tubului Venturi, v1, este mai mică decât viteza aerului din interiorul acesteia.

Conform ecuației lui Bernoulli, dacă viteza aerului crește, atunci presiunea aerului este în descreștere. Acest lucru înseamnă că presiunea aerului pe partea de intrare a tubului Venturi, este mai mare decât presiunea aerului din tubul Venturi. Cu cât viteza aerului prin tubul Venturi este mai mare, cu atât presiunea diferențială va fi mai mare de-a lungul tubului Venturi.

Când nu se alimentează elementul de încălzire, radiatorul se află la temperatura camerei indiferent de viteza ventilatorului. Când ventilatorul funcționează, temperatura radiatorului va scădea odată cu creșterea vitezei ventilatorului. Această descreștere are loc deoarece creșterea vitezei ventilatorului face să crească rata schimbului de căldură dintre radiator și aer.

Calibrarea traductorului de debit

Procedura de calibrare a traductorului pentru debitul de aer este similară cu calibrarea senzorului de temperatură. Deosebirea este că în acest caz, nu este nevoie să așteptăm pentru a obține valoarea maximă a debitului de aer deoarece la comandă maximă pentru ventilator, în foarte scurt timp debitul prin tubul venturi va fi maxim. Tot ce avem de făcut este să punem potențiometrele zero și span în pozițiile corespunzătoare pentru a avea la ieșire tensiune 0 pentru cea mai mică turație a ventilatorului, și 5V pentru cea mai mare turație.

Potențiometrele pentru calibrarea traductorului pentru debit se pot vedea în Figura 9.

Figura 10:Potențiometre pentru calibrarea traductorului de debit

Conducerea procesului de reglare a debitului de aer

În cazul unui sistem de reglare în buclă deschisă, variabila controlată nu rămâne la valoarea dorită în cazul apariției unei perturbații, deoarece sistemul controlează puterea aplicată elementului de execuție și nu temperatura sau debitul.

Adăugarea unui regulator și a unei bucle cu reacție inversă reduce variațiile variabilei controlate. Acest tip de sistem, prezentat în Figura 34, este numit sistem de conducere în buclă închisă. Acesta poate menține variabila controlată aproape constantă peste o gamă dată de sarcini sau perturbații:

– bucla cu reacție inversă conține un senzor ce măsoară valoarea variabilei controlate și generează un semnal proporțional care este trimis înapoi la regulator;

– regulatorul calculează eroarea ce reprezintă diferența dintre valoarea de referință și variabila măsurată și corectează această diferență prin reajustarea elementului de control până este atinsă o stare de echilibru. Eroarea este diferită de zero când operatorul schimbă valoarea de referință în mod intenționat sau când schimbările de perturbații sau sarcina modifică variabila controlată;

Figura 11: Conducerea în bucla închisa a proceselor de debit ale instalației

Figura 10 prezintă conducerea în buclă închisă a sistemului de reglare a debitului de aer ce trece prin incinta instalației:

– bucla cu reacție inversă constă dintr-un traductor de presiune care măsoară debitul de aer ce trece prin instalație și generează o tensiune proporțională cu acesta. Această tensiune, numită tensiune de reacție, este transmisă la regulator;

– regulatorul compară tensiunea de reacție, tensiunea referinței și corectează orice diferență dintre cele două prin modificarea puterii aplicate la ventilator până ce este atinsă o stare de echilibru. Dezavantajul principal al utilizării sistemelor de conducere cu reacție inversă este faptul că trebuie să aibă loc o schimbare.

Capitolul V: Mediul de dezvoltare

Mediul MPLAB IDE

MPLAB IDE a fost folosit pentru a programa microcontrollerul PIC 18F8722 utilizat în această aplicație. MPLAB IDE, un Mediu Integrat de Dezvoltare, este un set de instrumente gratuit, pus la dispoziție de către Microchip. Versiunea actuala a MPLAB IDE este versiunea 8. Este o aplicație pe 32-biți ce ruleaza sub Windows și include si alte programe componente gratuite pentru dezvoltarea aplicațiilor, emularea hardware sau debugging.

MPLAB IDE poate fi folosit nativ atât cu limbaj de asamblare cât și cu limbaj C. Alte limbaje de programare ar putea fi suportate prin intermediul instalării unor programe suplimentare.

Exemple de coduri, tutoriale si drivere se pot gasi pe site-ul Microchip. MPLAB IDE nu ruleaza pe Linux, Unix sau Mac.

Print screen lucrare: PWM

Print screen lucrare: Răspunsul la semnal treaptă

Concluzii

Bibliografie

[SSRA05] – Marin, Constantin, Structuri și legi de reglare automată, Ed. Sitech, Craiova, 2005;

Referințe web

[MICROCHIP] http://ww1.microchip.com/downloads/en/DeviceDoc/39564c.pdf

[WIKI] – disponibil via web la adresa http://en.wikipedia.org/wiki/

Codul sursă

#include <xc.h>

#include <spi.h>

#include <delays.h>

#include <stdlib.h>

#include <math.h>

#include <adc.h>

/*

#pragma config FCMEN = OFF

#pragma config FCMEN = OFF

#pragma config IESO = OFF

#pragma config PWRT = OFF

#pragma config BOREN = OFF

#pragma config WDT = OFF

#pragma config MCLRE = ON

#pragma config LVP = OFF

#pragma config XINST = OFF

*/

#define CS PORTAbits.RA2

// addresele registrilor circuitului MCP23S17

#define IODIRA_ADDRESS 0x00

#define IODIRB_ADDRESS 0x01

#define GPIOA_ADDRESS 0x12

#define GPIOB_ADDRESS 0x13

// Prototipuri functii

void setIODIR(char, char);

void setGPIO(char, char);

void lcdCommand(char);

void lcdChar(unsigned char);

void lcdGoTo(char);

void lcdWriteString(unsigned char*);

int i;

float uk=0, uk1=0, ek=0, ek1=0, ek2=0, b0=0, b1=0, b2=0;

float T= 0.001, k=3,Ti= 0.05, Td= 0;

unsigned int ADCResult=0;

float voltage = 0;

double referinta = 0;

char buf1[8];buf2[8];

void interrupt intrerupereS1(void)

{

if(INTCONbits.INT0IE && INTCONbits.INT0IF)

{

referinta += 0.5;

if (referinta>5)

referinta=0;

}

INTCONbits.INT0IF = 0; // resetare flag

}

void setupADC()

{

ADCON0bits.ADON = 1; // Activare modul A/D

ADCON1=0b00001110; // AN1 = analog input

ADCON2=0b10111010; // right Justified Fosc/32

}

unsigned int getADC(unsigned char channel)

{

ADCON0bits.CHS = channel;

ADCON0bits.GO = 0b1;

while(ADCON0bits.DONE);

return (ADRESH<<8)|ADRESL;

}

void main(void)

{

OSCCONbits.IRCF2=1;

OSCCONbits.IRCF1=0;

OSCCONbits.IRCF0=0;

double i_val, f_val, val,i_val1, f_val1;

INTCONbits.GIE=1;

INTCONbits.INT0IE=1;

INTCONbits.INT0IF=0;

INTCON2bits.INTEDG0=1;

CCPR1L = 0;

b0 = k*(1+T/(2*Ti) + Td/T);

b1 = k*(-1+T/(2*Ti) -2 * Td/T);

b2 = k*(Td/T);

setupADC();

while(1){

/* for(i=0;i<10;i++)

_delay(50000);

*/

TRISAbits.RA2=0;

CS=1;

OpenSPI1(SPI_FOSC_64, MODE_10, SMPEND);

setIODIR(IODIRB_ADDRESS,0x00);

setIODIR(IODIRA_ADDRESS,0x00);

lcdCommand(0b00111111);

lcdCommand(0b00001111);

lcdCommand(0b00000001);

lcdCommand(0b00000110);

f_val = modf(referinta, &i_val);

itoa(buf1, i_val, 10);

//itoa(buf1, ADCResult, 10);

lcdWriteString(buf1);

lcdChar('.');

val=f_val*100;

f_val1 = modf(val, &i_val1);

itoa(buf2, i_val1, 10);

lcdWriteString(buf2);

lcdGoTo(0x40); // salt la linia 2

// get the result on channel 0

ADCResult = getADC(1);

voltage = (ADCResult * 5.0)/1024;

//CloseADC();

f_val = modf( voltage, &i_val);

itoa(buf1, i_val, 10);

//itoa(buf1, ADCResult, 10);

lcdWriteString(buf1);

lcdChar('.');

val=f_val*100;

f_val1 = modf( val, &i_val1);

itoa(buf2, i_val1, 10);

lcdWriteString(buf2);

lcdChar('V');

CloseSPI1();

CCP1CON=0b00001100;

PR2 = 0xFF;

T2CONbits.TMR2ON = 1;

T2CONbits.T2CKPS1 = 1;

T2CONbits.T2CKPS0 = 1;

while (!PIR1bits.TMR2IF);

TRISCbits.RC2=0;

ek = referinta – voltage;

uk= uk1 + ek*b0 + ek1*b1 + ek2*b2;

// u = k * eps;

if(uk<0)

uk=0;

if (uk>5)

uk=5;

CCPR1L = uk*51;

uk1=uk;

ek2=ek1;

ek1=ek;

}

}

void setGPIO(char address, char value)

{

CS=0; // inceputul transmisiei

WriteSPI1(0x40);

WriteSPI1(address);

WriteSPI1(value);

CS=1; // sfarsitul transmisiei

}

void setIODIR(char address, char dir)

{

CS=0;

WriteSPI1(0x40);

WriteSPI1(address); // selectare IODIRB

WriteSPI1(dir); // setare directie

CS=1;

}

void lcdCommand(char command)

{

setGPIO(GPIOA_ADDRESS,0x00); // E=0

Delay10TCYx(0);

setGPIO(GPIOB_ADDRESS, command);

Delay10TCYx(0);

setGPIO(GPIOA_ADDRESS,0x40);

Delay10TCYx(0);

setGPIO(GPIOA_ADDRESS,0x00);

Delay10TCYx(0);

}

void lcdChar(unsigned char letter)

{

setGPIO(GPIOA_ADDRESS,0x80);

Delay10TCYx(0);

setGPIO(GPIOB_ADDRESS,letter);

setGPIO(GPIOA_ADDRESS, 0xc0);

Delay10TCYx(0);

setGPIO(GPIOA_ADDRESS,0x00);

Delay10TCYx(0);

}

void lcdGoTo(char pos)

{

lcdCommand(0x80+pos);

}

void lcdWriteString(unsigned char *s)

{

while(*s)

lcdChar(*s++);

}

Index

B

Bibliografie 9

C

CUPRINSUL xi

D

Dimensiuni 3

F

Figuri 4

Formulele matematice 4

I

Ilustrațiile 4

L

Legenda 6

LISTA FIGURILOR xii

LISTA TABELELOR xiii

R

Referințe web 10

S

Structura documentului 2

T

Tabele 5

Similar Posts

  • Materiale de Generatie Noua. Compozitie. Utilizari

    Materiale de generatie noua. Compozitie. Utilizari INTRODUCERE Într-o societate în continuă schimbare și dominată de tehnologie, din dorința de a proteja mediul înconjurător, societatea umană a fost, este și va fi, tot mai preocupată de obținerea unor bunuri de consum cu un grad mai mare de complexitate. Această etapă de dezvoltare atrage după sine investiții…

  • Instalatie Electrica de Actionare

    LUCRARE DE LICENȚĂ INSTALAȚIE ELECTRICĂ DE ACȚIONARE ȘI COMANDĂ A UNEI VANE CU ÎNCHIDERE RAPIDĂ Cuprins INTRODUCERE Prezenta lucrare tratează o soluție de automatizare electrica a unei vane cu închidere rapida. Instalația electrica de automatizare are în componenta automate programabile și are rol de alimentare și comanda a instalației hidraulice de acționare a vanei cu…

  • Proiectarea Unei Sectii DE Prelucrare A Materialelor Textile Refolosibile

    CUPRINS TEMA I Introducere.Considerații generale………………………………………………………………………………………..3 Cap. I . Proiectarea unei secții de prelucrare a materialului textil refolosibil în amestec cu fibre textile și cercetări privind obținerea materialelor textile neconvenționale destinate ca materiale auxiliare pentru îmbrăcăminte exterioară………………………………………………………………………………..4 1.1. Definirea și clasificarea materialelor pentru îmbrăcăminte.Cerințe impuse materiallor pentru îmbrăcăminte………………………………………………………………………………………………………………………..5 1.2.Prelucrarea materialelor textile refolosibile în vederea recuperării de…

  • Structura Generala a Unui Sae

    Un ansamblu de elemente conectate în vederea realizării, dar și a reglării conversiei electromecanice a energiei pentru un anumit proces tehnologic reprezintă un Sistem de Acționare Electrică (SAE). În funcție de rolul lor, elementele componente ale unui sistem de acționare electrică se clasifică astfel: sistemul de forță (SF) – asigură conversia electromecanică a energiei; sistemul…

  • Sistem de Monitorizare a Unui Ambient Inteligent

    PROIECT DE LICENȚĂ Sistem de monitorizare a unui ambient intelligent- monitorizarea și controlul iluminatului CUPRINS Introducere AmI Implicațiile sociale, economice și etice ale inteligenței ambientale Implicațiile inteligenței ambientale în educație și învățare Securitatea sistemelor ambientale inteligente 2. Agenți și modelarea bazată pe agenți 2.1 Scurt istoric 2.2 Definiții de bază 2.3 Proprietăți 2.3.1 Proprietățile mediului…

  • Rulmenti din Otel Si Hibrizi

    CUPRINS Memoriu justificativ In cadrul fiecarei cercetari desfasurate, indiferent de domeniul la care ne referim, rezultatele obtinute pe cale teoretica sunt fara de valoare practica daca nu sunt confirmate de rezultate experimentale corespunzatoare. De obicei, pentru validarea imediata a rezultatelor teoretice obtinute se face apel la prezentari comparative ale acestora cu rezulatele teoretice si experimentale…