za početak, da učitamo toolbox
pkg load control
da prebacimo slike na vektorsku grafiku, ovo nije Octave komanda, jupyter je!
%plot inline -f "svg"
ovo je objekt upravljanja, njegova funkcija prenosa
T0 = tf([1],[1, 3, 3, 1])
bode(T0)
funkcija prenosa ima malo pojačanje, nema čak ni crossover frequency (ako izuzmemo DC), stalno je manja od 1 po amplitudi; moramo da podignemo pojačanje i postavimo crossover frequency; zvuči jednostavno, čak i jeste, ali je problem gde postaviti crossover frequency? možda se zbog toga vratimo u drugom prolazu na ovo mesto, ako velik propusni opseg suviše zahteva od sistema (napona, struja, duty ratio van opsega $0 \le d \le 1$, . . . ); postavimo crossover frequency na $\omega_C = 10$ radijana u sekundi, $k = 1000$
T1 = 1000 * T0
bode(T1)
nyquist(T1)
liči na nestabilno, ali čik razaznajte šta je oko (-1, 0) sa ove slike? detaljnije je dole prikazano, zoom je česta komanda kada se radi nyquist()
nyquist(T1)
axis([-1, 1, -1, 1])
vrlo nestabilno, ali treba da se tumači; da probamo sa mojom kompresiojom?
compressed(T1)
krajnje očigledno nestabilno, obuhvata kritičnu tačku; da napravimo lead kompenzator da popravimo faznu marginu? ovde je glavno da kompenzator ne pokvari $\omega_C$, tako se pravi funkcija prenosa lead kompenzatora, da na $\omega_C$ ima pojačanje 1, odnosno 0 dB
Hlead = 0.1 * tf([1, 1], [0.01, 1])
bode(Hlead)
na $\omega_C$ je amplituda lead kompenzatora 0 dB; neće uticati na $\omega_C$
T2 = T1 * Hlead
ovde je popravljena faza; uočite kako red sistema raste! nažalost, to će nas pratiti do kraja
bode(T2)
i, šta kaže Nyquist? čik razaznajte odavde!
nyquist(T2)
jedan zoom . . .
nyquist(T2)
axis([-5 5 -5 5])
i još jedan . . .
nyquist(T2)
axis([-1 1 -1 1])
axis square
uz zoom se vidi da je jedva stabilno; da probamo kompresiju?
compressed(T2)
lako i jasno se vidi da je stabilno, ali i mala margina faze; da probamo step response u zatvorenoj sprezi?
H2 = minreal(T2 / (1 + T2))
sistem od četvrtog reda posta sistem sedmog reda zbog konačne dužine reči, tzv. numeričke greške! kasnije ćemo se time više baviti, sada samo da najavim:
H2a = unitnegativefeedback(T2)
ovo je sistem četvrtog reda, uz malu pomoć symbolic precomputation, biće više reči kasnije
step(H2)
uh, suvise oscilatorno! nema smisla sa ovim ići dalje, bolje da još popravimo marginu faze, još jedan lead kompenzator dodajemo na red!
a da vidimo onaj drugi sistem, četvrtog reda?
step(H2a, 20)
odziv je isti! naravoučenije: zaboravite na minreal ako baš ne mora; biće još reči o ovome!
T22 = T2 * Hlead
bode(T22)
dođosmo do sistema petog reda; šta kaže Nyquist?
nyquist(T22)
axis([-1 1 -1 1])
axis square
ok, stabilno, čak prevelika margina faze, možda bude presporo, ali rešićemo kasnije, bolje je za sada da bude stabilnije; da probamo kompresiju?
compressed(T22)
vrlo jasno sta je, margina faze skoro $90^\circ$, nalik na sistem prvog reda; da probamo odziv na step pobudu u zatvorenoj sprezi?
H22 = minreal(T22 / (1 + T22))
peti red sistema posta osmi, optimizacija ili skracivanje (minreal) nije baš sjajno odradila posao; ima i tu rešenja za tipične slučajeve, preko polinoma i delimičnog simboličkog računanja, to je bilo planirano za jedan master rad, ali je zavrseno za pola sata, pa je tema potrošena . . .
step(H22)
očekivano, smirene oscilacije, usporen sistem; samo, vidite li da je pojačanje na niskim frekvencijama malo, imate grešku ustaljenog stanja! Da bi to popravili dodajemo lag kompenzator; on fazu kvari, pa ga postavljamo tako da je ne pokvari puno; $\omega_C$ isto ne sme da pokvari!
a da opet probamo alternativu?
H22a = unitnegativefeedback(T22)
ovo je sistem očekivanog petog reda; da mu probamo step?
step(H22a)
dakle, alternativni metod opet radi; da se vratimo na lag kompenzator
Hlag = tf([1, 1], [1 0])
bode(Hlag)
na $\omega_C$ pojačanje je blisko 1, ne kvari se crossover frequency
T3 = T22 * Hlag
eto sistema šestog reda!
bode(T3)
šta kaže Nyquist? razaznajte iz slike, ako možete . . .
nyquist(T3)
da probamo kompresiju? bolje, ali ne sjajno, nema obilaznice, ovo je samo komprimovan dijagram koji daje nyquist() funkcija iz paketa control za octave; naša funkcija prenosa u otvorenoj sprezi sada ima pol u koordinatnom početku (nuli, (0, 0))
compressed(T3)
a da probamo nešto bolje, pyquist funkciju koja ima i obilaznicu?
pyquist(T3)