PID REGULATOR MED PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
pagge
EF Sponsor
Inlägg: 933
Blev medlem: 15 juni 2004, 00:15:08
Ort: Luleå
Kontakt:

Inlägg av pagge »

Du får plocka fram mekanikkunskaperna du tyckte var så tråkiga en gång i tiden. Tror att man tjänar på att göra en riktigt enkel modell, gör man en för avancerad blir det så svårt att räkna på det :)

Uåten är ju en massa som lyfts av en kraft (tyngden av den undanträngda vattenmassan). På denna ubåt verkar även dämpande viskös kraft
Fv=B*v^4
tror jag, detta går dock inte att räkna på så vi säger
Fv=B*v
istället.

Edit: Ändrat oklar text nedan.

Låt Fl vara lyftkraften. Totalt alla krafter som verkar på ubåten (positiv riktning uppåt) är då
Fl - Fv = -x*g - B*v
x betecknar mängden vatten i tanken, där x=0 motsvarar den mägd vatten då ubåten är i jämnvikt, varken stiger eller sjunker.
F = m*a
får man
-x*g - B*v = m*a
-x*g - B*h' = m*h'' (h=båtens höjd över en tänkt punkt, t.ex. sjöbottnen)
(m*g''+b*s')/g = -x

transformering ger
(ms^2+bs)*H(s)/g= -X(s)

Totala systemet med vattennivån i tanken som insignal och ubåtens position i vattnet som utsignal borde då bli

G(s)=H(s)/G(s) = -g/(s*(ms+B)) = -(g/Bs)* 1/(ms/B+1))

Med reservation för alla eventuella felräkningar. Viskositetskonstanten B måste nu mätas. Kika på denna ekv.
-x*g - B*v = m*a
Om du låter ubåten stiga eller sjunka långsamt i vattnet med konstant hastighet blir a=0 och du får
-x*g - B*v = 0
B*v=-x*g
B=-x*g/v
där x är mängden (liter) vatten över jämviktsläget (då ubåten varken sjunker eller stiger), g = 9.81 och v är den konstanta hastighet med vilken den rör sig.

Jag skulle nog överhuvudtaget inte bry mig om snabbheten på pumpmotorerna till tankarna, endast se dom som en konstant K (dvs att du "omedelbart" kan bestämma vattenmängden i tanken), detta pga deras stora snabbhet i förhållande till resten av systemet. Jag kanske skulle kolla ungefär hur snabbt de t.ex. tömmer tanken, beteckna den tiden för Ta och aproximera med.
G(s) = K/(S*Ta+1)
dvs. ett första ordningens system.

Slutligen: Eftersom systemet består av en (och endast en) integration kommer proportionell reglering att fungera. Däremot kan det gå att få ubåten att reagera snabbare om du flyttar polen i s=-B/m närmare 0. Där kommer reglerteori och PID in, och där kan jag inte hjälpa dig mer.
Senast redigerad av pagge 4 februari 2006, 01:06:34, redigerad totalt 2 gånger.
Användarvisningsbild
Greensilver
Inlägg: 1305
Blev medlem: 21 januari 2005, 21:24:57
Ort: Sverige
Kontakt:

Inlägg av Greensilver »

Damn! :o
Kunde du det där rakt av eller pluggar du detta just nu?


Hur som helst, tänkte bara på detta:
Låt Fl vara lyftkraften, den motsvarar precis tyngden av mängden vatten du har i ubåtens vattentankar.

Det låter som om detta är idealfallet, alltså när jämviktsförhållande råder. Borde det inte vara något i stil med:
Låt Fl vara lyftkraften, den motsvarar precis tyngden av den undanträngda volymen vatten minus mängden vatten du har i ubåtens vattentankar.
Användarvisningsbild
RDX*
EF Sponsor
Inlägg: 1652
Blev medlem: 28 maj 2003, 22:52:04
Ort: Skåne - Lund

Inlägg av RDX* »

För ett tag sedan programmerade jag en regulator till en ball and beam process.
Jag programmerade PID regulatorn i java men den är lätt att översätta till andra språk.

här är en realtidsoptimerad java kod till en PID-regulator.

Kod: Markera allt

y = yIn.get();   	   	//Läser in analogt värde
e = yref - y;    	   	//Felet relativt en referenssignal
D = ad * D - bd * (y - yold); 	// beräknar D-delen
v = K*(beta*yref - y) + I + D;	 //Beräknar styrsignalen (PID)
u = sat(v,umax,umin)} 	//Antiwind-up, sat-funktionen  sätter u till umax om u>umax
uOut.put(u); 			// Skickar ut styrsignalen.
I = I + (K*h/Ti)*e + (h/Tr)*(u - v);	//Beräknar I delen. 
yold = y 			//Sparar gamla invärdet

sleep();			//Sov tills nästa sample

/*
ad och bd är förberäknade konstanter. 
ad=(Td /(Td + N * h))
bd=(K*Td*h)/(Td + N*h)

beta=0.0-1.0, Referens ändrings filtrering 
N=ca 10-20, filtreringskoefficient till D-delen.
K= P viktning
Ti= I viktning
Td= D viktning
h= tid mellan två sample */
för mer info om koden kan du gå in på LTHs kursrealtidssystem , kolla speciellt föreläsning 6.


Film på min reglering! (klicka på "free"-knappen, och vänta i 25 sukunder)

-uppgiften är att jag ska sortera 3 olika stora kulor och kasta dom på olika sätt. Jag använder grafcet till att skifta mellan olika referenser och regleringslägen. Sen i grunden använder jag java för att beräkna styrsignal. Regulatorn jag använder är en kaskadkopplad PI-PID regulator.

Och angående din ubåt så kan jag rekommendera Engel. Dom har både ballasttankar till ubåtar och färdiga regulatorer till dessa.
pagge
EF Sponsor
Inlägg: 933
Blev medlem: 15 juni 2004, 00:15:08
Ort: Luleå
Kontakt:

Inlägg av pagge »

Green: Jo, hade knarkat när jag skrev det där, ändrade det lite.
Och, ja, jag har just läst en enklare reglerkurs ;). Inte för att det jag skrev hade nåt om reglerteori, det var mekanik 1 som jag läste för 5 år (HELVETE!) sen :p. Men det har väl gått igen lite då då i olika kurser.

Min reglerkurs var väldigt basic dock, hade hoppats på lite mer... Har blivit mer å mer intresserad av reglerteknik nu när jag börjat pilla med lite elprojekt och insett att det mesta man bygger innefattar reglerteori. Antingen om man skall styra nåt mekaniskt, eller rent elektrisk feedback i alla dess former.
Användarvisningsbild
Greensilver
Inlägg: 1305
Blev medlem: 21 januari 2005, 21:24:57
Ort: Sverige
Kontakt:

Inlägg av Greensilver »

Japp, det verkar väldigt kul! Tänk att bygga ett process system typ till Arla eller nåt med en massa sensorer, tryckluftsmojänger, löpande band och olika maskiner. Det vore nog rätt kul att jobba med. :)
Skriv svar