Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

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: Image Added

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:

Image Added

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 Block
}
t=0:0.01:5;
step(sys_cl,t)
title('Askelvaste suhteellisella säädöllä')
{code}

Sinun

...

pitäisi

...

saada

...

seuraavanlainen

...

kuvaaja:
Image Added


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 Block
}
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 kuvaajan
Image Added

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:
Image Added

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:
Image Added

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 Block
}
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}