Da in letzter Zeit im Forum immer wieder die Diskussion um den PID-Regler auftaucht, hier mal ein Versuch meinerseits den Regler ohne grosses wissenschaftliches Brimborium zu erklären. Dadurch entstehenden Unschärfen bitte ich zu entschuldigen. Wers genauer wissen will, finden im Netz mannigfache Erklärungen.
Wie funktioniert ein PID-Regler?
Eine Erklärung (fast) ohne Formeln.
Dem PID-Regler wird nachgesagt, dass er das "Universalgenie" unter den Reglern sei. Zum Teil stimmt das. Mit einem gut abgestimmten PID-Regler kriegt man fast jedes System in den Griff. Trotzdem sollte man sich fragen, obs ein einfacher Zweipunktregler nicht auch in vielen Fällen tut.
Aber was macht den PID so universell?
Der PID ist ein 3-in-1 Regler. Es sind eigentlich 3 Regler, die zusammenwirken: ein Proportionalregler, ein Integralregeler und ein Differenzialregler. Wie "stark" jeder Regler agiert wird über die drei zugehörigen Parameter Kp, Ki und Kd bestimmt.
Um zu verstehen, wie ein PID funktioniert, muss man sich erst mal die drei einzelnen Regler ansehen.
Da ist zunächst der P-Regler- P wie Proportional.
Der einfachste aber auch der Hauptregler des PID.
Der misst die Abweichung Soll-Ist, also des gewünschten Wertes minus des aktuellen, tatsächlichen Wertes. Der Reglerausgang ist die Abweichung (=error) multipliziert mit Kp.
Er reagiert sofort und unvermittelt auf Änderungen.
Als Formel:
OutP = (Soll - Ist ) * Kp
Beispiel:
Ein Temperaturregler soll auf 25°C regeln. Ausgang ist die Arduino PWM, die eine Heizung steuert.
Kp wählen wir zu Kp = 50; Die aktuelle Temperatur beträgt 23°C
OutP = (25 - 23 ) * 50 = 100;
Wenn nach einiger Zeit die Temperatur gestiegen ist:
OutP = (25 - 24 ) * 50 = 50;
Man sieht schön, wir er zunächst die Abweichung ausregelt, aber diese nicht völlig ausgleichen kann.
Logisch: Wenn die Abweichung Soll-Ist gleich Null wird, ist Out auch null, und es wird nicht mehr geheizt.
Das könnte man doch verbessern, in dem man den Kp erhöht?
Probieren wir doch ein Kp von 100:
die Differenz wird kleiner, aber wir sehen auch schon einen schönen Überschwinger. Je nach System kann man das so abstimmen, vor allem wenn man schnelle Ausregelzeiten haben möchte. Hier wollen wird das nicht, also zurück zu Kp=50.
Aber wie geht die Regelabweichung weg, wie bekommt man das System dazu genau auf 25°C zu regeln?
Hier kommt nun der I-Regler ins Spiel:
Der I-Regler (I wie integrierend) soll so eingestellt werden, dass er eher langfristig wirkt.
Er schaut sich das Ergebnis des P-Reglers an, und wenn er merkt, das der das nicht hinkriegt, dann greift er ein und erhöht Stücken für Stückchen den Ausgang.
Im Gegensatz zum P-Regler, der immer nur von einem Moment zum anderen agiert, hat der I-Regler die Vergangenheit im Blick.
Er addiert jede noch so kleine Abweichung auf und vergisst nie.
in C sieht das dann so aus:
OutI += (Soll - Ist) * Ki; // Ki = 0,2
OUT = OutP + OutI;
Man kann schön sehen, wie, während OutP abfällt, OutI langsam anwächst um schliesslich die Lücke zwischen Soll und Ist zu schliessen.
Nun ist es eigentlich perfekt?!
Aber da ist doch noch das "D" im Regler.
Für den D-Regler ist das Beispiel zugegebenermaßen schlecht gewählt.
Der D-Regler (D wie Differenziell) ist der Regleranteil, der versucht in die Zukunft zu sehen.
Er beobachtet die Veränderung des Eingangssignal, des Istwertes. Wenn der Istwert plötzlich wegdriftet, dann versucht der D-Regler sofort Gegenmaßnahmen zu ergreifen.
Er reagiert sofort auf Störungen.
Das kann man z.B. bei Lagereglern gut nutzen. Eine Windbö, die einen Quadrokopter kippt.
Bevor der P-Regler merkt, was los ist, haut der D-Regler sofort dagegen um die ungewünschte Bewegung aufzufangen.
Bei trägen Systemen eher kontraproduktiv: Macht man die Tür des Ofen auf, sackt die Lufttemperatur ab, der D-Regler powert Leistung rein.
Ist die Tür wieder zu, ist die Luft schnell wieder heiß, aber die zusätzliche Leistung, die schon in der Heizspirale steckt, führt zur Temperaturüberhöhung.
Ich habe im Gegenteil bei meinem Ofen eine "Door open" Erkennung eingebaut, die auf schnellen Temperaturabfall reagiert, und den PID-Regler stoppt, damit mir mein I-Anteil nicht zu sehr ansteigt.