Aplicatii de Control Folosind Microcontrolerrul Pic
Figuri
Figura 1 – Structura de reglare cu calculator de proces 9
Figura 2 – Schema bloc continuală 9
Figura 3 – Structura unui sistem tipic de achiziție a datelor bazat pe PC 10
Figura 4 – Structura general a unui sistem de conducere 13
Figura 5 – Caracteristica static Y=F(U) 16
Figura 6 – Funcția de transfer ce variază față de un regim staționar remarcat la un moment t0 17
Figura 7 – Dependența intrare-ieșire, în regim staționar, a mărimilor relative 19
Figura 8 – Răspunsul la intrare treaptă al unui element de tip I 20
Figura 9 – Răspunsul la intrări constante pe porțiuni al unui element I 21
Figura 10 – Ecuația de stare 21
Figura 11 – Răspunsul la intrare treaptă al unui element D-real 22
Figura 12 – Caracteristicile Bode 22
Figura 13 – Reprezentarea caracteristicilor Bode la scară logaritmică a unui element PI 23
Figura 14 – Reprezentarea Simulink a unui element PI 23
Figura 15 – Răspunsul la intrare treaptă pentru un element PI 24
Figura 16 – Răspunsul unui element PI la intrări constante pe porțiuni 24
Figura 17 – Structura conexiunii pentru realizarea elementului D-real cu ajutorul unui element I 25
Figura 18 – Structura conexiunii pentru realizarea elementului PD-real 25
Figura 19 – Răspunsul la intrare rampă a unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – sus 26
Figura 20 – Caracteristicile Bode ale unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – sus 26
Figura 21 – Răspunsul la intrare rampă a unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – jos 27
Figura 22 – Caracteristicile Bode ale unui sistem de reglare cu lege PD-real comportându-se ca un filtru trece – jos 27
Figura 23 – Structura unui PID-real realizat prin conexiune paralel dintre un element I și un element PD-real 29
Figura 24 – Răspunsul la intrare treaptă pentru Td < Tγ 30
Figura 25 – Răspunsul la intrare treaptă pentru 30
Figura 26 – Răspunsul dintre componenta I și componenta PD-real pentru Td > Tγ 31
Figura 27 – Structura unui PID-real cu conexiune paralel dintre un element PI și un element D-real 32
Figura 28 – Structura unui element D-real realizat cu ajutorul unui element I 33
Figura 29 – Sistem numeric de reglare automată 34
Figura 30 – Sistemul numeric de reglare convențională 37
Figura 31 – Reglarea temperaturii 44
Figura 32 – Reglarea debitului de aer 45
Figura 33 – Instalația de control a proceselor de temperatură și debit 46
Figura 34 – Potențiometre pentru calibrarea temperaturii 47
Figura 35 – Potențiometre pentru calibrarea traductorului de debit 48
Figura 36 – Conducerea în bucla închisa a proceselor de debit ale instalației 49
Figura 37 – Un model simplificat de unitate de memorie 51
Figura 38 – Unitate simplificată de procesare centrală cu trei regiștri 52
Figura 39 – Conectarea memoriei și a unității centrale folosind bus-uri 53
Figura 40 – Unități simplificate intrare-ieșire ce permite comunicarea cu lumea externă 53
Figura 41 – Comunicație serială 54
Figura 42 – Unitatea timer 55
Figura 43 – Watchdog 56
Figura 44 – Bloc pentru convertirea unui semnal analogic într-o dimensiune digitală 56
Figura 45 – Secțiunea centrală a microcontroller-ului 56
Figura 46 – Placa de dezvoltare PICDEM™ PIC18 Explorer 61
Figura 47 – Programatorul/debugger-ul PICkit 3 62
Figura 48 – Interfața grafică a programului MPLAB IDE 63
Figura 49 – Fișierele unui proiect embedded 64
Figura 50 – Compilatorul 65
Figura 51 – Comunicția SPI 68
Figura 52 – Microcontrollerul comunică cu circuitul MCP23S17 prin intermediul pinilor RA2, RC4 și RC5 71
Figura 53 – Principiul conversiei analog numerice 75
Figura 54 – Modulul PWM 79
Figura 55 – Sistemul continuu 82
Figura 56 – Determinarea parametrilor funcției de transfer pe baza răspunsului sistemului la intrare treaptă 83
Figura 57 – Controlul instalației LabVolt în blucă închisă 84
Figura 58 – Controlul în buclă deschisă 84
Figura 59 – Controlul în buclă închisă 85
Figura 60 – Program Simulink pentru conducerea procesului folosind metoda dead-beat 86
Figura 61 – Programul MPLAB 88
Figura 62 – Deschiderea unui proiect nou folosind MPLAB 88
Figura 63 – Fișierele unui proiect 89
Figura 64 – Selectarea microcontroller-ului PIC18F8722 90
Figura 65 – Selectarea compilatorului 90
Figura 66 – Spațiul de lucru 91
Figura 67 – Selectarea sursei fișierului creat din directorul salvat anterior 91
Figura 68 – Adăugarea fișierului creat în sursa proiectului 92
Figura 69 – Semnal de comandă PWM 96
Figura 70 – Vizualizarea variabilelor procesului pe afișajul alphanumeric LCD 98
Figura 71 – Lansarea în execuție a programului 98
Figura 72 – Instalația experimentală LabVolt 3522-05 99
Figura 73 – Conexiunea între placa PICDEM PIC18 și progrmatorul PICkit 3 99
Figura 74 – Un PC dotat cu o placă de achiziție și un SOFT specializat (cum este limbajul de programare Matlab, sau soft-ul specializat de timp real WINCON) 100
Figura 75 – Conexiuni pe placa de dezvoltare 100
Figura 76 – Răspunsul sistemului la intrare treaptă (lege de reglare de tip PI) 101
Figura 77 – Răspunsul sistemului la intrare treaptă (lege de reglare de tip PID) 102
Figura 78 – Vizualizarea variabilelor procesului pe afișajul alphanumeric LCD (metoda DB) 108
Figura 79 – Instalația experimentală LabVolt 3522-05 (metoda DB) 109
Figura 80 – Conexiunea între placa PICDEM PIC18 și progrmatorul PICkit 3 (Metoda DB) 109
Figura 81 – Placa de aciziție Quanser Q4 (metoda DB) 110
Figura 82 – Conexiuni pe placa de dezvoltare (metoda DB) 110
Figura 83 – Răspunsul la intrare treaptă al sistemului, folosind metoda dead-beat de reglare 111
Figura 84 – Detaliu răspuns (metoda DB) 112
Tabele
Tabelul 1 – Registrul SSP1CON1 este registrul de control al modulului MSSP1 68
Tabelul 2 – SSP1STAT provine de la “Synchronous Serial Port STATus” și furnizează o serie de biți necesari pentru controlul comunicației SPI 69
Tabelul 3 – Registrul ADCON0 72
Tabelul 4 – Registul ADCON1 73
Tabelul 5 – Configurarea biților de voltaj 73
Tabelul 6 – Configurarea biților pentru controlul A/D 73
Tabelul 7 – Registrul ADCON2 74
Tabelul 8 – Registrul CCPxCON 77
Tabelul 9 – Parametrii de acordare 83
Tabelul 10 – Variabilele funcției de trasfer 95
Tabelul 11 – Conexiuni realizate în proiect 99
Tabelul 12 – Variabilele funcției de trasfer (metoda DB) 105
Tabelul 13 – Conexiuni realizate în proiect (metoda DB) 108
INTRODUCERE
În lucrarea de diplomă cu titlul: “Aplicații de control folosind microcontroller-ul PIC” 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ă 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.
Domeniul conducerii de procese industriale și al automatizărilor industriale beneficiază din plin de evoluția extraordinară a tehnicii de calcul actuale, prin implementarea de sisteme de măsură și control performante, având drept componență centrală microcontrolere sau calculatoare personale.
Prin utilizarea PC-uri în cadrul acestor sisteme se beneficiază de toate resursele de calcul disponibile ale acestuia, cum ar fi puterea de calcul impresionantă, posibilitatea stocării și reprezentării datelor, precum și flexibilitatea deosebită în reconfigurarea sistemului și adăugarea de noi funcții. Utilizarea programelor dedicate achiziției și procesării datelor, care devin din ce în ce mai puternice și performante, fac din PC soluția optimă pentru astfel de aplicații industriale.
Pachetul MATLAB/Simulink dezvoltat de firma MathWorks a revoluționat modul de realizare a aplicațiilor cu specific industrial prin abordarea unui mod simplu și eficient de programare ce acoperă o gamă largă de aplicații industriale și de cerectare. Suportul hardware oferit de firma Quanser, împreună cu bibliotecile disponibile ce cuprind funcții pentru comunicație, fac ca acest mediu de programare să reprezinte o soluție simplă și viabilă pentru aplicații de măsurare și control industrial precum și pentru monitorizarea și controlul la distanță.
În procesul de măsurare mărimile de măsurat sunt transformate în mărimi intermediare, care sunt transmise la distanță, de la locul unde se face măsurarea până la locul de procesare a informațiilor. La recepție se face conversia inversă, din mărimea intermediară în mărimea inițială.
În această lucrare sunt tratate aspecte legate de metodologia clasică de proiectare a sistemelor pentru controlul parametrilor tehnologici din automatizările industriale. În particular, interfața cu mediul extern are o importanță esențială în cadrul sistemelor informatice industriale, referindu-ne aici în special la sistemele de conducere cu calculatorul a proceselor.
În domeniul automaticii, interfețele de proces se mai numesc generic plăci de achiziție, nume datorat faptului că prin intermediul interfeței de proces se realizează și achiziția de date. Trebuie precizat faptul că interfața de proces are nu numai funcția de achiziție ci și funcția de prelucrare și transmitere către exterior a semnalelor generate de calculator. Plăcile de achiziție fac parte din categoria generală a plăcilor de extensie (denumite și plăci utilizator).
Prin completarea configurației unui calculator (de regulă un calculator personal – PC) cu elemente din categoria interfețelor de proces (plăci de achiziție) și cu software specializat se obține un sistem de achiziție a datelor (trebuie precizat că noțiunea de sistem de achiziție este ceva mai generală, fiind incluse aici și alte sisteme numerice de achiziție care nu se bazează pe PC). Datorită existenței funcțiilor de conducere, o denumire mai apropiată de realitate este cea de sistem de achiziție și conducere.
Invazia calculatoarelor personale care sunt concepute ca mijloace deschise, ușor de completat cu plăci de achiziție de date, a permis, pe de o parte, extinderea categoriilor de utilizatori de programe și, pe de altă parte, realizarea de stații de lucru pentru analiza, proiectarea, dezvoltarea și implementarea diferiților algoritmi de comandă și reglare dedicați proceselor reale.
Identificarea este operația de selecție și determinare a unui model dinamic corespunzător unui proces, plecând de la date de intrare/ieșire măsurate. Un PC dotat cu o placă de achiziție și un SOFT specializat (cum este limbajul de programare Matlab, sau soft-ul specializat de timp real WINCON) permite realizarea acestei operații. Identificarea constituie elementul cheie în realizarea unei reglări performante și în reducerea timpului de elaborare a comenzii.
O dată modelul procesului determinat poate fi foarte ușor calculat un regulator corespunzător (sau adaptarea unui regulator cu structură dată) și testarea acestuia prin simulare în timp real pe proces.
Identificarea unui proces necesită, în principiu, patru etape principale:
– verificarea existenței unei clase de modele sistemice;
– achiziția datelor de intrare-ieșire și alegerea tipului de semnal de comandă;
– determinarea parametrilor modelului optim;
– validarea modelului estimat.
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 sunt prezentate concepte generale despre proiectarea regulatoarelor după metoda Dead-Beat clasică.
În capitolul III 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 IV 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 V este rezultatului experimental, funcționarea instalației și a regulatorului implementat software pe microcontroller-ul PIC18F8722 și obținerea graficelor a răspunsului la intrare treaptă al sistemului, folosind legile de reglare tipizate și metoda dead-beat de reglare cu ajutorului unui PC dotat cu o placă de achiziție și un soft specializat WinCon rulat prin limbajul de programare Matlab/Simulink.
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 numit 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
Tγ = 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 Tγ = 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 < Tγ și Figura 25 pentru Td > Tγ.
Figura 24 – Răspunsul la intrare treaptă pentru Td < Tγ
Figura 25 – Răspunsul la intrare treaptă pentru
Td > Tγ.
Pentru determinarea valorilor parametrilor KR, Ti, Td, Tγ 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 > Tγ) 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 > Tγ
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
2. Controlul folosind legi de reglare numerice
2.1. Reprezentarea sistemică a unui SNRA
Un sistem numeric de reglare automată (SNRA) este un sistem de reglare în care dispozitivul de conducere este implementat printr-un echipament numeric. Un sistem numeric de reglare automata este denumit și sistem de conducere cu calculator de process.
Un calculator de proces este un calculator capabil să lucreze în timp real. Este un calculator cu interfețe de intrare și de ieșire analogice și numerice având un sistem de operare în timp real capabil să realizeze achiziții de date, calcule ale comenzilor în timp real.
Figura 29 – Sistem numeric de reglare automată
Putem privi un calculator de proces ca o cutie neagră având câteva terminale analogice. Schema de principiu a unui sistem numeric de reglare automata este redată în figura de mai jos.
Terminalele etichetate sunt porturile analogice ale calculatorului. De exemplu, așa cum se arată în Figură 29, pentru acest sistem de reglare, sunt utilizate două semnale de intrare analogice, porturile 5 și 6 și un semnal analogic de ieșire la portul 10. La aceste porturi sunt conectate:
Mărimea prescrisă, v(t), numită și ”referință”
Mărimea măsurată, y(t), numită și ”mărime de reacție”
Mărimea de comandă, u(t), numită și ”mărime de execuție”.
Instalația reglată conține elementul de execuție, instalația tehnologică și traductorul, care împreună formează partea fixă a sistemului de reglare.
Prin două convertoare analog-numerice se convertesc mărimile de intrare v(t), y(t), care sunt funcții continuale de timp, în șiruri de numere cu și unde este factorul de conversie analog-numerică.
Se utilizează același argument de timp k sau kT pentru toate variabilele, considerând că achizițiile sistemului și toate calculele numerice se fac foarte repede și toate se execută exact la momentul t = kT.
2.1.1. Modelul discret al părții fixe. Funcția de transfer G(z)
Funcția de transfer G(z) a părții fixe reprezintă de fapt modelul matematic discret al unui sistem liniar invariant în timp cu funcția de transfer a cărui intrare este o funcție constantă pe porțiuni u(t) obținută la ieșirea CNA prevăzut cu extrapolator de ordin zero.
În continuare se urmărește demonstrarea formulei
Pentru cazul particular al intrărilor constante pe porțiuni relația (2.1) duce la un model discret exact. Există mai multe metode de demonstrare a relației (2.1), ca de exemplu utilizarea teoriei sistemelor cu eșantionare, utilizarea răspunsului ecuațiilor de stare, etc. În cazul de față, pentru demonstrațîe, se exploatează forma particulară a intrării u(t) care se exprimă ca o sumă de semnale dreptunghiulare:
unde prin se notează semnalul treaptă unitate continuu la stânga:
a cărui transformată Laplace este:
Dacă șirul de numere admite transformată Z,
atunci seria (2.2) este uniform convergentĂ pentru t ≥ 0, și există transformata Laplace
în care se poate schimba ordinea de însumare cu cea de integrare a operatorului L{•}, asfel că se scrie:
Ținând cont de relația (2.5) se obține
unde
este o funcție periodică cu perioada
Răspunsul sistemului continuu în domeniul s este
deci putem scrie
Transformata Z a răspunsului este
deoarece este o funcție periodică cu perioada .
Deoarece substituția în relația (2.8) conduce la
și
relația (2.9) devine
de unde
2.2 Controlul SNR folosind metoda Dead-Beat clasică
2.2.1 Formularea problemei
Se consideră sistemul numeric de reglare convențională, reprezentat în figura 30:
Figura 30 – Sistemul numeric de reglare convențională
unde:
Sinteza după metoda dead-beat clasică presupune determinarea funcției de transfer Z a legii de reglare astfel încât să fie îndeplinite următoarele performanțe, definite în momentele de eșantionare, pe răspunsul la intrare treaptă unitate a mărimii impuse:
Durată finită a regimului tranzitoriu:
∃ m finit, , ∀k ≥ m (2.14)
Eroare staționară nulă
Mărimea de comandă rămâne constantă la atingerea noului regim staționar:
Timp minim de răspuns, exprimat prin valoarea minima a pasului m la care se atinge noul regim staționar
2.2.2 Algoritmul dead-beat classic pentru sisteme fără timp mort
Se consideră forma discrete a părții fixe ca fiind o rațională strict proprie de forma:
unde
Faptul ca G(z) este strict proprie, implică și deci adică valoarea răspunsului la pasul initial k=0 este nulă. Știind acestea și tinând cont de relația (2.15), transformata Z a răspunsului trebuie să fie de forma:
Termenul din paranteză este o serie geometrică cu rația , convergentă pentru |z|>1, astfel că pentru Y(z) se obține:
În același mod se exprimă și transformata Z a mărimii de comandă:
Dacă referința are o variație treaptă unitate, atunci, și funcția de transfer în circuit închis este:
Se vede că se poate exprima prin unde este un polinom în ai cărui coeficienți , 1≤ k ≤ m, se obțin prin identificare cu cei din (2.23) și sunt dați de:
Prin însumarea relațiilor (2.24) se obține:
Se stie că, eroarea staționară de poziție în momentele de eșantionare este dată de:
În același mod se exprimă și funcția de transfer dintre mărimea de comandă și referință, numită pe scurt funcție de transfer de comandă:
Care prin identificare duce la , unde este un polinom în de forma
cu:
Prin însumarea relațiilor (2.28) se obține:
Din prima relație (2.28) rezultă că prima comandă aplicată de legea de reglare, după variația treaptă unitate este .
Așa cum se vede din Figură 30, funția de transfer a părții fixe G(z) este
Ținând cont de () și considerând numai efectul mărimii impuse, adică , pentru mărimea de comandă avem:
Substituind aceste ultime două relații în (78) se obține:
Se cunoaște faptul că factorul de amplificare de poziție al părții fixe în momentele de eșantionare este:
unde se reamintește că și reprezintă valorile în momentele de timp t = kT ale mărimilor și , care exprimă variațiile mărimilor fizice și respectiv față de anumite valori în regim staționar , .
Ieșirea din partea fixă și deci intrarea în CAN, notată , este o funcție oarecare de timp cu o reprezentare în variații, față de o valoare :
Aceasta determina la ieșirea din CAN, deci la intrarea în legea de reglare, un șir de numere a cărui reprezentare în variații este:
Ieșirea din CNA și deci intrarea în partea fixă, notată , este o funcție de timp constantă pe porțiuni (în ipoteza utilizării unui extrapolator de ordin zero la CNA) a cărei reprezentare în variații, față de o valoare , este:
Expresia în timp a acestei variabile în variații este:
Algoritmul numeric de conducere, implementat prin program, generează de fapt un șir de numere exprimat la ieșirea CNA printr-o variabilă . Această variabilă este reprezentată în variații față de o valoare de bias echivalentă la ieșirea CNA, , prin șirul , definit prin
Faptul că intervalul de timp din (85) este închis la dreapta, asigură pentru t = kT, valorile
În cazul de față, ținând cont de (80),
Ultima valoare a mărimii de comandă aplicată de legea de reglare este deci,
Din () și () obținem identitatea
adică
Aceasta conduce la:
În particular, pentru z=1 și ținând cont că P(1) = 1, relația (2.43) conduce la:
pentru structura din Figură 30 se calculează
în care, dacă se substituie () și (2.22) se obține
Ținând cont de () rezultă
Deci legea de reglare obținută prin metoda dead-beat clasică pentru sisteme fără timp mort este:
Prima comandă aplicatpă este
iIar ultima comandă aplicată la ieșire de către legea de reglare este:
Algoritmul numeric de conducere automată implementat este:
2.2.3. Comportarea în circuit închis
Funcția de transfer în circuit închis realizată de acest sistem este
sau
sau
unde
Se observă că se asigură o comportare în circuit închis care depinde numai de numărătorul funcției G(z).
De asemenea, sistemul are în circuit închis m poli în originea planului complex z și realizează o medie alunecătoare, întârziată cu un pas, pe ultimele m valori ale mărimii prescrise.
Un sistem de tip medie alunecătoare este denumit și sistem discret cu răspuns la impuls infinit. Această comportare este asigurată numai dacă comenzile nu depășesc anumite valori limită care mențin valabilă descrierea prin metode liniare.
Dacă mărimea impusă este un semnal treaptă, comportarea în circuit închis este cea impusă prin condițiile (2.13), (2.14), (2.15).
Pentru oricare alte intrări, răspunsul atinge o valoare de regim staționar egală cu valoarea constantă a mărimii impuse (dacă mărimea impusă rămâne constantă m perioade de eșantionare), deci se asigură eroare staționară de poziție nulă pentru oricare formă de variație a mărimii impuse, dacă aceasta se menține la o valoare constantă m perioade de eșantionare.
De asemenea, se observă că dacă toți coeficienții , au același semn, atunci răspunsul sistemului în circuit închis este monoton, dacă, în plus, valorile mărimii impuse păstrează același semn cel puțin m pași.
2.2.4. Evoluția în circuit închis a mărimii de comandă
Din (2.26) și (2.43) rezultă că funcția de transfer de comandă este
sau
cu
Din (2.31) și (2.56) rezultă că:
sau
de unde se obține că
care, în domeniul timp, reprezintă media alunecătoare de m pași, începând cu pasul curent.
Pentru intrare treaptă unitate, din (2.28) sau (2.58) se obține succesiunea comenzilor aplicate de către legea de reglare, dată de:
unde: înseamnă prima comandă aplicată, înseamnă a doua comandă aplicată, … înseamnă ultima comandă aplicată, dar mărimea impusă are o variație treaptă unitate aplicată la momentul k = 0 și sistemul se află în regim staționar cu starea nulă.
Această comportare este asigurată numai dacă comenzile nu depășesc anumite valori limită care mențin valabilă descrierea prin modele liniare.
3. 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 31
Figura 31 – 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 32 .
Figura 32 – 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 33 – 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 33, 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 34 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 34 – 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 35.
Figura 35 – 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 36 – Conducerea în bucla închisa a proceselor de debit ale instalației
Figura 36 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 38 – 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 39 – 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 40 – 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 41 – 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 42 – 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 43 – 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 44 – Bloc pentru convertirea unui semnal analogic într-o dimensiune digitală
Figura 45 – 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 46):
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 46 – 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 47 – 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 48 – 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 49 – 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 50 – 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 51 – 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 modul „Master”:
1 = Date de intrare eșantionate după finalul timpului pentru datele de ieșire
0 = Date de intrare eșantionate la jumătatea timpului pentru datele de ieșire
SPI modul „Salve”:
SMP trebuie șters când SPI este folosit în modul „Salve”.
bit 6 CKE: SPI bit de selectarea al ceasului
1 = Transmite transferul din starea activă la starea de așteptare a ceasului
0 = Transmite transferul din starea de așteptare la starea activă a ceasului
bit 5 D/A: bit de Date/Adresă
Folosit doar în modul I2C
bit 4 P: bit de stop
Folosit doar în modul I2C. Acest bit este șters când modulul MSSPx este dezactivat, SSPEM este șters.
bit 3 S: bit de start
Folosit doar în modul I2C
bit 2 R/W: bit de citire/scriere a informației
Folosit doar în modul I2C
bit 1 UA: bitul de actualizare a adresei
Folosit doar în modul I2C
bit 0 BF: bit pentru starea plină a bufferului (rezervei) (numai în modul de primire)
1 = Primire completă, SSPxBUF este plin
0 = Primire incompletă, SSPxBUF este gol
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 52 – 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 Neimplementat: Citi ca ‘0’
bit 5-2 CHS<3:0> bitul de selecție al canalului analogic
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: bit de conversie A/D a stării
Când ADON = 1:
1 = conversia A/D în proces
0 = A/D în așteptare
bit 0 ADON: A/D On bit
1 = modulul de conversie A/D este activ
0 = modulul de conversie A/D este dezactivat
Registrul ADCON1 configurează pinii porturilor utilizate pentru conversia A/D.
Tabelul 4 – Registul ADCON1
bit 7-6 Neimplementat : Citit ca ‘0’
bit 5-4 VCFG<1:0>: bit de configurare a referinței voltajului
Tabelul 5 – Configurarea biților de voltaj
bit 3-0 PCFG<3:0>: bit de configurare pentru portul de control A/D:
Tabelul 6 – Configurarea biților pentru controlul A/D
A = Analog input D = Digital I/O
Tabelul 7 – Registrul ADCON2
bit 7 ADFM: bit pentru selectarea formatul rezultatului A/D
1 = Aliniere la dreapta
0 = Aliniere la stânga
bit 6 Neimplementat: Citit ca ‘0’
bit 5-3 ACQT<2:0>: biți de selecție a timpului de activare A/D
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>: biți de selectare a ceasului de conversie A/D
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 53 – 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 54 – 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 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
software pentru masurarea in timp real: Configuratia WinCon-Simulink-RTX
placa de achizitie Quanser Q4
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;
terminalul placii de achizitie;
Implementarea numerică a legilor de reglare
O funcție de transfer este o reprezentare matematică a relației dintre intrarea și ieșirea a unui sistem liniar invariant în timp.
Funcția de transfer este folosită în mod curent în analiza de filtre electronice cu unică intrare și unică ieșire. De asemenea, este folosită în procesarea semnalelor, teoria comunicațiilor și teoria controlului. Termenul de funcție de transfer se referă la un sistem liniar invariant în timp dar, majoritatea sistemelor reale au proprietăți neliniare, totuși asemenea sisteme se pot liniariza.
Figura 55 – Sistemul continuu
Pentru cea mai simplă formă timp continual al unui semnal de intrare x(t) și al unuia de ieșire y(t), funcția de transfer este o aplicație liniară prin transformata Laplace a intrării notată
(4.1)
la ieșirea notată
(4.2)
Avem
(4.3)
unde s = σ + jω și H(s) este funcția de transfer a sistemului liniar invariant în timp.
Putem scrie așadar: Y(s) = H(s) X(s).
Imposibilitatea identificării complete a modelului matematic al procesului conduce la utilizarea în practica acordării regulatoarelor a unor modele aproximative. Astfel, procesele, de obicei de ordin superior, dar care au un raspuns indicial aperiodic, se pot aproxima prin funcții de transfer de tipul:
(4.4)
care pune în evidență un element de întârziere cu timp mort τ având factorul de amplificare KF și constanta de timp TF. Această aproximare este făcută pe baza răspunsului indicial reprezentat în Figura 56.
Parametrii acestei funcții de transfer se determină folosind următoarele relații:
unde t1 și t2 sunt două puncte pe axa timpului.
Figura 56 – Determinarea parametrilor funcției de transfer pe baza răspunsului sistemului la intrare treaptă
Acordarea regulatoarelor se realizează după metoda Oppelt.
Tabelul 9 – Parametrii de acordare
În realizarea procesului de reglare a debitului se folosește ceasul de timp real pentru a genera o întrerupere. Acesta reprezintă și timpul de eșantionare (notat cu T). 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 57 – Controlul instalației LabVolt în blucă închisă
Va fi implementat un regulator pentru reglarea debitului de aer, iar acesta va funcționa o dată cu legea de reglare PI și a doua oară cu legea de reglare PID. Debitul va depinde de gradul de încălzire al rezistenței.
Folosind controlul sistemului în buclă deschisă, procesul este controlat pe modificând direct mărimea de comandă u(t). Valoarea actuală a variabilei controlate nu este luată în considerare. Dacă perturbațiile fac ca variabilă controlată să devieze de la valoarea cerută, nu este luată nicio contramăsură să corecteze această deviație. Acest tip de sistem, așadar, este utilizat în aplicațiile unde cerințele pentru controlul variabilei nu sunt critice.
Figura 58 – Controlul în buclă deschisă
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.
Figura 59 – Controlul în buclă închisă
Instalația de control a proceselor de debit de aer Lab-Volt permite controlul debitului de aer în blucă închisă. Mai mult, temperatura procesului poate fi controlată fie în modul “încălzire” fie în modul “răcire”.
Instalația constă dintr-un tub ce permite trecerea aerului, un ventilator utilizat pentru circularea aerului, un amortizor utilizat pentru modificarea sarcinii sau generarea perturbațiilor, un element de încălzire și traductoare de debit.
Implementarea numerică a metodei Deab-Beat
Este o metodă specifică sistemelor discrete fără echivalent în sistemele continue, elementul central fiind fixarea răspunsului dorit la un semnal de referință dat (de regulă o treaptă sau rampă unitară discretă). Această metodă are caracter de generalitate înglobând metoda timpului minim(dead-beat).
Problematica proiectării directe în domeniul timp are în vedere următoarele aspecte:
1) Transpunerea performanțelor staționare și tranzitorii impuse proiectării, într-un răspuns la referința dată.
2) Aprecierea răspunsului sistemului obținut la perturbații și îmbunătățirea acestora prin modificări permise în răspunsul la referință; eventual luarea deciziei de adoptare a unui algoritm de reglare cu structură variabilă.
3) Studiul și îmbunătățirea evoluției comenzii, are ca scop: reducerea consumului de energie pentru reglare, micșorarea solicitărilor la care este supus (elementul de execuție), dar și îmbunătățirea evoluției răspunsului între momentele de eșantionare.
4) Evoluția răspunsului între momentele de eșantionare.
5) Asigurarea condiției de cauzalitate a sistemului și respectarea restricțiilor de realizabilitate.
Problemele se pot trata ținând cont de interdependența dintre ele.
– timp de răspuns mic comenzi mari (consum mare de energie de către elementul de execuție).
– suprareglaj nul înrăutățirea răspunsurilor la perturbații.
Ținând cont că funcția de transfer a elementului de reținere este în cazul unui extrapolator cardinal și că este inclus fizic în interfața numeric – analogic, funcția de transfer a părții fixate HF este:
.
unde include funcțiile de transfer ale elementului de execuție, instalației tehnologice și a traductorului.
Pentru proiectarea unui regulator numeric ne este necesară funcția de transfer în z a părții fixate care se poate scrie sub forma:
După ce am determinat această funcție de transfer, putem realiza programul Simulink, program ce este prezentat în Figura 60:
Figura 60 – Program Simulink pentru conducerea procesului folosind metoda dead-beat
Algoritmul de sinteză a unui regulator numeric prin proiectare directă în domeniul timp urmărește următoarele șase etape:
Etapa I: Stabilirea răspunsului la un semnal de referință dat, de regulă treaptă unitară discretă, pornind de la performanțele impuse și de la asigurarea condiției de cauzalitate (timp mort).
Etapa II: Avându-se în vedere răspunsul dorit al sistemului și semnalul de intrare sub formă de treaptă se poate determina funcția de transfer dorită pentru sistemul în buclă închisă.
Etapa III: Eliminarea influenței nefavorabile a zerourilor funcției de transfer a părții fixate.
Partea fixată poate fi uneori un sistem de fază neminimă având un zerou în afara cercului unitar. Zeroul din afara cercului unitar devine pol în afara cercului unitar în regulator. Regulatorul devine instabil și comanda crește nedefinit. Este deci necesar să se elimine din regulator polii instabili cât și polii din semicercul stâng situați aproape de cercul unitar. În acest fel se poate obține un răspuns convenabil pentru sistemul închis cu o evoluție convenabilă a comenzii.
Etapa IV: Determinarea funcției de transfer a regulatorului și ecuația recursivă.
Etapa V: Verificarea obținerii răspunsului dorit la semnalul de referință treaptă prin simularea funcționării în buclă închisă pe baza:
• ecuației recursive a regulatorului numeric.
• ecuației recursive a părții fixate.
Tot în etapa V se poate verifica evoluția ieșirii între momentele de eșantionare.
Etapa VI: Verificarea răspunsului la perturbații aplicate la intrarea ansamblului parții fixate, la ieșirea acestuia sau într-un punct intermediar.
Dacă răspunsul nu este satisfăcător, există posibilitățile:
– revenirea la prima etapă
– efectuarea unei proiectări în raport cu perturbațiile și adoptarea unei structuri variabile.
Modul de lucru
Se urmărește utilizarea microcontroller-ului PIC 18F8722 ca regulator pentru reglarea debitului 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 61 – 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 62 – Deschiderea unui proiect nou folosind MPLAB
Pe ecran va apare următoarea fereastră (selectați din meniul View opțiunea Project).
Figura 63 – 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 64 – 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 65 – Selectarea compilatorului
Pentru scrierea programului sursă se deschide un fișier nou din meniul File–>New.
Figura 66 – 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 67 – Selectarea sursei fișierului creat din directorul salvat anterior
Figura 68 – Adăugarea fișierului creat în sursa proiectului
Realizarea unui program de reglare utilizând anumite legi tipizate de reglare automată
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 10.
Tabelul 10 – 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 69 – Semnal de comandă 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 70 – Vizualizarea variabilelor procesului pe afișajul alphanumeric LCD
Figura 71 – 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 PC dotat cu o placă de achiziție și un SOFT specializat (cum este limbajul de programare Matlab, sau soft-ul specializat de timp real WINCON) pentru a putea vizualiza grafic reglarea ventilatorului și modificarea factorului de umplere prin canalele de modulare în durată de impulsuri, pe display-ul calculatorului graficele obținute în timplu executării reglării automate a debitului de aer.
Conexiunile au fost realizare ca în Tabelul 11:
Tabelul 11 – Conexiuni realizate în proiect
Figura 72 – Instalația experimentală LabVolt 3522-05
Figura 73 – Conexiunea între placa PICDEM PIC18 și progrmatorul PICkit 3
Figura 74 – Un PC dotat cu o placă de achiziție și un SOFT specializat (cum este limbajul de programare Matlab, sau soft-ul specializat de timp real WINCON)
Figura 75 – Conexiuni pe placa de dezvoltare
Lansarea în execuție
Pentru reglarea debitului de aer s-a scris programul în MPLAB atașat la finalul lucrării în Anexa 1. Acest program pune împreună tot ce a fost scris până acum în subcapitolul 5.4.1. despre programarea microcontroler-ului pentru reglarea debitului de aer. S-au folosit accesoriile prezentate la subsubcapitolul 5.4.1.1. și s-au realizat conexiunile cu instalația.
Parametrii regulatorului PI pentru reglarea debitului de aer 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ă când debitul 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ă debitul pe loc.
Pentru regulatorul PI am obținut cu ajutorul plăcii de achiziție conectată la un PC sub controlul softului de timp real WinCon , care lucrează cu Matlab/Simulink sub Windows, pentru a citi graficul de pe display-ul calculatorului obținut în timpul executării reglării automate a debitului de aer.
Figura 76 – Răspunsul sistemului la intrare treaptă (lege de reglare de tip PI)
Parametrii regulatorului PID pentru reglarea debitului de aer 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ă când debitul se stabilizează. Pe măsură ce eroare se micșorează rezulatorul începe să scadă comanda până va găsi o comandă care să țină debitul de aer pe loc.
Figura 77 – Răspunsul sistemului la intrare treaptă (lege de reglare de tip PID)
Realizarea unui program de reglare folosind metoda Dead-Beat
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, Uk, Uk1=0, ek1=0, ek;
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 metodei Dead-Beat.
// Metodei Dead-Beat
Uk=Uk1 + 18.4*ek -17.2* ek1; // funția de transfer
Variabilele folosite la calculul comenzii sunt cele din Tabelul 12.
Tabelul 12 – Variabilele funcției de trasfer (metoda DB)
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ă metoda Dead-Beat.
// Calculul eroarii sistemului
ek=ref – Y;
Valorile erorii și comenzii de la pașii anteriori vor fi memorate în variabilele Uk1, ek1. După calculul comenzii valorile acestor variabile vor fi reactualizate:
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.
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 78 – Vizualizarea variabilelor procesului pe afișajul alphanumeric LCD (metoda DB)
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. Folosim un PC dotat cu o placă de achiziție și un SOFT specializat (cum este limbajul de programare Matlab, sau soft-ul specializat de timp real WINCON) pentru a putea vizualiza grafic reglarea ventilatorului și modificarea factorului de umplere prin canalele de modulare în durată de impulsuri, pe display-ul calculatorului graficele obținute în timplu executării reglării automate a debitului de aer.
Conexiunile au fost realizare ca în Tabelul 13:
Tabelul 13 – Conexiuni realizate în proiect (metoda DB)
Figura 79 – Instalația experimentală LabVolt 3522-05 (metoda DB)
Figura 80 – Conexiunea între placa PICDEM PIC18 și progrmatorul PICkit 3 (Metoda DB)
Figura 81 – Placa de aciziție Quanser Q4 (metoda DB)
Figura 82 – Conexiuni pe placa de dezvoltare (metoda DB)
Lansarea în execuție
Pentru reglarea debitului de aer s-a scris programul în MPLAB atașat la finalul lucrări în Anexa 2. Acest program pune împreună tot ce a fost scris până acum în subcapitolul 5.3.2 despre programarea microcontroler-ului pentru reglarea debitului de aer. S-au folosit accesoriile prezentate la subcapitolul 5.3.2.1. și s-au realizat conexiunile cu instalația.
Controlul sistemului folosind legi de reglare numerice a fost prezentat mai sus, în care a fost definit sistemul numeric de reglare și modul în care acesta funcționează, dar în acest subcapitol voi prezenta o metodă deosebit de importantă în proiectarea sistemelor numerice de reglare automată, precum metoda Dead-Beat clasică.
În cazul proiectării regulatorului folosind metoda Dead-Beat clasică, va fi prezentat algoritmul pentru sisteme fără timp mort, comportarea în circuit închis precum și evoluția în circuit închis a mărimii de comandă..
Pentru acest program se obține următorul răspuns la intrare de tip treaptă:
Figura 83 – Răspunsul la intrare treaptă al sistemului, folosind metoda dead-beat de reglare
Pentru a observa mai exact răspunsul sistemului vom alege arbitrar o porțiune din grafic pe care o vom mări suficient încât să se poată observa clar răspunsul sistemului folosind metoda dead-beat clasică. Acest răspuns va fi prezentat în Figura 84.
Figura 84 – Detaliu răspuns (metoda DB)
Din acest grafic observăm eroarea staționară de poziție nulă, deci sistemul este extrem de precis, însă, prezintă un suprareglaj deosebit de mare (aproape de 60%).
CONCLUZII
Consider conducerea proceselor cu ajutorul microcontrollere-lor 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.
Majoritatea echipamentelor numerice de reglare automată și chiar circuitele integrate de tip microcontroller, 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.
Identificarea sistemelor constituie o etapă absolut obligatorie în proiectarea sistemelor moderne de conducere automată a proceselor. Realizarea de sisteme automate cu performanțe deosebite, pentru procese complexe presupune cunoașterea suficient de precisă a modelelor sistemice asociate proceselor conduse. În multe situații practice, proiectanții nu pot oferi automatistului modele analitice ale proceselor industriale. Sarcina determinării acestor modele sistemice revine inginerului automatist.
Modernizarea proceselor industriale s-a accentuat puternic în condițiile dezvoltării teoriei identificării experimentale a sistemelor și a tehnologiei calculatoarelor de proces. Dezvoltarea extraordinară a microprocesoarelor a provocat schimbări importante în proiectarea sistemelor de comandă și reglare. Puterea lor de calcul și costul scăzut le fac să preia integral sarcina comenzii și reglării cu performanțe net superioare față de cazul în care s-ar utiliza regulatoare analogice.
Pentru a beneficia integral de această capabilitate a microprocesoarelor, nu este suficientă doar reproducerea funcționării regulatoarelor analogice clasice de tip PID, ci trebuie implementate tehnici de automatică specifice și mai ales performante, dezvoltate în mod special pentru comanda proceselor cu ajutorul calculatorului. De altfel, aceste tehnici au fost intens testate în mediul industrial, in ultimii 15-20 de ani.
Lucrarea „Aplicații de control folosind microcontroller-ul PIC” face o trecere în revistă a principalelor metode practice de acordare a regulatoarelor de tip PID, dar este dedicat și aplicațiilor de control numerice a instalației experimentale LabVolt prin metoda Dead-Beat clasică. Performanțele obținute sunt analizate folosind datele experimentale la răspunsul sistemelor la intrare de tip treaptă.
Sistemul prezentat în lucrare reprezintă o soluție performantă pentru realizarea monitorizării și controlului proceselor industriale. Instalația este relativ simplă, dar sper ca ea să aducă un aport în înțelegerea mai ușoară de către studenți a unui sistem de reglare automată, în cazul acesta a reglării automate a debitului de aer într-o incintă. Sistemul poate fi extins cu ușurință pentru aplicații de monitorizare și reglare a altor parametrii (temperatură, nivel, etc). Datorită conectării cu microcontroller-ul PIC și placa de achiziție Quanser Q4, sistemul se poate extinde prin cuplarea mai multor astfel de module pe aceeași rețea serială, obținându-se astfel sisteme foarte complexe pentru măsurare și control distribuit.
Performanțele deosebite ale modulelor din familia PIC și Quanser, precum și ușurința proiectării aplicațiilor în MPLAB și Matlab/Simulink fac posibilă realizarea de sisteme de măsură industriale deosebit de complexe și performante, cu un grad mare de fiabilitate.
ANEXĂ 1
Programul de rulare utilizând anumite legi tipizate de reglare automată disertatie.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++);
}
ANEXĂ 2
Programul de rulare folosind metoda Dead-Beat prg_deadBeat.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, Uk, Uk1=0, ek1=0, ek;
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
Uk=Uk1 + ek*18.46 + ek1*17.27; // functia de transfer
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++);
}
BIBLIOGRAFIE
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicatii de Control Folosind Microcontrolerrul Pic (ID: 109973)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
