Reglarea Instalatiei Labvolt Folosind Microcontroller Ul Pic 18f8722

Cuprins

Figuri

Tabele

INTRODUCERE

1. Componente generale ale reglării automate

1.1. Structura generală a unui sistem de conducere

1.2. Legi tipizate de reglare

1.2.1. Prezentare generală

1.2.2. Legea de tip P

1.2.3. Legea de tip I

1.2.4. Legea de tip D-real

1.2.5. Legea de tip PI

1.2.6. Legea de tip PD-real

1.2.7. Legea de tip PID-real

1.2.7.1. Conexiune paralel dintre un element I și un element PD real

1.2.7.2. Conexiune paralel dintre un element PI și un element D-real

2. Prezentarea instalației de laborator LabVolt 3522-05

2.1. Noțiuni teoretice

2.2. Componentele instalației de reglare a temperaturii/ debitului

2.3. Calibrarea traductorului de temperatură

2.4. Calibrarea traductorului de debit

2.5. Conducerea procesului de reglare a temperaturii și a debitului

3. Prezentarea microcontroller-ului PIC 18F8722

3.1. Prezentarea generală a microcontrollere-lor PIC18F

3.1.1. Unitatea de memorie

3.1.2. Unitatea de procesare centrală

3.1.3. Bus-ul

3.1.4. Unitatea intrare –ieșire

3.1.5. Comunicația serială

3.1.6. Unitatea timer

3.1.7. Watchdog-ul

3.1.8. Convertorul Analog-Digital

3.1.9. Programul

3.1.10. Reprezentarea datelor în memoria unui microcontroller

3.2. Utilizarea plăcii de dezvoltare „PICDEMTM PIC18 Explorer”

3.3. Dispozitivul programator/debugger „PICkitTM 3”

3.4. Mediul de programare MPLAB IDE

3.5. Modulul MASTER SYNCHRONOUS SERIAL PORT (MSSP)

3.6. Modulul ANALOG TO DIGITAL CONVERTER (A/D)

3.7. Modulul COMPARE/CAPTURE/PWM (CCP)

4. Rezultate experimentale

4.1. Prezentare instalație experimentală

4.2. Implementarea numerică a legilor de reglare

4.3. Modul de lucru

4.3.1. Realizarea programului de reglare

4.3.2. Conexiuni realizate

4.3.3. Lansarea în execuție

CONCLUZII

BIBLIOGRAFIE

Figuri

Figura 1 – Structura de reglare cu calculator de proces 8

Figura 2 – Schema bloc continuală 8

Figura 3 – Structura unui sistem tipic de achiziție a datelor bazat pe PC 9

Figura 4 – Structura general a unui sistem de conducere 11

Figura 5 – Caracteristica static Y=F(U) 14

Figura 6 – Funcția de transfer ce variază față de un regim staționar remarcat la un moment t0 15

Figura 7 – Dependența intrare-ieșire, în regim staționar, a mărimilor relative 17

Figura 8 – Răspunsul la intrare treaptă al unui element de tip I 18

Figura 9 – Răspunsul la intrări constante pe porțiuni al unui element I 19

Figura 10 – Ecuația de stare 19

Figura 11 – Răspunsul la intrare treaptă al unui element D-real 20

Figura 12 – Caracteristicile Bode 20

Figura 13 – Reprezentarea caracteristicilor Bode la scară logaritmică a unui element PI 21

Figura 14 – Reprezentarea Simulink a unui element PI 21

Figura 15 – Răspunsul la intrare treaptă pentru un element PI 22

Figura 16 – Răspunsul unui element PI la intrări constante pe porțiuni 22

Figura 17 – Structura conexiunii pentru realizarea elementului D-real cu ajutorul unui element I 23

Figura 18 – Structura conexiunii pentru realizarea elementului PD-real 23

Figura 19 – Răspunsul la intrare rampă a unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – sus 24

Figura 20 – Caracteristicile Bode ale unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – sus 24

Figura 21 – Răspunsul la intrare rampă a unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – jos 25

Figura 22 – Caracteristicile Bode ale unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – jos 25

Figura 23 – Structura unui PID-real realizat prin conexiune paralel dintre un element I și un element PD-real 27

Figura 24 – Răspunsul la intrare treaptă pentru Td < Ty 28

Figura 25 – Răspunsul la intrare treaptă pentru 28

Figura 26 – Răspunsul dintre componenta I și componenta PD-real pentru Td > Ty 29

Figura 27 – Structura unui PID-real cu conexiune paralel dintre un element PI și un element D-real 29

Figura 28 – Structura unui element D-real realizat cu ajutorul unui element I 30

Figura 29 – Reglarea temperaturii 31

Figura 30 – Reglarea debitului de aer 32

Figura 31 – Instalația de control a proceselor de temperatură și debit 33

Figura 32 – Potențiometre pentru calibrarea temperaturii 34

Figura 33 – Potențiometre pentru calibrarea traductorului de debit 35

Figura 34 – Conducerea în bucla închisa a proceselor de debit ale instalației 36

Figura 35 – Un model simplificat de unitate de memorie 37

Figura 36 – Unitate simplificată de procesare centrală cu trei regiștri 38

Figura 37 – Conectarea memoriei și a unității centrale folosind bus-uri 39

Figura 38 – Unități simplificate intrare-ieșire ce permite comunicarea cu lumea externă 39

Figura 39 – Comunicație serială 40

Figura 40 – Unitatea timer 41

Figura 41 – Watchdog 41

Figura 42 – Bloc pentru convertirea unui semnal analogic într-o dimensiune digitală 42

Figura 43 – Secțiunea centrală a microcontroller-ului 42

Figura 44 – Placa de dezvoltare PICDEM™ PIC18 Explorer 47

Figura 45 – Programatorul/debugger-ul PICkit 3 48

Figura 46 – Interfața grafică a programului MPLAB IDE 49

Figura 47 – Fișierele unui proiect embedded 50

Figura 48 – Compilatorul 51

Figura 49 – Comunicția SPI 54

Figura 50 – Microcontrollerul comunică cu circuitul MCP23S17 prin intermediul pinilor RA2, RC4 și RC5 57

Figura 51 – Principiul conversiei analog numerice 61

Figura 52 – Modulul PWM 65

Figura 53 – Controlul în blucă închisă 68

Figura 54 – Programul MPLAB 69

Figura 55 – Deschiderea unui proiect nou folosind MPLAB 69

Figura 56 – Fișierele unui proiect 70

Figura 57 – Selectarea microcontroller-ului PIC18F8722 70

Figura 58 – Selectarea compilatorului 71

Figura 59 – Spațiul de lucru 71

Figura 60 – Selectarea sursei fișierului creat din directorul salvat anterior 72

Figura 61 – Adăugarea fișierului creat în sursa proiectului 72

Figura 62 – Graficul modulului în durată de impulsuri (PWM) 77

Figura 63 – Vizualizarea variabilelor procesului pe afișajul alphanumeric LCD 78

Figura 64 – Lansarea în execuție a programului 79

Figura 65 – Instalația experimentală LabVolt 3522-05 80

Figura 66 – Conexiunea între placa PICDEM PIC18 și progrmatorul PICkit 3 80

Figura 67 – Osciloscopul HANTEK DS5202B 81

Figura 68 – Conexiuni pe placa de dezvoltare 81

Figura 69 – Graficul legii de reglare PI 82

Figura 70 – Graficul legii de reglare PID 83

Tabele

Tabelul 1 – Registrul SSP1CON1 este registrul de control al modulului MSSP1 54

Tabelul 2 – SSP1STAT provine de la “Synchronous Serial Port STATus” și furnizează o serie de biți necesari pentru controlul comunicației SPI 55

Tabelul 3 – Registrul ADCON0 58

Tabelul 4 – Registul ADCON1 59

Tabelul 5 – Configurarea biților de voltaj 59

Tabelul 6 – Configurarea biților pentru controlul A/D 59

Tabelul 7 – Registrul ADCON2 60

Tabelul 8 – Registrul CCPxCON 63

Tabelul 9 – Variabilele funcției de trasfer 75

Tabelul 10 – Conexiuni realizate în proiect 80

INTRODUCERE

În lucrarea de diplomă cu titlul: “ Reglarea instalației LabVolt folosind microcontroller-ul PIC 18F8722” sunt descrise principiile pentru implementarea regulatoarelor pe microcontroller-ul PIC 18F8722.

Echipamentele numerice de conducere a proceselor industriale (regulatoarele numerice, calculatoarele de proces), în special după introducerea în structura lor a microprocesoarelor au constituit un pas considerabil pe calea reducerii decalajului dintre rezultatele remarcabile oferite de teoria sistemelor automate și tehnicile aplicate în practică conducerii proceselor industriale.

Aceste echipamente permit, fără a efectua modificări în structura sau în configurația lor, implementarea celor mai diverse strategii de conducere, începând cu cele de tip convențional, PID, și ajungând la cele care să determine atingerea performanțelor optime ale funcționarii proceselor cu un minimum de energie și materie primă.

Realizarea acestor deziderate impune specialiștilor din domeniul conducerii proceselor cunoașterea specificului procesului condus și a teoriei sistemelor automate, precum și a calculatoarelor de proces, a funcționării acestor elemente și, mai ales, a programării lor pentru asigurarea scopului propus: supravegherea și conducerea "în timp real" a unui proces.

Se numește calculator de proces un complex de mijloace tehnice și de programe care sunt destinate rezolvării problemelor de supraveghere, de comandă, de diagnosticare și de prognozare a funcționării instalațiilor industriale. Un calculator de proces poate fi privit ca o reuniune între un calculator numeric universal (de obicei un microcalculator sau un minicalculator) înzestrat cu un executiv sau un sistem de operare corespunzător capabil să funcționeze în timp real și un sistem de interfață (cuplorul de proces) cu procesul condus și operatorul tehnolog.

În sistemele de reglare automată cu calculator de proces, denumite și sisteme numerice de reglare automată, SNRA, legea de reglare este elaborată pe baza unui algoritm numeric implementat într-un echipament numeric de conducere care într-un context mai general este denumit și calculator de proces.

Calculatorul de proces este un calculator numeric echipat cu interfețe de intrare și ieșire pentru mărimi analogice și/sau numerice înzestrat cu un sistem de operare în timp real (executiv de timp real) care-l face capabil să funcționeze în așa fel încât toate operațiunile și calculele se desfășoară sub controlul unui așa numit "ceas de timp real", suficient de rapid pentru a răspunde solicitărilor din exterior de achiziție și comandă.

Interfețele de intrare analogică conțin convertoare analog – numerice (CAN), care transformă într-un număr (număr – CAN) un semnal de tensiune sau curent conectat la calculator prin borne numerotate (etichetate), denumite porturi de intrare analogică.

Interfețele de ieșire analogică conțin convertoare numeric – analogice (CNA) care transformă un număr într-o tensiune sau curent furnizat la borne numerotate (etichetate), denumite porturi de ieșire analogică. De cele mai multe ori, semnalul la un port de ieșire este menținut constant până la o nouă conversie.

Evident există nenumărate aspecte privind comportarea unui astfel de sistem însă în cele ce urmează vom privi fenomenele în mod echivalent din punct de vedere sistemic.

Global, din punctul de vedere al inginerului sistemist, el este privit ca o "cutie neagră" cu borne de intrare analogică și borne de ieșire analogică compatibile cu un semnal unificat, de exemplu tensiune [0,10] V sau curent [4,20] mA.

Pentru implementarea unei bucle de reglare, referitoare la o anumită instalație tehnologică se consideră că s-a ales elementul de execuție și traductorul (vom considera un sistem de reglare convențională) deci s-a definit partea fixă a sistemului având ca intrare mărimea de comandă

uF(t) = u(t)

și ca ieșire mărimea de reacție

r(t) = y(t)

ambele sub forma unor semnale unificate.

Din punctul de vedere al echipamentului de conducere bucla de reglare este privită ca o aplicație (sau o nouă aplicație) implementarea fiind posibilă dacă se pot satisface o serie de cerințe privind resursele sistemului și anume:

Resurse hardware

Resurse software

Resursele hard se referă în principal la existența unor porturi de intrare – ieșire libere, în cazul de față analogice, și la memoria RAM și PROM solicitată de aplicație.

Când se alege un port pentru o aplicație, trebuie verificat dacă acesta satisface cerințe de precizie (numărul de biți prin care se face conversia A – N sau N – A) și cerințe de rapiditate (frecvența de eșantionare pentru portul respectiv).

Resursele soft se referă la capacitatea executivului de timp real de a prelua (să înglobeze) și această aplicație, capacitate exprimată prin: resursele de timp de calcul, utilizarea unor proceduri existente, valorificarea sistemelor de întreruperi etc.

De exemplu, utilizatorul poate manipula o lege de tip PID analogică, având la dispoziție pentru ajustare valorile parametrilor analogici KR , Ti , Td fărăe în mod echivalent din punct de vedere sistemic.

Global, din punctul de vedere al inginerului sistemist, el este privit ca o "cutie neagră" cu borne de intrare analogică și borne de ieșire analogică compatibile cu un semnal unificat, de exemplu tensiune [0,10] V sau curent [4,20] mA.

Pentru implementarea unei bucle de reglare, referitoare la o anumită instalație tehnologică se consideră că s-a ales elementul de execuție și traductorul (vom considera un sistem de reglare convențională) deci s-a definit partea fixă a sistemului având ca intrare mărimea de comandă

uF(t) = u(t)

și ca ieșire mărimea de reacție

r(t) = y(t)

ambele sub forma unor semnale unificate.

Din punctul de vedere al echipamentului de conducere bucla de reglare este privită ca o aplicație (sau o nouă aplicație) implementarea fiind posibilă dacă se pot satisface o serie de cerințe privind resursele sistemului și anume:

Resurse hardware

Resurse software

Resursele hard se referă în principal la existența unor porturi de intrare – ieșire libere, în cazul de față analogice, și la memoria RAM și PROM solicitată de aplicație.

Când se alege un port pentru o aplicație, trebuie verificat dacă acesta satisface cerințe de precizie (numărul de biți prin care se face conversia A – N sau N – A) și cerințe de rapiditate (frecvența de eșantionare pentru portul respectiv).

Resursele soft se referă la capacitatea executivului de timp real de a prelua (să înglobeze) și această aplicație, capacitate exprimată prin: resursele de timp de calcul, utilizarea unor proceduri existente, valorificarea sistemelor de întreruperi etc.

De exemplu, utilizatorul poate manipula o lege de tip PID analogică, având la dispoziție pentru ajustare valorile parametrilor analogici KR , Ti , Td fără să-l intereseze legătura dintre aceste valori analogice și parametrii din algoritmul numeric.

Când utilizatorul, un utilizator mai evoluat, dorește să implementeze structuri nestandard pentru legile de reglare, evident el trebuie să manipuleze formele de implementare numerică a "intențiilor sale analogice".

În acest context, structura de reglare cu calculator de proces reprezentată în Figura 1., poate fi privită de către utilizatorul sau proiectantul buclei de reglare, referitor la partea fixă a sistemului de reglare de mai sus, printr-o schemă bloc continuală ca în Figura 2.

Figura 1 – Structura de reglare cu calculator de proces

Se presupune că legea de reglare prelucrează eroarea sistemului:

e(t) = v(t) – r(t)

Figura 2 – Schema bloc continuală

În cazul în care modelele matematice sunt liniare invariante în timp și se urmărește numai comportarea forțată, se folosește descrierea prin funcții de transfer HR(s) respectiv HF(s). Pe această structură se pot utiliza toate metodele de proiectare utilizate la sistemele continuale.

Componentele de bază ale unui sistem de achiziție modern sunt (Figura 3):

calculatorul personal (personal computer);

traductoarele (transducers);

condiționerul de semnale (signal conditioning);

echipamentele de achiziție și analiză a datelor (data acquisition and analysis hardware);

programele de achiziție (software).

Atât procesoarele moderne cât și arhitectura magistralelor de comunicație permit utilizarea calculatoarelor personale în structura sistemelor de achiziție a datelor. Odată cu alegerea echipamentului de achiziție și arhitecturii magistralei de comunicație trebuie să se opteze și pentru metodele de transfer al datelor care vor fi folosite în procesul de achiziție și prelucrare.

Calculatorul care va fi utilizat pentru achiziția datelor poate afecta considerabil viteza maximă de achiziție continuă a datelor; o alternativă modernă și flexibilă este cea care utilizează calculatoarele portabile.

Figura 3 – Structura unui sistem tipic de achiziție a datelor bazat pe PC

Dicționar: transducers = traductoare; signal conditioning = condiționer de semnale; data acquisition and analysis hardware = echipament de achiziție a datelor și analiză; personal computer = calculator personal (PC); software = programe.

Traductoarele sesizează fenomenele fizice și generează semnalele electrice pe care le măsoară sistemul de achiziție. De exemplu, termocuplele, termistoarele, etc. convertesc temperatura într-un semnal analogic pe care un convertor analog-digital îl poate transforma în semnal numeric. La fel, alte tipuri de traductoare cum ar fi cele de debit, de presiune, de forță etc., măsoară debitul, presiunea, forța, etc. și produc un semnal electric proporțional cu parametrul fizic pe care îl monitorizează și care trebuie măsurat.

Echipamentele de achiziție au rolul de interfață între calculator și mediul extern deoarece digitizează semnalele analogice de intrare, astfel încât calculatorul să le poată interpreta.

O categorie aparte de programe utilitare o constituie programele de interfață, care îndeplinesc rolul de "interpret" între utilizator și sistemul de operare.

Programul de achiziție transformă calculatorul și echipamentul de achiziție într-un instrument complet de achiziție a datelor, analiză și prezentare. El constituie intermediarul între programul de aplicație și echipament, coordonând operațiile efectuate de echipamentul de achiziție și integrarea sa cu resursele sistemului de calcul.

O posibilitate adițională de programare a echipamentului de achiziție este utilizarea aplicației software. Avantajul utilizării acesteia este că ea analizează și prezintă posibilitățile programului de conducere. Programul de aplicație integrează de asemenea instrumentele de control cu achiziția de date.

Pentru a dezvolta un sistem de achiziție a datelor de înaltă calitate pentru măsurare și control sau testare și măsurare, trebuie analizată detaliat fiecare componentă implicată. Deoarece componentele unui sistem de achiziție inclus în sistemul de calcul nu au posibilitatea de afișare, programul este singura interfață cu sistemul. În acest caz, programul este componenta care leagă toate informațiile referitoare la sistem și este elementul care controlează sistemul. Programul integrează traductoarele, condiționerele de semnal, echipamentul de achiziție și le analizează ca un sistem de achiziție complet, funcțional.

Pentru a realiza o imagine completă a modului de implementare a unui regulator software pe un microcontroller în capitolul I sunt prezentate concepte generale ale reglării automate, care cuprind structura generală a unui sistem de reglare automată și legile tipizate de reglare.

În capitolul II este prezentată instalația LabVolt 3522-05 pe care se va realiza experimtal reglarea temperaturii și a debitului de aer cu ajutorul microcontroller-ului PIC18F8722.

În capitolul III este descris microcontroller-ul PIC18F8722, fiind compus din placa de dezvoltare PICDEM PIC18 Explorer și programatorul PICkit 3 cu toate facilitățile lor necesare pentru conectarea la instalați LabVolt 3522-05 dar și pentru a realiza o bună interfață cu utilizatorul. Deasemenea sunt prezentate concepte de bază ale limbajului MPLAB, folosit la programarea microcontroller-ului, precum și modalități de programare a modulelor necesare pentru conducerea proceselor și pentru interfața cu utilizatorul.

Capitolul IV este rezultatului experimental, funcționarea instalației și a regulatorului implementat software pe microcontroller-ul PIC18F8722 și obșinerea graficelor de reglare cu osciloscopul HANTEK din familia DS05000B.

Componente generale ale reglării automate

Structura generală a unui sistem de conducere

În orice sistem de conducere, în particular, de conducere automată, se deosebesc următoarele patru elemente interconectate ca în Figura 4 :

Obiectul condus (instalația automatizată)

Obiectul conducător (dispozitivul de conducere)

Sistemul de transmitere și aplicare a comenzilor (deciziilor)

Sistemul informatic (de culegere si transmitere a informațiilor privind obiectul condus).

Figura 4 – Structura general a unui sistem de conducere

Obiectul conducător (dispozitivul de conducere) elaborează decizii (comenzi) care se aplică obiectului condus, prin intermediul elementelor de execuție, pe baza informațiilor obținute despre starea obiectului condus prin intermediul mărimilor măsurate.

Deciziile de conducere au ca scop îndeplinirea de către mărimea condusă a unui program în condițiile îndeplinirii (exterminării) unor criterii de calitate, a satisfacerii unor restricții, când asupra obiectului condus acționează o serie de perturbații.

Structura de mai sus este o structură de conducere (sau în circuit închis) deoarece deciziile (comenzile) aplicate la un moment dat sunt dependente și de efectul deciziilor anterioare. Aceasta exprimă circuitul închis al informațiilor prin mărimile de reacție: fenomenul de reacție sau feedback.

Dacă lipsește legătura de reacție sistemul este în circuit deschis și se numește sistem de comandă (în particular, de comandă automată).

O astfel de structură se întâlnește în cele mai diverse domenii de activitate: tehnic, biologic, social, militar etc., în cele ce urmează referindu-ne însă numai la cele tehnice.

Un sistem de conducere în structura de mai sus se poate numi sistem de conducere automată deoarece este capabil să elaboreze decizii de conducere folosind mijloace proprii de informare.

Un caz particular de sisteme de conducere automată îl constituie sistemele de reglare automată (SRA).

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ă (reglată) și mărimea impusă (programul impus), diferență care se mai numește abatere sau eroarea sistemului.

La cele mai multe sisteme de reglare automată mărimea reglată este chiar mărimea măsurată.

Procesul de anulare a erorii într-un SRA se efectuează folosind două principii:

1. Principiul acțiunii prin discordanță (PAD) – în acest caz, 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.

2. Principiul compensației (PC) – una sau mai multe mărimi perturbatoare sunt măsurate și se aplică la elementele de execuție, comenzi care trebuie să compenseze pe această cale efectul acestor perturbații asupra mărimii de ieșire transmis pe cale naturală. Are avantajul că poate realiza, în cazul ideal, compensarea perfectă a anumitor perturbații fără ca mărimea de ieșire să se abată de la programul impus. Are dezavantajul compensării numai a anumitor perturbații, nu a oricăror perturbații.

În cazul PAD, 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.

Deci, întâi sistemul se abate de la program ("greșește") și apoi se corectează. Este realizat prin circuitul de reacție inversă. Are avantajul compensării efectului oricăror perturbații.

În cazul PC, una sau mai multe mărimi perturbatoare sunt măsurate și se aplică la elementele de execuție, comenzi care să compenseze pe această cale efectul acestor perturbații asupra mărimii de ieșire transmis pe cale naturală.

Are avantajul că poate realiza, în cazul ideal, compensarea perfectă a anumitor perturbații fără ca mărimea de ieșire să se abată de la programul impus. Are dezavantajul compensării numai a anumitor perturbații, nu a oricăror perturbații.

Un sistem de reglare care îmbină cele doua principii se numește sistem de reglare combinată.

Legi tipizate de reglare

Prezentare generală

În practica industrială a reglării automate s-au impus așa numitele legi de reglare de tip PID (Proporțional-Integrator-Derivator) sau elemente de tip PID, care satisfac în majoritatea situațiilor cerințele tehnice impuse sistemelor de reglare convențională. Se pot utiliza diversele combinații ale celor trei componente: P = proporțional; I = integrator; PI = proporțional-integrator; D = derivator, ideal și real, PD = proporțional-derivator ideal și real, PID = Proporțional-integrator-derivator, ideal și real în diferite variante.

Prin utilizarea 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 prin care se prescriu valorile parametrilor acestor legi rezultate în urma proiectării analitice a sistemului.

Nu se poate stabili precis efectul fiecărei componente a unei legi de tip PID asupra calității unui SRA, deoarece acestea depind de structura sistemului, de dinamica instalației automatizate.

Totuși se pot face următoarele precizări:

Componenta proporțională, (exprimată prin factorul de proporționalitate KR), determină o comandă proporțională cu eroarea sistemului. Cu cât factorul de proporționalitate este mai mare cu atât precizia sistemului în regim staționar este mai bună dar se reduce rezerva de stabilitate putând conduce în anumite cazuri la pierderea stabilității sistemului.

Componenta integrala, exprimată prin constanta de timp de integrare Ti determină o comandă proporțională cu integrala erorii sistemului din care cauză, un regim staționar este posibil numai dacă această eroare este nulă. Existenta unei componente I într-o lege de reglare este un indiciu clar că precizia sistemului în regim staționar (dacă se poate obține un astfel de regim) este infinită. În regim staționar, de cele mai multe ori componenta I determină creșterea oscilabilității răspunsului adică reducerea rezervei de stabilitate.

Componenta derivativă, exprimată prin constanta de timp de derivare Td determină o comandă proporțională cu derivata erorii sistemului. Din această cauză, componenta D realizează o anticipare a evoluției erorii permițând realizarea unor corecții care reduc oscilabilitatea răspunsului. Nu are nici-un efect în regim staționar.

Deoarece aceste tipuri de comportări se întâlnesc și la alte sisteme nu numai în cazul regulatoarelor, în cele ce urmează se vor considera intrarea uR = u ieșirea yR = y iar funcția de transfer HR(s)=H(s).

Legea de tip P

Printr-o lege de tip proporțional, se descrie comportarea intrare-ieșire a unui element nedinamic (de tip scalar) sau comportarea în regim staționar a unui element dinamic, eventual descris printr-o funcție de transfer H(s), considerând această comportare liniară într-un domeniu.

Pentru o caracteristică statică Y=F(U), ca în Figura 5 , se poate aproxima o comportare liniara pentru u ϵ [Umin, Umax] și y ϵ[Ymin,Ymax] cu Ymin ϵ F(Umin), putând avea Ymax ϵ F(Umax).

Figura 5 – Caracteristica static Y=F(U)

În afara limitelor min și max pentru intrare sau ieșire, comportarea fie nu este posibilă tehnologic fie nu este de dorit.

De exemplu, în cazul elementelor de automatizare o anumită comportare declarată de constructor este garantată numai în domeniul de variație al semnalului unificat: [0, 10]V, [4, 20]mA, [0.2 , 1]bar etc.

Pentru un sistem dinamic, dependența intrare-ieșire în regim staționar este aproximată în aceste domenii printr-o relație liniară de forma

Y = Ymin + Kp (U – Umin), U = u(∞), Y = y(∞) , (1.1)

unde Kp reprezintă factorul de proporționalitate sau factorul de amplificare de poziție.

El se poate determina experimental prin raportul dintre variația mărimii de ieșire în regim staționar și variația mărimii de intrare în regim staționar care a produs acea ieșire

Dacă o anumită valoare staționară este apreciată (aproximată la un moment finit de timp t0) atunci se utilizează relația

ust (t0) = u(∞) = U , yst (t0) = y(∞) = Y, (1.2)

înțelegând că la momentul t = t0 este atins un regim staționar.

Dacă în domeniul de liniaritate, obiectul este descris printr-o funcție de transfer H(s) atunci,

Kp = (1.3)

Dacă H(s) nu are caracter integrator,

Kp = H(0) (1.4)

Factorul de proporționalitate este o mărime dimensională, [Kp] = [Y] /[U] .

Reamintim că atunci când se utilizează funcția de transfer pentru descrierea comportării intrare-ieșire (evident valabilă numai în domeniul de liniaritate) aceasta descrie variația față de un regim staționar remarcat la un moment t0, considerat t0 = 0, așa cum este ilustrat în Figura 6 .

Y(s) = H(s)U(s) , U(s) = L{u(t) – ust (t)} (1.5)

(1.6)

În particular, regimul staționar poate fi reprezentat prin valorile minime

ust (t0) = Umin, yst (t0) = Ymin

Figura 6 – Funcția de transfer ce variază față de un regim staționar remarcat la un moment t0

Un element de tip P propriu-zis, este un element nedinamic, caracterizat prin funcția de transfer

H(s) = KR , deci Kp = KR

y(t) = Ymin + KR [u(t) – Umin] (1.7)

De foarte multe ori în practică, informația transmisă sau prelucrată este exprimată prin variația procentuală a semnalului purtător de informație față de domeniul său de variație, astfel că valoarea minimă a semnalului exprimă mai clar informația zero (0%) iar valoarea maximă exprimă informația totală (100%).

O valoare procentuală în afara domeniului [0,100]% înseamnă un semnal în afara domeniului [min, max].

Notând prin Du domeniul de variație al intrării, de fapt lungimea intervalului de variație, iar prin Dy domeniul de variație al ieșirii,

Du = Umax – Umin, Dy = Ymax – Ymin (1.8)

se utilizează următoarele relații de reprezentare procentuală:

(1.9)

În domeniul complex, dacă Y(s)=H(s)U(s), se definește funcția de transfer relativă Hrel(s) ca fiind raportul dintre transformata Laplace a ieșirii exprimată procentual și transformata Laplace a intrării exprimată procentual .

(1.10)

Se poate defini factorul de proporționalitate relativ sau procentual ca fiind raportul dintre variația procentuală a ieșirii în regim staționar și variația procentuală în regim staționar a intrării care a produs acea ieșire.

(1.11)

Evident, Kp% este o mărime adimensională.

În cazul unei legi de reglare de tip P, evident .

Factorul de amplificare de poziție (factorul de proporționalitate) nu dă informații privind rezerva de liniaritate în raport cu mărimea de intrare.

Prin banda de proporționalitate, notată BP%, se înțelege o măsura a amplificării unui sistem, exprimata prin procentul din domeniul mărimii de intrare care determina la ieșire o valoare de 100% din domeniul acesteia.

În general se poate spune ca daca intrarea are o variație procentuala, între doua regimuri staționare consecutive, egala cu BP%, ieșirea suferă o variație procentuala, între aceste regimuri staționare, egala cu 100%.

În această situație amplificarea de poziție este exprimata prin numărul BP%.

Dependența intrare-ieșire, în regim staționar, a mărimilor relative este reprezentata în Figura 7.

Figura 7 – Dependența intrare-ieșire, în regim staționar, a mărimilor relative

Panta acestor caracteristici este factorul de proporționalitate relative , astfel că,

(1.12)

Banda de proporționalitate este un număr adimensional. Factor de proporționalitate mare înseamnă banda de proporționalitate mica si invers.

Legea de tip I

Relația intrare-ieșire în domeniul timp este dată de ecuația diferențială

(1.13)

sau prin soluția

(1.14)

Funcția de transfer este:

(1.15)

unde:

este factorul de proporționalitate,

este constanta de timp de integrare [] = sec

Funcția de transfer exprimată prin ecuația (1.15) se poate exprima printr-un singur parametru, constanta de timp echivalentă ,

, (1.16)

În această expresie, numărul 1 de la numărător este un factor dimensional, înțelegând că ar fi un factor de proporționalitate .

Deoarece , unde înseamnă valoarea mărimii fizice ,

(1.17)

Răspunsul la intrare treaptă , reprezentat în Figura 8, este

(1.18)

Figura 8 – Răspunsul la intrare treaptă al unui element de tip I

Se observă că panta la intrare constantă este

(1.19)

De notat că panta unui element integrator depinde de valoarea totală a intrării, nu de variația acesteia.

Constanta de timp de integrare echivalentă reprezintă intervalul de timp in care mărimea de ieșire creste cu o valoare egală cu valoarea intrării constantă aplicată.

Această definiție permite determinarea rapidă a constantei pe graficul răspunsului la intrare treaptă dedus expermental. În Figura 6 este prezentată evoluția răspunsului unui element I la intrări constante pe porțiuni.

Figura 9 – Răspunsul la intrări constante pe porțiuni al unui element I

Legea de tip D-real

Relația intrare-ieșire este:

(1.20)

Funcția de transfer este:

(1.21)

= factorul de proporționalitate

= constanta de timp de integrare

= constanta de timp parazită

Ecuația de stare se obține exprimând funcția de transfer proprie într-o sumă dintre un element scalar și un element strict propriu ca în Figura 10 .

(1.22)

Figura 10 – Ecuația de stare

Din figura de mai sus, se obține:

(1.23)

(1.24)

Răspunsul la intrare treaptă este

(1.25)

și prezentat în Figura 11 .

Figura 11 – Răspunsul la intrare treaptă al unui element D-real

Se observă că ieșirea în regim staționar a unui element D este nulă. Elementul D acționează numai în regim tranzitoriu. El se mai numește și ”element forțator”.

Caracteristicile Bode sunt prezentate în Figura 12, de unde se observă că elementul D-real apare ca un filtru trece-sus.

Figura 12 – Caracteristicile Bode

Legea de tip PI

Relația intrare-ieșire în domeniul timp este exprimată prin ecuația diferențială

(1.26)

sau prin soluția

(1.27)

Funcția de transfer este

(1.28)

unde: este factorul de proporționalitate;

este constanta de timp de integrare.

Se observă că un element PI are un pol în originea planului complex s=0 și un zerou s=-1/, așa cum se poate vedea în Figura 10.

Caracteristicile Bode:

Caracteristicile amplitudine-pulsație A(ω) și fază-pulsație φ(ω) sunt reprezentate la scară logaritmică în Figura 13.

(1.29)

Structura in care se evidențiază cele două componente P și I este dată în Figura 14.

Ecuația de stare este

(1.30)

În expresia (1.27) starea inițială este exprimată prin .

Răspunsul la intrare treaptă, prezentat în Figura 15, este

(1.31)

În Figura 16 este prezentat răspunsul unui element PI la intrări constante pe porțiuni, evidențiind modul de determinare al parametrilor KR,Ti pe diferitele porțiuni ale acestui răspuns.

Figura 16 – Răspunsul unui element PI la intrări constante pe porțiuni

Raportul KR/Ti se poate calcula cunoscând doua puncte ale unei porțiuni a raspunsului, y(t1)și y(t2) și valoarea constantă U a intrării care a determinat acel răspuns liniar.

Legea de tip PD-real

Relația intrare-ieșire:

(1.32)

Funcția de transfer:

(1.33)

KR = factor de proporționalitate

Td = constanta de timp de derivare

Ty = constanta de timp parazită

Elementul D-real se poate realiza și cu ajutorul unui element I. Funcția de transfer echivalentă structurii conexiunii din Figura 17 este:

(1.34)

unde constantele de timp echivalente obținute sunt: Td = Ti și Ty = Ti/a.

Figura 17 – Structura conexiunii pentru realizarea elementului D-real cu ajutorul unui element I

Figura 18 – Structura conexiunii pentru realizarea elementului PD-real

(1.35)

Ecuația de stare se obține exprimând H(s) ca în Figura 17 și Figura 18.

(1.36)

(1.37)

Răspunsul la intrare treaptă în condiții inițiale nule și caracteristicile Bode se prezintă pentru trei situații:

. Este predominant caracterul derivator. Se comportă ca un filtru trece – sus cu avans de fază, ca în Figura 19 și Figura 20 .

Figura 19 – Răspunsul la intrare rampă a unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – sus

Figura 20 – Caracteristicile Bode ale unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – sus

. Este predominant caracterul integrator. Se comportă ca un filtru trece – jos cu întârziere de fază, ca în Figura 21 și Figura 22 .

Figura 21 – Răspunsul la intrare rampă a unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – jos

Figura 22 – Caracteristicile Bode ale unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – jos

. Comportarea intrare-ieșire este de tip scalar, însă răspunsul liber este de ordinul întâi deoarece sistemul este necontrolabil, așa cum se poate vedea și în schema din Figura 18.

Evoluțiile stării și ieșirii sunt:

(1.38)

Legea de tip PID-real

În funcție de modul de realizare fizică se deosebesc mai multe structuri.

În urma masivei dezvoltări a sistemelor numerice a venit și necesitatea de realizare a regulatoarelor sub formă numerică. Avantajele folosirii sistemelor numerice pentru implementarea regulatoarelor sunt:

Posibilitatea de realizare software a regulatoarelor;

Ușurința de modificare a regulatoarelor;

Flexibilitate;

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

Pentru a putea implementa un regulator numeric pentru a controla un proces continuu semnalele primite de la traductoare trebuie să fie eșantionate ( discretizate ).

Aceasta înseamnă că semnalul nu mai este continuu, ci este construit dintr-o multitudine de puncte măsurate la anumite intervale de timp bine determinate.

Perioada dintre două masurători se numește perioadă de eșantionare Te.

În urma acestor modificări apare necesitatea de a calcula o formă discretă a funcției de transfer pentru regulatoarele numerice.

Funcția de transfer discretizată are forma:

Conexiune paralel dintre un element I și un element PD real

Structura este ilustrată în Figura 23.

[ PID-real = I + PD-real = (Aperiodic) ● (PID-ideal) ]

Figura 23 – Structura unui PID-real realizat prin conexiune paralel dintre un element I și un element PD-real

Funcția de transfer

Funcția de transfer realizată:

(1.39)

poate fi echivalată printr-o conexiune serie dintre un element aperiodic de ordinul I și un element PID-ideal.

(1.40)

unde:

(1.41)

Ecuațiile de stare

Ecuațiile de stare ale acestui element se obțin prin concatenarea ecuațiilor elementului I și PD-real:

(1.42)

Sub forma matriceal-vectorială acestea se rescriu:

(1.43)

unde,

(1.44)

Răspunsul la intrare treaptă

Răspunsul la intrare treaptă pe care se ilustrează modul de determinare a parametrilot funcției de transfer este reprezentat în Figura 24 pentru Td < Ty și Figura 25 pentru Td > Ty.

Figura 24 – Răspunsul la intrare treaptă pentru Td < Ty

Figura 25 – Răspunsul la intrare treaptă pentru

Td > Ty.

Pentru determinarea valorilor parametrilor KR, Ti, Td, Ty pe răspunsul la o variație treaptă Δu aplicată la un moment t0, pornind dintr-un regim staționar, u(t) = 0, y(t) = yst(t0) pentru t < t0, se evidențiază faptul că răspunsul este suma dintre componenta I și componenta PD-real

yPID-r = yI (t) + yPD-r (t) (1.45)

procedând astfel:

În punctul inițial (A) al evoluției se duce o paralelă la porțiunea rectilinie a răspunsului. Aceasta reprezintă componenta yI(t);

Se prelungește porțiunea rectilinie a răspunsului până taie în punctul C abscisa momentului inițial;

Se determină componenta yPD-r a răspunsului efectuând punct cu punct scăderea

yPD-r(t)=yPID-r(t)-yI(t) (1.46)

Din vârful B al răspunsului se duce o tangentă la componenta yPD-r(t) rezultând pe ordonata punctului C segmentul CD;

Se determină panta răspunsului determinând în zona rectilinie valorile răspunsului în două momente t1, t2, y1=yPID-r(t1), y2=yPID-r(t2);

Cunoscând valorile în unități ale mărimii y corespunzătoare segmentelor AB, AC, ți în timp pentru CD se calculează parametrii cu relațiile:

(aici U =) (1.47)

Răspunsul unui astfel de element (Td > Ty) la intrări constante pe porțiuni este prezentat în Figura 26.

Figura 26 – Răspunsul dintre componenta I și componenta PD-real pentru Td > Ty

Conexiune paralel dintre un element PI și un element D-real

PID-real

Structura acestei conexiuni paralel și formele ei echivalente sunt indicate în Figura 27 .

Figura 27 – Structura unui PID-real cu conexiune paralel dintre un element PI și un element D-real

Funcția de transfer realizată este:

(1.48)

(1.49)

unde:

(1.50)

Sctructurile 1.2.5.2.1 și 1.2.5.2.2 sunt echivalente,

, (1.51)

Astfel că toate tehnicile de determinare a parametrilor funcției de transfer pentru determinarea unui element D-real realizat cu ajutorul unui element I rămân valabile, însă în urma aplicării acestor tehnici se obțin din care mărimile: și = .

Elementele de tip D-real se realizează folosind elemente de tip integrator. Structura conexiunii este regăsită mai jos în Figura 28 .

Figura 28 – Structura unui element D-real realizat cu ajutorul unui element I

(1.52)

unde constantele de timp echivalente obținute sunt și

Prezentarea instalației de laborator LabVolt 3522-05

Noțiuni teoretice

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 temperaturii/ 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 31 – 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 temperatură

Traductorul de temperatură al instalației are două potențiometre, ca în Figura 32 utilizate pentru a seta domeniul debitului în care ieșirea lor va trece de la tensiune sau curent minim la maxim:

potențiometrul “zero” setează cea mai mică măsurătoare posibilă pentru temperatură, adică, temperatura pentru care tensiunea sau curentul de la ieșirea traductorului vor fi minime;

potențiometrul “span” setează cea mai mare măsurătoare posibilă pentru temperatură, adică, debitul sau temperatura pentru care tensiunea sau curentul de la ieșirea traductorului vor fi maxime;

Figura 32 – Potențiometre pentru calibrarea temperaturii

În domeniul instrumentației pentru control termenul “span” indică diferența algebrică dintre tensiunea sau curentul minim și maxim, generat de traductor. Dacă, spre exemplu, ieșirea traductorului variază între 0 și 5V, atunci traductorul are un “span” de 5V.

În mod uzual, potențiometrele zero și span ale traductoarelor industriale interacționează unul cu celălalt. Ca urmare, când se ajustează aceste potențiometre, este necesar să repetăm procedura de ajustare de mai multe ori pentru a obține o ajustare precisă a traductorului.

Pentru instalația noastră potențiometrele “zero” și “span” ale traductoarelor de temperatură au fost proiectate să interacționeze cât mai puțin posibil. Ca urmare, când se ajustează aceste potențiometre, nu este necesar să repetăm procedura de ajustare de mai multe ori.

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 33.

Figura 33 – Potențiometre pentru calibrarea traductorului de debit

Conducerea procesului de reglare a temperaturii și a debitului

Î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 34 – Conducerea în bucla închisa a proceselor de debit ale instalației

Figura 34 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 în variabilă controlată înainte ca orice acțiune corectivă să poată fi luată. În schimb, sistemele de conducere a proceselor utilizând reacția inversă au avantajul că sunt relativ simplu de utilizat.

Prezentarea microcontroller-ului PIC 18F8722

Prezentarea generală a microcontrollere-lor PIC18F

Unitatea de memorie

Memoria este o parte a microcontrolerului a cărei funcție este de a înmagazina date. Cel mai ușor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dacă presupunem că am marcat sertarele într-un asemenea fel încât să nu fie confundate, oricare din conținutul lor va fi atunci ușor accesibil. Este suficient să se știe desemnarea sertarului și astfel conținutul lui ne va fi cunoscut în mod sigur.

Componentele de memorie sunt exact așa. Pentru o anumită intrare obținem conținutul unei anumite locații de memorie adresate și aceasta este totul. Două noi concepte ne sunt aduse: adresarea și locația de memorie. Memoria constă din toate locațiile de memorie, și adresarea nu este altceva decât selectarea uneia din ele. Aceasta înseamnă că noi trebuie să selectăm locația de memorie la un capăt, și la celălalt capăt trebui sa așteptăm conținutul acelei locații. În afară de citirea dintr-o locație de memorie, memoria trebuie de asemenea să permită scrierea în ea. Aceasta se face prin asigurarea unei linii adiționale numite linie de control. Vom desemna această linie ca R/W (citește /scrie). Linia de control este folosită în felul următor: dacă r/w=1, se face citirea, dacă r/w=0 se face scrierea în locația de memorie. Memoria este primul element, dar avem nevoie și de altele pentru ca microcontrolerul nostru să funcționeze.

Unitatea de procesare centrală

Să adăugăm alte 3 locații de memorie pentru un bloc specific ce va avea o capabilitate incorporată de înmulțire, împărțire, scădere și să-i mutăm conținutul dintr-o locație de memorie în alta. Partea pe care tocmai am adăugat-o este numită "unitatea de procesare centrala" (CPU). Locațiile ei de memorie sunt numite regiștri.

Figura 36 – Unitate simplificată de procesare centrală cu trei regiștri

Regiștrii sunt deci locații de memorie al căror rol este de a ajuta prin executarea a variate operații matematice sau a altor operații cu date oriunde se vor fi găsit datele. Să privim la situația curentă. Avem două entități independente (memoria și CPU) ce sunt interconectate, și astfel orice schimb de informații este ascuns, ca și funcționalitatea sa. Dacă, de exemplu, dorim să adăugăm conținutul a două locații de memorie și întoarcem rezultatul înapoi în memorie, vom avea nevoie de o conexiune între memorie și CPU. Mai simplu formulat, trebuie să avem o anumită "cale" prin care datele circulă de la un bloc la altul.

Bus-ul

Calea este numită "bus"- magistrală. Fizic, el reprezintă un grup de 8, 16, sau mai multe fire. Sunt două tipuri de bus-uri: bus de adresă și bus de date. Primul constă din atâtea linii cât este cantitatea de memorie ce dorim să o adresăm, iar celălalt este atât de lat cât sunt datele, în cazul nostru 8 biți sau linia de conectare. Primul servește la transmiterea adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.

Figura 37 – Conectarea memoriei și a unității centrale folosind bus-uri

Electronica digitala are la baza un sistem de numeratie diferit de cel zecimal(care ulilizeaza o numeratie cu 10 cifre) utilizat in mod obișnuit, sistemul binar(care utilizeaza doar doua cifre-0 si 1-). În toate sistemele de numerație poziția cifrelor în scrierea numerelor are o mare importanta Astfel, cu cat pozitia cifrei este mai la stânga intr-un număr, cu atat importanta acesteia este mai mare(are rang mai mare).

În ceea ce privește funcționalitatea, situația s-a îmbunătățit, dar a apărut o nouă problemă: avem o unitate ce este capabilă să lucreze singură, dar care nu are nici un contact cu lumea de afară, sau cu noi! Pentru a înlătura această deficiență, vom adăuga un bloc ce conține câteva locații de memorie al căror singur capăt este conectat la bus-ul de date, iar celălalt are conexiune cu liniile de ieșire la microcontroler ce pot fi văzute cu ochiul liber ca pini la componenta electronică.

Unitatea intrare –ieșire

Aceste locații ce tocmai le-am adăugat sunt numite „porturi”. Sunt diferite tipuri de porturi: intrare, ieșire sau porturi pe două-căi. Când se lucrează cu porturi, mai întâi de toate este necesar să se aleagă cu ce port urmează să se lucreze, și apoi să se trimită date la, sau să se ia date de la port.

Figura 38 – Unități simplificate intrare-ieșire ce permite comunicarea cu lumea externă

Când se lucrează cu el portul se comportă ca o locație de memorie. Ceva este pur și simplu scris în sau citit din el, și este posibil de a remarca ușor aceasta la pinii microcontrolerului.

Comunicația serială

Cu aceasta am adăugat la unitatea deja existentă posibilitatea comunicării cu lumea de afară. Totuși, acest mod de comunicare are neajunsurile lui. Unul din neajunsurile de bază este numărul de linii ce trebuie să fie folosite pentru a transfera datele. Ce s-ar întâmpla dacă acestea ar trebui transferate la distanță de câțiva kilometri? Numărul de linii înmulțit cu numărul de kilometri nu promite costuri eficiente pentru proiect. Nu ne rămâne decât să reducem numărul de linii într-un așa fel încât să nu scădem funcționalitatea. Să presupunem că lucrăm doar cu 3 linii, și că o linie este folosită pentru trimiterea de date, alta pentru recepție și a treia este folosită ca o linie de referință atât pentru partea de intrare cât și pentru partea de ieșire. Pentru ca aceasta să funcționeze, trebuie să stabilim regulile de schimb ale datelor. Aceste reguli sunt numite protocol. Protocolul este de aceea definit în avans ca să nu fie nici o neînțelegere între părțile ce comunică una cu alta. De exemplu, dacă un om vorbește în franceză, și altul vorbește în engleză, este puțin probabil că ei se vor înțelege repede și eficient unul cu altul. Să presupunem că avem următorul protocol. Unitatea logică "1" este setată pe linia de transmisie până ce începe transferul. Odată ce începe transferul, coborâm linia de transmisie la "0" logic pentru o perioadă de timp (pe care o vom desemna ca T), așa că partea receptoare va ști că sunt date de primit, așa că va activa mecanismul ei de recepție. Să ne întoarcem acum la partea de transmisie și să începem să punem zero-uri și unu- uri pe linia de transmisie în ordinea de la un bit a celei mai de jos valori la un bit a celei mai de sus valori. Să lăsăm ca fiecare bit să rămână pe linie pentru o perioadă de timp egală cu T, și la sfârșit, sau după al 8-lea bit, să aducem unitatea logică "1" înapoi pe linie ce va marca sfârșitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit în literatura profesională NRZ (Non-Return to Zero).

Figura 39 – Comunicație serială

Pentru că avem linii separate de recepție și de transmitere, este posibil să recepționăm și să transmitem date (informații) în același timp. Blocul așa numit full-duplex mode ce permite acest mod de comunicare este numit blocul de comunicare serială. Spre deosebire de transmisia paralelă, datele sunt mutate aici bit cu bit, sau într-o serie de biți, de unde vine și numele de comunicație serială. După recepția de date trebuie să le citim din locația de transmisie și să le înmagazinăm în memorie în mod opus transmiterii unde procesul este invers. Datele circulă din memorie prin bus către locația de trimitere, și de acolo către unitatea de recepție conform protocolului.

Unitatea timer

Acum că avem comunicația serială, putem recepționa, trimite și procesa date. Totuși, pentru noi ca să putem să îl folosim în industrie mai avem nevoie de câteva blocuri. Unul din acestea este blocul timer care este important pentru noi pentru că ne dă informația de timp, durată, protocol etc. Unitatea de bază a timer-ului este un contor liber (free-run) care este de fapt un registru a cărui valoare numerică crește cu unu la intervale egale, așa încât luându-i valoarea după intervalele T1 și T2 și pe baza diferenței lor să putem determina cât timp a trecut. Acesta este o parte foarte importantă a microcontrolerului al cărui control cere cea mai mare parte a timpului nostru.

Figura 40 – Unitatea timer

Watchdog-ul

Încă un lucru ce necesită atenția noastră este funcționarea fără defecte a microcontrolerului în timpul utilizării acestuia. Să presupunem că urmare a unei anumite interferențe (ce adesea se întâmplă în industrie) microcontrolerul nostru se oprește din executarea programului, sau și mai rău, începe să funcționeze incorect. Bineînțeles, când aceasta se întâmplă cu un calculator, îl resetăm pur și simplu și va continua să lucreze. Totuși, nu există buton de resetare pe care să-l apăsăm în cazul microcontrolerului care să rezolve astfel problema noastră. Pentru a depăși acest obstacol, avem nevoie de a introduce încă un bloc numit watchdog – câinele de pază. Acest bloc este de fapt un alt contor liber (free-run) unde programul nostru trebuie să scrie un zero ori de câte ori se execută corect. În caz că programul se "înțepenește", nu se va mai scrie zero, iar contorul se va reseta singur la atingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, și corect de această dată pe toată durata. Acesta este un element important al fiecărui program ce trebuie să fie fiabil fără supravegherea omului.

Figura 41 – Watchdog

Convertorul Analog-Digital

Pentru că semnalele de la periferice sunt substanțial diferite de cele pe care le poate înțelege microcontrolerul (zero și unu), ele trebuie convertite într-un mod care să fie înțeles de microcontroler. Această sarcină este îndeplinită de un bloc pentru conversia analog-digitală sau de un convertor AD. Acest bloc este responsabil pentru convertirea unei informații despre o anumită valoare analogică într-un număr binar și pentru a o urmări pe tot parcursul la un bloc CPU așa ca blocul CPU să o poată procesa.

Figura 42 – Bloc pentru convertirea unui semnal analogic într-o dimensiune digitală

Figura 43 – Secțiunea centrală a microcontroller-ului

Pentru o aplicație reală, un microcontroler singur nu este de ajuns. În afară de microcontroler, avem nevoie de un program pe care să-l execute, și alte câteva elemente ce constituie o interfață logică către elementele de stabilizare.

Programul

Scrierea programului este un domeniu special de lucru al microcontolerului și este denumit "programare". Să încercăm să scriem un mic program ce îl vom crea singuri și pe care oricine va fi în stare să-l înțeleagă.

START REGISTER1=MEMORY

LOCATION_A REGISTER2=MEMORY

LOCATION_B PORTA=REGISTER1 + REGISTER2 END

Programul adună conținutul a două locații de memorie, și vede suma lor la portul A. Prima linie a programului este pentru mutarea conținutul locației de memorie "A" într-unul din regiștri unității de procesare centrale. Pentru că avem nevoie și de celelalte date de asemenea, le vom muta de asemenea în celălalt registru al unității de procesare centrale. Următoarea instrucțiune instruiește unitatea de procesare centrală să adune conținutul celor doi regiștri să trimită rezultatul obținut la portul A, încât suma acestei adunări să fie vizibilă pentru toată lumea de afară. Pentru o problemă mai complexă, programul care să lucreze la rezolvarea ei va fi mai mare. Programarea poate fi făcută în câteva limbaje ca Assembler, C și Basic care sunt cele mai folosite limbaje. Assembler aparține limbajelor de nivel scăzut ce sunt programate lent, dar folosesc cel mai mic spațiu în memorie și dă cele mai bune rezultate când se are în vedere viteza de execuție a programului. Pentru că este cel mai folosit limbaj în programarea microcontrolerelor va fi discutat într-un capitol ulterior. Programele în limbajul C sunt mai ușor de scris, mai ușor de înțeles, dar sunt mai lente în executare decât programele în Assembler. Basic este cel mai ușor de învățat, și instrucțiunile sale sunt cele mai aproape de modul de gândire a omului, dar ca și limbajul de programare C este de asemenea mai lent decât Assembler-ul. În orice caz, înainte de a vă hotărî în privința unuia din aceste limbaje trebuie să studiați cu atenție cerințele privind viteza de execuție, mărimea memoriei și timpul disponibil pentru asamblarea sa.

După ce este scris programul, trebuie să instalăm microcontrolerul într-un aparat și să-l lăsăm să lucreze. Pentru a face aceasta trebuie să adăugăm câteva componente externe necesare pentru funcționarea sa. Mai întâi trebuie să dăm viață microcontrolerului prin conectarea sa la o sursă (tensiune necesară pentru operarea tuturor instrumentelor electronice) și oscilatorului al cărui rol este similar inimii din corpul uman. Bazat pe ceasul său microcontrolerul execută instrucțiunile programului. Îndată ce este alimentat microcontrolerul va executa un scurt control asupra sa, se va uita la începutul programului și va începe să-l execute. Cum va lucra aparatul depinde de mulți parametri, cel mai important fiind priceperea dezvoltatorului de hardware, și de experiența programatorului în obținerea maximului din aparat cu programul său.

Reprezentarea datelor în memoria unui microcontroller

Suntem obișnuiți încă din clasele primare să utilizăm sistemul de numărare zecimal. De ce se numește zecimal? Pentru că utilizează zece cifre. Spunem că este un sistem de numerație în baza 10. Poziția cifrelor într- un sistem de numerație are o importanță deosebită. Cifrele mai puțin importante ale unui număr se află în partea dreaptă în timp ce cifrele mai importante se află în partea stângă. Să luăm ca exemplu numărul zecimal 632. În fapt acesta are valoarea:

632=6×102+3×101 +2×100

Fiecare cifră (pe care o vom numi DIGIT) are o valoare ce depinde de rangul său. In sistemul binar lucrurile sunt exact la fel doar că se utilizează doar două cifre (0 și 1) iar cifra care se ridica la puterile 0,1,2… este 2 (binar). Astfel numărul binar 110101 este în zecimal

1×20+0x21+1×22+0x23+1×24+1×25 =53

Pentru a obține reprezentarea binară a unui număr zecimal procedăm astfel:

53:2=21 rest 1

21:2=10 rest 1

10:2= 5 rest 0

5:2= 2 rest 1

2:2= 1 rest 0

Numărul binar va fi format din de ultimul rezultat al împărțirii (1) continuând cu resturile de jos în sus. Ce ați văzut mai sus este doar un exemplu. Majoritatea microcontrolerelor, deci si PIC-urile lucrează cu 8 cifre binare. Numerele de 8 cifre binare se numesc octeți sau bytes(in engleza). Cifrele binare 0 sau 1 se numesc bit.

Pentru ca lucrurile sa fie clare, in lucrul cu numere binare sau zecimale exista convenția ca numerele binare sa se noteze astfel: B'11011011' iar numerele zecimale astfel: D'125'.

Sistemul hexazecimal.

Datorita simplitatii in scrierea numerelor binare s-a decis impartirea octetului in doua quartete (4 cifre binare) si fiecare qurtet este reprezentat de cate o cifra hexazecimala. Iata tabelul de conversie a unui quartet in cifre hexazecimale si zecimale:

Binar Hexazecimal Zecimal

'0000' 0x0 0

'0001' 0x1 1

'0010' 0x2 2

'0011' 0x3 3

'0100' 0x4 4

'0101' 0x5 5

'0110' 0x6 6

'0111' 0x7 7

'1000' 0x8 8

'1001' 0x9 9

'1010' 0xA 10

'1011' 0xB 11

'1100' 0xC 12

'1101' 0xD 13

'1110' 0xE 14

'1111' 0xF 15

Deci, cum in binar, cea mai mare cifră utilizata in scrierea numerelor este 1(<2), în zecimal este 9(<10), in hexazecimal este F(<16). Astfel, un octet poate fi scris in mai puține cifre daca se utilizează sistemul hexazecimal. Nu va speriați, de fapt nu trebuie sa faceti alte transformări decât schimbarea fiecărui quartet di octet in corespondentul hexazecimal din tabelul de mai sus.

Utilizarea plăcii de dezvoltare „PICDEMTM PIC18 Explorer”

PICDEM™ PIC18 Explorer Demonstration Board este o placă de dezvolatre pentru evaluarea dispozitivelor din familiile PIC18FXXXX și PIC18FXXJXX. Placa poate fi utilizată ca un dispozitiv stand-alone (independent) sau cu un in-circuit debugger (ICD). Pentru utilizarea acestei plăci sunt disponibile o serie de programe free ce pot fi folosite pentru dezvoltarea de aplicații și pentru depanare.

PICDEM™ PIC18 Explorer Demonstration Board conține următoarele echipamente hardware (prezentate în Figura 44):

1. PIC18F8722 microcontroller – microcontroller principal montat pe placă.

2. Pini pentru conectarea unui Modul de tip Plug-In (PIM). Un PIM permite folosirea unui alt microcontroller din familia PIC18 ca microcontroller principal.

3. Connector In-Circuit Debugger (ICD).

4. Connector cu șase pini pentru PICkit™ 2 și PICkit™ 3.

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

6. Comutator Push button – pentru RESET extern.

7. Connector USB – pentru comunicație RS-232.

8. Microcontroller PIC18LF2450 – pentru conversia comunicației RS-232 în protocol USB pentru atașarea la un PC gazdă.

9. Cristal de 12 MHz – pentru microcontrollerul PIC18LF2450.

10. RS-232 DB9 socket și hardware asociat – pentru conectarea directă la interfața RS-232.

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

12. Jumper J4 – pentru selectarea fie a dispozitivului PIC principal fie a PIC18LF2450, folosit pentru comunicația de la USB la RS-232.

13. Switch S4 – pentru selectarea microcontrollerului principal: fie a celui montat pe placă (PIC18F8722) fie a celui

montat pe PIM (PIC18F87J11).

14. LED – pentru indicarea power-on.

15. JP1 – pentru deconectarea celor 8 LED-uri

16. Opt LED-uri.

17. Cristal de 32.768 kHz – pentru operarea ceasului Timer1.

18. Două comutatoare de tip push button – pentru simularea unor intrări externe.

19. Senzor de temperatură analogic, MPC9701A.

20. 25LC256 SPI EEPROM.

21. JP2 – enable/disable EEPROM.

22. JP3 – enable/disable LCD.

23. Cristal de 10 MHz – pentru microcontroller-ul principal.

24. PICtail™ placă de conexiuni.

25. SPI I/O expander – pentru LCD display, MCP23S17.

26. Zonă Prototype – pentru utilizarea de dispozitive hardware.

27. LCD display.

28. J2 – pentru selectarea între valorile de tensiune de 3.3V și 5V.

29. J14 – Pentru utilizarea PIM, pentru conecatarea la 3.3V sau 5V, VIN și ICE MCLR.

Figura 44 – Placa de dezvoltare PICDEM™ PIC18 Explorer

Placa PICDEM PIC18 Explorer Demonstration Board cuprinde două microcontrollere ce pot fi utilizate alternativ ca microcontroller principal:

• Un microcontroller PIC cu 18-pini ce lucrează la 5V (PIC18F8722) montat pe placă.

• Un microcontroller PIC cu 18-pini ce lucrează la 3.3V (PIC18F87J11) montat pe PIM.

Pentru a selecta microcontrollerul montat pe PIM ca dispozitiv principal trebuie setat comutatorul

S4 la ICE:

Dispozitivul programator/debugger „PICkitTM 3”

Programatorul PICkit 3este un dispozitiv simplu controlat de calculator pe care rulează programul MPLAB IDE (versiuni mai mari de 8.20). Acesta este un dispozitiv folosit pentru dezvoltarea de aplicații pentru Microcontrollere PIC și dsPIC bazate pe In-Circuit Serial Programming™ (ICSP™) și Enhanced In-Circuit Serial Programming cu interfețe pe 2 fire. Acest dispozitiv poate fi utilizat ca depanator sau ca programator de microcontrollere PIC. Depanatorul execută codul program ca un dispozitiv real deoarece are implementat un circuit emulator. Toate caracteristicile unui dispozitiv sunt accesibile în mod interactiv și pot fi setate sau modificate de o interfață MPLAB IDE.

Caracteristicile PICkit 3 sunt următoarele:

• Suport USB la viteză maximă folosind driverele Windows standard

• Execuție în timp real

• Procesoare ce rulează la viteză maximă

• Monitor Built-in pentru supra-tensiune/scurt circuit

• Tensiune joasă până la (domeniul 1.8-5 V)

• LED-uri de semnalizare (power, active, status)

• Citire/scriere program și date în memoria microcontroller-ului

• Ștergere orice tip de memorie (EEPROM, ID, configurare și program) cu verificare

Figura 45 – Programatorul/debugger-ul PICkit 3

Mediul de programare MPLAB IDE

MPLAB este un pachet de programe Windows ce face scrierea și dezvoltarea unui program mai ușoară. Poate fi descris cel mai bine ca un mediu de dezvoltare pentru un limbaj de programare standard ce este folosit pentru programarea unui computer PC. Unele operații ce erau făcute din linia de instrucțiuni cu un număr mare de parametri până la descoperirea IDE-ului, "Integrated Development Environment", sunt acum făcute mai ușoare prin folosirea MPLAB.

Figura 46 – Interfața grafică a programului MPLAB IDE

MPLAB constă din câteva părți: – Gruparea fișierelor aceluiași proiect într-un singur proiect (Project Manager) – Generarea și procesarea unui program (Text Editor) – Simulator de program scris folosit pentru simularea funcționării programului în microcontroler. În afară de acestea, sunt sisteme de susținere pentru produsele Microchip ca PICStart Plus și ICD (In Circuit Debugger).

Un sistem de dezvoltare pentru controllere embedded este un sistem de programe ce rulează pe un calculator ce ajută la scrierea, editarea, depanarea și programarea codului într-un microcontroller. MPLAB IDE rulează pe un PC și conține toate componentele necesare pentru proiectarea aplicațiilor embedded. Task-urile specifice pentru dezvoltarea unei aplicații embedded sunt următoarele:

1. Din caracteristicile și performanțele ce se doresc a se obține se decide tipul de microcontroller și dispozitivele periferice ce vor fi utilizate.

2. Următoarea etapă este scrierea programului ce va controla dispozitivele hardware. Pentru aceasta se poate utiliza un limbaj de asamblare, care este direct translatabil în cod mașină, sau un compilator ce permite utilizarea unui limbaj mai natural pentru crearea programului.

3. Se compilează, asamblează și se fac legăturile software folosind un asamblor și/sau un compilator și un editor de legături pentru convertirea codului în cod mașină (format din 1 și 0) pentru microcontroller.

4. Se testează codul. De obicei un program complex nu va lucra de prima dată cum ne dorim noi, iar erorile de programare (așa numitele „bug-uri”) trebuie eliminate. Depanatoruln(debugger-ul) permite analiza funcționării programului. Depanatorul permite vizualizarea anumitor variabile din program în anumite puncte ale rulării acestuia.

5. Se scrie programul în memoria microcontroller-ului și se verifică dacă aplicația funcționează corect.

MPLAB IDE poate fi utilizat în pașii 2 -5. Editorul MPLAB poate ajuta la scrierea corectă a codului. Editorul folosește fonturi colorate pentru a sublinia cuvintele cheie. Managerul de Proiecte ajută la organizarea diverselor fișiere utilizate de o aplicație: fișiere sursă, biblioteci și header. Erorile de programare sunt semnalate prin mesaje de eroare și locul în care apare eroare poate fi găsit prin dublu click. După ce codul sursă nu mai are erori, acesta trebuie testat. MPLAB are componenete numite „debugger” și simulatoare free ce ajută la testarea codului. Simulatorul acceptă intrări de stimul pentru a vedea cum răspunde programul la intrări externe. Simulatorul poate măsura timpul de execuție, execuția pas cu pas a codului pentru a analiza variabilele și perifericele. După ce aplicația funcționează corect, poate fi programat microcontroller-ul cu ajutorul unui programator cum ar fi PICSTART® Plus, MPLAB PM3 sau PICkit 3.

Organizarea fișierelor într-un proiect este prezentată în figura următoare:

Figura 47 – Fișierele unui proiect embedded

Linker-ul are sarcina de a plasa fragmentele de cod de la asamblor, compilator și bibliotecile de funcții in zonele de memorie corespunzătoare ale micreocontrollerului și că modulele separate funcționează unele cu altele (sau sunt „linked”). Această întreagă operație de la asamblare sau compilare prin procesul de link-editare se numește „build”. Compilatorul convertește codul sursă în cod mașină (instrucțiuni ce pot fi executate de către micocontroller).

Figura 48 – Compilatorul

Instrumentele de programare a sistemelor embedded diferă de compilatoarele ce rulează pe un PC deoarece acestea trebuie să țină seama de dimensiunea redusă de memorie pe care o are la dispoziție un microcontroller. Cu cât codul produs este mai mic cu atât mai bine. Aceasta înseamnă că trebuie utilizate tehnici de optimizare a codului ce țin cont de specificul hardware-ului. În cazul unui PC un program mediu are dimensiunea de câțiva Megabytes. Un program embedded simplu are câteva mii de bytes sau chiar mai puțin. Un program mediu poate avea nevoie de 32K sa 64K pentru funcții relativ complexe.

Modulul MASTER SYNCHRONOUS SERIAL PORT (MSSP)

Transmisiunea asincronă este folosita, de regulă, atunci când datele care trebuie transmise sunt generate la intervale aleatoare, spre exemplu de la o tastatură. În acest caz între caractere vor fi pauze mari și receptorul trebuie să aibă posibilitatea de a determina începutul fiecărui caracter nou recepționat. În acest scop fiecare caracter transmis este încadrat între două elemente adiționale reprezentate electric în mod diferit: un element de start, precedând caracterul (combinația de cod care reprezintă caracterul) și un element de stop, care urmează după caracter.

În transmisiunea sincronă octeții se transmit fără pauza, unul după altul. Pentru a separa simbolurile binare recepționate receptorul trebuie sa aibă o bază de timp sincronizata cu cea a transmițătorului. Dacă baza de timp nu este sincronizată, datele vor fi reconstituite cu erori. Deci, prin intermediul acelor simboluri de sincronizare, receptorul delimitează corect caracterele.

Este preferată transmisiunea sincronă deoarece nu este eficient să se adauge, fiecărui caracter sau octet, elementele de start și de stop atunci când se transmit blocuri mari de date și la debite mari. Se pot transmite combinațiile de cod care corespund acestor caractere una după alta fără pauze și fără elementele de start și de stop.

Modulul MSSP este o interfață de comunicație serială utilă pentru comunicarea cu alte dispozitive periferice sau alte microcontrollere. Aceste periferice pot fi memorii EEPROM seriale, regiștrii de deplasare, drivere de afișare, convertoare A/D, etc. Acest modul poate opera în două moduri:

– Serial Peripheral Interface (SPI) (Interfața periferică serială)

– Inter-Integrated Circuit (I2C)

Interfața I2C suportă următoarele moduri de comunicație:

– Master mode

– Multi-Master mode

– Slave mode

Comunicația SPI

SPI este utilizată adeseori atunci când sunt disponibile puține linii I/O, dar comunicația între două sau mai multe dispozitive trebuie să fie rapidă și ușor de implementat. Denumirea SPI provine de la Serial Peripheral Interface. SPI este un protocol de transmitere de date sincronă ce permite unui dispozitiv Master să inițieze comunicația cu un dispozitiv Slave. Microcontrollerele PIC au implementate module SPI denumite Synchronous Serial Port sau Master Synchronous Serial Port.

SPI este un protocol sincron. Semnalul de ceas care sincronizează comunicația este furnizat de dispozitivul Master. Semnalul de ceas controlează momentele când datele au fost modificate și când pot fi citite. Protocolul RS-232 și alte protocoale asincrone nu utilizează un semnal de ceas, în schimb timpul în care are loc comunicația trebuie controlat cu precizie.

Deoarece SPI are un semnal de ceas, acesta poate varia fără a afecta datele transmise. Acest lucru face comunicația SPI ideală atunci când microcontrollerul nu are un semnal de ceas foarte precis, așa cum este cazul unui oscilator RC.

SPI este un protocol de tip Master – Slave. Doar dispozitivul Master poate controla linia de semnalului de ceas (SCK). Datele nu pot fi transmise fără un control al semnalului de ceas. Toate dispozitivele Slave sunt controlate de semnalul de ceas care este controlat de dispozitivul Master. Dispozitivele Slave nu pot controla semnalul de ceas. Regiștrii de configurare SSP vor stabili modul în care circuitul răspunde la semnalul de ceas.

SPI este un protocol de schimb de date. Odată ce un set de date este transmis, un set de date poate fi primit. Atunci când un dispozitiv transmite date, datele ce sosesc pe linia de comunicație trebuie citite înainte ca alte date să fie din nou transmise. Dacă datele sosite nu sunt citite, aceste date vor fi pierdute și modulul SPI poate deveni inactiv. Din acest motiv este obligatorie citirea datelor după un transfer, chiar dacă aceste date nu au nici o valoare pentru aplicație.

Datele sunt întotdeanu inter-schimbate între cele două dispozitive. Nici unul dintre dispozitive nu poate fi doar emițător sau doar receptor în acest protocol. Fiecare dispozitiv are două linii de date: o linie pentru intrare și una pentru ieșire. Aceste schimburi sunt controlate cu semnalul de ceas de pe linia SCK. Adesea un semnal de selectare a dispozitivului Slave controlează când un dispozitv este accesat. Acest semnal trebuie utilizat atunci când există mai multe dispozitive Slave în sistem și este opțional dacă avem un singur Slave. Acest semnal este cunoscut sub numele de semnal SS (Slave Select). El semnalează unui Slave că un dispozitiv Master dorește începerea unei comunicații SPI cu acesta. În cele mai multe cazuri acest semnal este activ pe nivel low, astfel că un nivel low pe această linie va indica faptul că există o comunicație SPI între cele două dispozitive. El este utilizat pentru a mări imunitate liniei de comunicație la zgomote. Funcția lui este de a reseta dispozitivul Slave astfel încât acesta să fie gata pentru primirea următorului octet.

În comunicația SPI, datele sunt schimbate în timpul modificării semnalului SCK (low ->high sau high ->low). În acest fel datele sunt sincronizate cu semnalul de ceas. Logic, punctul în care datele sunt citite este opus cu momentul în care acestea sunt schimbate. Datele sunt valide în punctul de citire.

Figura 49 – Comunicția SPI

Pentru utilizarea corectă a unui modul SPI este necesară setarea corespunzătoare a unor regiștrii.

Tabelul 1 – Registrul SSP1CON1 este registrul de control al modulului MSSP1

bit 7 WCOL: Write Collision Detect bit

1 = The SSPxBUF register is written while it is still transmitting the previous word (must be cleared in software)

0 = No collision

bit 6 SSPOV: Receive Overflow Indicator bit

SPI Slave mode:

1 = A new byte is received while the SSPxBUF register is still holding the previous data. In case of overflow, the data in SSPxSR is lost. Overflow can only occur in Slave mode. The user must read the SSPxBUF, even if only transmitting data, to avoid setting overflow (must be cleared in

software).

0 = No overflow

bit 5 SSPEN: Master Synchronous Serial Port Enable bit(2)

1 = Enables serial port and configures SCKx, SDOx, SDIx and SSx as serial port pins

0 = Disables serial port and configures these pins as I/O port pins

bit 4 CKP: Clock Polarity Select bit

1 = Idle state for clock is a high level

0 = Idle state for clock is a low level

bit 3-0 SSPM3:SSPM0: Master Synchronous Serial Port Mode Select bits(3)

0101 = SPI Slave mode, clock = SCKx pin, SSx pin control disabled, SSx can be used as I/O pin

0100 = SPI Slave mode, clock = SCKx pin, SSx pin control enabled

0011 = SPI Master mode, clock = TMR2 output/2

0010 = SPI Master mode, clock = FOSC/64

0001 = SPI Master mode, clock = FOSC/16

0000 = SPI Master mode, clock = FOSC/4

Bitul SSPOV provine de la “Synchronous Serial Port OVerflow” și este setat automat de către microcontroller ori de câte ori apare o eroare de depășire. O eroare de depășire apare atunci când transferul SPI s-a terminat dar datele anterioare nu au fost citite din registrul SSPBUF. Dacă SSPOV este setat, el trebuie pus la valoarea 0 de către programul utilizator.

Observație: Datele din SSPBUF nu vor fi actualizate până când condiția de overflow nu este resetată.

Bitul SSPEN provine de la “Synchronous Serial Port Enable”. Acesta este setat la 1 atunci când se dorește activaream dulului SSP. Modulul trebuie păstrat activ pe întreaga durată a utilizării.

Bitul CKP selectează polaritatea semnalului de ceas, adică va stabili dacă modulul este în starea idle pe nivel high sau low.

Tabelul 2 – SSP1STAT provine de la “Synchronous Serial Port STATus” și furnizează o serie de biți necesari pentru controlul comunicației SPI

bit 7 SMP: Sample bit

SPI Master mode:

1 = Input data sampled at end of data output time

0 = Input data sampled at middle of data output time

SPI Slave mode:

SMP must be cleared when SPI is used in Slave mode.

bit 6 CKE: SPI Clock Select bit(1)

1 = Transmit occurs on transition from active to Idle clock state

0 = Transmit occurs on transition from Idle to active clock state

bit 5 D/A: Data/Address bit

Used in I2C mode only.

bit 4 P: Stop bit

Used in I2C mode only. This bit is cleared when the MSSPx module is disabled, SSPEN is cleared.

bit 3 S: Start bit

Used in I2C mode only.

bit 2 R/W: Read/Write Information bit

Used in I2C mode only.

bit 1 UA: Update Address bit

Used in I2C mode only.

bit 0 BF: Buffer Full Status bit (Receive mode only)

1 = Receive complete, SSPxBUF is full

0 = Receive not complete, SSPxBUF is empty

SMP controlează timingul eșantionării datelor. Acest bit trebuie menținut la valoarea 0 în cazul în care dispozitivul PIC este Slave. Dacă dispozitivul este Master, acest bit controlează dacă datele sunt eșantionate în mijlocul semnalului sau la sfârșitul acestora. Acest bit permite compatibilizarea masterului cu orice dispozitiv Slave.

CKE provine de “Clock Edge Select”.

Funcția exactă a bitului depinde de setarea lui CKP. Acest bit controlează modul de transmitere al datelor în raport cu semnalul de ceas. Biții CKP și CKE determină ce mod de SPI este utilizat pentru transeferul datelor. Aceste moduri sunt numite 0,0 0,1 1,0 1,1 și se referă lă modul în care acești biți sunt configurați.

BF este un bit de tip flag ce semnalează terminarea transmisiei sau recepției unui octet. Acest bit este setat și resetat automat de către microcontroller.

Folosind placa PICDEM Explorer, afișarea de mesaje pe diplay se realizează prin intermediul unui circuit MCP23S17, circuit ce utilizează protocolul SPI pentru comunicația cu Microcontrollerul. Acest circuit este un circuit de expandare (datele transmise serial de la microcontroller folosind 4 pini pot fi transmise mai departe pe cei 16 pini ai porturilor A și B). Circuitul MCP23S17 controlează LCD-ul prin 10 pini: 8 pini pentru date ( D0 – D07), bitul de activare al LCD –ului enable (E) și bitul de selectare registru (RS).

Microcontrollerul comunică cu circuitul MCP23S17 prin intermediul pinilor RA2 (corespunzător liniei CS), RC3 (corespunzător liniei SCK), RC4 (corespunzător liniei SDI) și RC5 (corespunzător liniei SDO). Conectarea între ce e trei circuite este prezentată în figura următoare (pinii legați între ei fiind încercuiți cu aceeași culoare).

Pentru controlul MCP23S17, mai întâi se specifică dacă se dorește o citire sau o scriere în acesta, se transmite apoi adresa registrului în care se scrie și apoi datele ce se scriu în acest registru. Regiștrii utilizați în exemplul de mai jos sunt următorii:

– IODIRA (cu adresa 0x00) – stabilește dacă pinii portului A sunt folosiți pentru citire sau scriere;

– IODIRB (cu adresa 0x01) – stabilește dacă pinii portului B sunt folosiți pentru citire sau scriere;

– GPIOA (cu adresa 0x12) – stabilește datele de pe pinii portului A;

– GPIOB (cu adresa 0x13) – stabilește datele de pe pinii portului B.

Figura 50 – Microcontrollerul comunică cu circuitul MCP23S17 prin intermediul pinilor RA2, RC4 și RC5

Modulul ANALOG TO DIGITAL CONVERTER (A/D)

Acest modul permite conversia unui semnal de intrare analogic într-un număr pe 10 biți. Modulul este controlat prin intermediul a 5 regiștrii:

• Registrul rezultat conversie A/D (ADRESH)

• Registrul rezultat conversie A/D (ADRESL)

• Registrul de control 0 (ADCON0)

• Registrul de control 1 (ADCON1)

• Registrul de control 2 (ADCON2)

Registrul ADCON0 controlează modul de operare al modulului.

Tabelul 3 – Registrul ADCON0

bit 7-6 Unimplemented: Read as ‘0’

bit 5-2 CHS<3:0> Analog Channel Select bits(1)

0000 = Channel 0 (AN0)

0001 = Channel 1 (AN1)

0010 = Channel 2 (AN2)

0011 = Channel 3 (AN3)

0100 = Channel 4 (AN4)

0101 = Channel 5 (AN5)

0110 = Channel 6 (AN6)

0111 = Channel 7 (AN7)

1000 = Channel 8 (AN8)

1001 = Channel 9 (AN9)

1010 = Channel 10 (AN10)

1011 = Channel 11 (AN11)

1100 = Channel 12 (AN12))

1101 = Channel 13 (AN13)

1110 = Channel 14 (AN14)

1111 = Channel 15 (AN15)

bit 1 GO/DONE: A/D Conversion Status bit

When ADON = 1:

1 = A/D conversion in progress

0 = A/D Idle

bit 0 ADON: A/D On bit

1 = A/D converter module is enabled

0 = A/D converter module is disabled

Registrul ADCON1 configurează pinii porturilor utilizate pentru conversia A/D.

Tabelul 4 – Registul ADCON1

bit 7-6 Unimplemented: Read as ‘0’

bit 5-4 VCFG<1:0>: Voltage Reference Configuration bits

Tabelul 5 – Configurarea biților de voltaj

bit 3-0 PCFG<3:0>: A/D Port Configuration Control bits:

Tabelul 6 – Configurarea biților pentru controlul A/D

A = Analog input D = Digital I/O

Tabelul 7 – Registrul ADCON2

bit 7 ADFM: A/D Result Format Select bit

1 = Right justified

0 = Left justified

bit 6 Unimplemented: Read as ‘0’

bit 5-3 ACQT<2:0>: A/D Acquisition Time Select bits

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 Conversion Clock Select bits

111 = FRC (clock derived from A/D RC oscillator)(1)

110 = FOSC/64

101 = FOSC/16

100 = FOSC/4

011 = FRC (clock derived from A/D RC oscillator)(1)

010 = FOSC/32

001 = FOSC/8

000 = FOSC/2

Tensiunea de referință poate fi aleasă prin program și poate fi diferența de tensiune între sursă (VDD ) și masă (VSS ) sau diferența de tensiune între pinii RA3/AN3/VREF+ și RA2/AN2/VREF- pins.

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 startează 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 T AD ca timpul de conversie pe bit. Pentru startarea următoarei achiziții trebuie așteptat minim 2TAD .

Principiul conversiei analog numerice este prezentat în figura următoare (pentru cazul unui convertor pe 3 biți).

Figura 51 – Principiul conversiei analog numerice

În acest caz ave, 8 =23 nivelele de tensiune sunt reprezentate prin 8 valori (000, 001,…,111).

Pentru o tensiune de referință de 5V și o rezoluție de 10 biți a convertorului, calculul valorii care va fi memorată în regiștrii ADRESH:ADRESL se realizează cu regula de trei simplă. Pentru o tensiune de 3.65 Volți avem următorul număr:

Deci o tensiune de intrare de 3.65 V va fi reprezentată prin numărul zecimal 748 sau prin numărul binar 1011101100. În mod asemănător se poate determina orice nivel de tensiune. Numărul memorat în regiștrii ADRESH:ADRESL poate fi plasat de la dreapta la stânga (cei mai semnificativi 6 biți din ADRESH nu sunt luați în considerare) sau de la stânga la dreapta (cei mai puțin semnificativi 6 biți din ADRESL nu sunt luați în considerare).

Modulul COMPARE/CAPTURE/PWM (CCP)

Microcontrollerul PIC18F8722 are 5 module CCP – Capture/ Compare/ Pulse Width Modulation (Captură/ Comparare/ Modulare în durată de impulsuri). Toate cele cinci module pot fi configurate pentru modul Capture, Compare sau PWM simplu (cu ieșire pe un singur canal) în timp ce primele trei module (notate ECCP1, ECCP2, ECCP3) pot fi configurate pentru aplicații avansate ale modulului PWM, și anume 2 sau 4 canale de ieșire, polaritate selectabilă de către utilizator, zonă de insensibilitate controlabilă și oprire sau pornire automată.

Fiecare modul CCP este asociat cu un registru de control (notat generic CCPxCON, x=1:5) și un registru de date (CCPRx) compus din două registre pe 8 biți: CCPRxL și CCPRxH. Toți acești regiștrii pot fi citiți sau scriși.

Pentru lucrul cu modulele CCP se utilizează și modulele Timer. Astfel, modulele Timer1 și Timer3 sunt utilizate pentru lucrul în modurile Capture și Compare în timp ce pentru lucrul în modul PWM se utilizează modulele Timer2 și Timer4. Asocierea timerelor la modulele CCP se realizează prin intermediul celor doi biți T3CCP din registrul T3CON:

bit 6, 3 T3CCP<2:1>: Timer3 and Timer1 to CCPx Enable bits

11 = Timer3 and Timer4 are the clock sources for ECCP1, ECCP2, ECCP3, CCP4 and CCP5

10 = Timer3 and Timer4 are the clock sources for ECCP3, CCP4 and CCP5; Timer1 and Timer2 are the clock sources for ECCP1 and ECCP2

01 = Timer3 and Timer4 are the clock sources for ECCP2, ECCP3, CCP4 and CCP5; Timer1 and Timer2 are the clock sources for ECCP1

00 = Timer1 and Timer2 are the clock sources for ECCP1, ECCP2, ECCP3, CCP4 and CCP5

Tabelul 8 – Registrul CCPxCON

bit 7-6 PxM1:PxM0: Enhanced PWM Output Configuration bits

If CCPxM<3:2> = 00, 01, 10:

xx = PxA assigned as Capture/Compare input/output; PxB, PxC, PxD assigned as port pins

If CCPxM<3:2> = 11:

00 = Single output: PxA modulated; PxB, PxC, PxD assigned as port pins

01 = Full-bridge output forward: P1D modulated; P1A active; P1B, P1C inactive

10 = Half-bridge output: P1A, P1B modulated with dead-band control; P1C, P1D assigned as port pins

11 = Full-bridge output reverse: P1B modulated; P1C active; P1A, P1D inactive

bit 5-4 DCxB<1:0>: PWM Duty Cycle bit 1 and bit 0

Capture mode: Unused. Compare mode: Unused.

PWM mode:

These bits are the two LSbs of the 10-bit PWM duty cycle. The eight MSbs of the duty cycle are found in CCPRxL.

bit 3-0 CCPxM3:CCPxM0: Enhanced CCP Mode Select bits

0000 = Capture/Compare/PWM off (resets ECCPx module)

0001 = Reserved

0010 = Compare mode: toggle output on match

0011 = Capture mode

0100 = Capture mode: every falling edge

0101 = Capture mode: every rising edge

0110 = Capture mode: every 4th rising edge

0111 = Capture mode: every 16th rising edge

1000 = Compare mode: initialize ECCPx pin low; set output on compare match (set CCPxIF)

1001 = Compare mode: initialize ECCPx pin high; clear output on compare match (set CCPxIF)

1010 = Compare mode: generate software interrupt only; ECCPx pin reverts to I/O state

1011= Compare mode: trigger special event (ECCP resets TMR1 or TMR3, sets CCPxIF bit; ECCP2

trigger starts A/D conversion if A/D module is enabled)

1100 = PWM mode: PxA, PxC active-high; PxB, PxD active-high

1101 = PWM mode: PxA, PxC active-high; PxB, PxD active-low

1110 = PWM mode: PxA, PxC active-low; PxB, PxD active-high

1111 = PWM mode: PxA, PxC active-low; PxB, PxD active-low

Modul Capture

În modul Capture, în pereche de regiștrii CCPRxH : CCPRxL este memorată valoarea registrului TMR1 sau a registrului TMR3 (în funcție de Timerul utilizat) la apariția unui eveniment pe pinul CCPx corespunzător. Un eveniment este definit ca 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.

Alegerea evenimentului se realizează cu ajutorul biților CCPxM din registrul CCPxCON. Pinul CCPx trebuie configurat ca intrare prin setarea corespunzătoare a registrul TRIS.

Modul Compare

În modul Compare, valoarea registrului pe 16 biți CCPRX este comparată cu valoarea registrului TMR1 sau a registrului TMR3 (în funcție de Timer-ul utilizat). Atunci când cele două valori sunt egale, pinul CCPx poate fi trecut în starea high, în starea low, mutat din high în low sau din low în high sau poate fi lăsat nemodificat. Acțiunea este realizată în funcție de starea biților CCPxM din registrul CCPxCON. În același timp este setat bitul flag CCPxIF. Utilizatorul trebuie să configureze pinul CCPx ca ieșire prin resetarea corespunzătoare în registrul TRIS.

Modul PWM

În modul PWM, pe pinul CCPx este generată o ieșire PWM cu o rezoluție de 10 biți. O ieșire de tip PWM are o bază de timp (perioadă) și un interval de timp în care ieșirea stă la valoarea high (factorul de umplere sau ”duty cycle” în limba engleză). Evident, frecvența PWM-ului este inversul perioadei.

Figura 52 – Modulul PWM

Perioada PWM-ului este specificată prin scrierea registrului PR2 (sau PR4) al modulului Timer2 (respectiv Timer4). Această perioadă poate fi calculată folosind următoarea formulă:

unde:

– perioada PWM;

– perioada de oscilație a tactului de ceas;

– valoarea de prescalare.

Atunci când TMR2 este egal cu PR2, au loc următoarele acțiuni:

– TMR2 este resetat;

– Pinul CCPx este setat (cu excepția cazului în care ”duty cycle” este 0);

– Valoarea registrului CCPRxL este transferată în registrul CCPRxH.

Factorul de umplere (duty cycle) este setat prin scrierea registrului CCPR1L și a biților 5 și 4 din registrul CCPxCON. Factorul de umplere se calculează cu relația:

…..<,

Rezultate experimentale

Prezentare instalație experimentală

Experimentul presupune reglarea temperaturii și a debitului de aer în instalația experimentală LabVolt, folosind placa de dezvoltare „PICDEMTM PIC18 Explorer” și programatorul/debugger-ul „PICkitTM 3”.

Echipamentele folosite pentru sistemul de reglare automată realizat sunt:

Instalația LabVolt de reglare a temperaturii și debitului de aer prezentată în capitolul II.

Placa de dezvoltare „PICDEMTM PIC18 Explorer”

Dispozitivul programator/debugger „PICkitTM 3”

Tastatură numerică a calculatorului pe care rulează programul MPLAB IDE, pentru modificarea referinței și a parametrilor regulatorului PID în timpul rulării.

Datorită faptului că totul este software coeficienții regulatorului PID se pot modifica foarte ușor, mai mult, aceștia se pot schimba și în timpul lucrării cu ajutorul tastaturii numerice.

Componentele plăcii de dezvoltare folosite la acest experiment sunt:

ceasul de timp real;

interfață de comunicație serială utilă pentru comunicarea cu alte dispozitive periferice sau alte microcontrollere;

conversia unui semnal de intrare analogic într-un număr pe 10 biți;

modulare în durată de impulsuri

afișajul alfanumeric LCD;

portul serial pentru conectarea calculatorului;

Implementarea numerică a legilor de reglare

În realizarea procesului de reglare a temperaturii se folosește ceasul de timp real pentru a genera o întrerupere la fiecare 10 ms. Acesta reprezintă și timpul de eșantionare (notat cu T). La fiecare 10 ms microcontroller-ul va citii semnalele venite de la convertoarele analog-numerice și va memora citirea într-o variabilă (notată cu Y).Vom compara mărimile măsurate Y cu referința ref și se va obține eroarea sistemului, care va fi păstrată într-o variabilă ek.Acești parametrii sunt necesari la calcularea comenzii cu ajutorul unui regulator PID implementat numeric.

Parametrii regulatorului PID, Kr – factorul de proporționalitate, Ti – constanta de timp de integrare, Td – constanta de timp de derivare, vor primii valori implicite software, dar ele se pot modifica și în timpul rulării.

Regulatorul PID este implementat, cu funcția de trasfer discretă:

După fiecare 10ms se va calcula o valoare a comenzii care este transmisă printr-unul din porturi pentru modulare în durată de implusuri PWM. Comanda este aplicată instalației experimentale LabVolt pe la intrările de tensiune ale acesteia.

Figura 53 – Controlul în blucă închisă

Va fi implementat un regulator pentru reglarea temperaturii, iar acesta va funcționa o dată cu legea de reglare PI și a doua oară cu legea de reglare PID. Temperatura va depinde de gradul de încălzire al rezistenței.

Folosind controlul sistemului în buclă închisă, sunt adăugate la sistem un regulator și o buclă de reacție inversă. Bucla de reacție inversă transmite regulatorului valoarea actuală a variabilei controlate. Regulatorul decide ce acțiune se execută pentru că valoarea acestei variabile să devină egală cu valoarea mărimii prescrise. Deoarece se utilizează reacția inversă, acest tip de sistem poate detecta și corecta variațiile variabilei controlate, variații cauzate de modificarea sarcinii sau perturbațiilor. Acest tip de sistem este utilizat în aplicațiile unde cerințele pentru controlul variabilei sunt critice.

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

Modul de lucru

Se urmărește utilizarea microcontroller-ului PIC 18F8722 ca regulator pentru reglarea temperaturii de aer.

În realizarea proiectului folosim placa PICDEM™ PIC18 Explorer și programatorul PICkit 3 care trebuie conectat la placă și la calculator și se va proceda astfel:

Figura 54 – Programul MPLAB

Mergeți în meniul Project și selecționați New… . Se va deschide o fereastră de dialog ce permite introducerea unui nume pentru proiect și directorul în care să fie salvat acesta.

Figura 55 – Deschiderea unui proiect nou folosind MPLAB

Pe ecran va apare următoarea fereastră (selectați din meniul View opțiunea Project).

Figura 56 – Fișierele unui proiect

În această fereastră apare numele proiectului și tipurile de fișiere pe care le conține. În acest moment proiectul nu conține nici un fișier.

În continuare trebuie precizați parametrii importanți ai proiectului, și anume tipul de microcontroller utilizat. Pentru aceasta din meniul Configure –> Select Device… se alege microcontrollerul PIC18F8722. În această fereastră sunt specificate (folosind led-uri roșii și verzi) ce instrumente pot fi utilizate pentru acest tip de microcontroller.

Figura 57 – Selectarea microcontroller-ului PIC18F8722

În continuare trebuie precizat limbajul de programare utilizat. Poate fi utilizat limbajul de asamblare sau alte compilatoare Microchip sau de la alte societăți. Pentru aceasta din meniul Project –> Select Language Toolsuite … se alege Microchip XC8 Toolsuite ce conține un compilator C pentru microcontrollere PIC pe 8 biți.

Figura 58 – Selectarea compilatorului

Pentru scrierea programului sursă se deschide un fișier nou din meniul File–>New.

Figura 59 – Spațiul de lucru

Se salvează cu numele licenta.c, după care în fereastra corespunzătoare proiectului se dă click dreapta pe Source Files și se selectează Add Files … selectând fișierul led1.c de unde a fost salvat. În continuare trebuie realizate următoarele:

– din meniul View se bifează opțiunea Output,

– din meniul Programmer–> Select Programmer… se alege PICkit 3

– din meniul Project–>Build Configuration se setează opțiunea Release.

Figura 60 – Selectarea sursei fișierului creat din directorul salvat anterior

Figura 61 – Adăugarea fișierului creat în sursa proiectului

Realizarea programului de reglare

Pentru ca microcontroller-ul să funcționeze corect, prima dată trebuie sa declarăm bibliotecile pe care le folosim, iar următorul pas trebuie să configurăm registrii microcontroller-ului pentru al putea folosii ca regulator numeric și definirea registrilor circuitului MCP23S17 pentru a putea folosii LCD-ul microcontroller-ului, pentru afișarea referinței și a mărimii măsurate.

// CONFIGURARE Microcontroller

#pragma config OSC = HSPLL

#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

Pentru controlul MCP23S17, mai întâi se specifică dacă se dorește o citire sau o scriere în acesta, se transmite apoi adresa registrului în care se scrie și apoi datele ce se scriu în acest registru. Regiștrii utilizați în exemplul de mai jos sunt următorii:

– IODIRA (cu adresa 0x00) – stabilește dacă pinii portului A sunt folosiți pentru citire sau scriere;

– IODIRB (cu adresa 0x01) – stabilește dacă pinii portului B sunt folosiți pentru citire sau scriere;

– GPIOA (cu adresa 0x12) – stabilește datele de pe pinii portului A;

– GPIOB (cu adresa 0x13) – stabilește datele de pe pinii portului B.

#define CS PORTAbits.RA2

// addresele registrilor circuitului MCP23S17

#define IODIRA_ADDRESS 0x00

#define IODIRB_ADDRESS 0x01

#define GPIOA_ADDRESS 0x12

#define GPIOB_ADDRESS 0x13

Următorul pas în realizarea programului este începerea definirii funcțiilor pe care le vom folosii pentru ca microcontroller-ul să devină un regulator. Funcțiile incapsulează prelucrări bine precizate și pot fi reutilizate în mai multe programe. Pentru a putea fi utilizată într-un program, o funcție trebuie să fie definită (sau declarată) și apelată. O funcție void fără parametri poate prelucra variabilele globale și cele locale. Dacă mai multe funcții void fără parametrii trebuie să aibă acces la aceleași date, acestea trebuie să fie variabile globale. Declarația unei funcții se face prin precizarea prototipului funcției. La apelul unei funcții, se execută corpul său, după care se revine în funcția apelantă, la instrucțiunea următoare apelului. O funcție poate fi apelată, dacă în fața apelului există definitiă sau cel puțin declarația funcției.

// Prototipuri functii

void setIODIR(char, char);

void setGPIO(char, char);

void lcdCommand(char);

void lcdChar(unsigned char);

void lcdGoTo(char);

void lcdWriteString(unsigned char*);

// variabile globale

int i, d_c, U;

long int k1=0;

unsigned int ADCResult=0;

float Y=0, ref=0, Kr=2, Ti=3, Td=0.002, T=0.01, Uk, Uk1=0, ek1=0, ek2=0, ek, b0, b1, b2;

unsigned char val_reg;

double T_pwm;

char buf1[8];buf2[8];

În variabilele globale am declarat perioada de eșantionare T=0.01 pentru ca microcontroller-ul să funcționeze ca un regulator.

Vom folosi butonul RB0 (portul S1) pentru a modifica referința legii de reglare. Această setare este o întrerupere cu ajutorul portului S1 care va varia între 0.0 și 5.0, cu un pas de 0.5. Acesta va acționa crescător, iar când va ajunge la 5.0 se va reseta și o va lua de la 0.0 iar.

//Stetarea intreruperilor cu ajutorul portului S1 (buton RB0)

void interrupt intrerupere_ext (void)

{

if(INTCONbits.INT0IE && INTCONbits.INT0IF)

{

ref = ref + 0.5;

}

INTCONbits.INT0IF = 0; // resetare flag

if (ref>5) //Cand ref>5 vom aveam o resetare a referintei

{

ref=0;

}}

………

//Activarea intreruperilor pe portul RB0(buton)sau S1

INTCONbits.GIE=1; // activarea întreruperilor

INTCONbits.INT0IE=1; // activare întreruperi externe pe pinul INT0

INTCONbits.INT0IF=0; // resetare bit de flag pentru INT0

INTCON2bits.INTEDG0=1; // activare intrerupere pe front crescator

Pentru a citi datele de la proces se folosesc cei 5 regiștrii ai modulului de conversie analog-numerică într-un număr pe 10 biți. Cea mai mare valoare a numărului returnat, 1024 corespunde unui semnal analogic de 5 V. Putem face ușor conversia înapoi în volți. În felul acesta în variabila Y vom avea valoarea în volți măsurată la intrările convertorului analog-numeric .

// Conversie analog numerică

CloseADC();

ADCON0=0b00010000; //canalul AN4, portul RA5

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

ADCON1=0b00001001; // RA0 = analog input

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

ADCON0bits.GO=1; // start conversie

while (ADCON0bits.GO);

ADCResult = (unsigned int) ReadADC();

Y = (ADCResult*5.0)/1024; // conversia numarului în tensiune

CloseADC(); // închiderea modulului A/D

Pentru calculul comenzii vom implementa funția de transfer discretă a unui regulator PID.

Parametrii Kr, Td, Ti ai regulatorului sunt inițializați la începutul programului.

// Algoritmul legii de reglare

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

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

b2 = Kr * (Td/T);

Uk=Uk1 + ek*b0 + ek1*b1 + ek2*b2; // funția de transfer

Variabilele folosite la calculul comenzii sunt cele din Tabelul 9.

Tabelul 9 – Variabilele funcției de trasfer

Eroarea sistemului ek va fi rezultatul scăderii a valorii măsurate din referință și se regăsește sub forma unui semnal compatibil cu elementele prin care se realizează legea de reglare.

// Calculul eroarii sistemului

ek=ref – Y;

Valorile erorii și comenzii de la pașii anteriori vor fi memorate în variabilele Uk1, ek1 și ek2. După calculul comenzii valorile acestor variabile vor fi reactualizate:

ek2=ek1;

ek1=ek;

Uk1=Uk;

După ce regulatorul calculează comenzile pentru ventilator, acestea sunt transmise prin canalele de modulare în durată de impulsuri (PWM). Pentru a transmite comanda dorită pe canalele PWM trebuie făcute calcule. Funcția PWM va accepta pentru factorul de umplere o valoare între 0 și valoarea din variabila returnată de funcția de inițializare a canalului RC2, care este funcție de frecveța pentru PWM aleasă. Pentru a găsi valoarea ce trebuie transmisă prima dată împărțim comanda în volți pe care vrem să o transmitem la 5, care este maximul comenzii, și vom obține un număr subunitar care apoi îl vom înmulți cu valoarea maximă ce poate fi transmisă funcției PWM.

// Comanda pt PWM

TRISCbits.RC2=1; // portul RC2

PR2 = 0xFF;

CCP1CON=0b00001100; // Setare modul ECCP1 ca PWM simplu

CCPR1L=0xFF; // Setare duty cycle

PIR1bits.TMR2IF=0;

T2CON=0b00000101;

while (!PIR1bits.TMR2IF);

TRISCbits.RC2=0;

if (Uk<0) {

Uk=0; }

if (Uk>5) {

Uk=5;}

U = (Uk*1024)/5;

// Modificare factor de umplere

CCPR1L=U;

// Calcul perioada PWM in microsecunde

val_reg=PR2;

T_pwm=((val_reg+1)*4*4)/10;

În variabila U este păstrată comanda care este înmulțită cu valoarea maximă și apoi este împărțită la 5, practic facem o conversie analogic-numerică, ce reprezintă perioada PWM-ului, adică valoarea maximă ce trebuei transmisă prin funcția de PWM pentru a modifica factorul de umplere până la 100%, adică 5V.

Figura 62 – Graficul modulului în durată de impulsuri (PWM)

Pentru a observa variabilele procesului în timpul rulării este necesară afișarea acestora pe display. Variabilele ce vor fi afișate sunt referința și mărimea măsurată. Variabilele noastre conțin valori între 0 și 5 V. Pentru o afișare corectă vom înmulții aceste valori cu 100 și vor fi afișate ca un număr între 0 și 500, ultimele 2 cifre fiind partea fracționară. Apoi acest număr este convertit într-o variabilă de tip șir de caractere și apoi afișate pe LCD.

Pentru a deosebi ulterior ce reprezintă fiecare număr, trebuie ca înaintea lui să scriem inițialele valorii pe care o reprezintă, ref și Y.

//Afisarea pe display a referintei si a marimii masurate

if (k1%100==0)

{

lcdCommand(0b00111111); // Functie setare display: 8 biti, 2 linii

lcdCommand(0b00001111); // Cursor

lcdCommand(0b00000001); // clear display

lcdCommand(0b00000110); // entry mode

lcdWriteString("Ref:"); // scrierea unui sir de caractere

double i_val, f_val, val, i_val1, f_val1;

f_val = modf( ref, &i_val);

itoa(buf1, i_val, 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

lcdWriteString("Y:");

f_val = modf( Y, &i_val);

itoa(buf1, i_val, 10);

lcdWriteString(buf1);

lcdChar('.');

val=f_val*100;

f_val1 = modf( val, &i_val1);

itoa(buf2, i_val1, 10);

lcdWriteString(buf2);

CloseSPI1();

}

Figura 63 – Vizualizarea variabilelor procesului pe afișajul alphanumeric LCD

Figura 64 – Lansarea în execuție a programului

Din meniul Project–>Build Configuration se setează opțiunea Release.

După realizarea acestor setări, operația Build se realizează din meniul Project sau prin apăsarea tastei F10. Dacă operația build s-a realizat cu succes se șterge memoria microcontrollerului folosind opțiunea Programmer–>Erase Flash Device după care se programează microcontrollerul cu Programmer–>Program.

Conexiuni realizate

Pentru a realiza reglarea, ieșirile variabilelor procesului trebuie conectate la intrările convertoarelor analog-numerice RA5/AN4, iar ieșirile PWM la intrările procesului conectate la elementele de execuție. Vom folosii un cablu USB pentru a conecta programatorul PICkit 3 la calculatorul gazdă, pe care rulează programul MPLAB, iar apoi conectarea programatorului printr-un port serial la placa de dezvoltare PICDEM PIC18 Explorer pentru evaluarea dispozitivelor din familiile PIC18FXXXX și PIC18FXXJXX. În plus vom folosii un osciloscop pentru a putea vizualiza grafic reglarea ventilatorului și modificarea factorului de umplere prin canalele de modulare în durată de impulsuri. Vom folosii osciloscopul HANTEK DS05202B, acesta având o funcție specială, și anume, putem conecta osciloscopul la calculatorul gazdă, pe care trebuie să ruleze programul TTScope pentru a vedeam în timp real, atât pe dispay-ul osciloscopului cât și pe display-ul calculatorului graficele obținute în timplu executării reglării automate a temperaturii.

Conexiunile au fost realizare ca în Tabelul 10:

Tabelul 10 – Conexiuni realizate în proiect

Figura 65 – Instalația experimentală LabVolt 3522-05

Figura 66 – Conexiunea între placa PICDEM PIC18 și progrmatorul PICkit 3

Figura 67 – Osciloscopul HANTEK DS5202B

Figura 68 – Conexiuni pe placa de dezvoltare

Lansarea în execuție

Pentru reglarea temperaturii s-a scris programul în MPLAB atașat la finalul acestui subcapitol. Acest program pune împreună tot ce a fost scris până acum în subcapitolul 4.3.1 despre programarea microcontroler-ului pentru reglarea temperaturii. S-au folosit accesoriile prezentate la subcapitolul 4.3.2 și s-au realizat conexiunile cu instalația.

Parametrii regulatorului PI pentru reglarea temperaturii sunt Kr=3, Ti=2 și T=0.01. Datorită faptului că sistemul de încălzire este foarte lent, va dura mai mult până temperatura se stabilizează. Pe măsură ce eroare se micșorează reulatorul începe să scadă comanda până va găsi o comandă care să țină temperatura pe loc.

Pentru regulatorul PI am obținut cu ajutorul osciloscopului HANTEK DS05202B graficul cu oscilațiile de suprareglaj și reglaj automat. Am folosit programul TTScope pentru a citi graficul de pe osciloscop.

Figura 69 – Graficul legii de reglare PI

Parametrii regulatorului PID pentru reglarea temperaturii sunt Kr=2, Ti=1, Td=0.01 și T=0.01. Datorită faptului că sistemul de încălzire este foarte lent, va dura mai mult până temperatura se stabilizează. Pe măsură ce eroare se micșorează reulatorul începe să scadă comanda până va găsi o comandă care să țină temperatura pe loc.

Figura 70 – Graficul legii de reglare PID

Programul de rulare licenta.c:

#include <xc.h>

#include <spi.h>

#include <delays.h>

#include <stdlib.h>

#include <math.h>

#include <adc.h>

// CONFIGURARE Microcontroller

#pragma config OSC = HSPLL

#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, d_c, U;

long int k1=0;

unsigned int ADCResult=0;

float Y=0, ref=0, Kr=2, Ti=3, Td=0.002, T=0.01, Uk, Uk1=0, ek1=0, ek2=0, ek, b0, b1, b2;

unsigned char val_reg;

double T_pwm;

char buf1[8];buf2[8];

//Stetarea intreruperilor cu ajutorul portului S1 (buton RB0)

void interrupt intrerupere_ext (void)

{

if(INTCONbits.INT0IE && INTCONbits.INT0IF) {

ref = ref + 0.5;

}

INTCONbits.INT0IF = 0; // resetare flag

if (ref>5){ //Cand ref>5 vom aveam o resetare a referintei

ref=0;

}

}

void main(void)

{

while(1){

k1=k1+1;

// Conversie analog numerica

CloseADC();

ADCON0=0b00010000; //canalul AN4, portul RA5

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

ADCON1=0b00001001; // RA0 = analog input

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

ADCON0bits.GO=1; // start conversie

while (ADCON0bits.GO);

ADCResult = (unsigned int) ReadADC();

Y = (ADCResult*5.0)/1024; // conversia numarului în tensiune

CloseADC(); // închiderea modulului A/D

//Afisarea pe display a referintei si a marimii masurate

if (k1%100==0)

{

lcdCommand(0b00111111); // Functie setare display: 8 biti, 2 linii

lcdCommand(0b00001111); // Cursor

lcdCommand(0b00000001); // clear display

lcdCommand(0b00000110); // entry mode

lcdWriteString("Ref:"); // scrierea unui sir de caractere

double i_val, f_val, val, i_val1, f_val1;

f_val = modf( ref, &i_val);

itoa(buf1, i_val, 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

lcdWriteString("Y:");

f_val = modf( Y, &i_val);

itoa(buf1, i_val, 10);

lcdWriteString(buf1);

lcdChar('.');

val=f_val*100;

f_val1 = modf( val, &i_val1);

itoa(buf2, i_val1, 10);

lcdWriteString(buf2);

CloseSPI1();

}

// Calculul eroarii sistemului

ek=ref – Y;

// Algoritmul legii de reglare

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

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

b2 = Kr * (Td/T);

Uk=Uk1 + ek*b0 + ek1*b1 + ek2*b2; // functia de transfer

ek2=ek1;

ek1=ek;

Uk1=Uk;

// Comanda pt PWM

TRISCbits.RC2=1; //portul RC2

PR2 = 0xFF;

CCP1CON=0b00001100; // Setare modul ECCP1 ca PWM simplu

CCPR1L=0xFF; // Setare duty cycle

PIR1bits.TMR2IF=0;

T2CON=0b00000101;

while (!PIR1bits.TMR2IF);

TRISCbits.RC2=0;

if (Uk<0) {

Uk=0;

}

if (Uk>5) {

Uk=5;

}

// Modificare factor de umplere

U = (Uk*1024)/5;

CCPR1L=U;

// Calcul perioada PWM in microsecunde

val_reg=PR2;

T_pwm=((val_reg+1)*4*4)/10;

TRISAbits.RA2=0; // pe portul RA2 se face activarea circuitului Slave

CS=1; // setarea CS la high, pentru transmitere informatii la MCP23S17

OpenSPI1(SPI_FOSC_64, MODE_10, SMPEND); // configurare SPI

setIODIR(IODIRB_ADDRESS,0x00); // setare pini DB0-DB7 ca iesiri

setIODIR(IODIRA_ADDRESS,0x00); // set RS si E LCD ca iesiri

//Activarea intreruperilor pe portul RB0(buton)sau S1

INTCONbits.GIE=1; // activarea întreruperilor

INTCONbits.INT0IE=1; // activare întreruperi externe pe pinul INT0

INTCONbits.INT0IF=0; // resetare bit de flag pentru INT0

INTCON2bits.INTEDG0=1; // activare intrerupere pe front crescator

}

}

// functie utilizata pentru scrierea valorilor in porturile MCP23S17

void setGPIO(char address, char value){

CS=0; // inceputul transmisiei

WriteSPI1(0x40);

WriteSPI1(address);

WriteSPI1(value);

CS=1; // sfarsitul transmisiei

}

/* functie utilizata pentru setarea directiei porturilor circuitului MCP23S17 */

void setIODIR(char address, char dir){

CS=0;

WriteSPI1(0x40);

WriteSPI1(address); // selectare IODIRB

WriteSPI1(dir); // setare directie

CS=1;

}

// functie pentru transmitere comenzi catre display

void lcdCommand(char command){

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

Delay10TCYx(0);

setGPIO(GPIOB_ADDRESS, command); // transmitere date

Delay10TCYx(0);

setGPIO(GPIOA_ADDRESS,0x40); // E=1

Delay10TCYx(0);

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

Delay10TCYx(0);

}

// Functia pentru afisarea unui caracter pe display

void lcdChar(unsigned char letter){

setGPIO(GPIOA_ADDRESS,0x80); // RS=1

Delay10TCYx(0);

setGPIO(GPIOB_ADDRESS,letter); // transmitere caracter pentru afisare

setGPIO(GPIOA_ADDRESS, 0xc0); // RS=1, EN=1

Delay10TCYx(0);

setGPIO(GPIOA_ADDRESS,0x00); // RS=0, EN=0

Delay10TCYx(0);

}

//* pozitionare cursor

void lcdGoTo(char pos){

lcdCommand(0x80+pos);

}

void lcdWriteString(unsigned char *s){

while(*s)

lcdChar(*s++);

}

CONCLUZII

Consider conducerea proceselor cu ajutorul microcontroller-elor o soluție foarte bună pentru era automatizată ce bate la ușă, deoarece acestea sunt relativ ușor de folosit pentru diverse scopuri și nu este necesar spațiu foarte mare pentru plasarea lor, dimensiunile lor putând varia, dar se pot obține performanțe excelente la dimensiuni mici. În același timp acestea sunt pregătite pentru procesele reale de automatizare fiind dotate cu convertoare analog-numerice, numeric-analogice, ceas de timp real, având și posibilitatea atașării altor dispozitive precum ar fi afișaje sau tastaturi pentru a realiza o interfață om-mașină prietenoasă și foarte ușor de folosit.

Industria microcontroller-elor este deja într-o fază avansată de dezvoltare asta fiind un avantaj mare în lucrul cu microcontroller-ul deoarece sunt disponibile posibilități cât mai simple de programare și se pot găsi foarte ușor soluții pentru probleme.

Sistemele cu modulare în durată de impulsuri sunt sisteme care conțin cel puțin un element denumit Modulator în durată de impulsuri PWM (Pulse With Modulator).

Un element PWM efectuează operația (procesul) de modulare în durată de impulsuri, prescurtată tot prin simbolul PWM (Pulse With Modulation).

Elementele PWM sunt des folosite în sistemelede reglare automată deoarece realizează o comandă de tip bipozițional pentru care elementul de execuție este foarte simplu, putând fi implementat prin simple contacte electromecanice.O astfel de comandă mai este denumită și "Comandă proporționale în timp" (Time Proportional Command).

Tratarea teoretică exactă a sistemelor în care apar elemnte de tip PWM se poate efectua numai folosind teoria sistemelor cu eșantionare neconvenționale ce va face obiectul unui capitol separat.

Majoritatea echipamentelor numerice de reglare automată și chiar circuitele integrate de tip micro-controller, au o ieșire de tip PWM.

Din punct de vedere fizic, ieșirea de tip PWM este materializătă prin două borne la care se aplică fie o tensiune ce poate lua numai două valori, fie un contact electromecanic care poate fi închis sau deschis.

Conducerea proceselor industriale moderne este integrată în sisteme informatice, care au atât rolul de conducere propriu-zisă a proceselor tehnologice cât și de management al tuturor resurselor.

Sistemul informatic reprezintă un ansamblu coerent structurat, format din echipamente electronice de calcul și de comunicație, procese, proceduri automate și manuale; sunt incluse de asemenea structurile organizatorice și personalul care folosesc echipamentele de calcul că instrumente de prelucrare automată a datelor, în scopul optimizării funcționării proceselor.

Sistemul informatic preia și dezvoltă o parte din operațiile de prelucrare ale întregului sistem informațional și de conducere a procesului pe care le automatizează, devenind astfel un subsistem informațional automatizat.

Sistemele informatice pentru conducerea proceselor tehnologice sunt formate din ansamblul de echipamente de calcul și comunicație sau telecomunicație integrate în sistemul de comandă – control, programe pentru calculator, proceduri de operare și operatori umani, care colaborează pentru conducerea parțială sau în totalitate a procesului, în scopul realizării performanțelor tehnice și economice dorite.

Structură generală a unui sistem informatic cuprinde un ansamblu de intrări, prelucrări și ieșiri definite în funcție de obiectivele sistemului care urmează a fi realizat. Intrările sunt parametrii de referință de comandă și parametrii de stare reală ai funcționării procesului obținuți prin feedback. Ieșirile sunt datele (semnalele) de comandă ale procesului, de memorare a stării procesului și de informare sintetică a operatorilor de proces și factorilor de decizie. Prelucrările sunt asigurate de un ansamblu omogen de proceduri automate care realizează, prin datele de ieșire, comanda și controlul procesului. Baza informațională este formată din ansamblul entităților informaționale și atributelor componente ale acestora, care descriu dinamica proceselor și fenomenelor.

Calculatorul de proces dispune față de calculatorul universal de un sistem de interfață cu ajutorul căruia rezolvă pe lângă problemele de calcul și problemele legate de schimbul de informații (conversie) cu obiectul condus.

Calculatorul de proces trebuie să funcționeze neîntrerupt o mare perioadă de timp, deci trebuie să aibă o fiabilitate și o stabilitate la perturbații ridicată, deoarece orice defecțiune sau întrerupere în funcționare poate produce o avarie în instalație.

O soluție adoptată frecvent este modularitatea sistemelor de conducere cu calculatorul, care constă construcția sistemelor pe baza unei familii de module caracterizate prin autonomie funcțională, universalitate structurală și standardizare constructivă.

Sistemul de interfață (SI) reprezintă un echipament complex format din mai multe module care îndeplinesc diferite funcții specifice: conversie analog/digital (A/D), digital/analog (D/A), intrări binare sau trenuri de impulsuri, ieșiri binare sau trenuri de impulsuri.

Deoarece există o largă varietate de aparate, traductoare sau blocuri de măsură și comandă speciale, realizarea blocurilor componente ale SI devine specifică fiecărei aplicații. Pentru a se putea utiliza un astfel de sistem pentru o gamă largă de aplicații se tinde spre folosirea interfețelor standardizate, simple în utilizare și acceptabile ca preț.

Sistemele de măsură reprezintă o parte integrantă a procesului de dezvoltare a unui produs său proces. În ultimii 20 de ani, sistemele de măsură au cunoscut o schimbare radicală, o adevărată revoluție, care a condus la o nouă arhitectură în care calculatorul are rolul principal.

În urmă cu peste 20 de ani, comunicațiile seriale (RS-232 și GPIB) au permis calculatorului să devină pentru prima dată o parte componentă a sistemelor de măsură. Prin conectarea echipamentelor de măsură direct la calculator s-a putut reduce timpul de lucru și erorile de procesare specifice transferului manual al datelor care erau introduse în calculator pentru analize ulterioare.

Prin utilizarea calculatorului ca un „controler” central pentru toate instrumentele sistemului de măsură s-au putut integra și coordona mai multe instrumente de măsură într-un singur sistem. Pentru aceasta, a fost necesară crearea unei interfețe software care să permită transmiterea comenzilor și primirea răspunsurilor de la instrumentele din sistemul de măsură într-un sistem centralizat bazat pe calculator. Au fost dezvoltate astfel driverele care se instalau ca o parte a sistemului de operare (standardul API = Application Programming Interface – Interfața de Programare a Aplicațiilor).

Progresele realizate în arhitectura sistemelor de calcul (respectiv a magistralelor de transmisie) a permis dezvoltarea echipamentelor de măsură modulare pe care utilizatorii le puteau instala în calculator.

Aceste platforme flexibile și ieftine solicitau însă de la programul sistemului mai mult decât trimiterea comenzilor și primirea răspunsurilor. Interfețele de programare a aplicațiilor de înalt nivel au simplificat procesul de transferare rapidă a datelor de la placa de achiziție în memoria calculatorului. Cu ajutorul algoritmilor de procesare a semnalelor și a instrumentelor software, specialiștii au creat propriile lor rutine de analiză. Programele de interfață cu utilizatorul au fost realizate utilizând reprezentări grafice, butoane și cursoare ale instrumentelor de măsură pe ecranul calculatorului.

Dezvoltarea mediilor specifice de măsurare a condus la dezvoltarea instrumentelor puternic integrate de control și achiziție a datelor, analiză și vizualizare a acestora.

În ultimii ani, inovațiile în domeniul arhitecturii magistralelor de transmisie (de exemplu: PXI/Compact PCI) au permis crearea unor platforme specializate pentru măsurare avansată și control.

În prezent, instrumentele de măsură independente sunt optimizate pentru a putea fi utilizate în sisteme de măsură integrate. Din cauza rapidității cu care evoluează tehnica de măsurare și echipamentele specifice, trebuie redus timpul necesar elaborării sau dezvoltării programelor aferente de testare. Pentru aceasta, specialiștii au ales să utilizeze mai multe limbaje de programare cum ar fi Visual Basic sau Visual C++.

Componenta software joacă un rol vital în dezvoltarea sistemelor automate de achiziție a datelor și control. Este imperativ necesar ca programele utilizate în cadrul unui sistem integrat de măsură să poată fi menținute simplu și modificate rapid.

Un mediu software integrat de măsurare și automatizare trebuie să aibă o structură modulară, necesară pentru construirea sistemelor de măsură și control automate de înaltă performanță.

Pentru a asigura performanțe maxime, dezvoltare ușoară și coordonare a nivelelor sistemului, componentele mediului de lucru trebuie să fie independente (modulare) și puternic integrate în ansamblul sistemului. Această structură modulară integrată permite utilizatorilor construirea rapidă a unui sistem de măsură și modificarea lui simplă atunci când cerințele sistemului se schimbă.

Programele de măsură și control joacă un rol esențial în dezvoltarea sistemelor de măsură modulare bazate pe sistemele de calcul și comunicarea în rețea. Modulele programului, driverele echipamentelor, interfața programelor de aplicație și managerul de configurare trebuie să integreze totul în mediile de dezvoltare ale aplicațiilor pentru a atinge performanța maximă și creșterea productivității.

Mediile de dezvoltare a aplicațiilor joacă un rol important în cadrul programelor de măsurare și automatizare. Cu aceste instrumente, dezvoltatorul sistemului proiectează și integrează sistemul care preia măsurătorile, controlează procesele, afișează informațiile la utilizatorul final, asigură conectarea cu alte aplicații etc.

BIBLIOGRAFIE

BIBLIOGRAFIE

Similar Posts