„Szabályozástechnika - Laborjegyzetek” változatai közötti eltérés

Harapeti (vitalap | szerkesztései)
lap létrehozása (először csak 3. labor jegyzetét töltöm fel)
 
Harapeti (vitalap | szerkesztései)
4.labor anyagának feltöltése Wiki-szintaktikával
178. sor: 178. sor:


== 4. labor ==
== 4. labor ==
2010-10-20 - 4. Labor
Most stabil folyamatokhoz (P) akarunk szabályózt (C) tervezni, úgy hogy a P gyorsabb meg ilyesmibb legyen. A PID szabályzó elég a nem kritikus dolgokhoz: szoba hőmérséklet például)
Ez a rész a gyakban használható.
L = C*Pc=?
PID = Proportional (arányos tag), D.. (deriváló tag), I.. (integráló tag)
P -> (5) => 5*e (e=hiba)
D -> a hibajel tendenciájának megfelelően "előredolgozik", így ha hirtelen váltásvan a hibajelben, akkor gyorsabban reagál
I -> kiintegrálja a hibajelet. Megnézi a múltban mennyi votl a hiba. Megakadájozza, hogy offsettel álljon be a kimenet. Ez azét van mert egy idő után nem reagálna a rendszer az akkorra már túl kis arányos tag miatt.
P (arányos) tag csinálás:
P=k (k konstans)
D (deriváló) tag csinálás:
Y(s) = H(s)*U(s)
D(s)=(s-Kd)/1  <-- ilyet nem tudunk csinálni, mert a számlálónak legalább annyinak kéne lennie mint a nevezőnek
      s*Kd
D(s)=--------  <-- közelítő deriváló tag
      1+s*Tn
Matlab:
  s=tf('s')
  C=1+s*10
Transfer function:
10 s + 1
Matlab:
  step(C)
  % hiba... ??? Error using ==> rfinputs
  % Not supported for non-proper models.
                s*Ks          1+s*Tn + n*K1        1+s*Tn
  PD(s) = 1 + ---------- = ------------------ ~ ----------------
                1+s*Tn        1+s*Tn              1+s* (Td/n)
n1=3/2  n2=5
Matlab:
  C1= (1+3*s)/(1+2*s)
  Transfer function:
  3 s + 1
  -------
  2 s + 1
 
  C2=(1+s*10)/(1+2*s)
 
  Transfer function:
  10 s + 1
  --------
  2 s + 1
 
  figure(1), step(C1, 'b', C2, 'r')
  figure(2), bode(C1, 'b', C2, 'r')
Az n paraméterrel tetszőlegesen választható meg a pólus.
Integráló szabályozó:
                              1+s*Ti
  PI: 1+1/s*k = 1+1/(s*Ti) = --------
                              s*Ti
k: mennyire büntetjük a hibát
Matlab:
  C3=1+1/(s*2)
  Transfer function:
  2 s + 1
  -------
    2 s
  step(C3)
Együttes PID szabályozó:
              1+s*Ti        1+s*Td
  PID = k * ---------- * ---------------
              s*Ti          1+s*(Ts/m)
Matlab:
  P=1/((1+10*s)*(1+s)*(1+0.2*s))
  Transfer function:
                1
  -----------------------------
  2 s^3 + 12.2 s^2 + 11.2 s + 1
  step(P)
kb 50mp alatt áll be oda ahova szeretne ez a P folyamat.
p1 = -1
p2=-5
Az, hogy milyen gyorsan áll be, attól függ, hogy milyen messze vannak a pólusok az origótól. Ha közel van, lassabban áll be.
e^(p^i*t) -> e^(-t)=1/e^(t)
Azt szeretnénk, ha a pólusok minél nagyobbak és negatívak lennének.
Megválasztható paraméterek a PID szabályzóban: k, Ti, Td, n
Ti és Td (integráló és deriváló időállandók) megválasztásával kiüthetjük a nem tetsző, lassító pólusokat.
Azt szeretjük, ha a nevező 1+T*s alakú, mert ebből leolvasható az időállandó.
Akkor van baj, ha a T számok nagyok, mert akkor lesz a rendszer lassú.
Matlab:
  n = 1; k = 1; Ti=10; Td = 1;
  C=k*(1+s*Ti)/(s*Ti)*(1+s*Td)/(1+s*Td/n)
  Transfer function:
  10 s^2 + 11 s + 1
  -----------------
    10 s^2 + 10 s
  L=C*P
Transfer function:
              10 s^2 + 11 s + 1
  -------------------------------------------
  20 s^5 + 142 s^4 + 234 s^3 + 122 s^2 + 10 s
  L=zpk(L)
  Zero/pole/gain:
    0.5 (s+1) (s+0.1)
  -----------------------
  s (s+5) (s+1)^2 (s+0.1)
  L=minreal(L)        % leegyszerűsíti a törtet
  Zero/pole/gain:
      0.5
  -------------
  s (s+5) (s+1)
  T=L/(1+L)      % negatívan visszacsatoljuk
  Zero/pole/gain:
                0.5 s (s+5) (s+1)
  ---------------------------------------------
  s (s+5) (s+5.025) (s+1) (s+0.8595) (s+0.1158)
  figure(2), step(T)
  n =
      2
  C=k*(1+s*Ti)....      % újra számoljuk
  Transfer function:
  10 s^2 + 11 s + 1
  -----------------
    5 s^2 + 10 s
  L=C*P                    % újra számoljuk
  Transfer function:
              10 s^2 + 11 s + 1
  ------------------------------------------
  10 s^5 + 81 s^4 + 178 s^3 + 117 s^2 + 10 s
  T=L/(1+L)      % újra számoljuk
  Transfer function:
 
    100 s^7 + 920 s^6 + 2681 s^5 + 3209 s^4 + 1565 s^3 + 227 s^2 + 10 s
  ------------------------------------------------------------------------
  100 s^10 + 1620 s^9 + 10121 s^8 + 31276 s^7 + 51758 s^6 + 45953 s^5   
                                                                       
:                                + 20458 s^4 + 3905 s^3 + 327 s^2 + 10 s
  [gr,pm,wg,wc]=margin(L)
  gr =
    70.0000  % erősítési tartalék --> ha 70x-re erősítjük, akkor is stabil marad (tip.nem kell)
 
  pm =        % fázistartalék (ez lesz érdekes)
    85.9980
 
  wg =
    3.1623
  wc =
      0.0998
  [mag, phase, w] = bode(L);
  g = margin(mag, phase-60, w) % ha csak egy paramétert adunk meg visszatérésnek a marginnak, akkor csak az elsőt adja vissza
  g = % ez az erősítési tartalék!
      8.3651
  k=g;
  C=k*(1+s*Ti)...      % újra számoljuk
  Transfer function:
  83.65 s^2 + 92.02 s + 8.365
  ---------------------------
        5 s^2 + 10 s
  L=C*P % újra számoljuk
  Transfer function:
        83.65 s^2 + 92.02 s + 8.365
  ------------------------------------------
  10 s^5 + 81 s^4 + 178 s^3 + 117 s^2 + 10 s
  T=L/(1+L)      % újra számoljuk a negatív visszacsatolást
  Transfer function: 
  836.5 s^7 + 7696 s^6 + 2.243e004 s^5 + 2.684e004 s^4 + 1.309e004 s^3 + 1899 s^2 + 83.65 s 
  -------------------------------------------------------------------------------------------
  100 s^10 + 1620 s^9 + 10121 s^8 + 3.201e004 s^7 + 5.853e004 s^6 + 6.57e004 s^5 + 4.409e004 s^4 + 1.543e004 s^3 + 1999 s^2 + 83.65 s
  step(T)
Ez már sokkal gyorsabban beáll.
A k-t minél nagyobbra állítjuk annál gyorsabb lesz a rendszer, de ezzel együtt a beavatkozó jelek is megnőnek, ami nem jó ha korlátozni kell a beavatkozó jeleket. Azt fogjuk csinálni az egész félévben, hogy a k-t úgy választjuk meg, hogy maradjon meg a 60 foknyi fázistartalék, mert az nekünk valamiért marha jó lesz.
A tervezésnek mindig az a szempontja, hogy a legnagyobb időállandót mindig az integráló tagban kell elsütni. Ebből: Ti = a legnagyobb T, Td = a második T, n = 2..15 (ha n nagy, nagy a beavatkozó jel, ha n kicsi, lassabb rendszer)
Ha nem kell deriváló tag (PI szabályozó kell), akkor eldobjuk a szabályozó képletéből a második törtet, azt jóvan.
Ha nem kell integráló tag (PD szabályozó kell), akkor fordítva hadjuk el, viszont ilyenkor a második legnagyobb T lesz a Td (ez amúgy ugye a Ti lenne ha lenne integráló tag)
(A PID szabályózóval lehet pénzt is keresni...)
Állapotegyenletesdi:
x'= A*x + B*u
y = C*x + D*u
Matlab:
  P=6/((s+1)*(s+2)*(s+3))
  Transfer function:
            6
  ----------------------
  s^3 + 6 s^2 + 11 s + 6
  P=ss(P)  % a P átviteli fv-t áttranszformálja állapot mátrixokra
  a =
            x1    x2    x3
    x1    -6  -2.75  -1.5
    x2      4      0      0
    x3      0      1      0
 
  b =
        u1
    x1  1
    x2  0
    x3  0
 
 
  c =
          x1  x2  x3
    y1    0    0  1.5
 
 
  d =
        u1
    y1  0
 
  Continuous-time model.
Olyan átviteli függvény kéne, ami a köv. pólusokat tudja:
  Pk = [-6 ; -4+i*4 ; -4-i*4]
  Pk =
    -6.0000         
    -4.0000 + 4.0000i
    -4.0000 - 4.0000i
  k=acker(P.a, P.b, Pk)
  k =
      8.0000  17.2500  46.5000 % ezzel a vektorral elvileg az előbbi pólusokat kapnánk
x' = A*x + B(u-K^T*x)
alfa=(a-B*K^T)*x + B*u
Matlab:
  A1 = P.a-P.b*k
  A1 =
    -14  -20  -48
      4    0    0
      0    1    0
  B1 = P.b
  B1 =
      1
      0
      0
  C1 = P.c
  C1 =
          0        0    1.5000
  D1 = P.d
  D1 =
      0
  P2 = ss(A1,B1,C1,D1)
  a =
          x1  x2  x3
    x1  -14  -20  -48
    x2    4    0    0
    x3    0    1    0
 
  b =
        u1
    x1  1
    x2  0
    x3  0
 
  c =
          x1  x2  x3
    y1    0    0  1.5 
 
  d =
        u1
    y1  0
 
  Continuous-time model.
  pzmap(P2)
Az új rendszer az előzőhöz képest torzít:
  lp=dcgain(P) % megnézi mennyi a statikus átvitele a  fv-nek (gyak az egységugrásra a váalsz)
  lp =
      1
  lp2=dcgain(P2)
  lp2 =
      0.0313
Kell egy kis korrekció, hogy a statikus erősítés ugyanaz legyen, mint volt:
  P3=lp/lp2*P2
  a =
          x1  x2  x3
    x1  -14  -20  -48
    x2    4    0    0
    x3    0    1    0
 
  b =
        u1
    x1  1
    x2  0
    x3  0
 
 
  c =
        x1  x2  x3
    y1  0  0  48
 
 
  d =
        u1
    y1  0
 
  Continuous-time model.
  step(P,'r',P2,'b',P3,'g')


== 5. labor ==
== 5. labor ==