Liten MATLAB introduktion Denna manual ger en kort sammanfattning av de viktigaste Matlab kommandon som behövs för att definiera överföringsfunktioner, bygga komplexa system och analysera dessa. Det förutsätts en viss kunskap i de grundläggande Matlab funktionerna (vektor- och matrishantering). För en kort överblick kan man skriva >demo i Matlabs fönster. Denna introduktionen utgår från Matlab 5.* och den motsvarande Control toolboxen. Det krävs tillgång till båda. Matlab har en rätt så utförligt help funktion. Genom att skriva >help funktionsnamn får man en kortfattad beskrivning av funktionen. >help control ger en överblick över alla kommandon som finns tillgängliga i Control toolboxen. Bara >help ger en innehållsförteckning över de olika funktionerna i Matlab och dess toolboxar. Vi begränsar oss i denna introduktion på single-input-single-output (SISO) system, d.v.s. system med endast en in- och en utsignal. Med funktion diary går det att spara allt som händer i kommandofilen som en textfil. Skriv >help diary för mer information. Att programmera i MATLAB Ibland kan det kännas mödosamt att knappa in samma kommandonekvens om och om igen till exempel när man pröva sig fram i en uppgift. Matlab erbjuder två sätt att skriva färdiga program som ska exekveras, m-filer och functions. En m-fil är en textfil med Matlabkommandon som ska exekveras. Filen exekveras genom att skriva filnamnet i Matlabs kommandofönster. En m-fil skapas genom MATLAB menyn File - New - m-file. Att exekvera en m-fil har samma effekt som att kopiera in motsvarande Matlab kommandon i kommandofönstret. Man kan även definiera nya funktioner i Matlab. Man öppnar en m-fil och skriver som första rad function [u1, u2, ] = funktionsnamn(i1, i2, i3, ) Här betecknar u1, u2, u3 lokala namn för ut-variablerna och i1, i2, i3 lokala namn för in-variablerna. Funktionen kan anropas antingen direkt från kommandofönstret i en annan m-fil funktion. Exempel: Ett kort exempel skall illustrera användningen: En funktion "test" skall ta två lika stora vektorer som insignal och leverera deras in-produkt. Vi skriver en m-fil på följande sätt: function [c] = test(a,b) for i = 1:length(a) x = a(i)*b(i); c = c+x end Vi noterar bara att det finns enklare sätt att beräkna in-produkten i Matlab, nämligen >sum(a.*b).
Anta nu att vi ska beräkna inprodukten av vektorerna c1 och c2. Resultatet vill vi spara under namnet E. Funktionen kan nu anropas med >E = test(c1,c2) Modelldefinitioner Det finns olika sätt att definiera en processöverföringsfunktion i s-planet. Det vanligaste sättet är att använda nämnare och täljare polynom, men det är också möjligt att definiera en process med hjälp av dess nollställen, poler och förstärkning (zpk). I Matlab går det att definiera en process på godtyckligt sätt och det är rätt fram att till exempel konvertera en process given av zpk till den motsvarande överföringsfunktionen. Sådana generella mod av processer kallas i Matlab för lti-mod. Vi ska illustrera varje funktion med ett kort exempel. Funktion tf: 2s + 4 Antar vi har en överföringsfunktion G ( s) = som ska matas in i Matlab. s 2 + 2 Först definieras nämnare- (den) och täljarepolynom (num) m.h.a. koefficienterna i nedstigande exponent. Num och den är godtyckliga variabelnamn som ska beteckna numerator och denominator. Därefter definieras en överföringsfunktion (tf) bestående av dessa polynom. Ett semikolon efter ett kommando undertrycker att Matlab trycker ut värdet av variablen. >num=[2 4]; >den=[1 0 2]; >G = tf(num,den) Själva överföringsfunktionen är nu definierad som variabel G. Funktion zpk: Antar vi har en process sys som har två poler, en i -2 och en i -10, inget nollställe och en förstärkning av 5. I Matlab gör man nu så: >sys = zpk([],[-2-10],5) 5 Sys är nu definierad som sys =. Lägg märke till att 5 inte är ( s + 2)( s + 10) lågfrekvensförstärkningen. Konvertering av sys till en överföringsfunktion med polynom i täljare och nämnare: >systf = tf(sys) Definiera överföringsfunktion genom att först definiera Laplace operatorn s : >s = tf([1 0],[1]) och därefter kan du definiera överföringsfunktioner m.h.a. denne operatorn. T.ex. föregående överföringsfunktion definieras då som >sys = 5 / ((s+2)*(s+10)) >sys = 5/(s^2 + 12*s + 20)
Dödtid: använd funktionen set Med hjälp av set kan man sätta vissa modellkarakteristika. Vi inskränker oss här bara på definitionen av en dödtid. Har systemet sys även en dödtid av till exempel 3 sekunder, så läggs den till separat på följande sätt: >set(sys,'iodelay', 3) >sys Genom att bara skriva sys visas den nya överföringsfunktionen, nu med den angivna dödtiden. Funktion tfdata: Antar nu att vi vill spara systf:s nämnar- och täljarpolynom som variabler sysnum och sysden: >[sysnum, sysden]=tfdata(systf) Alternativt kan vi också extrahera dessa ur sys: >[sysnum, sysden]=tfdata(sys) Blockschema I denna avsnitt lär vi oss att bygga mer komplexa mod ur överföringsfunktionsblock. Det kallas ofta också blockschemaförenkling. Det är viktigt att påpeka att Matlab inte gör själva blockschemaförenklingen utan vi kan m.h.a. Matlabfunktioner sätta ihop olika block. Parallellkoppling Det finns två likvärdiga kommandon för att parallellkoppla två SISO system, sys1 och sys2: >sys3 = sys1 + sys2 >sys3 = parallel(sys1,sys2) Seriekoppling Även i detta fall finns det två kommandon för att seriekoppla sys1 och sys2: >sys3 = sys1 * sys2 >sys3 = series(sys1,sys2) Återkoppling Med sys1 i framlänken och sys2 i återkopplingen beräknas den totala överföringsfunktionen (vi antar att vi har en negativ återkoppling) till >sys3 = feedback(sys1,sys2) sys1 Detta motsvarar alltså sys3 = 1+ sys1* sys2 I det fallet att man vill ha en positiv återkoppling skriver man: >sys3 = feedback(sys1,sys2,+1) Bråk
sys2 Även ett bråk av två överföringsfunktioner, d.v.s. G 1 = kan enkelt beräknas: sys3 >G1 = sys2/sys3 Systemegenskaper I detta avsnitt lär vi oss att bestämma några viktiga systemegenskaper. För att kunna avgöra stabilitetet krävs det beräkning av polerna. Andra intressanta egenskaper är systemets nollställen och för komplexa poler deras dämpningsfaktor och egenfrekvens. Antag vi har definierat en process: sys = tf(num,den). Då gäller, Poler: >pole(sys) >eig(sys) >roots(den) Nollställen: >roots(num) >zero(sys) %systemets poler %systemets egenvärden (samma som poler) %nollställen i nämnaren %nollställen i täljaren %systemets nollställen lågfrekvensförstärkning: dcgain(sys) dämpning och egenfrekvens för alla poler damp(sys) Transientanalys Stegsvar: >step(sys) Impulssvar >impulse(sys) Simulering Antag att vi vill simulera utsignalen y för ett system G, given en insignalvektor u. U är en vektor som innehåller en sekvens av insignaler, t ger de respektive tidspunkterna. >lsim(sys,u,t) plottar utsignalen med t som tidsaxel. Användaregränssnitt ltiview Efter att man har definierat några system så kan man starta ltiview som ger möjligheter att analysera olika aspekter av dessa system. Prova själv. >ltiview
Frekvensegenskaper Två viktiga sätt att representera processen är Bodediagram och Nyquistdiagram. I kursen använder vi frekvensplanet framförallt för att designa regulatorer av typ Lead/Lag, samt för att analysera stabilitet, statisk noggrannhet och för att ge ett mått för systemets snabbhet (se föreläsning) Bodediagram >bodeplot(sys) %plottar Bodediagrammet, frekvensområdet väljs automatiskt >bodeplot(sys,{wmin,wmax}) %plottar Bodediagrammet mellan frekvenserna wmin och wmax frekvenseran ges i [rad/sek] >bodeplot(sys1,sys2) %plottar Bodediagrammet för sys1 och sys2 i samma plot >bodeplot(sys1,'r',sys2,'y') %plottar Bodediagrammet för sys1 och sys2 i samma plot med specifikation om hur kurvorna ska ritas. Kurvorna för sys1 ritas i rött ('r'), kurvorna för sys2 i gul ('y') i det senare fallet. Nyquistdiagram Analog till Bodediagram, bara ersätt "bodeplot" med "nyquist". Marginaler För att kunna beräkna amplitud- och fasmarginal används kommandot: >[Gm,Pm,Wcg,Wcp] = MARGIN(sys) %OBS: fungerar inte för system med dödtid Funktionen ger amplitudmarginal (Gm), fasmarginal (Pm), ω π (Wcg) och ω C (Wcp). Genom att välja ltiview får man tillgång till alla dessa funktioner. Klicka på kurvan för att få koordinaterna av respektive punkt. Simulink Simulink är ett kraftfullt simuleringsverktyg. För att starta Simulink skriv >simulink i Matlabs kommandofönster och ett fönster med Simuling Library Browser kommer upp. Där hittar man ett uppskov av grafiska block som representera olika funktioner block i ett blockschema. Välj att antingen skapa en ny Simulink modell öppna en redan existerande. Varje block i Simulink biblioteket kan dras från biblioteket till modellfönstret och har in- och/ utgångar som kan kopplas ihop med hjälp av musen. Ett sträck mellan två block innebär att den enes utsignal blir den nästes insignal. Genom att dubbelklícka på en sådan block kan man ändra definitionerna och parametrarna. Kort beskrivning av olika typer av Simulink block: Continuous: block som används för att beskriva linjära system med kontinuerlig dynamik Discrete: block som används för att beskriva linjära system i diskretiserad form Math: block som innehåller matematiska funktioner med allt från enkla operationer till mer avancerade funktioner Signals and Systems: block för att hantera och behandla signaler Sinks: olika block för datarepresentation av utsignalerna (grafisk i form av variabler) Sources: block som genererar olika insignaler Control System Toolbox: LTI system (generisk överföringsfunktion) Simulink Extras: ytterligare block: t.ex. regulator block i Additional Linear
Några tips: Alla variabler som är definierade i Matlab kan användas som parametrar i Simulink. T.ex. en variabel K som har ett värde tilldelat i Matlab kan användas som en parameter i ett block. Utsignaler i Simulink kan exporteras till Matlab genom att koppla utsignalen till ett block To Workspace som finns under Sinks. I blocket definierar man sedan ett namn för signalen (signalen har formen av en vektor). OBS: Ändra save format i blocket To Workspace till Matrix. Om du vill plotta ut en signal som funktion av tiden behöver man även simulera tiden (Clock i Source foldern) I menyn till Simulink modellens fönster Simulate>Parameters kan du välja simuleringstid.