PID-regulator ... tänker jag rätt?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

PID-regulator ... tänker jag rätt?

Inlägg av jesse »

eh.. ska försöka formulera mig så att det går att begripa frågeställningen ...

Jag har gjort en modell av en PID-regulator i ett open-office-calc dokument. Den exakta modellen av den externa processen känner jag inte till helt och hållet (fördröjning / förstärkning etc. är inte helt kända), men på ett ungefär.

Värdet jag ska reglera är en ström mellan 0 och 25 ampere. Utsignalen är en analog spänning på 2-5 volt som styr strömmen någorlunda proportionellt. Men det kan förekomma plötsliga avvikelser på flera ampere som måste kompenseras för. Modellen fungerar som jag önskar.

Men det jag undrar över är egentligen de tre parametrarna - P, I och D. Som det är nu så verkar det som om det är parametern I som har den viktigaste rollen - ja, man kan faktiskt helt ta bort de andra två och jag har en ungefär lika bra reglering ändå. Utan den så fungerar det inte alls. Kan det vara så? Jag funderar bara på om jag på något vis använd den här PID-algoritmen på ett udda eller felaktigt sätt på något vis? Jag trodde det var P-variabeln som var den viktigaste, "grunden", och de båda andra, I och D bara kompenserade för mindre fel.

Bifogar .ods filen samt en bild. Tar även med lite kod. (Har ej kunnat testa koden i praktiken än, då jag inte har all hårdvara tillgänglig).
PID simulator.png
X-axeln är tiden i sekunder. under 14-17 sek läggs en störning på utifrån (en last börjar dra ström som måste kompenseras för).
PID-formeln visas i inmatningsfönstret på bilden.


kod:

Kod: Markera allt

/// reglerar laddarens ut-ström. kompenserar mot snabba förändringar.
/// anropas 15 ggr/sek
/// set_point och measured_val är ampere*100. (25.00A = 2500)
void PID_regulator()
{
	const u8 K_faktor = 5; //  betyder att förstärkningen är 1 / 2^K_faktor
	const u8 K = (1 << K_faktor);
	static s32 Pold, I;
	s32 P,D,out;
	
	if (!PID.run) 
	{
		/* stäng av - återställ värden */
		I = 0;
		Pold = 0;
		PID.softstart = 0;
		PID.set_curr = 0;
		out = 0;
	}
	else
	{
		/*** sätt önskat värde ***/
		s16 want = PID.set_curr;
		if (want > PID.max_curr) want = PID.max_curr;
		if (want > PID.softstart) want = PID.softstart;
		if (PID.softstart < PID.max_curr) PID.softstart += 3; // öka 0.03*15 A / sek = 1 ampere på 2.22 sek eller 25A på 56 sek.
		else if (PID.softstart > PID.max_curr) PID.softstart--;
			
		/*** beräkna PID-variablerna ***/
		P = PID.set_curr - PID.is_curr; // skillnad - Proportionell
		I += Pold;						// intregral del
		D = P - Pold;					// derivativ del
		Pold = P;					// minns tidigare skillnad
			
		/*** begränsa I -delen ***/
		if (I > 1200L * K) I = 1200L * K;
		else if ( I < -1200L * K) I = -1200L * K;
			
		/*** beräkna utsignal ***/
		out = (P + I + D) >> K_faktor; // K = 0.03125
			
		/*** justera utsignal till tillåtet område ***/
		if (out < 0)
		{
			out = 0;
			Pold = 0; // öka inte på integraldelen vid overflow!
		}
		out += 400; // botten PWM = 2.00 volt
		if (out > 1023)
		{
			out = 1023; // max PWM
			Pold = 0; // öka inte på integraldelen vid overflow!
		}
	}
	

	
	/*** skicka ut signal ***/
	SetPWM(out);
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PID-regulator ... tänker jag rätt?

Inlägg av sodjan »

Det låter lite underligt, utan "P" så har du ingen absolut referens mellan in och utsignal alls.
I och D är bara rellativa till ett föregående läge, ingen av dom ger någon absolut nivå.
Som jag minns det:

P: Sätter entydigt den önskade utsignalen ("förstärkningen").
I: Hjälper till att fånga upp små fel (t.ex från statiska belastningar)
D: Hjälper till att fånga upp snabba ändringar.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: PID-regulator ... tänker jag rätt?

Inlägg av blueint »

Kanske simuleringen saknar relevant brus för att ge realistiska förutsättningar?
Användarvisningsbild
psynoise
EF Sponsor
Inlägg: 7226
Blev medlem: 26 juni 2003, 19:23:36
Ort: Landvetter

Re: PID-regulator ... tänker jag rätt?

Inlägg av psynoise »

Finns inget som säger att alla termer måste vara med. Inomhustemperatur i ett hus styrs lämpligen via en I-regulator.
Användarvisningsbild
kimmen
Inlägg: 2042
Blev medlem: 25 augusti 2007, 16:53:51
Ort: Stockholm (Kista)

Re: PID-regulator ... tänker jag rätt?

Inlägg av kimmen »

Om man implementerar den där formeln från Wikipedia

\(u(t) = K(r(t)-y(t) + \frac{1}{T_i} \int_{0}^{t} (r(\tau) - y(\tau)) d\tau + T_d \frac{d(r(t)-y(t))}{dt})\)

så går det ju inte att vara utan P-del om man vill ha någon reglering över huvud taget, men med en alternativ implementation på formen

\(u(t) = K_p(r(t)-y(t)) + K_i \int_{0}^{t} (r(\tau) - y(\tau)) d\tau + K_d \frac{d(r(t)-y(t))}{dt}\)

så går det ju att få reglering med endast I-del.

Om man har I-del går felet mot 0 när tiden går mot oändligheten om störningar och referens är ickevarierande. Fördelen med att också ha P-del är att regleringen blir snabbare. Vissa processer är dessutom omöjliga att reglera stabilt med endast I-del.

Om man tar ditt exempel här och använder endast I-reglering (försummande samplingen och fördröjning och liknande hos spänningskällan) så får man ju en krets som är en tvåpol som beter sig enligt

\(u(t) = K_i \int_{0}^{t} (i_{ref}(\tau) - i(\tau)) d\tau\)

där u(t) är terminalspänningen och i(t) utströmmen. Detta är ju samma egenskap som man får av en ideal strömgenerator givande strömmen \(i_{ref}(\tau)\) i parallell med en kondensator med kapacitansen \(K_i\). Man skulle kunna säga att regulatorn simulerar den kretsen. Lägger man till P-delen får man ett motstånd i serie med kondensatorgrenen med resistansen \(K_p\) och med D-del simulerar man även induktans.

Att köra med endast I-reglering fungerar bra så länge systemet man försöker reglera har mindre än 45 graders fasfördröjning vid den skärfrekvens man vill ha om man siktar på 45 graders fasmarginal (max 30 grader om man vill ha 60 graders marginal).
Användarvisningsbild
Greve Hamilton
EF Sponsor
Inlägg: 544
Blev medlem: 4 september 2004, 15:03:35
Ort: GBG

Re: PID-regulator ... tänker jag rätt?

Inlägg av Greve Hamilton »

Har inte tittat på .ods-filen, men som jag förstår din kod kör du med samma koefficient för alla delar (P, I och D). Du bör ju snarare implementera den något i stil med:

e := want-meas
I := I + e*dt
D := (e - e_old)/dt
e_old := e
out := Kp*e + Ki*I + Kd*D

Samt anti-windup på integreringen och andra detaljer. Men som sagt, det finns inget som säger att inte enbart I-verkan skulle fungera. Det beror ju så klart på önskad snabbhet/störkänslighet etc. Men du borde kunna se en klar skillnad med/utan P-del om du gör stegsvarsimuleringar.
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1353
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Re: PID-regulator ... tänker jag rätt?

Inlägg av baron3d »

Du har rätt! Det går att bara använda I. Men det blir INTE bra.
Vanligt är bara P. Om ditt P inte har så stor effekt, så är P för liten!

P är den faktorn som sköter regleringen, I fixar bara till det i slutändan, liksom.

Till börja med sätt D=0. D bara krånglar till det. När allt fungerar lägger du till D.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: PID-regulator ... tänker jag rätt?

Inlägg av jesse »

Tack för svaren.

Kimmen: eh.. lite för sent på kvällen just nu för att hänga med i resonemanget...

Hamilton: Jo, jag vet, men eftersom det i min simulering fukande bäst när alla tre var lika så förenklade jag lite :wink:

3d: Det är så jag tänker också. Problemet är att den blir instabil innan jag kommer upp i Kp-värde tillräckligt stort för att kunna reglera. Kp måste vara litet.

(jag kapade bort titeln "Greve" från Hamilton, så därför tog jag även bort baron från 3d. Det ska ju vara rättvist! :D )
svanted
Inlägg: 5280
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: PID-regulator ... tänker jag rätt?

Inlägg av svanted »

teoretiskt....
har man ingen fasföskjutning i systemet behöver man inte I och D bara P.
har man en med viss fasförskjutning går det inte att ha full P, det ger då självsvängning, vid vissa frekvenser, det blir det när
frekvensen när fasförskjutningen är 180° och förstärkningsfaktorn > 1,
därför sänker man P till under 1 och lägger till I dvs felet multiplicerat med en konstant....
som ger rätt slutvärde men efter en viss tid..
och för att kompensera för "I"s fördröjning lägger man till D som förstärker snabba förlopp...


att simulera PID med ett teoretiskt system utan fördröjningar säger e.g. ganska lite...
iom att man kan ta bort I och D utan att få självsvängning...

edit:
tänkte fort där...
har inte riktigt koll på vad jag menade med "P till under 1", ska fundera sen.... :?
edit igen..
ska vara 360° och inte 180...
lämnar tråden nu.... :)
Senast redigerad av svanted 9 september 2013, 15:04:12, redigerad totalt 4 gånger.
Nerre
Inlägg: 27229
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: PID-regulator ... tänker jag rätt?

Inlägg av Nerre »

Med bara P så uppnår man ju aldrig bör-värdet?

Det är ju P-regleringen som är "felet multiplicerat med en konstant"?

Utsignal = K * (bör - är)
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: PID-regulator ... tänker jag rätt?

Inlägg av Walle »

Svanted kanske menar det ackumulerade felet gånger en konstant? För det är väl just det I är? Poängen är väl i alla fall delvis att I ska kompensera för många småfel (t.ex. avrundningsfel) som ackumuleras över tiden?
Användarvisningsbild
SeniorLemuren
Inlägg: 8427
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: PID-regulator ... tänker jag rätt?

Inlägg av SeniorLemuren »

Lite läsbart om PID-reglering:
Idiot Guide to PID Algorithm.pdf
Ziegler-Nicholsmetoden.pdf
Edit: A PID controller example explained in simple words:
PID Theory.pdf
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av SeniorLemuren 9 september 2013, 10:05:03, redigerad totalt 1 gång.
svanted
Inlägg: 5280
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: PID-regulator ... tänker jag rätt?

Inlägg av svanted »

det borde man, se Utsignalen som en drivspänning till servomotorn...
i en hypotetisk servostyrning...

med bör = 1
är = 0.5
K = 1
då kommer servomotorn att få +0.5V och att typ snurra medurs och felet minskar,

men om K är liten kommer man att nå en så låg spänning att motorn inte snurrar alls trots att det finns ett fel,
här kommer I in, om man adderar felet över tid ökar det utspänningen ovanför motorns tröskelspänning tills det lilla felet är åtgärdat...
Nerre
Inlägg: 27229
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: PID-regulator ... tänker jag rätt?

Inlägg av Nerre »

Walle skrev:Svanted kanske menar det ackumulerade felet gånger en konstant? För det är väl just det I är? Poängen är väl i alla fall delvis att I ska kompensera för många småfel (t.ex. avrundningsfel) som ackumuleras över tiden?
Nej, I ska se till att man uppnår börvärdet.

Grejen är ju att ju närmare bör-värdet man kommer desto mindre blir felet, och desto mindre blir signalen som ska ta dig mot felet.

Om vi ett exempel med en enkel reglering med en P-faktor på 0,5 och ska göra ett "steg" från 0 till 10. Och så räknar vi "diskret" för varje sekund istället för kontinuerligt (för att det blir tydligare).

Vid T=0 är felet 10 och styrsignalen blir 5.
Vid T=1 är är-värdet 5, felet är också 5 och styrsignalen blir 2,5.
Vid T=2 är är-värdet 7,5, felet är 2,5 och styrsgnalen blir 1,25.
Vid T=3 är då är-värdet 8,75

Som du ser konvergerar är-värdet mot bör-värdet men eftersom felet minskar så kommer styrsignalen att minska så vi kommer aldrig att nåt riktigt hela vägen fram.

Det är det som I-regleringen kompenserar för.


När vi läste reglerteknik i plugget så hade boken fina kurvor som visade just problemet med ren P-reglering och hur I fixade det, men jag har inte lyckats googla fram några såna kurvor:(
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PID-regulator ... tänker jag rätt?

Inlägg av sodjan »

Ett problem utan "I" är att om det finns en statisk belastning
på systemet (tänk en vanlig hiss) så kommer det hela att
stanna då styrsignalen är samma som belastningen. Beroende
på hur "flexiblelt" systemet är så kan hissen stanna med en tröskel.
"I" ser till att hissen krypkör den sista biten...

Sen så kanske man har andra givare i just en hiss, men i princip...
Skriv svar