MÄLARDALENS HÖGSKOLA Intitutinen för elektrnik PROJEKTLABORATION 1-3 i LR130 Sytem- ch reglerteknik Denna labberie avluta med att ni ka reglera några reella fyikalika rceer Meningen är att vi nu ka gå från imulering till hårdvaruimlementering Du ka få träning i att rgrammera ch förtå hur en regulatr kan dikretiera Nedantående rceer kmmer att reglera 4 4 1 Kretrce med överföringfunktinen G eller G 1 1 mklare tyr rdningen å rceen 3 En K Ett vinkelerv med överföringfunktinen G 1 1 e m, där K betäm utifrån mätning Då 1 ch kan rceen arximera med e m 1 K G 3 En kulbanerce med både ett vinkelerv ch en arximerad överföringfunktin K kul Gkul, e nedan Prceerna van känn igen från tidigare MATLABimuleringar A/D - D/A - krt Detta krt är ett intickkrt för PC Intickkrtet kmmer att reentera vid det 4:e labratintillfället Fil: Reglab1--3 J Lundqvit IEl 003-11-6 1
Prgramvara för A/D - D/A - krt Till krtet hör en rgramvara Denna betår av ett antal filer vilka du behöver flytta till ditt eget h:\ Se bilagan it i denna labratinhandledningen Titta ckå igenm kelettfilen daqc, it i detta dkument Se eciellt följande: Samlingen tyr av en leefunktin, vilket innebär att vi behöver underöka vilken amlingtiden är vid varje ny mrgrammering (mer kd betyder att leeen måte minka i amma grad) Ob att argumentet i leefunktin är i milliekunder (i rgrammet T) I kntantdefinieringen (NUM) betäm hur många amel ka ta in (d v den betämmer alltå ttala exekveringtiden) Prgramavnittet // Sar Matlabfil, ar alla intreanta variabler i en fil med namnet datam Detta för att vi i MATLAB kall kunna viualiera våra variabler Kmilering av rgrammet reentera vid labratintillfället Tetning av A/D - D/A krt, amt kalibrering Signalerna in ch ut från A/D-D/A krtet finn å de må lintarna vid datrn, (analg inut) re analg utut Kla u ignalgeneratrn med inu ca V t till t ch 1 Hz till den externa A/D-mvandlaren ch Tektrnixcillket kanal 1 ch D/A-0 till kanal Se till att följande rader finn med i c-filen (Raderna kan lacera där vi är anviade att kriva regulatrkd) W_81_DI(DI_LO_BYTE, &da1); // Anrar AD-funktinen i daqc y1=(da1-18)*004; DA(y1,1); // Lägger ut y1 å DAC en Kmilera ch kör rgrammet (tar ca 0 ek) Om ditt ytem fungerar kall du e inignalen ch utignalen å cillket Kalibrering av krtet måte vi göra mjukvarumäigt då intickkrtet i datrn är åtkmligt Offet få både å in ch ut (gör gärna en aerki) Vi löer detta genm att läa in (A/D) amt kriva ut (D/A) en lågfrekvent fyrkantignal Använd frekvengeneratrn ch fyrkantvåg ca 1Hz ch amlitud 1- vlt Genm mätning ch användning av MATLAB får vi Fil: Reglab1--3 J Lundqvit IEl 003-11-6
fram ungefärliga ffetignaler Kmenera dea ffetignaler mjukvarumäigt i din daqc (t ex DA(r + ffet, 0)) Nu till MATLAB Ställ dig i rätt katalg, dv där du kaat ditt rjekt Skriv kmmandt data ch du läer in ett antal vektrer Gör lt([r u y]) eller lt(t,[r u y]) (bervera tidvektrn t får du med kmmandt t=(0:length(y)-1)*t); Ser nu grafen key ut, å börja då att rgrammera din regulatr Prgrammering av regulatr Den tiddikreta regulatrn lägg in i kelettfilen Du er var i filen daqc algritmen kan lägga (behåll börignalen r) Obervera att alla nya arametrar ch variabler måte initiera Hur en regulatr rgrammera hittar du i kurkmendiet Prcereglering å idrna 156-160 Hur den fungerar viar du med näta ugift 1 Exerimentbaerad regulatrdeign för Kretrceen Vi kall reglera kretrceen med en exerimentbaerad regulatr vilken bekriv i Prcereglering å idan 13-133 Obervera att mklaren kall tå å 3:de rdningen rce 1 Självvängningexeriment Hur trt K kräv jälvvängning? Vilken blir eridtiden T? P-reglering Hur trt kräv för att få famarginalen 45 K Låt nu börignalen vara ett teg (d v den börignal m finn i daqc) ch regulatrn det framräknade K Vad blir tigtiden t, överlängen M, invängningtiden t amt det tatika felet e? r Reultatet finn i den lggade filen datam Stämmer detta? m 3 PI-reglering (enligt Åtröm-Hägglund arameterval) Nu behöver du använda PI-algritmen med bakåträkning å idan 159 i kmendiet Vad blir tigtiden t, överlängen M, invängningtiden t amt det tatika felet e? r Fil: Reglab1--3 J Lundqvit IEl 003-11-6 3
4 IMC-reglering (OBS, ätt mklaren å :a rdningen rce) Pröva nu PID-algritmen med bakåträkning med en :a rdningen IMC-regulatr Sätt t r 1 ek Ti, kriv en critfil i MATLAB m beräknar regulatrarametrarna Vad blir nu famarginalen? Blir tigtiden t krrekt? Få någt tatikt fel e? r P- reglering av vinkelervt Näta rce att reglera blir kulbanan vinkelerv Obervera att vi kan e ervt m en integratr Vi måte fört identifiera den tatika förtärkningen i rceen Hur gör du det? Gör det! 1 P-reglering Betäm K i en P-regulatr å att du får en bandbredd å ca 30 rad/ Låt börignalen vara ett teg Vad blir tigtiden t r? Här vill labbaiten e hur ni gjrt Extra! Prgrammera en ram, vilken ka använda m börvärde, d v låt r gå från t ex till + V Behåll din P-regulatr ch underök det k hatighetfelet e Få ett ådant fel? Om, hur kmmer vi i å fall tillrätta med det? 1 PI-reglering Betäm nu K ch K via lag-kmenering å att vi får en famarginal å mint 60, m 60 i Fil: Reglab1--3 J Lundqvit IEl 003-11-6 4
3 Reglering av kulbanerce Vinkelerv Kulbana u Regulatr F G Mtr K y r Kulbanerceen är ett linjärt ytem F m g in y r A F g m g Nedan ge en härledning av differentialekvatinen m bekriver hur kulan itin av kulbanan vinkelläge Följande beteckningar gäller nedan: kulbanan vinkelitin [rad] kulan vinkelitin, antalet varv den har rullat [rad] r radien h kulan [m] y r kulan läge å kulbanan [m] y berr F g m g tyngdkraften [N] Följande kraftmmentekvatin i unkten A kan tälla u för kulan rörele d dt J r m r F r (vridmmentet), där m J r kulan tröghetmment [ kg m ] ch 5 F m g in kraften m ätter kulan i rörele [N] Fil: Reglab1--3 J Lundqvit IEl 003-11-6 5
Mmentekvatinen kan då förenkla till d dt F r m g in J r m r m r 5 7 r 5 g in 7 r Vi är nu inte intreerade av vinkelitinen utan av den abluta itinen y r Ekvatinen kan då kriva m å följande ätt: 1 d y 5 g in r dt 7 r d y 5 g in dt 7 Om denna ekvatin linjäriera kring arbetunkten 0 0, d v hrintalläget, få då med hjäl av MacLaurin-utvecklingen för inu: d y dt 5 g 7 3 O Den linjärierade ekvatinen blir då: d y 5 g dt 7 K kul ch överföringfunktinen blir G kul K Y kul, d v K kul 5 g 7 Av överföringfunktinen er vi att vi har en dubbelintegratr Om vi integrerar en kraft/acceleratin får vi hatigheten, ytterligare en integratin ger itinen Vinkelervt är nabbare än kulbanedynamiken (e datrövning 1-3), vilket innebär att arximatinen t u t kan göra Detta innebär att u t blir vinkelervt referenignal ch att utignalen (vinkeln) blir tyrignal för kulbanerceen Obervera att vi måte kakadreglera, amt att överföringfunktinen från tyrignal u t till itin blir G ttl Y K kul U y t Fil: Reglab1--3 J Lundqvit IEl 003-11-6 6
Reglering av kulbanan 1 P-reglering (bervera kakadreglering!) r(t) P-regulatr F () K P u(t) Vinkelerv+Kulbana G P () K y(t) Behåll vinkelervt P-regulatr Prgrammera ch rvkör kulbanan med en P-regulatr Börja med en låg förtärkning vi? K 05, öka å denna gradvi Vilken ty av ytem får PD-reglering Vi kntruerar nu en PD-regulatr (lead-kmenering) enligt kmendiet Prcereglering å frmen: F K Td 1 T 1 för att tabiliera kulbanan Obervera, använd PD-algritm med bakåträkning (Ti, kriv även här en critfil i MATLAB m beräknar regulatrarametrarna) Här är de två deignarametrarna önkad kärfrekven c ch önkad famarginal m För att få någt vettigt värde å valet av kärfrekven kan vi utgå ifrån rceen egen kärfrekven ch rva med värden under ch vanför detta Teta ch röva igen c f 3 PID-reglering Vi använder PID-regulatrn (lead/lag-kmenering) enligt kmendiet å frmen: F K Td 1 Ti 1 T 1 T för att ckå eliminera kvartående fel Hur fungerar nu regleringen? Via labbaitenten! f i För att ha någn törre glädje av att ha reglerat kulan å banan vill vi att ni dkumenterar de teg ni har gjrt för att lycka Denna dkumentatin kan lägga it i den rart ni gör för Datrövning 1-3 Fil: Reglab1--3 J Lundqvit IEl 003-11-6 7
Bilaga: Hur man kaar ett rjekt i MVC++ 1) Starta Micrft Viual C++ 60 ) Menyn File -> New 3) Dialgflik Prject -> Win3 Cnle Alicatin 4) Skriv i lcatin h:\ 5) Skriv ett namn å rjektet i rutan Prject name 6) Tryck OK 7) Välj An emty rject 8) Tryck Finihed 9) Kiera filerna 811PGdll, 811PGlib, DLLh, daqc till katalgen å h:\<rjekt namn> (Dea filer kall ligga å L:\IEL\REGLER\REGLAB\) 10) Lägg till dea filer i rjektet genm att välja Prject -> Add t Prject -> File 11) Skriv ** i file name rutan ch tryck enter Markera nu de fyra vantående filer genm att hålla in CTRL ch klicka å filerna 1) Tryck OK 13) Klart!! Nedan kelettfilen daqc #include <tdih> #include <cnih> #include <windwh> #include "DLLh" #define NUM 000 #define umax 5 #define umin -5 #define BASE 0x0 #define T 8 // Styr hur lång tid vi kör rgrammet // Samlingtid i m #define T 001 // Samlingtid i, // T använd i regleralgritmen /*****************************************************/ // Här kan du lägga dina regulatrarametrar #define K 0 #define Ki 0 #define Kd 0 #define Tf 0 /*****************************************************/ BOOL mdelay(word cnt miliec); vid DA(duble val, int ch); int main(vid) // Variabel Deklaratin FILE *f; int i,j = 0; duble r=0, e=0, u=0, y1, y; duble rvec[num], uvec[num], yvec[num]; Fil: Reglab1--3 J Lundqvit IEl 003-11-6 8
unigned char da1, da; // Initiera ACL81PG krtet W_81_Initial(CARD_1, BASE); // Regler / Styrl //while(!kbhit()) fr(i = 0;i < NUM; i++) // Här gäller evighetl // Inaktivera m evighetl // Att kaa börvärde, t ex /* Börignal teg */ j++; if(j == 000) j = 0; if(j < 1000) r = -; /* Förta 10 ek - V */ ele r = ; /* edan V */ // Hämta data från den externa A/D-mvandlaren W_81_DI(DI_LO_BYTE, &da1); W_81_DI(DI_HI_BYTE, &da); y1=(da1-18)*004; y=(da-18)*004; /*****************************************************/ // ALGORITM // Här kan din regleralgritm imlementera /*****************************************************/ // Sara vektrer för Matlab rvec[i] = r; uvec[i] = y; yvec[i] = y1; // Lägg ut data å D/A-mvandlaren DA(y1, 0); // D/A kanal 0 DA(y1, 1); // D/A kanal 1 // Fördröjning mdelay(t); // Den mtalade "lee"-funktinen // Ta tangentbrdtryckningen för evighetlen // _getch(); // Sätt DA-mvandlarna till nll DA(0, 0); DA(0, 1); rintf("\nalgritm avlutad\n\n"); _getch(); Fil: Reglab1--3 J Lundqvit IEl 003-11-6 9
mdelay(1000); // Sara Matlabfil if((f=fen("datam","w"))!=null) frintf(f,"r = [\n"); fr (j = 0; j < i; j++) frintf(f,"%f\n",rvec[j]); frintf(f,"];\n y = [\n"); fr (j = 0; j < i; j++) frintf(f,"%f\n",yvec[j]); frintf(f,"];\n u = [\n"); fr (j = 0; j < i; j++) frintf(f,"%f\n",uvec[j]); frintf(f,"];\n"); fcle(f); return 0; BOOL mdelay(word cnt miliec) tatic BOOL binit = TRUE; tatic LARGE_INTEGER lifreq; LARGE_INTEGER lireference; LARGE_INTEGER licunt; DWORD dwreult; if( binit ) if(!queryperfrmancefrequency(&lifreq) ) return FALSE; ele binit = FALSE; QueryPerfrmanceCunter(&liReference); while(1) QueryPerfrmanceCunter(&liCunt); if( lireferencehighpart == licunthighpart ) dwreult = licuntlwpart - lireferencelwpart; if( ( dwreult * 1000 / lifreqlwpart ) > miliec ) return TRUE; ele dwreult = (0xffffffff - lireferencelwpart) + licuntlwpart; if( ( dwreult * 1000 / lifreqlwpart ) > miliec ) return TRUE; return TRUE; vid DA(duble val, int ch) duble val; val = val; if(val < -5) val = -5; if(val > 5) val = 5; W_81_DA(ch, (unigned int) (04 + 4046 * val)); Fil: Reglab1--3 J Lundqvit IEl 003-11-6 10