Kuczmann Miklós

Lineáris rendszerek és szabályozások Arduino UNO mikrovezérlővel


III.4.1. Klasszikus folytonos idejű PID-szabályozók tervezése

A szakasz proporcionális, vagyis arányos típusú szabályozása esetén a P-szabályozó átviteli függvénye konstans:
 
(III.51)
 
azaz egyetlen paraméter hangolható. Az átviteli függvény Matlab környezetben a utasítással definiálható.
 
III.11. ábra. A P-szabályozó hangolása fázistartalékra.
 
Példaképp bemutatjuk a tervezés menetét fázistartalékra a III.11. ábra alapján:
  1. Felrajzoljuk a felnyitott kör átviteli függvényének Bode-diagramját egységnyi erősítés mellett, . Ehhez a utasítást használjuk, melynek eredménye a III.11. ábrán látható.
  2. A fáziskarakterisztikán az egérrel megkeressük a pontot. Ezen a helyen a vágási körfrekvencia .
  3. Leolvassuk az amplitúdókarakterisztika értékét decibel egységben a vágási körfrekvencián, .
  4. Ebből meghatározzuk a szabályozó erősítését:
 
(III.52)
 
  • azaz , ami egy mértékegység nélküli viszonyszám, ugyanis a utasítás a mennyiséget a összefüggésnek megfelelően decibel egységben ábrázolja.
 
A kézi tervezés mind a négy szabályozóra ugyanígy történik. A kapott eredményre még visszatérünk.
 
 
A III.12. ábrán , , , és értékek mellett ábrázoltuk a zárt kör kimenetének és az beavatkozó jel időfüggvényét. Az összehasonlíthatóság érdekében felrajzoltuk a szabályozatlan szakasz ugrásválaszát is. A beavatkozó jel a hibajellel arányos (), növekvő erősítéssel pillanatértéke is nő. A beavatkozó jel maximális értéke a időpillanatban áll elő, értéke pontosan . Növekvő erősítéssel a rendszer kiemenőjele pillanatértéke is növekszik, állandósult állapotban statikus hibával követi a referenciajel értékét ( a felnyitott kör erősítése, itt ), a tranziens pedig gyorsítható (vö. a szakasz ugrásválaszát a zárt rendszer válaszával). Megfigyelhető ugyanakkor, hogy kisebb erősítésérték mellett a tranziens jellege aperiodikus, nagyobb erősítés mellett viszont lengő jellegűvé válik. Tovább növelve a körerősítés értékét a lengés amplitúdója minden határon túl növekedne, vagyis a rendszer instabillá válna. Figyeljük meg, hogy a modellel számított és a mérési eredmények kiváló egyezést mutatnak.
A fenti két ábrát generáló átviteli függvényt a következő Matlab utasításokkal lehet előállítani:
 
WCL = minreal(WC*WP/(1+WC*WP));
U = minreal(WC/(1+WC*WP));
 
majd a , illetve függvényt kell meghívni. A hasznos utasítás, az esetleges zérus-pólus kiejtéssel járó egyszerűsítéseket végzi el.
 
III.13. ábra. A zárt kör gyökhelygörbéje P-szabályozó esetén.
 
A III.13. ábrán felvázoltuk a zárt kör gyökhelygörbéjét a felnyitott kör átviteli függvénye alapján (, ahol a erősítés egységnyi), ami jó szolgálatot tesz a rendszer viselkedésének nyomon követésében. A szakasz két pólusa a és a értékek, amelyeket kiemeltünk, ezek a gyökhelygörbe kiindulópontjai. Ezen gyökök a körerősítés növelése mellett a feltüntetett nyilak irányában vándorolnak, és az erősítésérték mellett . Tovább növelve a körerősítés értékét azt tapasztaljuk, hogy az eddig valós gyökök konjugált komplex párrá alakulnak át, azaz az erősítésérték az a határ, amíg a zárt kör válaszjele aperiodikus, felette már lengő, s az erősítés növelésével a lengő jelleg egyre erőteljesebbé válik. A erősítésértékhez például a zárt kör pólusai tartoznak, azaz
 
 
ahol és a póluspár csillapítási tényezője és sajátfrekvenciája: , , amely értékek a gyökhelygörbe segítségével is meghatározhatók, továbbá
 
 
a zárt rendszer válaszának túllövése. Ez az érték szintén leolvasható a gyökhelygörbéről. A III.12. ábrán ez a értéknek megfelelő időfüggvény.
Mindez összhangban áll a III.14. ábrán vázolt Bode-diagrammal is, amely a felnyitott kör átviteli függvényéhez tartozik: . Az erősítés növelésével az vágási körfrekvencia növekszik, mivel az amplitúdókarakterisztika felfelé tolódik. A vágási körfrekvencia növekedése a szabályozás tranzienseinek gyorsítását jelenti. A gyorsítás azonban mindig nagy jelekkel valósítható meg, azaz a stabilitás robusztussága csökken, ami a fáziskarakterisztikából is kiolvasható, hiszen a fázistartalék csökken.
 
III.14. ábra. A felnyitott kör átviteli függvényének Bode-diagramja.
 
A beavatkozó szerv 5 V értéknél nagyobbat nem tud előállítani, vagyis a értékhez tartozó eredményeknél jobbat (pontosabb, gyorsabb beállást) ezzel a megvalósítással nem lehet elérni. Látható, hogy az erősítés növelése pontosabb statikus viselkedést és gyorsabb tranzienst eredményez, de a zárt kör stabilitása és robusztussága ezzel együtt gyengülhet. A beavatkozó szerv telítése egyértelműen behatárolja a paraméter megválasztását. Ugyanakkor azt is megállapíthatjuk, hogy a szabályozási feladat P-szabályozóval nem oldható meg.
A kiindulásul számított erősítésérték tehát matematikailag helyes, de az adott elrendezésben nem használható a beavatkozó szerv telítődése miatt. Az 5 értékű erősítés fázistartalék mellett áll elő.
A szabályozás stacionárius állapotbeli viselkedése, a szabályozás pontossága javítható, ha a szabályozási körbe integrátort iktatunk, vagyis a szabályozási kör típusszámát eggyel növeljük. Ezzel a PI-szabályozó átviteli függvénye az alábbi:
 
(III.53)
 
azaz az erősítés mellett megjelenik egy újabb paraméter, a időállandó, amelyet rögzítünk: , azaz a szabályozó időállandója a lomhább pólust ejti ki, s behoz egy origóba eső pólust. Jelen esetben ez biztosítja, hogy a zárt kör stacionárius állapotban hiba nélkül követi az ugrás alakú referenciajelet.
Matlab környezetben a szabályozó átviteli függvénye a következőképp adható meg:
 
TI = tau(1);
WC = tf(KPI*[TI 1],[TI 0]);
 
A szabályozó előnyös hatása jól látható a III.15. ábrán, ahol a zárt kör kimenőjelének és az beavatkozó jel időfüggvényét ábrázoltuk. Az kimenőjel állandósult állapotbeli értéke tetszőleges (nullától természetesen különböző) pozitív erősítés mellett egységnyi, ahogy a referenciajel is egységnyi. Az erősítés növelésével a tranziens gyorsabban csillapítható, ugyanakkor a P-szabályozóhoz hasonlóan lengő jellegű kimenet alakulhat ki. A beavatkozó jel maximális értéke értelemszerűen függ az erősítés értékétől, ami itt a kezdeti időpillanat után jelentkezik, azaz az erősítés értéke jó közelítéssel megadja a beavatkozó jel maximális értékét.
 
 
A stacionárius állapotbeli viselkedés tehát jelentősen javítható a P-szabályozó alkalmazásához képest, a tranziens pedig gyorsítható, amit a túllövés megengedhető mértéke korlátozhat. Az erősítés maximális értékének jelen esetben is a beavatkozó szerv működését korlátozó maximális 5 V érték szab határt.
A P-szabályozónál bemutatott tervezési módszerrel, fázistartalék mellett vágási körfrekvencián a szabályozó erősítésére adódik, ami megfelelő érték, a beavatkozó jel 5 V határérték alatt marad.
A tranziens viselkedés javítható, azaz gyorsítható, ha a zárt szabályozási körbe PD-típusú szabályozót iktatunk, amely a hibajel deriváltját is figyelembe veszi. A PD-szabályozó alábbi átviteli függvénye három paramétert tartalmaz:
 
(III.54)
 
A időállandó értékét rögzítjük: , azaz a szakasz második leglassúbb pólusát ejtjük ki, s cseréljük le egy szabadon megválasztható, de gyorsabb időállandóra, vagyis . Ez a választás biztosítja, hogy a zárt kör tranziens viselkedése javuljon, vagyis gyorsabb legyen.
Matlab környezetben a szabályozó átviteli függvénye a következőképp adható meg:
 
TD = tau(2);
TDv = TD/2;
WC = tf(KPD*1/2*[TD 1],[TDv 1]);
 
Itt példaképp a választással élünk.
A szabályozó hatása jól kivehető a III.16. ábrán, ahol a zárt kör kimenőjelének és beavatkozó jelének időfüggvényét ábrázoltuk. A válaszjel tranziense valóban gyorsítható, itt túllövés nélkül is, de a stacionárius állapotban állandósult hiba lép fel. A beavatkozó jel maximális értéke a időpillanatban , az erősítés értéke tehát jelentősen kisebb lehet, mint a P-szabályozónal és a PI-szabályozónál. Ebből is látszik, hogy a arány nem lehet tetszőlegesen nagy, vagyis a szabályozás tetszőlegesen nem gyorsítható, hiszen a beavatkozó szerv ezt limitálja.
 
 
A PI-szabályozó és a PD-szabályozó előnyeit ötvöző megoldás a közelítő PID-szabályozó, amelynek az alábbi formáját alkalmazzuk:
 
(III.55)
 
A szabályozó a fenti paraméterválasztás mellett Matlab környezetben a következőképp definiálható:
 
WC = tf(KPID*1/2*[TI 1],[TI 0]) * tf([TD 1],[TDv 1]);
 
A III.17. ábrán vázoltuk fel a zárt kör kimenőjelének és beavatkozó jelének időfüggvényét.
 
 
A PD-szabályozó és a PID-szabályozó paramétereinek beállításakor láttuk, hogy a értékét szabadon megválaszthatjuk a feltétel betartása mellett. Ennek hatása van a beavatkozó jel maximális értékére, és természetesen a tranziens viselkedésre. Célszerű megvizsgálni, hogy a paraméter hangolásával hogyan befolyásolható a zárt kör viselkedése.
Az alábbi Matlab programban a () paramétert is szabadon hagyjuk, nem rögzítjük, ahogy a fenti példákban. Rögzíteni csak a fázistartalékot (), illetve a szabályozó átviteli függvényének számlálójában lévő időállandókat fogjuk.
Az alábbi nemlineáris egyenletek iteratív megoldásával pontos és automatizált szabályozótervezést biztosítunk:
 
(III.56)
 
amely egyenletek azt fejezik ki, hogy a fázistartaléknak megfelelő vágási körfrekvencián az amplitúdókarakterisztika értéke egységnyi, illetve a beavatkozó jel maximális értékét a időpillanatban felveszi. Az egyenletrendszer hatékonyan az függvény hívásával oldható meg. A három egyenlethez tartozó három ismeretlen a szabályozó vagy erősítése, az vágási körfrekvencia és a időállandó.
Az vektorban az iteráció kezdeti értékeit kell megadni, az erősítés, a vágási körfrekvencia és az időállandó sorrendjében.
 
fit = 74;
x0 = [5 1/tau(2) tau(2)]; % [K wc TDv] inicializálása
options = optimoptions('fsolve','Display','iter');
[x,fval] = fsolve(@PD {vagy @PID} ,x0,options,WP,tau,fit)
 
WC = tf(x(1)*[tau(2) 1],[x(3) 1]); % vagy...
WC = tf(x(1)*conv([tau(1) 1],[tau(2) 1]),conv([tau(1) 0],[x(3) 1]));
 
A megoldandó nemlineáris egyenleteket az alábbi függvény szerint lehet implementálni:
 
function F=PD(x,WP,tau,fit) % vagy...
PID(x,WP,tau,fit)
KPD = x(1); % vagy KPID = x(1);
wc = x(2);
TDv = x(3);
 
WC = tf(KPD*[tau(2) 1],[TDv 1]); % vagy...
WC = tf(KPID*conv([tau(1) 1],[tau(2) 1]),conv([tau(1) 0],[TDv 1]));
WO = WC*WP;
 
[K,f] = bode(WO,wc);
f1 = K-1;
f2 = -180+fit-f;
f3 = KPD*tau(2)/TDv-5; % vagy KPID*tau(2)/TDv-5
F = [f1;f2;f3];
 
A III.18. ábrán néhány eredmény látható a PID-szabályozót használva. A fázistartalék értékét 40, 50, 60, 70 és 80 fokra állítva a fenti programmal kaphatjuk ezeket az eredményeket, amely biztosítja a fázistartalék beállított értékét, illetve hogy a beavatkozó jel ne lépje túl a maximális értéket. Mindezt egyszerűen a P-szabályozónál bemutatott eljárást automatizálva.
 
III.18. ábra. PID-szabályozó tervezése a beavatkozó jel maximális értékének figyelembevételével.
 
Arduino UNO környezetben az alábbi program alkalmas a szabályozási kör vizsgálatára. A fenti mérési eredményeket ezzel a programmal generáltuk.
A változók deklarálása a fenti hangolási eljárásoknak megfelel. A függvényben a 3. digitális kimeneten PWM-generátort definiálunk, amelynek frekvenciáját a megszakítással maximális értékűre állítjuk be, majd 10 másodperc erejéig 0 V feszültséget állítunk be. A nagy kapacitásértékek miatt ennyi időre esetleg szükség lehet, hogy a kondenzátorok elveszítsék töltöttségüket, s így kezdeti értékekkel számolhatunk.
A függvényen belül a referenciajel 10 s ideig nulla értékű, majd 10 s ideig 1 V értékű, vagyis a zárt rendszer ugrásválaszát tudjuk ezáltal mérni. A kimeneti feszültség mérése és az hibajel előállítása után a fentiek ismeretében előállítjuk a szabályozó algoritmus beavatkozó jelét, amely 0 V és 5 V között limitált. A változókat soros porton tesszük elérhetővé.
A folytonos idejű szabályozók egyik lehetséges mintavételes megvalósítása látható a programban, amely a fentebb is bemutatott hátratartó differenciasémát alkalmazza.
 
unsigned long t0, t1, t00;
int szab=0;
float error_old=0, error_old2=0, u_old2=0, ref=1.0, u=0, u_old=0;
float KP=5.0;
float KPI=5.0, TI=1.3352;
float KPD=2.5, TD=0.1948, TDv=TD/2;
float KPID=2.5;
 
void setup() {
Serial.begin(9600);
 
pinMode(3, OUTPUT);
TCCR2B = TCCR2B & 0b11111000 | 0x01;
analogWrite(3, 0.0); delay(10000);
 
t0 = micros(); t00 = micros();
}
 
void loop() {
t1 = micros();
float dt = (t1-t00)/1e6;
t00 = t1;
 
if (t1-t0<10e6) {ref=0.0;}
else if ((t1-t0>=10e6) && (t1-t0<20e6)) {ref=1.0;}
else if ((t1-t0>=20e6) && (t1-t0<30e6)) {ref=0.0;}
 
float uc2 = (5.0/1024.0)*analogRead(A1);
float error = ref - uc2;
 
if (szab==0){ // P-szabályozó
u = KP*error;
}
if (szab==1){ // PI-szabályozó
u = u_old+KPI*(1+dt/TI)*error-KPI*error_old;
}
if (szab==2){ // PD-szabályozó
u = TDv/(dt+TDv)*u_old+KPD*(dt+TD)/(dt+TDv)*error-KPD*TD/(dt+TDv)*error_old;
}
if (szab==3){ // PID-szabályozó
u = (dt+2*TDv)/(dt+TDv)*u_old-TDv/(dt+TDv)*u_old2+KPID*((dt+TD)*(dt+TI)/TI/(dt+TDv)*error-(dt*(TD+TI)+2*TI*TD)/TI/(dt+TDv)*error_old+TD/(dt+TDv)*error_old2);
}
 
error_old2 = error_old; u_old2 = u_old;
error_old = error; u_old = u;
 
if (u>5.0) {u=5.0;}
if (u<0.0) {u=0.0;}
analogWrite(3, (int)(u/5*255));
 
if (t1-t0<20e6){
Serial.print(t1-t0); Serial.print(',');
Serial.print(u); Serial.print(',');
Serial.print(uc2); Serial.print('\n');
}
}
 
A változó értékét, vagyis a mintavételek közti időtartamot a függvényben található műveletek számítási sebessége határozza meg, vagyis előre nem definiáltuk. Ez a legegyszerűbb lehetőség. A következő fejezetben található mintaprogramban a mintavételi periódusidőt a szabályozás elindítása előtt, megszakítás segítségével definiáljuk.
A fenti program futtatásai alapján a kapott maximális érték, a fázistartalék-romlás (III.18) szerint valamennyi esetben alatt van.
A PWM-meghajtás helyett lehet olyan mikrovezérlőt is választani, amely közvetlenül rendelkezik analóg kimenettel (például Due, Zero stb.).
 

Lineáris rendszerek és szabályozások Arduino UNO mikrovezérlővel

Tartalomjegyzék


Kiadó: Akadémiai Kiadó

Online megjelenés éve: 2026

ISBN: 978 963 664 238 9

A könyv a lineáris rendszerek és lineáris szabályozások témaköreit dolgozza fel azzal a céllal, hogy az elméleti ismereteket egyszerűen kivitelezhető gyakorlati problémák megoldásával támassza alá, különös hangsúlyt fektetve ezért az Arduino UNO mikrovezérlő használatára. Fontos célunk, hogy a bemutatott demonstrációs eszközök egyszerűen kivitelezhetőek legyenek, így az eredmények könnyen rekonstruálhatóak, ugyanakkor jó alapot biztosítanak a továbblépéshez, bonyolultabb berendezések építéséhez, és az elmélet helyes alkalmazásához.

Az első rész a felhasznált hardvereket és szoftvereket mutatja be. A Matlab alapvető jelentőségű rendszerek analízisében, szabályozások tervezésében, és a különféle szimulációkban. A könyvbeli példákat Matlab környezetben dolgoztuk ki. Ezek bemutatása nagyon részletes, a példák nagyban segítik az elmélet megértését. Az Arduino UNO mikrovezérlőre és a hozzá kapcsolható egyéb hardverekre egyszerűségük és kedvező áruk miatt esett a választás. A Matlab környezetben tervezett szabályozókat, illetve a méréseket ezzel a mikrovezérlővel valósítjuk meg.

Számos nagyon jó könyv létezik, amelyek a szükséges mélységben vezetik be az Olvasót a Jelek és rendszerek, illetve a Szabályozástechnika témakörökbe. Néhányat a könyv végén található irodalomjegyzékben megadunk. Szándékosan csak magyar nyelvű könyveket sorolunk itt fel, a témakör hazai és nemzetközi irodalma óriási.

A második részben a Jelek és rendszerek témakörét dolgozzuk fel, ahol az elméleti háttér mellett illusztratív példákat hozunk, melyek segítségével könnyebben érthetővé válnak a tárgyalt fogalmak és módszerek. A témában számos kiváló irodalom fellelhető, melyekre hivatkozva tömör összefoglalását adjuk a témakörnek.

A harmadik rész a Szabályozástechnika területét járja körbe, ismét csak nagyon tömören, a klasszikus PID szabályozóktól az állapottér alapú szabályozásokig mutatjuk be a módszereket. Az elméleti alapokat egy konkrét példa illusztrálja.

A negyedik rész két esettanulmányt tárgyal nagyon részletesen. Az első egy egyenáramú motor, melynek modellezését, paramétereinek méréseken alapuló identifikálását és fordulatszámának szabályozását mutatjuk be. A másik egy instabil rendszer, egy lejtőn guruló golyó stabilizálását valósítja meg. Elvégezzük a demonstrációs eszközök aprólékos matematikai modellezését, a szabályozási körök elméleti tervezését, majd gyakorlati megvalósítását.

Reményeink szerint a könyv az Olvasó segítségére lesz a lineáris rendszerek és szabályozások megismerésében, valamint gyakorlatban való alkalmazásukban. A könyv jól használható az egyetemi mérnöki és informatikus oktatásban, különösen a témakörbe vágó szakdolgozatok, diplomamunkák és a hallgatói kutatómunka területén.

A közölt mintaprogramok szabadon felhasználhatók, továbbfejleszthetők.

Hivatkozás: https://mersz.hu/kuczmann-linearis-rendszerek-es-szabalyozasok-arduino-uno-mikrovezerlovel//

BibTeXEndNoteMendeleyZotero

Kivonat
fullscreenclose
printsave