Kuczmann Miklós

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


III.4.2. Klasszikus diszkrét idejű PID-szabályozók tervezése

A szakasz folytonos idejű átviteli függvényének megfelelő egységugrás-ekvivalens diszkrét idejű átviteli függvény 20 Hz mintavételi frekvencia mellett a Matlab utasításával számítható:
 
Ts = 1/20;
WP_DI = c2d(WP,Ts);
 
Eredményül kapjuk, hogy
 
 
A nevező gyökeit, azaz a rendszer pólusait a utasítással lehet megkapni. A diszkrét idejű pólusok és a folytonos idejű rendszer pólusai között a
 
 
összefüggés áll fenn:
 
 
ahol és a folytonos idejű rendszer két pólusa.
A következőkben elvégezzük a négy szabályozó -os fázistartalékra történő tervezését a Bode-diagram segítségével.
A szabályozók zérusait az előző fejezetben definiált módon választjuk meg. A PI-szabályozó zérusa a folytonos idejű szakaszmodell átviteli függvényének lomhább időállandójú pólusát ejti ki, a PD-szabályozó átviteli függvényének zérusa pedig a gyorsabb időállandójú pólust,
 
 
A P-szabályozó átviteli függvénye konstans , a PI-, a PD- és a PID-szabályozók átviteli függvénye pedig rendre
 
 
Matlab környezetben mindezt a következő módon lehet definiálni:
 
zI = exp(-Ts/tau(1));
zD = exp(-Ts/tau(2));
 
WC_DI = tf(1,1,Ts); % P
WC_DI = tf(1*[1 -zI],[1 -1],Ts); % PI
WC_DI = tf(1*[1 -zD],[1 0],Ts); % PD
WC_DI = tf(1*conv([1 -zI],[1 -zD]),conv([1 -1],[1 0]),Ts); % PID
 
A szabályozó erősítését itt első lépésben 1-nek választjuk, konkrét értékét a fázistartalék segítségével határozzuk meg.
 
III.19. ábra. A P-szabályozó hangolása fázistartalékra.
 
III.20. ábra. A PI-szabályozó hangolása fázistartalékra.
 
III.21. ábra. A PD-szabályozó hangolása fázistartalékra.
 
III.22. ábra. A PID-szabályozó hangolása fázistartalékra.
 
Példaképp a P-szabályozó tervezése a III.19. ábra alapján Matlab környezetben a következő lépésekből áll:
  1. Felrajzoljuk a felnyitott kör átviteli függvényének Bode-diagramját egységnyi erősítés mellett, ahogy azt a fenti Matlab kódban definiáltuk. Ehhez a utasítást használjuk, eredményül a III.19. ábrán látható diagramot kapjuk. Itt egymást fedve jelenik meg a szakasz átviteli függvényének és a felnyitott kör átviteli függvényének Bode-diagramja.
  2. A fáziskarakterisztikán az egérmutatóval megkeressük a pontot, s leolvassuk az vágási körfrekvenciát: a értéknél (a hiba a grafikus megjelenítés adta leolvasásból fakad).
  3. Leolvassuk az amplitúdókarakterisztika értékét decibel egységben a vágási körfrekvencián (itt ).
  4. Meghatározzuk a szabályozó erősítését: .
 
A kézi tervezés mind a négy szabályozóra ugyanígy történik. A PI-szabályozó tervezése a III.20. ábrán követhető, ahol a felnyitott kör folytonos vonallal rajzolt átviteli függvényében jól kivehető az integráló hatás, az alacsony körfrekvenciás rész erősítését ugyanis ez kiemeli, a fáziskarakterisztikát pedig eltolja a értékre. A szakasz Bode-diagramját szaggatott vonallal vettük fel.
A PD-szabályozó tervezése a III.21. ábrán látható, a felnyitott kör átviteli függvényének nagyfrekvenciás része módosul. A kettő együttesen a PID-szabályozó tervezése kapcsán látható a III.22. ábrán.
A kapott szabályozók átviteli függvényét és differenciaegyenletét a III.3. táblázatban foglaljuk össze.
 
III.3. táblázat. A mintavételes szabályozók összefoglalása.
Szabályozó
Differenciaegyenlet
P
PI
PD
PID
+65,54e[k] - 113,8e[k-1] + 48,84e[k-2]
 
Az így nyert zárt szabályozási körök válaszai hasonlíthatóak össze a III.23. ábrán. Jól láthatóak az egyes szabályozók hatásai. A P-szabályozóval irányított kimenet nem pontos. Ezen javít a PI-szabályozó, miáltal a stacionárius hiba nullára csökken, de a tranziens nem cseng le gyorsabban, mint a P-szabályozónál. A tranziens jelentősen javítható a D-csatorna beiktatásával, de a stacionárius állapotbeli hiba ebben az esetben is csak az integrátorral tüntethető el.
 
III.23. ábra. Az egyes szabályozókkal nyert válaszjelek összehasonlítása.
 
A differenciáló ággal kapott eredmény itt azonban csak elvi jelentőségű. A P-szabályozó irányítójelének maximális értéke , ami 5 V alá csökkenthető, ha a fázistartalékot kissé növeljük. Például esetén a P-szabályozó erősítése 5, ami biztosítja, hogy az irányítójel a maximális 5 V értéket nem haladja meg, de természetesen a szabályozó nem ad jól használható eredményt, mert a stacionárius hiba nem lehet zérus.
A PI-szabályozó által generált irányítójel maximális értéke 3,877 V. Ha ezt kissé növeljük, akkor a szabályozás gyorsítható. Például értékű fázistartalék esetén elérhető a maximális 5 V értékű irányítójel a bekapcsoláskor.
A D-ág bekapcsolása javít ugyan a tranziens viselkedésen, de ehhez nagy értékű beavatkozó jel szükséges: PD-szabályozás esetén , PID-szabályozó esetén . Ezek egyike sem használható a konkrét fizikai rendszer irányítására. Célszerű a PD- és a PID-szabályozók átviteli függvényét kissé módosítani egy újabb paraméter beiktatásával, ahogy az történik a folytonos idejű PD- és PID-szabályozóknál, azaz legyen
 
(III.57)
 
a paramétereket pedig hangoljuk az alábbi Matlab programmal. A program értelemszerűen nagyon hasonlít a folytonos idejű szabályozóhangolásnál használt programra.
 
options = optimoptions('fsolve','Display','iter');
 
fit = 60;
zI = exp(-Ts/tau(1));
zD = exp(-Ts/tau(2));
x0 = [1 1 zD];
 
% PD-szabályozó esetén:
[x,fval] = fsolve(@PD,x0,options,WP_DI,Ts,fit,zD);
WC_DI = tf(x(1)*[1 -zD],[1 -x(3)],Ts)
 
% PID-szabályozó esetén:
[x,fval] = fsolve(@PID,x0,options,WP_DI,Ts,fit,zI,zD);
WC_DI = tf(x(1)*conv([1 -zI],[1 -zD]),conv([1 -1],[1 -x(3)]),Ts)
 
function F=PD(x,WPw_DI,Ts,fit,zD) % vagy ...
F=PID(x,WP_DI,Ts,fit,zI,zD)
KPD = x(1); % vagy KPID = x(1);
wc = x(2);
zDv = x(3);
 
WC_DI = tf(KPD*[1 -zD],[1 -zDv],Ts); % vagy ...
WC_DI = tf(KPID*conv([1 -zI],[1 -zD]),conv([1 -1],[1 -zDv]),Ts);
WO = WC_DI*WP_DI;
 
[K,f] = bode(WO,wc);
f1 = K-1;
f2 = -180+fit-f;
f3 = WC_DI.num{1}(1) - 5;
F = [f1;f2;f3];
 
A javított szabályozók átviteli függvényét és differenciaegyenletét a III.4. táblázatban foglaljuk össze. A differenciáló ág előnyei a beavatkozó jel határai miatt ebben az alkalmazásban tehát nem használhatók ki, a PI-szabályozással a feladat kielégítően megoldható. Az így nyert eredmények a III.24.–III.27. ábrákon láthatók.
 
III.4. táblázat. A javított mintavételes szabályozók összefoglalása.
Szabályozó
Differenciaegyenlet
P
 
PI
PD
PID
+5e[k] - 8,684e[k-1] + 3,726e[k-2]
 
III.24. ábra. A diszkrét idejű P-szabályozóval kapott eredmények.
 
III.25. ábra. A diszkrét idejű PI-szabályozóval kapott eredmények.
 
III.26. ábra. A diszkrét idejű PD-szabályozóval kapott eredmények.
 
III.27.ábra. A diszkrét idejű PID-szabályozóval kapott eredmények.
 
Arduino UNO környezetben a futtatás elvégzésére az alábbi mintaprogram áll rendelkezésre. A változók deklarálása a fenti szabályozóhangolásoknak megfelel. A függvényben a 3. digitális kimeneten itt is PWM-generátort definiálunk a megszakítást használva, majd kisütjük a kondenzátorokat. A megszakítás lenti beállítása biztosítja a 20 Hz-es mintavételezési frekvenciát az függvényen keresztül.
A függvény tartalma -onként fut le. A referenciajelet a folytonos idejű példával megegyező módon állítjuk be. A két kondenzátor feszültségének 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é.
 
unsigned long t0, t1;
float ref=1.0, u=0, d=0, u_old=0, u_old2=0, error_old=0, error_old2=0, Ts=0.05;
bool meres=false;
 
void setup() {
Serial.begin(9600);
 
pinMode(3, OUTPUT);
TCCR2B = TCCR2B & 0b11111000 | 0x01;
 
analogWrite(3, 0.0); delay(10000);
 
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 3124; // = (16*10^6) / (20*256) - 1
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS12);
TIMSK1 |= (1 << OCIE1A);
sei();
 
t0 = micros();
}
 
void loop() {
if (meres){
meres = false;
 
t1 = micros();
 
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 uc1 = (5.0/1024.0)*analogRead(A0);
float uc2 = (5.0/1024.0)*analogRead(A1);
 
float error = ref - uc2;
 
u = 5.0*error;
u = u_old+4.887*error-4.707*error_old;
u = 0.8055*u_old+5*error-3.868*error_old;
u = 1.742*u_old-0.7417*u_old2+5*error-8.684*error_old+3.726*error_old2;
 
if (u>5.0) {u=5.0;}
if (u<0.0) {u=0.0;}
analogWrite(3, (int)(u/5*255));
 
u_old2 = u_old;
u_old = u;
error_old2 = error_old;
error_old = error;
 
if (t1-t0<20e6){
Serial.print(t1-t0); Serial.print(',');
Serial.print(u); Serial.print(',');
Serial.print(uc1); Serial.print(',');
Serial.print(uc2); Serial.print('\n');
}
}
}
 
ISR(TIMER1_COMPA_vect){
meres=true;
}
 

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