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)
a sada najava nečeg što sledi, da dodamo obilaznice i brojanje obuhvata kritične take:
dodato_nestabilnih_polova = pypass(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
H1 = feedback(T1)
pzmap(H1)
legend('location', 'northwest')
tačno tako, dodata dva nestabilna pola, tj. dva pola premeštena u desnu kompleksnu poluravan; igorišite ružnu oznaku u legendi, tu nije pol već oznaka za pol
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 = series(T1, Hlead) # overloaded operator? ranije rešavano množenjem
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?
još jedan osvrt na ono što sledi . . .
dodato_nestabilnih_polova = pypass(T2)
# nekad minreal(T2 / (1 + T2)), dakle nije overload
H2 = feedback(T2)
sistem je ostao četvrtog reda, nije postao sistem sedmog reda zbog konačne dužine reči, tzv. numeričke greške! dakle, imamo funkciju feedback() koja lepo radi!
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!
odziv je isti! naravoučenije: zaboravite na minreal ako baš ne mora; biće još reči o ovome!
T22 = series(T2, Hlead)
sada je sistem petog reda; takav nam je postupak, stalno povećavamo red sistema; rešavamo jedne probleme, a pravimo druge!
bode(T22)
i tako 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?
još jedna digresija u budućnost:
dodato_nestabilnih_polova = pypass(T22)
usput, uočite kako je pojačanje na niskim frekvencijama palo, tracking neće biti dobar! rešili smo marginu faze, ali smo spustili pojačanje; u skladu sa najavom: rešavanje jednog problema je napravilo drugi!
H22 = minreal(T22 / (1 + T22))
H22 = feedback(T22)
NEKAD: peti red sistema posta osmi, optimizacija ili skracivanje (minreal) nije baš sjajno odradila posao SAD: ostao je peti red; drugi metod je zaobišao problem numeričke greške
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!
Hlag = tf([1, 1], [1 0])
bode(Hlag)
na $\omega_C$ pojačanje je blisko 1, ne kvari se crossover frequency
T3 = series(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)