„Szabályozástechnika - Soros kompenzátorok tervezése” változatai közötti eltérés
| (14 közbenső módosítás, amit 3 másik szerkesztő végzett, nincs mutatva) | |||
| 2. sor: | 2. sor: | ||
== A szakasz és a tervezési előírások megadása == | == A szakasz és a tervezési előírások megadása == | ||
<syntaxhighlight lang="matlab" style="font-size: | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
%% A szakasz a szokásos: | %% A szakasz a szokásos: | ||
| 25. sor: | 25. sor: | ||
== P szabályzó tervezése == | == P szabályzó tervezése == | ||
<syntaxhighlight lang="matlab" style="font-size: | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Kompenzálási stratégia: Ap segítségével beállítjuk a megfelelő fázistartalékot. | % Kompenzálási stratégia: Ap segítségével beállítjuk a megfelelő fázistartalékot. | ||
% | |||
% Wc_p(s) = Ap | |||
% | |||
wc_p=tf(1,1) % A szabályzó átviteli függvénye Ap=1 választás mellett | wc_p=tf(1,1) % A szabályzó átviteli függvénye Ap=1 választás mellett | ||
| 78. sor: | 81. sor: | ||
figure(2); % Rajzolás a 2. grafikus ablakba | figure(2); % Rajzolás a 2. grafikus ablakba | ||
margin(w0); % A felnyitott kör Bode-diagramja fázis- és erősítéstartalékkal | margin(w0); % A felnyitott kör Bode-diagramja fázis- és erősítéstartalékkal | ||
% Itt lehet ellenőrizni, hogy sikerült-e elérni a 60 fokos fázistartalékot! | |||
% +/- pár fokos eltérés belefér, de ha nagyobb, akkor valamit elrontottunk! | |||
wcl_p=feedback(w0,tf(1,1),-1) % A zárt kör átviteli függvénye | wcl_p=feedback(w0,tf(1,1),-1) % A zárt kör átviteli függvénye | ||
| 85. sor: | 90. sor: | ||
figure(3); % Rajzolás a 3. grafikus ablakba | figure(3); % Rajzolás a 3. grafikus ablakba | ||
step(wcl_p); % A zárt kör ugrásválasza | step(wcl_p); % A zárt kör ugrásválasza | ||
pause; % Várakozás gombnyomásra | pause; % Várakozás gombnyomásra | ||
close all; % Az összes nyitva lévő grafikus ablak bezárása | close all; % Az összes nyitva lévő grafikus ablak bezárása | ||
| 92. sor: | 98. sor: | ||
== PI szabályzó tervezése == | == PI szabályzó tervezése == | ||
<syntaxhighlight lang="matlab" style="font-size: | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Kompenzálási stratégia: | % Kompenzálási stratégia: | ||
% 1. Ti-vel kiejtjük a szakasz leglassabb pólusát | % 1. Ti-vel kiejtjük a szakasz leglassabb pólusát | ||
% 2. Ap-vel beállítjuk a megfelelő fázistartalékot | % 2. Ap-vel beállítjuk a megfelelő fázistartalékot | ||
% | |||
% ( 1 ) s*Ti + 1 | |||
% Wc_pi(s) = Ap * ( 1 + ------ ) = Ap * ---------- | |||
% ( s*Ti ) s*Ti | |||
Ti=T1; % A T1-hez (T1 a legnagyobb időállandó) tartozó pólus kiejtése | Ti=T1; % A T1-hez (T1 a legnagyobb időállandó) tartozó pólus kiejtése | ||
| 114. sor: | 124. sor: | ||
% Leolvasva (természetesen a táblázatos módszer is használható): | % Leolvasva (természetesen a táblázatos módszer is használható): | ||
Ap=10^(-12.2/20) | Ap=10^(-12.2/20) | ||
wc_pi=Ap*wc_pi % Ap erősítés beállítása a szabályozóban | wc_pi=Ap*wc_pi % Ap erősítés beállítása a szabályozóban | ||
w0=minreal(wc_pi*wp) % A felnyitott kör (egy lépésben egyszerűsítve is) | w0=minreal(wc_pi*wp) % A felnyitott kör (egy lépésben egyszerűsítve is) | ||
| 119. sor: | 130. sor: | ||
margin(w0); % A felnyitott kör Bode-diagramja fázis- és erősítéstartalékkal | margin(w0); % A felnyitott kör Bode-diagramja fázis- és erősítéstartalékkal | ||
wcl_pi=feedback(w0,tf(1,1),-1); % A zárt kör átviteli függvénye | wcl_pi=feedback(w0,tf(1,1),-1); % A zárt kör átviteli függvénye | ||
figure(4); | figure(4); | ||
step(wcl_pi); % A zárt kör ugrásválasza | step(wcl_pi); % A zárt kör ugrásválasza | ||
pause; % Várakozás gombnyomásra | pause; % Várakozás gombnyomásra | ||
close all; % Az összes nyitva lévő grafikus ablak bezárása | close all; % Az összes nyitva lévő grafikus ablak bezárása | ||
| 126. sor: | 139. sor: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Közelítő PD szabályzó tervezése == | == Közelítő PD szabályzó tervezése == | ||
<syntaxhighlight lang="matlab" style="font-size: | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Nem ideális deriváló, mert azt nem lehet realizálni, beviszünk egy | % Nem ideális deriváló, mert azt nem lehet realizálni, beviszünk egy | ||
% új pólust (-1/Tc), így realizálható lesz. | % új pólust (-1/Tc), így realizálható lesz. | ||
| 135. sor: | 149. sor: | ||
% 2. Td+Tc=(N+1)*Tc-vel kiejtjük a szakasz 2. leglassabb pólusát | % 2. Td+Tc=(N+1)*Tc-vel kiejtjük a szakasz 2. leglassabb pólusát | ||
% 3. Ap-vel beállítjuk a megfelelő fázistartalékot | % 3. Ap-vel beállítjuk a megfelelő fázistartalékot | ||
% | |||
% ( s*Td ) s*(Td+Tc) + 1 s*(N+1)*Tc + 1 | |||
% Wc_pd(s) = Ap * ( 1 + ---------- ) = Ap * --------------- = Ap * ---------------- | |||
% ( s*Tc + 1 ) s*Tc + 1 s*Tc + 1 | |||
N=10; % Td/Tc arány beállítása - Ökölszabályként N=10 | N=10; % Td/Tc arány beállítása - Ökölszabályként N=10 | ||
| 148. sor: | 166. sor: | ||
% Leolvasva (természetesen a táblázatos módszer is használható): | % Leolvasva (természetesen a táblázatos módszer is használható): | ||
Ap=10^(2.29/20) | Ap=10^(2.29/20) | ||
wc_pd=Ap*wc_pd % A szabályozó átviteli függvénye | wc_pd=Ap*wc_pd % A szabályozó átviteli függvénye | ||
w0=minreal(wc_pd*wp) % A felnyitott kör átviteli függvénye | w0=minreal(wc_pd*wp) % A felnyitott kör átviteli függvénye | ||
| 153. sor: | 172. sor: | ||
margin(w0); % A felnyitott kör Bode-diagramja fázis- és erősítéstartalékkal | margin(w0); % A felnyitott kör Bode-diagramja fázis- és erősítéstartalékkal | ||
wcl_pd=feedback(w0,tf(1,1),-1) % A zárt kör átviteli függvénye | wcl_pd=feedback(w0,tf(1,1),-1) % A zárt kör átviteli függvénye | ||
figure(4); | figure(4); | ||
step(wcl_pd); % A zárt kör ugrásválasza | step(wcl_pd); % A zárt kör ugrásválasza | ||
pause; % Várakozás gombnyomásra | pause; % Várakozás gombnyomásra | ||
close all; % Az összes nyitva lévő grafikus ablak bezárása | close all; % Az összes nyitva lévő grafikus ablak bezárása | ||
| 161. sor: | 182. sor: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== PID szabályzó tervezése == | == Közelítő PID szabályzó tervezése == | ||
<syntaxhighlight lang="matlab" style="font-size: | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Kompenzálási stratégia: | % Kompenzálási stratégia: | ||
% 1. Beállítjuk az N=Td/Tc arányt | % 1. Beállítjuk az N=Td/Tc arányt | ||
% 2. A szakasz két leglassabb pólusának kiejtése Tau1-el és Tau2-vel, majd | % 2. A szakasz két leglassabb pólusának kiejtése Tau1-el és Tau2-vel, majd | ||
% ezekből a szabályozó Ti, Td és Tc időállandóinak meghatározása | % ezekből a szabályozó Ti, Td és Tc időállandóinak meghatározása | ||
% 3. Ap-vel beállítjuk a megfelelő fázistartalékot | % 3. Ap-vel beállítjuk a megfelelő fázistartalékot | ||
% | |||
% ( 1 s*Td ) Ap s^2*Ti*(Td+Tc) + s*(Ti+Tc) + 1 | |||
% Wc_pid(s) = Ap * ( 1 + ------ + ---------- ) = ---- * -------------------------------- | |||
% ( s*Ti s*Tc + 1 ) Ti s * (s*Tc + 1) | |||
% | |||
% | |||
% Aplant Aplant | |||
% Wp(s) = ---------------------------- = ---------------------------------------------- | |||
% (1+s*Tau1)(1+s*Tau2)(1+s*T3) (s^2*Tau1*Tau2 + s*(Tau1+Tau2) + 1) * (s*T3+1) | |||
N=10; % Td/Tc arány meghatározása | N=10; % Td/Tc arány meghatározása | ||
| 177. sor: | 208. sor: | ||
% 1. Tau1+Tau2 = Ti+Tc | % 1. Tau1+Tau2 = Ti+Tc | ||
% 2. Tau1*Tau2 = Ti*(Td+Tc) = Ti*(N+1)*Tc | % 2. Tau1*Tau2 = Ti*(Td+Tc) = Ti*(N+1)*Tc | ||
% Az 1. egyenletből Ti-t kifejezve (Ti=Tau1+Tau2-Tc) | |||
% Az 1. egyenletből Ti-t kifejezve (Ti=Tau1+Tau2-Tc) és T2-be helyettesítve, | |||
% egy másodfokú egyenletet kapunk Tc-re, aminek megoldása: | % aztán egy kicsit rendezgetve egy másodfokú egyenletet kapunk Tc-re, aminek megoldása: | ||
Tcs=roots([N+1 -(N+1)*(Tau1+Tau2) Tau1*Tau2]) | Tcs=roots([N+1 -(N+1)*(Tau1+Tau2) Tau1*Tau2]) | ||
% Tc mindenképpen pozitív és valós | % Tc mindenképpen pozitív és valós kell hogy legyen! Ha mindkét gyökre teljesül ez a | ||
% feltétel, akkor a kisebbiket választjuk mindig. | |||
Tc=Tcs(2) % Itt a gyökök közül mindkettő valós és pozitív, a 2. a kisebb | Tc=Tcs(2) % Itt a gyökök közül mindkettő valós és pozitív, a 2. a kisebb | ||
% Automatizált megoldás - vájtfülű érdeklődőknek, nem része az anyagnak! | % Automatizált megoldás - vájtfülű érdeklődőknek, nem része az anyagnak! | ||
% A find függvény segítségével megkeressük Tcs nulla | % A find függvény segítségével megkeressük Tcs nulla képzetes részű (imag(Tcs)=0) | ||
% és (&) pozitív valós részű (Tcs>0) elemeit. A find függvény a feltételnek eleget | |||
% tevő elemek indexével tér vissza, így az értékek maguk a Tcs(find(...)) módon kaphatók meg. | |||
% Ezek közül pedig a minimálisat választjuk: | |||
Tc=min(Tcs(find(imag(Tcs)==0 & Tcs>0))) | Tc=min(Tcs(find(imag(Tcs)==0 & Tcs>0))) | ||
| 199. sor: | 229. sor: | ||
wc_pid=tf(1,1)+tf(1,[Ti 0])+tf([Td 0],[Tc 1]) % A szabályozó Ap=1 mellett | wc_pid=tf(1,1)+tf(1,[Ti 0])+tf([Td 0],[Tc 1]) % A szabályozó Ap=1 mellett | ||
w0=minreal(wc_pid*wp) % A felnyitott kör átviteli függvénye | w0=minreal(wc_pid*wp) % A felnyitott kör átviteli függvénye p-z kiejtéssel | ||
figure(1); | figure(1); | ||
pzmap(wp,'b',wc_pid,'r'); % A pólus-zérus kiejtés szemléltetése | pzmap(wp,'b',wc_pid,'r'); % A pólus-zérus kiejtés szemléltetése | ||
| 207. sor: | 237. sor: | ||
% Leolvasva (természetesen a táblázatos módszer is használható): | % Leolvasva (természetesen a táblázatos módszer is használható): | ||
Ap=10^(2.16/20) | Ap=10^(2.16/20) | ||
wc_pid=Ap*wc_pid % A szabályzó átviteli függvénye a megfelelő Ap mellett | wc_pid=Ap*wc_pid % A szabályzó átviteli függvénye a megfelelő Ap mellett | ||
w0=minreal(wc_pid*wp) % A felnyitott kör | w0=minreal(wc_pid*wp) % A felnyitott kör | ||
| 221. sor: | 252. sor: | ||
figure(5); | figure(5); | ||
step(wur_pid); % Az r->u átviteli függvény ugrásválasza | step(wur_pid); % Az r->u átviteli függvény ugrásválasza | ||
pause; % Várakozás gombnyomásra | pause; % Várakozás gombnyomásra | ||
close all; % Az összes nyitva lévő grafikus ablak bezárása | close all; % Az összes nyitva lévő grafikus ablak bezárása | ||
| 228. sor: | 260. sor: | ||
== A soros kompenzátorok összehasonlítása == | == A soros kompenzátorok összehasonlítása == | ||
<syntaxhighlight lang="matlab" style="font-size: | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
figure(1); | figure(1); | ||
| 234. sor: | 266. sor: | ||
step(wcl_p,wcl_pi,wcl_pd,wcl_pid); | step(wcl_p,wcl_pi,wcl_pd,wcl_pid); | ||
legend('P','PI','PD','PID'); % Jelmagyarázat hozzáadása | legend('P','PI','PD','PID'); % Jelmagyarázat hozzáadása | ||
% A P szabályzó relatív gyors, de nagy a túllövése és nagy a maradó hiba. | |||
% A PI szabályzó lassabb, de kicsi a túllövése és zérus a maradó hiba. | |||
% A közelítő PD nagyon gyors, de relatív nagy a túllövése és a maradó hibája. | |||
% A közelítő PID miden egyesíti az előzőek jó tulajdonságait: Gyors, kis túllövés és zérus maradó hiba. | |||
pause; % Várakozás gombnyomásra | pause; % Várakozás gombnyomásra | ||
close all; % Az összes nyitva lévő grafikus ablak bezárása | close all; % Az összes nyitva lévő grafikus ablak bezárása | ||
| 239. sor: | 277. sor: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== PID szabályzó tervezése maximális beavatkozó jelre == | |||
<syntaxhighlight lang="matlab" style="font-size: | == Közelítő PID szabályzó tervezése maximális beavatkozó jelre == | ||
<syntaxhighlight lang="matlab" style="font-size: 140%;"> | |||
umax=10; % Beavatkozó jel maximális értek (t=0-ban lép fel) | umax=10; % Beavatkozó jel maximális értek (t=0-ban lép fel) | ||
| 293. sor: | 332. sor: | ||
figure(3); | figure(3); | ||
step(wur_pidu) | step(wur_pidu) | ||
pause; % Várakozás gombnyomásra | |||
close all; % Az összes nyitva lévő grafikus ablak bezárása | |||
| 298. sor: | 340. sor: | ||
== A megírandó myPID függvény az fsolve-hoz== | == A megírandó myPID függvény az fsolve-hoz== | ||
<syntaxhighlight lang="matlab" style="font-size: | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% FIGYELEM: Ezt egy külön myPID.m fájlba kell megírni! | % FIGYELEM: Ezt egy külön myPID.m fájlba kell megírni! | ||
% Ez NEM egy általános célú függvény lesz, mivel a T1, T2, Phit és umax | % Ez NEM egy általános célú függvény lesz, mivel a T1, T2, Phit és umax változókat nem | ||
% | % paraméterként kapja meg, hanem az egyszerűség kedvéért fixen beleírtam a kódba!!! | ||
% I. egyenlet kifejtése (pólus zérus kiejtést kapásból elvégezve): | % I. egyenlet kifejtése (pólus zérus kiejtést kapásból elvégezve): | ||
| 358. sor: | 399. sor: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[ | [[Kategória:Villamosmérnök]] | ||