← Back to CoursesStemExpert
StemExpert
Expert · Handboek · 39. PID-regeling
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
E39. PID-regeling
EExpert · deel E8 · Regeltechniek

Handboek · hoofdstuk 39PID-regeling

Drie getallen die van een verwarming, een drone of een insulinepomp een regelaar maken

Een aan/uit-thermostaat schommelt, een P-regelaar komt er nooit helemaal, en een slecht afgestelde regelaar slingert of schiet ver door. De PID-regelaar lost dat op met drie acties: reageren op de fout, op hoe lang ze al duurt, en op hoe snel ze verandert. Je leidt af waarom elke actie doet wat ze doet, simuleert de temperatuurregeling van het station, en schrijft een regelaar die op een microcontroller draait.

5× uitleg2× uitgewerkt voorbeeld1× ontleed1× naslag1× verhaal1× het geheel2× code11 opdrachten in het werkboek± 10 lestijden
Regelen is meten, vergelijken en bijsturen, elke seconde opnieuw.
Regelen is meten, vergelijken en bijsturen, elke seconde opnieuw.
Na dit hoofdstuk
Verhaal · 39.1

Een stuurman in drie reflexen

1/13

In 1922 publiceerde de Russisch-Amerikaanse ingenieur Nicolas Minorsky een artikel over het automatisch sturen van schepen. Hij had bekeken hoe een ervaren stuurman werkt, en zag drie reflexen. Hij draait aan het roer in verhouding tot hoe ver het schip van koers is. Hij draait harder bij als het schip al lang aan dezelfde kant uit de koers ligt, bijvoorbeeld door een zijwind. En hij remt zijn eigen correctie af als hij ziet dat het schip al snel terugdraait, zodat het niet voorbij de koers zwaait.

Die drie reflexen schreef Minorsky als één formule: een term evenredig met de fout, een term evenredig met de opgestapelde fout, en een term evenredig met de verandering van de fout. Dat is de PID-regelaar: proportioneel, integrerend, differentiërend. Een eeuw later zit hij in thermostaten, cruisecontrols, drones, 3D-printers, chemische fabrieken en insulinepompen. Het idee van automatisch terugkoppelen is nog ouder: de centrifugaalregulateur die James Watt rond 1788 op zijn stoommachines zette, was al een proportionele regelaar van het toerental.

Waarom dit hoofdstuk ertoe doet

In Intermediate regelde je met aan/uit en hysterese (hoofdstuk 31). Dat werkt, maar de temperatuur schommelt altijd. Het brein van het station moet de binnentemperatuur, de vochtigheid en de waterdruk strak houden, met zo weinig mogelijk energie. Daarvoor heb je PID nodig, en het model van het station uit hoofdstuk 38.

De regulateur van Watt: draait de machine te snel, dan zwaaien de bollen naar buiten en knijpen ze de stoomtoevoer dicht.
De regulateur van Watt: draait de machine te snel, dan zwaaien de bollen naar buiten en knijpen ze de stoomtoevoer dicht.
Uitleg · 39.2

De regelkring: symbolen en afspraken

2/13

Elke regeling heeft dezelfde bouw. Een proces (het station met zijn warmtecapaciteit en warmteverlies) wordt gestuurd door een actuator (de verwarming). Een sensor meet de geregelde grootheid . De regelaar vergelijkt de meting met het setpoint , berekent de fout en stuurt daaruit de stuurgrootheid . Van buitenaf werken storingen in: een deur die opengaat, wind, een ploeg die binnenkomt.

Het procesmodel komt uit hoofdstuk 38. Kies als geregelde grootheid de temperatuurstijging boven de buitentemperatuur (in °C). Een warmtebalans geeft een eerstegraadsvergelijking:

procesmodel van het station
(3 uur) is de tijdconstante, de statische versterking: 1000 W houdt het station op den duur 20 °C warmer dan buiten, of: het station verliest per graad verschil. Samen geven ze de warmtecapaciteit : de snelle massa (lucht, binnenwanden en inrichting die binnen enkele uren meewarmen). De verwarming levert . We rekenen het station hier als één ruimte op één temperatuur; in werkelijkheid heeft de klimaatmodule haar eigen, lagere setpoint (hoofdstuk 31 van Intermediate), en hoofdstuk 17 splitst het model in knopen.

Met constant en gaat exponentieel naar , met tijdconstante (hoofdstuk 4). Regelen betekent: zo kiezen, op elk ogenblik, dat snel en zonder slingeren bij komt en er blijft, ook als verandert.

rsetpointΣ+−ePID-regelaaru = f(e)u (W)verwarming + stationτ·dy/dt = −y + K·ustoring d (deur open, wind)ysensormeting
De sensor koppelt terug: de regelaar ziet niet het proces zelf, alleen de meting ervan.
Uitleg · 39.3

De P-actie: evenredig met de fout

3/13

De eenvoudigste regelaar maakt evenredig met de fout: . Is het 5 °C te koud en , dan stuurt hij 500 W. Vul die regelwet in het procesmodel in (zonder storing, en zolang tussen 0 en 2000 W blijft):

De gesloten lus is weer een eerstegraadssysteem, met twee eigenschappen die je er meteen uit leest:

P-regeling van een eerstegraadsproces
Het product (de lusversterking, zonder eenheid) bepaalt alles: hoe groter, hoe sneller, en hoe kleiner de blijvende afwijking. Maar nooit nul.

Waarom blijft er een fout? Omdat de P-regelaar alleen vermogen levert als er een fout is. Het station verliest continu warmte; om 12 °C boven buiten te blijven, is nodig, en een P-regelaar met levert die 600 W alleen bij een fout van 3 °C. Evenwicht betekent dus: precies zoveel fout dat het vermogen het verlies dekt.

Een grote Kp is geen oplossing

In dit ideale model mag onbeperkt groeien. In werkelijkheid botst je op de grens van de actuator (de curve voor start met 2000 W, niet met 6000 W), op ruis die versterkt naar de actuator gaat, en op vertragingen in sensor en proces die de lus bij hoge versterking laten slingeren.

01234567890246810121416t (h)y (°C)setpoint 15 °CKp = 100 W/°CKp = 200 W/°CKp = 400 W/°C
Drie P-regelaars: hoe groter Kp, hoe sneller en hoe dichter bij 15 °C, maar geen enkele komt er.
Uitgewerkt voorbeeld · 39.4

P-regeling van het station doorrekenen

4/13

Het station staat op buitentemperatuur (). Het setpoint springt naar boven buiten. De regelaar is een P-regelaar met . Bereken de eindtemperatuur, het eindvermogen, de blijvende afwijking en de tijd tot 95 % van de eindwaarde. Controleer of de verwarming ergens aan haar grens komt.

Gegeven
  • ,
  • ,
Gevraagd
  • , ,
Oplossing
  1. 1
    Lusversterking: (eenheden: °C/W · W/°C, dus zonder eenheid).
  2. 2
    Blijvende afwijking: , dus .
  3. 3
    Eindvermogen: . Controle met het proces: . Klopt.
  4. 4
    Begrenzing: het grootste vermogen is er bij de start, . De verwarming raakt haar grens niet, dus het lineaire model geldt.
  5. 5
    Tijdconstante van de gesloten lus: , precies één uur.
  6. 6
    Een eerstegraadssysteem bereikt 95 % na (want ): .
Antwoord
, , , en na 3 uur zit het station op 95 % daarvan (9,5 °C). Een derde van de gevraagde stap blijft ontbreken.
Klopt dit? De simulatie in de grafiek hiervoor geeft voor na negen uur 10,00 °C: dezelfde uitkomst als de formule. Zonder regeling zou 500 W het station óók op 10 °C brengen, maar pas na uur: de regelaar maakt het drie keer sneller.
Uitleg · 39.5

De I-actie: het geheugen van de regelaar

5/13

Voeg een term toe die de fout optelt over de tijd:

PI-regelaar
in W/(°C·s). Zolang er een fout is, groeit de integraal en dus .

Het argument waarom de blijvende afwijking verdwijnt, is kort en krachtig. Stel dat de lus tot rust komt: alles is constant, ook . Dan is ook de integraal constant, dus haar afgeleide is nul. Maar die afgeleide is de fout: . In een rusttoestand is de fout dus precies nul, welke storing er ook werkt. De I-term levert dan in zijn eentje de 750 W die nodig zijn om 15 °C boven buiten te blijven.

De prijs: de integraal reageert pas nadat er fout opgestapeld is, en ze blijft reageren nadat de fout al van teken gewisseld is. Daardoor kan de temperatuur voorbij het setpoint schieten. Wiskundig voegt de I-actie een orde toe: de gesloten lus wordt een tweedegraadssysteem, dat kan slingeren (hoofdstuk 38).

Eenheden als controle

moet watt zijn, dus in W/°C. heeft als eenheid °C·s, dus in W/(°C·s). Vaak schrijft men met een integratietijd in seconden: na seconden constante fout heeft de I-term evenveel bijgedragen als de P-term.

01234567890246810121416t (h)y (°C)setpointP: Kp = 400PI: Kp = 400, Ki = 0,11
PI (0,7 % doorschot) haalt het setpoint; P met dezelfde Kp blijft 1,7 °C te laag.
Uitleg · 39.6

De D-actie: vooruitkijken

6/13

De derde term reageert op de snelheid waarmee de fout verandert:

PID-regelaar
in W·s/°C. Of met afgeleide tijd : .

Stijgt de temperatuur snel naar het setpoint, dan daalt de fout snel: is negatief en de D-term neemt vermogen terug nog voor het setpoint bereikt is. Dat is demping: de regelaar remt af voor de bocht. Het effect is het grootst waar er vertraging in de lus zit, zoals een trage sensor: zonder D reageert de regelaar op een meting die achterloopt.

Twee praktische regels maken de D-actie bruikbaar:

  • D op de meting, niet op de fout. Als het setpoint springt, springt ook, en wordt één ogenblik oneindig groot: een schok naar de actuator (derivative kick). Omdat en tussen twee sprongen constant is, geldt . Neem dus de afgeleide van de meting, met een min.
  • Filter de D-term. Afleiden versterkt ruis: een meting die 0,1 °C op en neer springt tussen twee samples van 1 s, geeft met sprongen van 6000 W. Filter de meting eerst (hoofdstuk 21), of laat de D-actie weg. Veel industriële regelaars zijn gewoon PI.
0123456789024681012141618t (h)y (°C)setpointPIPID (Kd = 500 000)
Met een meting die een halfuur achterloopt (de warmte moet zich eerst door het station verspreiden): de D-actie verlaagt het doorschot van 15,6 naar 11,2 % en de insteltijd van 5,6 naar 3,0 uur.
Ontleed · 39.7

Een staprespons lezen

7/13

Om regelaars te vergelijken, geef je een stap op het setpoint en meet je vijf kenmerken. Hier: de PI-regelaar met en , met anti-windup, van 0 naar 15 °C.

0123456789024681012141618t (h)y (°C)PI: Kp = 200, Ki = 0,17
De stippellijnen bij 14,7 en 15,3 °C zijn de band van ±2 %; de verticale lijn is de insteltijd.
Wijs een nummer aan: de figuur zoomt in. Klik om vast te zetten.
  1. 1
    Stijgtijd

    Tijd van 10 % naar 90 % van de stap: hier 67 minuten (van 7 tot 74 min). Maat voor snelheid.

  2. 2
    Verzadiging

    Het eerste stuk loopt de verwarming op haar maximum van 2000 W (40,7 minuten). Sneller kan niet, hoe je ook afstelt.

  3. 3
    Doorschot en piektijd

    Piek 16,91 °C na 2,1 uur: 12,8 % doorschot. Een verwarming mag wat doorschieten; een chemische reactor of een robotarm vaak niet.

  4. 4
    Insteltijd

    Vanaf 4,3 uur blijft de temperatuur binnen ±2 % (±0,3 °C) van het setpoint.

  5. 5
    Blijvende afwijking

    Na negen uur 15,01 °C: praktisch nul, dankzij de I-actie.

Naslag · 39.8

Formules, vuistregels en afstelling

8/13
PID, parallelvorm
symboolbetekeniseenheid
fout r − y°C
proportionele versterkingW/°C
integrerende versterkingW/(°C·s)
differentiërende versterkingW·s/°C
PID, standaardvorm
symboolbetekeniseenheid
integratietijds
differentiatietijds
discrete PID (D op de meting)
symboolbetekeniseenheid
bemonsteringstijds
nummer van het sample–
parameter omhoogstijgtijddoorschotinsteltijdblijvende afwijking
kortergroterweinig effectkleiner
kortergroterlangerverdwijnt
weinig effectkleinerkortergeen effect

Vuistregels, geen wetten: bij een proces met veel vertraging of bij verzadiging kan een parameter het omgekeerde doen.

Ziegler-Nichols (gesloten lus)
P––
PI–
PID

: de P-versterking waarbij de lus net aanhoudend slingert; : de periode van die slingering.

Code · 39.9

De regeling simuleren

9/13

Een simulatie laat je regelaars uitproberen zonder het station te laten bevriezen. De procesvergelijking wordt stap per stap vooruit gerekend met de methode van Euler (hoofdstuk 4): elke seconde meten, berekenen, begrenzen, en een stapje verder zetten. Alle grafieken van dit hoofdstuk zijn met deze code gemaakt.

Pythonpid_station.py30 regelsDownload
# PI(D)-regeling van de stationtemperatuur: simulatie met de methode van EulerTAU = 10800.0     # tijdconstante van het station (s): 3 uurK = 0.02          # statische versterking (graden Celsius per watt)U_MAX = 2000.0    # vermogen van de verwarming (W)  def simuleer(Kp, Ki, Kd=0.0, r=15.0, T=32400, dt=10.0, anti_windup=True):    y = 0.0               # temperatuurstijging boven de buitentemperatuur (graden Celsius)    integraal = 0.0    vorige = y    tijden, temps = [], []    for k in range(int(T / dt) + 1):        e = r - y        afgeleide = -(y - vorige) / dt           # D op de meting: geen sprong bij een nieuw setpoint        u_vrij = Kp * e + Ki * integraal + Kd * afgeleide        u = min(max(u_vrij, 0.0), U_MAX)          # de verwarming kan enkel 0 tot 2000 W leveren        verzadigd = u != u_vrij        if not (anti_windup and verzadigd and (u_vrij > 0) == (e > 0)):            integraal += e * dt                   # anti-windup: niet verder integreren tegen de grens        vorige = y        y += dt * (-y + K * u) / TAU              # Euler-stap van tau * dy/dt = -y + K * u        tijden.append(k * dt)        temps.append(y)    return tijden, temps  t, y = simuleer(Kp=200, Ki=0.17)print("met anti-windup:   maximum %.2f, na negen uur %.2f" % (max(y), y[-1]))t, y = simuleer(Kp=200, Ki=0.17, anti_windup=False)print("zonder anti-windup: maximum %.2f, na negen uur %.2f" % (max(y), y[-1]))

Uitvoer:

met anti-windup:   maximum 16.91, na negen uur 15.01
zonder anti-windup: maximum 22.85, na negen uur 14.95

Let op drie details. De begrenzing min(max(...)) is geen detail: elke echte actuator heeft grenzen. De integraal telt op, dus de eenheid klopt. En de stapgrootte van 10 s is klein tegenover s: de Euler-fout is verwaarloosbaar (probeer s en kijk wat er gebeurt).

Uitleg · 39.10

Integrator-windup en anti-windup

10/13

Bij de start is de fout 15 °C. De regelaar vraagt meer dan 2000 W, maar de verwarming kan niet meer. Zolang dat duurt, is het station trager dan de regelaar 'denkt', en de integraal blijft oplopen met een fout die niet sneller kleiner kan worden. Tegen dat het setpoint bereikt is, zit er zoveel opgestapelde fout in de integraal dat de regelaar nog lang vol blijft stoken: de temperatuur schiet ver door. Dat heet integrator-windup.

De remedie is eenvoudig: stop met integreren zolang de actuator aan zijn grens zit en de fout hem verder die grens in zou duwen. In de code is dat één voorwaarde. Het resultaat in cijfers: zonder anti-windup 22,8 °C piek (52 % doorschot), met anti-windup 16,9 °C (13 %). De verwarming staat zonder anti-windup 147,7 minuten op vol vermogen, met anti-windup 40,7 minuten.

"Windup is een programmeerfout"

Windup gebeurt ook in een perfect geprogrammeerde PID. Het is een wisselwerking tussen de I-actie en de begrenzing van de actuator, die in de formule van de PID niet voorkomt. Daarom moet je die begrenzing expliciet in je regelaar inbouwen.

012345678904812162024t (h)y (°C)setpointzonder anti-windupmet anti-windup
Temperatuur: zelfde Kp en Ki, alleen de anti-windup verschilt.
01234567890500100015002000t (h)u (W)zondermet
Vermogen: zonder anti-windup blijft de verwarming te lang op 2000 W staan.
Uitgewerkt voorbeeld · 39.11

Afstellen met Ziegler-Nichols

11/13

Op het echte station (met een trage sensor en wat dode tijd) zet een technicus de I- en D-actie uit en verhoogt ze tot de temperatuur net blijvend slingert. Dat gebeurt bij ; de slingering heeft een periode (72 minuten). Bereken de instellingen voor een PI- en een PID-regelaar, in de parallelvorm (, , ).

Gegeven
Gevraagd
  • PI: ,
  • PID: , ,
Oplossing
  1. 1
    PI volgens de tabel: en .
  2. 2
    Omrekenen naar de parallelvorm: .
  3. 3
    PID: , , .
  4. 4
    Parallelvorm: en .
Antwoord
PI: , . PID: , , (eenheden zoals hierboven).
Klopt dit? Ziegler-Nichols mikt op een respons die per slingering tot een kwart uitdooft: snel, maar met flink doorschot. Zie het als startpunt. Voor een verwarming verlaag je daarna meestal Kp en Ki met 20 à 40 % en meet je opnieuw. Een zuiver eerstegraadsproces zonder vertraging slingert trouwens nooit: daar bestaat geen Ku.
Code · 39.12

De regelaar op een microcontroller

12/13

Op het station draait de regelaar op een microcontroller. Drie verschillen met de simulatie: de bemonsteringstijd wordt bewaakt met millis() (hoofdstuk 29 van Intermediate), de temperatuur komt van een echte sensor, en een verwarming van 2 kW stuur je niet met PWM van 490 Hz aan maar met een solid-state relais (SSR) dat per venster van 5 s een deel van de tijd aanstaat (tijdproportionele sturing).

C++ (Arduino)pid_station.ino54 regelsDownload
// Discrete PI(D)-regelaar voor de stationtemperatuur (Arduino)// Sensor: TMP36 op A0 (10 mV per graad, 0,5 V bij 0 graden). Actuator: SSR met tijdproportionele sturing.const float KP = 200.0;                  // W per graadconst float KI = 0.17;                   // W per (graad * s)const float KD = 0.0;                    // W * s per graadconst float U_MAX = 2000.0;              // Wconst unsigned long DT_MS = 1000;        // bemonsteringstijd: 1 sconst unsigned long VENSTER_MS = 5000;   // tijdvenster van het SSR: 5 sconst int SSR_PIN = 8; float setpoint = 20.0;                   // gewenste binnentemperatuur (graden Celsius)float integraal = 0.0;float vorigeMeting = 0.0;float u = 0.0;                           // gevraagd vermogen (W)unsigned long vorigeRegeling = 0;unsigned long vensterStart = 0; float leesTemperatuur() {  float spanning = analogRead(A0) * 5.0 / 1023.0;  return (spanning - 0.5) * 100.0;} void setup() {  pinMode(SSR_PIN, OUTPUT);  Serial.begin(115200);  vorigeMeting = leesTemperatuur();} void loop() {  unsigned long nu = millis();  if (nu - vorigeRegeling >= DT_MS) {    // elke seconde: meten en regelen    vorigeRegeling += DT_MS;    float dt = DT_MS / 1000.0;    float meting = leesTemperatuur();    float e = setpoint - meting;    float afgeleide = -(meting - vorigeMeting) / dt;   // D op de meting    vorigeMeting = meting;    float uVrij = KP * e + KI * integraal + KD * afgeleide;    u = constrain(uVrij, 0.0, U_MAX);    bool verzadigd = (u != uVrij);    if (!(verzadigd && ((uVrij > 0) == (e > 0)))) {      integraal += e * dt;               // anti-windup    }    Serial.print(meting);    Serial.print(',');    Serial.println(u);  }  // tijdproportioneel: het SSR staat u / U_MAX van elk venster van 5 s aan  if (nu - vensterStart >= VENSTER_MS) {    vensterStart += VENSTER_MS;  }  unsigned long aanTijd = (unsigned long)(u / U_MAX * VENSTER_MS);  digitalWrite(SSR_PIN, (nu - vensterStart) < aanTijd ? HIGH : LOW);}

Het venster van 5 s is kort tegenover de tijdconstante van 3 uur: het station 'ziet' alleen het gemiddelde vermogen. De TMP36 geeft 10 mV per graad met 0,5 V bij 0 °C; met de 10-bits ADC van een Uno op 5 V is één stap ongeveer 0,49 °C. Dat is grof voor een D-actie, en precies waarom KD hier op nul staat.

230 V is geen oefenmateriaal

Een SSR schakelt netspanning. In de klas werk je met een vermogensweerstand of een lamp op 12 V en een MOSFET (hoofdstuk 23 van Intermediate). Het principe en de code zijn dezelfde.

Het geheel · 39.13

Waar PID vandaan komt en waar het heen gaat

13/13

PID is het punt waar bijna alle leerlijnen samenkomen: het procesmodel is energie (E) en wiskunde (W), de meting is onderzoeken en elektronica (O, L), de uitvoering is programmeren (P), en het geheel is regelen (R). Ook de natuur regelt zo: je lichaam houdt je temperatuur en je bloedsuiker constant met terugkoppeling.

De eerste regeling: aan/uit met een drempelwaarde.

Open en gesloten lus, blokschema's, hysterese: de taal van dit hoofdstuk.

De D-actie is een afgeleide; numeriek afleiden versterkt ruis.

De I-actie is een integraal, numeriek een som.

Het procesmodel en de methode van Euler waarmee je simuleert.

Tijdconstante, tweedegraadssystemen en doorschot: waarom een PI-lus kan slingeren.

Een regelaar is zo goed als zijn meting: filteren en schatten.

Glucose en insuline: een biologische regelkring, en de insulinepomp als technische.

HabitatHet brein van het station regelt temperatuur, luchtvochtigheid en waterdruk met PID-lussen. Opdracht 39.10 is het ontwerp van de temperatuurregeling; in het integratieproject (hoofdstuk 49) koppel je die aan de digitale tweeling en aan het energiebeheer.
Samenvatting

In het kort

Begrippen

Wat je nu kent

setpoint (gewenste waarde)
De waarde die de regeling moet bereiken, bv. 20 °C binnentemperatuur.
regelfout
Het verschil tussen setpoint en gemeten waarde.
stuurgrootheid
Wat de regelaar naar de actuator stuurt, (hier: verwarmingsvermogen in W).
blijvende regelafwijking
De fout die overblijft als alles tot rust gekomen is; bij zuivere P-regeling niet nul.
doorschot
Hoeveel de gemeten waarde voorbij het setpoint gaat, in procent van de stap.
insteltijd
De tijd tot de waarde binnen een band (hier ±2 %) rond het setpoint blijft.
integrator-windup
Het oplopen van de I-term terwijl de actuator aan zijn grens zit, met groot doorschot als gevolg.
anti-windup
Maatregel die de I-term niet verder laat groeien zolang de actuator verzadigd is.
Ziegler-Nichols
Afstelmethode die de regelaar instelt vanuit de kritische versterking en de periode van een aanhoudende slingering.
Aan de slag in het werkboek11 opdrachten, van oefenen tot uitdagen