Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul consta intr-un sistem ce regleaza automat debitul de curgere a un lichid printr-o pompa DIY, avand scopul final de a umple un recipient pana la un nivel dorit.
Ideea pentru acest proiect a pornit de la dorinta de a construi, folosind ce am invatat la PM, un sistem de reglare automata pentru a aplica cat mai mult din teoria reglarii automate.
Lasand la o parte acest aspect, principiul de functionare al acestui proiect este aplicabil in multiple domenii , prezentand avantaje importante. De exemplu, in diverse instalatii industriale se cer cantitati bine determinate de materiale sau substante sub forma lichida, gazoasa sau granulata. In domeniul medicinei, de exemplu, sunt deja implementate sisteme prin care se regleaza debitul de curgere a substantelor din pungile de perfuzii catre acul intravenos.
Un sistem cu pompe defineste un proces lent, fara timp mort. La nivelul pompelor apar mereu perturbatii, ceea ce impune reglarea debitului de curgere.
Schema de reglare a debitului este urmatoarea.
In cele ce urmeaza, explicam cum am ajuns la valorile functiei de trasfer a procesului si a regulatorului. Procesul este alcatuit din : instalatie tehnologica (pompa), traductor (debitmetru) si element de executie (motor). Ca in orice alt sistem de reglare, trebuie impuse niste criterii de performanta. Dorim ca de la aplicarea referintei de debit, sistemul sa raspunda in maximum 5 sec (timp_tranzitoriu ⇐6 sec), eroare stationara zero si suprareglaj de 5 %, pentru a nu se defecta motorul.
Debitmetrul este caracterizat printr-un factor K de amplificare . Din datasheet , caracteristica acestuia este liniara. Din ecuatia unei drepte, deducem K = 7.5 . Elementul de executie e caracterizat de :
a) torque = 4.62 kg*m (forta care da rotatia) b) J = 0.01 kg *m^2 c) L = 0.5 H inductanta d) R = 1 ohm e) I = 200 mA f) constanta K = torque/I = 3.45 g) b = 0.1 Nms
Functia de transfer a elementului de execjutie este
H_ee = K/ (Js+ b)* (L*s + R)*K^\2) H_ee = 3.45 /(0.05 *s^2 + 0.5*s + 0.1)
H_ee= 3.45/( (0.01s + 0.1) * (0.5*s + 1) + 3.45)
Functia de transfer a elementului de executie este d eordin 2, cu constanta de timp T = 0.5sec, si o ct parazita T_sigma = 0.01 (cu un ordin de marime mai mica decat T).
Functia de transfer a instalatiei tehnologice este functia de transfer a pompei in sine, caracterizata printr-o constanta de timp mare (proces lent) .
H _it = 0.25/ (40 *s + 1)
Functia de transfer a intregului proces este produsul celor 3 functii de mai sus:
H _p = 6.5/(22*s^2 + 4.5*s + 0.1 )
Pentru acest proces, proiectam folosind metoda poli-zerouri un regulator . Aici intervin mai multe calcule ce nu reprezinta subiectul acestei materii. Ne rezulta un regulator PI cu constanta K_r = 50 sec si constanta de integrare T_i = 0.25 sec
H_R = K_r *(1 + 1/(T_i*s)) H_R = 50(1 + 1/(0,25*s))
Pe microcontroller nu putem implementa acest regulator deoarece este un regulator pentru timp continuu. Vom implementa un regulator numeric folosind transformata Z si metoda raspunsului la impuls, alegand o perioada de esantionare T de 15 ori mai mica decat timpul tranzitoriu(conform metodei).
H_R(1/z) este raportul a doua polinoame , din care ne iese relatia recurenta dintre u_k si e_k - comanda si eroare). in urma calculelor din Matlab, vom pune aceste valori intr-o matrice de comenzi si erori
Lista piese:
1. Senzor ultrasonic - masor in timp real nivelul lichidului 2. Debitmetru - masor debitul prin pompa 3. Pompa DIY - pompa centrifugala construita conform tutorialului atasat la Bibliografie 4. ATmega324 - vom implementa regulatorul numeri pt debit 5. Motor 6V - inclus in constructia pompei 6. L293D - driver motor pentru a implementa PWM 7. LCD -afisarea nivelului si a debitului
Pentru a functiona, ultrasonicul are nevoie de un semnal de trigger pe care il vom da pe PA0. Outputul de la pin il vom primi pe PA1 sub forma de pulsuri de anumite frecvente. Frecventa la care functioneaza ultrasonicul este de 40kHz, citind distante cuprinse intre 2 si 300 cm.
Desi driverul se putea face si cu MOSFET, am ales sa utilizez un driver L293D. Comanda pentru motor se face folosind ATmega324 folosind FastPWM prin pinul PD1, corespunzatorul inputului 1A de pe pinul 2 al driverului. Pe pinul PD3 corespunzator celeilalte intrari 2A de pe pinul 7 al driverului vom transmite LOW. Astfel motorul se roteste spre stanga, punand pompa in functiune.
Semnalul de output al debitmetrului este digital cu frecvente cuprinse intre 16 si 32 de Hz. Citim acest output de pe pinul PB5, pin cu care vom face captura de semnale de intrare (Input Capture Mode) ce retine valoarea lui ICR la momentul aparitiei unui eveniment.
Ca mediu de dezvoltare am folosit mediul de dezvoltare Atmel , cu compilator AVR GCC. Am folosita libraria pentru senzorul ultrasonic HC-SR04.
Programul de pe microcontroller trebuie sa implementeze algoritmul pentru regulatorul PI. Pentru aceasta, initializez direct din program referinta pentru debit , initializez modulul de PWM ce va genera comanda necesara motorului pompei si citesc iesirea de la debitmetru. Toata acestea se efectueaza daca se respecta conditia ca nivelul citit sa nu depaseasca nivelul impus.
Pentru implementarea legii PI am ales urmatoare metoda de implementare : am creat o mapare 1 la 1 intre elemenele celor 2 randuri ale unei matrici :un rand continand erorile, celalalt comenzile corespunzatoare. Algoritmul va efectua scaderea intre referinta de debit si iesirea debitmetrului . Vom parcurge prima linie a matricei, cautand acea eroare din vector care e cea mai apropiata de eroarea noastra. Vom extrage comanda corespunzatoare, exprimata in volti. Tinand cont ca tensiunea maxima e de 5V iar comanda necesara e x Volti, calculam Duty_cycle-ul dupa formula :
D = 100* x/5
Calculam apoi noua valoare a lui OCR1A pe care o vom folosi in initilizarea timerului pentru PWM.
Senzorul ultrasonic citeste bine distantele.
Pompa pe care am facut-o din capace, paie, un fel de moara improvizata si un motor de 6V trage apa prin pai pe o anumita distanta, insa nu reuseste sa o expulzeze tangenmtial intrucat puterea motorului nu e suficient de mare. (produsul U *I)
Driverul de motor imi invarte motorul si intr-un sens si in celalalt. Din pacate, codul pt FPWM pare in regula, dar motorul nu functioneaza..
Partea de hardware a fost relativ lejera.
Motorul de 6V are nevoie de un curent de ordinul sutelor de mA (aprox 300 mA) pentru a avea suficienta putere de suctiune.
Senzorul ultrasonic nu este exact: trebuie tinut cat de perpendicular posibil deplasandu-l inicet. Altfel, va afisa distanta adevarat doar dinc and in cand, afisand in rest doar valori aparent random.
Pentru stabilizarea sistemului, daca cerstem K_R sau scadem T_i, timpul tranzitoriu va scadea.
Filmare: watch
Aprilie : alegerea temei de proiect astfel incat sa integrez ingineria reglarii automate
3 zile din Mai au fost necesare pentru alegerea corecta a tuturor componentelor
22-25 Mai :citesc date de la ultrasonic si debitmetru cu un cod aparent coorect ca algoritm dar nefunctional. In final, am gasit o biblioteca pentru ultrasonic. Urmeaza in vara sa implementez biblioteca pt debitmetru pe acelasi principiu ca cea pentru ultrasonic.
24 Mai: implementarea pe hartie a regulatorului numeric discret
https://www.youtube.com/watch?v=cvtaaaUgleo Constructia pompei
https://www.engineeringtoolbox.com/pumps-power-d_505.html https://www.waterworld.com/articles/print/volume-27/issue-11/departments/pump-tips-techniques/back-to-basics-how-to-increase-pump-motor-efficiency.html
Acest site m-a ajutat sa determin care ar trebui sa fie puterea motorului de 6V astfel incat pompa centrifugala sa poate expulza tangential lichidul.
http://students.iitk.ac.in/eclub/assets/lectures/embedded/Embedded-Old-2.pdf http://www.avrprojects.net/index.php/avr-learn/getting-started-with-avr/51-programming-the-timer-counter-1?showall=1 Baza pentru implementarea initiala a softului de citire a datelor de la ultrasonic si debitmetru.
optimization algorithm to find realistic parameters of a DC motor http://ctms.engin.umich.edu/CTMS/index.php?example=MotorSpeed§ion=SystemModelingN
Pentru determinarea functiei de transfer a elementului de executie .
Biblioteca pentru senzorul ultrasonic am gasit-o intr-un alt proiect de pe wiki si e atasata la Downloads.
Datasheets bineinteles.