Wiki Markup |
---|
h1. PID-säätimen suunnittelu DC-moottorin nopeussäätimeen |
...
Dynaamiset yhtälöt ja avoimen silmukan siirtofunktiot [DC-moottorille |
...
Järjestelmän lohkokaavio näyttää seuraavalta:
Alkuperäisen ongelman yhtälöt ja derivoinnit löytyvät edellisestä esimerkistä DC-moottorin malli. Käy malli läpi, jos yhtälöt ovat hepreaa.
Jos laitetaan askelvasteen vaatimukseksi 1rad/s, perusteet ovat:
- Asettumisaika alle 2 sekuntia
- Ylitys on alle 5 %
- Paikallaan ollessa virhe on alle 1 % (vakaa tila)
DC-moottorin mallissa asettumis aika on noin 3s. PID-säätimellä pyritään pääsemään tässä harjoituksessa näiden arvojen sisälle.
Seuraavaksi suunnitellaan PID-säädin ja lisätään järjestelmään. Luo ensin uusi m-tiedosto ja syötä seuraavat komennot (katso DC-moottorin mallia, josta löytyy tiedot miten kyseinen malli on tehty)
Code Block |
---|
|http://wiki.metropolia.fi/display/koneautomaatio/Esimerkki+DC-moottori] Järjestelmän lohkokaavio näyttää seuraavalta: !s.JPG! Alkuperäisen ongelman yhtälöt ja derivoinnit löytyvät edellisestä esimerkistä DC-moottorin malli. Käy malli läpi, jos yhtälöt ovat hepreaa. Jos laitetaan askelvasteen vaatimukseksi 1rad/s, perusteet ovat: * Asettumisaika alle 2 sekuntia * Ylitys on alle 5 % * Paikallaan ollessa virhe on alle 1 % (vakaa tila) DC-moottorin mallissa asettumis aika on noin 3s. PID-säätimellä pyritään pääsemään tässä harjoituksessa näiden arvojen sisälle. Seuraavaksi suunnitellaan PID-säädin ja lisätään järjestelmään. Luo ensin uusi m-tiedosto ja syötä seuraavat komennot (katso DC-moottorin mallia, josta löytyy tiedot miten kyseinen malli on tehty) {code} function Moottori() J=0.01; b=0.1; K=0.01; R=1; L=0.5; jaettava=K; jakaja=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)]; motor=tf(jakaja,jaettava); {code} Siirtofunktio PID säätimelle on: |
...
Suhteellinen säätö (proportional control)
Katsotaan ensin suhteellisen säädön vaikutusta. Käytetään aluksi vahvistuksena (gain) arvoa 100. Suljetun kierron siirtofunktion määrittämiseen käytämme palauta komentoa (feedback). Lisää seuraava koodi m-tiedostosi loppuun:
Code Block |
---|
!r.JPG! h1. Suhteellinen säätö (proportional control) Katsotaan ensin suhteellisen säädön vaikutusta. Käytetään aluksi vahvistuksena (gain) arvoa 100. Suljetun kierron siirtofunktion määrittämiseen käytämme palauta komentoa (feedback). Lisää seuraava koodi m-tiedostosi loppuun: {code} Kp=100; saadin=Kp; sys_cl=feedback(saadin*motor,1); {code} Jotta näytölle saadaan aikaiseksi kuvaaja tarvitsee lisätä seuraavat komennot. Lisää komennot m-tiedoston loppuun ja suorita ohjelma.Tämän jälkeen voidaan tutkia askelvastetta. |
...
{code |
} t=0:0.01:5; step(sys_cl,t) title('Askelvaste suhteellisella säädöllä') {code} Sinun pitäisi saada seuraavanlainen |
...
kuvaaja: \\ !askelvaste_suhteellisella_saadolla.JPG|align=center!\\ \\ PID-säädin |
...
Yläpuolella olevasta kuvaajasta näemme, että sekä vakaan tilan että ylityksen virhe on liian suuri. Aiemmista esimerkeistä tiedämme että PID-säätimen integraali kertoimen (Ki) lisääminen poistaa vakaan tilan virheen ja derivointi kerroin (Kd) alentaa ylitystä. Testataan PID-säädintä pienillä Ki ja Kd arvoilla. Muuta m-tiedostoa seuraavanlaiseksi: |
...
{code |
} J=0.01; b=0.1; K=0.01; R=1; L=0.5; num=K; den=[(J*L) ((J*R)+(L*b)) ((b*R)+K^2)]; motor=tf(num,den); Kp=100; Ki=1; Kd=1; saadin=tf([Kd Kp Ki],[1 0]); sys_cl=feedback(saadin*motor,1); step(sys_cl) title('PID_säädin pienellä Ki ja Kd arvolla') {code} Suorittamalla muutetun m-tiedoston saat seuraavanlaisen |
...
Vahvistuksen säätäminen (gain)
Nyt asettumisaika on liian pitkä. Ki termiä kasvattamalla voimme alentaa asettumisaikaa. Muuta m-tiedostossa Ki arvoon 200. Suorita jälleen ohjelma ja kuvaajan pitäisi näyttää seuraavalta:
Nyt näemme että reagointi on paljon nopeampaa kuin aikaisemmin. Suuri Ki:n arvo on kuitenkin kasvattanut ylitystä. Seuraavaksi suurennetaan Kd arvoa jolla voidaan pienentää ylitystä. Muuta m-tiedostossa Kd arvo 10. Suorita ohjelma ja kuvaajan pitäisi näyttää seuraavanlaiselta:
Tämän jälkeen tiedämme että jos käytämme PID-säätimelle arvoja
Code Block |
---|
kuvaajan \\ !pieni_Ki_Kd.JPG|align=center!\\ h1. h1. Vahvistuksen säätäminen (gain) Nyt asettumisaika on liian pitkä. Ki termiä kasvattamalla voimme alentaa asettumisaikaa. Muuta m-tiedostossa Ki arvoon 200. Suorita jälleen ohjelma ja kuvaajan pitäisi näyttää seuraavalta: \\ !suuri_Ki.JPG|align=center!\\ Nyt näemme että reagointi on paljon nopeampaa kuin aikaisemmin. Suuri Ki:n arvo on kuitenkin kasvattanut ylitystä. Seuraavaksi suurennetaan Kd arvoa jolla voidaan pienentää ylitystä. Muuta m-tiedostossa Kd arvo 10. Suorita ohjelma ja kuvaajan pitäisi näyttää seuraavanlaiselta: \\ !PID_saadin.JPG|align=center!\\ Tämän jälkeen tiedämme että jos käytämme PID-säätimelle arvoja {code} Kp=100; Ki=200; Kd=10; {code} Tulevat kaikki vaatimukset täytetyksi. |
...
Sama Scilabilla |
...
{code |
} function moottoriStepJaBode () s=poly(0,'s'); //määrää s polynomin muuttujaksi U=12; I=10;n=1500;T=2 //moottorin alkuarvot J=0.01;R=1;L=0.5;b=0.1 Kt=T/I Ke= U/(1500/60*2*3.14) //moottorin siirtofunktio //Ω / U =K t / (JL s2 + (JR+Lb) s+(b*R+K t K e)); SiirtofunkNopeus=Kt/(J*L*s^2+ (J*R+L*b)*s+(b*R+Kt*Ke)) //linearisen systeemin maarittely systeemiLin=syslin('c',SiirtofunkNopeus);//muodostetaan systeemi aikajatkuvana ('c') lineaarisena mallina. t=[0:0.05:5]; //aika vektori, jota käytetään simulaatiossa alku:resoluutio:loppuaika y1=csim('step',t,systeemiLin); // Simuloidaan järjestelmää askefunktiolla scf(1);clf; //avataan ja puhditetaan kuva-alue //moottorin askelvaste, ota kommentit pois jos haluat askelfunktion pelkasta moottorista //plot(t,y1) //moottorin bodediagrammi //bode(sys, 0.01, 100); //HUOM! takaisinkykentahaaran asteluvun tulee olla yhtäsuuri tai suurempi kuin takaisinkytkentaLin=syslin('c',[(2+0*s)/(1+0*s)]) //saadin Kd=0.0001 Kp=10 Ki=0.001 saadin= (Kd*s^2+Kp*s+Ki)/s saadinLin=syslin('c',saadin) //muodostetaan takaisinkytkenta operaattorilla /. takaisinkytkettyJarjestelma=saadinLin*systeemiLin/.takaisinkytkentaLin bode(takaisinkytkettyJarjestelma, 0.01, 100); endfunction {code} |