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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
danei
EF Sponsor
Inlägg: 27427
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

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

Inlägg av danei »

Nerre: Jag förstår vad du försöker visa, men med en process med integrerande karakteristik så behöver du inte en integrerade del. Du närmar dig noll i reglerfel i vilket fall.

Man man tittar på jesses inplementation så finns det nog lite att fila på. Jag har inte detalj granskat men några synpunkter:
Varför reglerar I delen på förra samplets värden i stället för det nuvarande?
Plocka bort absolutbegränsnignen av I delen.
Lägg inte in en total blockering av förändringar i I delen när du når gränsen för utsignalen, lägg i stället ett villkor att I delen bara får minska om du ligger i taket, och bara öka om du ligger i botten. Annars riskerar du att fastna i extremvärden.

D delen kan man ofta hoppa över i enklare fall, den kan ställa till det.
Ziegler–Nichols självsvängnings metod som någon länkade till tidigare är en vettig metod för att hitta tillräckligt bra parametrar utan att gräva ner sig i beräkingar.
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 »

Många intressanta betraktelser här.

Sodjans exempel med en hiss gav mig en tanke.

Hur fungerar en PID-algoritm beroende på den externa funktionen?

Antag att du har några olika hiss-system som du ska styra med en PID-algoritm. Gemensamt för allihop är att värdet du ska uppnå är hissens läge i meter över marken. T.ex. du matar in 3m och hissen flyttas dit.

1) den ena styr varvtalet på en motor - som driver hissen upp och ner. Signalen kan ha värden mellan +10 och -10 (hastighet)

2) den andra styr hissens läge proportionellt. Signalen kan anta värde mellan 0 och 10 (vilket motsvarar t.ex. antal meters höjd).

3) den tredje signalen styr strömmen till motorn - som då kan accelerera eller bromsa.

Det är ju klart att dessa tre till sin natur är väldigt olika system. (2) är t.ex. integralen av (1). Det måste ju innebära ganska stor skillnad i hur reglermekansimen ska fungera. (Detta var väl mer ett konstaterande.... utan att jag drar nån direkt slutsats av det just nu :oops: )

------------------------------------------------------------------------------

Men varför bara P i PID-regulatorn inte fungerar:

exempel:
Du vill ha ut 25.0 ampere.

bör-värde = 25A
är-värde = 10A
P = felet, dvs. 15A

Om man hade lagt till P till utsignalen, dvs. Ut(n) = Ut(n-1) + P*K, så hade ju utsiglalen sakta ökat till man närmar sig rätt värde.
Men Jag sätter ju Ut(n) = P*K. Alltså, när felet minskar så minskar även utsignalen. Jag kan aldrig nå upp till 25A. Jag kanske kan sätta K till ett stort värde och förstärka upp P enormt - då kan utsignalen komma upp så högt att närmar mig rätt värde - problemet är att K > 0.5 gör systemet instabilt.

Om jag däremot ökar utsignalen med en faktor proportionell mot felet så kommer jag ju närmare lösningen för varje steg. Men det är ju att integrera - och det är ju precis det jag gör med I-delen. Så ju mer jag funderar över detta så verkar det som om just den här funktionen behöver ha en väldigt stor Integrerande del. Den liknar ju hiss nr (2). Hade det varit hiss nr (1) eller (3) så hade det sett helt annorlunda ut.

------------------------------------------------------------------------------

Mitt laddarsystem liknar ju mest (2) , eftersom signalen är proportionell mot 'bör'-värdet (10A ut = 1 volt in och 20A ut = 2 volt in, förenklat). Hade det bara varit så enkelt hade det ju inte behövts någon återkoppling alls - bara att sätta in rätt värde. Men det finns en liten okänd avvikelse i förstärkning som måste kompenseras för. Dessutom kan referensen plötsligt flytta på sig. Som om hela hiss-systemet satt monterat på en plattform som plötsligt kan ändra nivå några meter. Då måste det ske en ganska kraftig kompensation utan allt för stort översläng.

Egentligen ser min "process" ut så här:

Curr = (U - V1) * K - S;

U = den signal som jag ska generera, 2-5 volt.
K = förstärkningen. (varierar med olika hårdvara, men ett verkligt exempel är K = 8.33.)
V1 är ungefär 2.0 volt, i verkligheten mellan1,98 - 2,04 volt.
S = "störning". Kan variera snabbt mellan 0 och 10. Håller sig långa perioder på samma nivå för att plötsligt ändra värde.

Lägger man till fördröjning på U så börjar det likna verkligheten (men det vet jag inte hur man skriver matematiskt, kanske f(U) ?).
Fördröjningen är komplex och består både av ett lågpassfilter och en "ramp" och eventuellt en okänd komponent. Om jag t.ex. har signalen = 2 volt och ändrar snabbt till 5 volt kommer strömmen att rampa upp från 0 till 25 ampere under några sekunder.

I min 'calc'-fil skapar jag en fördröjning enbart genom att ta ett genomsnitt av fyra föregående värden. I verkligheten är fördröjningen antagligen längre.

Om man ska glömma PID-teorin för en stund och istället bara titta på formeln ovan kan man ju räkna baklänges:

Curr = (U - V1) * K - S;

-->

U = (Curr+S)/K+V1

Här hade man ju kunnat ersätta Curr med 'bör-värdet' , men eftersom S är okänd, så blir det svårt att få ut något vettigt alls utan återkoppling.
Jag vet inte om man skulle kunna dra några slutsatser från den här enkla formeln? Hur man lämpligast utformar styrningen t.ex?
Användarvisningsbild
NULL
Inlägg: 2522
Blev medlem: 15 september 2010, 12:59:25
Ort: Örebro

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

Inlägg av NULL »

När jag för hundra år sen höll på med PID-regulatorer, hade en del "vilkor'at" området för regleringen.
Typ:
error > -100grader => out = 100%
error < +100grader => out = 0%
else PID-reglering
(i det här fallet vet man att overshoot'et aldrig går under/över en viss nivå)
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 »

NULL: Ja, jag har funderat lite på det också. Sätter man lite "limits" så riskerar inte PID-regleringen att balla ur helt. Då håller man sig i alla fall inom rätt härad.
Skriv svar