Forum: Mikrocontroller und Digitale Elektronik PID-Algorithmus und Einheiten?


von Mirko (Gast)


Lesenswert?

Was sind im Rahmen eines PID-Algorithmus die Einheiten für die Grössen 
Messwert, Stellwert, Fehler, Kp, Tn, Tv?

Ich sehe öfter in PID-Sourececodes Formeln wie yp = Kp * error /* 
P-Anteil berechnen */ (z.B. Beitrag "PID-Regler so realisierbar?"), 
was auf mich wie das Verrechnen von Kartoffeln mit Äpfeln wirkt. Bei 
einer Heizung würde man so durch Multiplikation aus Fehler ([Celsius]) 
mit Konstante eine Leistung erhalten.

Es würde für mich nur Sinn ergeben, wenn Stellgrösse, Messwert und 
Fehler (also quasi alle Werte) jeweils dimensionslos aus dem Bereich 0,0 
... 1,0 bzw. 0% ...100% stammen würden. Nur sehe ich in den 
Beispielcodes nie das Skalieren auf 0...1. Man scheint immer direkt 
Messwerte/Fehler mit Faktoren zu multiplizieren, um direkt zum Stellwert 
zu kommen. Z.B. http://www.embedded.com/2000/0010/0010feat3.htm ("PID 
Without a Phd"): drive = UpdatePID(&plantPID,  plantCommand - position, 
position) ruft die PID-Berechnung mit dem Fehler "plantCommand - 
position" auf, was eine Einheit wie mm haben könnte - aber nicht 
erkennbar dimensionslos ist.

Hintergrund ist, dass ich mal Ziegler anwenden wollte und einen 
PID-Algorithmus brauche, in den ich das Ergebnis einsetzen kann. Muss 
ich also im PID-Algorithmus alles auf 0...1 skalieren, z.B. error = 
(Messwert - Sollwert) / (Tmax - Tmin)?

von Volle Dröhnung (Gast)


Lesenswert?

Das sollte man nicht so geanu nehmen. Aus einem Fehler wird eine 
Stellgroesse. Die Strecke hat ein Zeitverhalten, der Regler hat ein 
Zeitverhalten, und beide zusammen auch. Vielleicht solltest du mal eine 
Simulation auf dem PC laufenlassen.

von Mirko (Gast)


Lesenswert?

Wen ich das nicht genau nehme, wie sollen dann die ziemlich genauen 
Ergebnisse vom Ziegler irgendeinen Sinn ergeben?

von Simon K. (simon) Benutzerseite


Lesenswert?

Mirko schrieb:
> Bei
> einer Heizung würde man so durch Multiplikation aus Fehler ([Celsius])
> mit Konstante eine Leistung erhalten.

Abweichung * Konstante = Leistung
Kelvin * 1 = Watt

Das musste mir jetzt mal erklären. Welche Einheit hat denn die 
Konstante?

Aber du hast schon recht, auch solche Algorithmen sind mathematisch 
korrekt. Es gibt da auch diverse Herleitungen des PID Reglers über 
veschiedene Methoden. (Laplace Transformation und sowas, glaube ich).

von gast (Gast)


Lesenswert?

"ziemlich genauen Ergebnisse vom Ziegler"
das ist doch schon ein Widersprung für sich^^

les dich erst einmal ein wenig in Regelungstechnik ein, dann klappts 
auch. Wenn überhaupt irgendwo eine Größe drinsteckt, dann in Kp. Kannst 
aber auch vorher alles auf den Stellbereich normieren, dann hast eben 
keine Einheiten

von RegProfi (Gast)


Lesenswert?

Die Verstärkungen sind dimensionslos.

Die Zeitkonstanten sind, wie der Name schon sagt, Zeiten: Die Einheit 
ist also Sekunde.

von Mirko (Gast)


Lesenswert?

> Wenn überhaupt irgendwo eine Größe drinsteckt, dann in Kp

Vermutlich knapp daneben. Soweit ich das verstehe, ist Kp dimensionslos 
(Gain), Tp und Tn werden in [Sekunden] angegeben. Weil Kp dimensionslos 
ist, versteh ich nicht, wie man beispielsweise aus einer 
Temperaturdifferenz beim Ofen-PID duch Multiplikation mit Kp eine 
Heizleistung (Stellgrösse, Watt) erhalten kann - ausser es wäre alles 
auf 0 ... 1 normiert. Aber eben diese Normierung sehe ich in den 
Sourcecodes nie.

> "ziemlich genauen Ergebnisse vom Ziegler" das ist doch schon ein Widersprung für 
sich^^

Nur wenn man den Widerspruch sehen will ;) Ich sage nicht, dass die 
Ziegler-Ergebniss gut sind - aber es sind nun mal exakte Zahlen. 
Irgendwo muss ich die einsetzen.

von Mirko (Gast)


Lesenswert?

> Die Verstärkungen sind dimensionslos

Muss ich demnach den Fehler auch dimensionslos machen (durch den 
möglichen Wertebereich teilen)?

von Olaf (Gast)


Lesenswert?

> Wen ich das nicht genau nehme, wie sollen dann die ziemlich genauen
> Ergebnisse vom Ziegler irgendeinen Sinn ergeben?

Mach dich mal von diesem Gedanken frei. :-)

Das ist eher als grobe Naeherung zu verstehen die fuer manches
ausreichend ist, und fuer vieles der Anfang bevor du selber
weiteroptimierst.

Nebenbei gesagt in der Regelungstechnik kannst du sehr viel mit Mathe
rumhampeln, eine Menge Studenten werfen auch dort das Handtuch.
Es ist auch notwendig das einmal verstanden zu haben! Aber in der
Praxis stoesst man schnell auf das Problem eine Strecke nicht richtig
beschreiben zu koennen sobald die etwas komplizierter ist.

Olaf

von RegProfi (Gast)


Lesenswert?

> wie man beispielsweise aus einer Temperaturdifferenz beim Ofen-PID duch 
Multiplikation mit Kp eine Heizleistung (Stellgrösse, Watt) erhalten kann

kannst du auch nicht. Temperaturdifferenz*Kp bleibt eine Temperatur. Es 
sei denn du integrierst im Kp noch deine Streckenverstäkungen, die du 
vermutlich nicht so genau kennst, aber streng genommen ist Kp im Regler 
dimensionslos.

Um auf dein Beispiel zurückzukommen, wäre das dann z.B.: Wenn du das 
Fouriesche Gesetz ins Kp packst, bekommst du eine Wärmeleistung heraus.

von Mirko (Gast)


Lesenswert?

> kannst du auch nicht. Temperaturdifferenz * Kp bleibt eine Temperatur

Aber die PID-Berechnung ist doch so (mit y = Stellgrösse, Ta = 
Abtastzeit, Tn = Nachhaltezeit, usw.):

y = Kp * (Ta/Tn * errsum + Tv/Ta (ei - ei_1))

Hier wird aus einem Fehler (recht) die Stellgrösse (links) berechne. Das 
sind offensichtlich unterschiedliche Dinge und dazwischen stehen nur 
einheitenlose Faktoren.

Für mich ergibt das nur Sinn, wenn man alles im PID-Algorithmus 
(Messwert, Stellwert und Fehler) dimensionslos betrachtet, also alles 
auf 0...1 normiert. Aber das sehe ich in Beispielen nie.

von Mirko (Gast)


Lesenswert?

Oops, in der letzten Formel habe ich ein ei an erster Stelle in der 
Klammer vergessen (P-Anteil).

von Stefan M. (Gast)


Lesenswert?

Messwert, Stellwert und Fehler sind dimensionslos und normiert. Die 
Normierung findet aber nicht im Source statt, sondern bei der Berechnung 
bzw. Bestimmung der Reglerparameter.

mfg, Stefan.

von RegProfi (Gast)


Lesenswert?

Normalerweise hast du ein mathemtisches Modell deiner Strecke. Diese 
Strecke versuchst du nun durch eine Stellgröße zu regeln.
Angenommen du hast einen Glas Wasser, dessen Temperatur zu regeln 
willst. Dafür misst du die Temperatur. Die Stellgröße ist aber natürlich 
keine Temperatur sondern die Heizleistung. Diese stellst du z.B. durch 
eine Spannung ein. Die Temperatur, die du misst, ist ja aber vermutlich 
auch nur eine Spannung. Du misst ja nur irgendwie indirekt.
Der Fehler steckt jetzt in deinem Sollwert. Den müsstest du durch eine 
Umrechnung, so wie du von der gemessenen Spannung auf die Temperatur 
schließt, in eine Spannung umrechnen, damit alles passt.
Natürlich wirst du eher deine gemessene Spannung in eine Temperatur 
umrechnen. Du nimmst im Prinzip die Umrechnung deiner Temperatur in 
Spannungen in den Regler. So scheint dieser nicht mehr dimensionslos. 
Der Regler ansich ist es noch, aber du hast eine Umrechnung 
mitdazugenommen, die genaugenommen nicht Teil des Reglers ist.

Ich hoffe, dass es einigermaßen verständlich ist.


> y = Kp * (Ta/Tn * errsum + Tv/Ta (ei - ei_1))

wo hast du die Formel her?

von Mirko (Gast)


Lesenswert?

> Ich hoffe, dass es einigermaßen verständlich ist.

Nicht für mich :) Aber Stefan's Antwort werde ich vieleicht noch 
verstehen: In die Festlegung von Kp, z.B. per Ziegler-Nichols, fliesst 
ein Faktor ein, der den willkürlichen Wertebereich des Stellgliedes - 
könnte bei einer Heizung je nach Ansatz der Stellfunktion eín Prozenwert 
sein oder ein Byte 0...255 oder eine Einschaltzeit in 0....1000ms pro 
Sekunde - normiert und Stellwerte in eine Relation zu 
Temperaturdifferenzen setzt.

> wo hast du die Formel her?

Aus einer Vorlesung Regelungstechnik:

http://people.fh-landshut.de/~sbr/Vorlesungsmitschrift_Version4.pdf (S. 
55)

von Stefan M. (Gast)


Lesenswert?

> In die Festlegung von Kp, z.B. per Ziegler-Nichols, fliesst
> ein Faktor ein, der den willkürlichen Wertebereich des Stellgliedes -
> könnte bei einer Heizung je nach Ansatz der Stellfunktion eín Prozenwert
> sein oder ein Byte 0...255 oder eine Einschaltzeit in 0....1000ms pro
> Sekunde - normiert und Stellwerte in eine Relation zu
> Temperaturdifferenzen setzt.

Kompliziert ausgedrückt, aber ich glaube Du hast es verstanden. Ich 
versuche das nochmal anders auszudrücken: Die Einheiten, die Du in 
Deiner ersten Frage gesucht hast, stecken in den Faktoren zur Normierung 
von Stellgröße, Führungsgröße und Regelgröße.

mfg, Stefan.

von RegProfi (Gast)


Lesenswert?

Da steht die Formel auch richtig. ;-)

y = Kp * (e(i) + Ta/Tn * SUM_k=0..i(e(k)) + Tv/Ta (e(i) - e(i-1)))

Also im Prinzip ist das dann schon richtig mit den Dimensionen. In den 
Regler fließen Faktoren mit ein, sodass du mit deiner Einheit rechnen 
kannst. Daraus folgt also ungefähr: Vergiss die Einheiten, das geht 
meist schon so. ;-)

Wenn du sagst, was du genau machen willst, kann dir vielleicht noch 
etwas mehr geholfen werden.

von Mirko (Gast)


Lesenswert?

> was du genau machen willst, kann dir vielleicht noch
etwas mehr geholfen werden.

Ich will lediglich ein paar Tuning-Verfahren ausprobieren. Ein 
akzeptabel funktionierender C-PID-Regler liegt vor - mit dem Algorithmus 
der "Pid withouth a PhD-Seite". Ich war der Meinung, dass die 
willkürliche Wahl bei bestimmten Dingen (z.B. Werteberich des 
Stellgliedes oder Wahl der Einheit der Temperatur) ein Problem ist und 
dass man explizit normieren muss, bevor man die mit Z-N ermittelten 
Zahlenwerte einsetzen kann. Sonst hätte jeder andere Gleichungen. Der 
Denkfehler war wohl, dass die per Z-N ermittelten Werte für alle Nutzer 
einer bestimmten Regelstrecke identisch sind. Wenn ich das jetzt richtig 
verstehe, erhalten zwei Anwender derselben Regelstrecke u.U. 
unterschiedliche PID-Faktoren, je nachdem wie "Implementationsdetails" 
wie Einheiten und Übergabeparameter an die Stellgliedfunktion gelöst 
sind.

von RegProfi (Gast)


Lesenswert?

richtig. Wenn du es so verstehen willst.

Dann wünsche ich dir noch viel Erfolg beim Optimieren. ;-)

von aha (Gast)


Lesenswert?

Na. Es geht in dieser Richtung. Es gibt Leute, die rechnen ein System 
als Temperatur-in, Leistung-raus, oder PWM-raus, oder einfach nur 
2^16-in, 2^16-aus. Wo und wie man normiert ist eigentlich egal. Eine 
Normierung ist ja nur eine Multiplikation. Zahlen sind weniger 
interessant wie ein Zeitverhalten.

von Stefan (Gast)


Lesenswert?

Moin erstmal!

Das Thema ist schon lange beendet- aber vielleicht bekomme ich ja doch 
eine erhellende Antwort.

Ich habe mich in den letzten Wochen zum 1sten mal mit PID-Reglern 
befasst.

Ohne die tiefsten Tiefen der mathematischen Herleitungen wirklich 
begriffen zu haben, zugegebener Maßen. So ein ungefähres Bild, was   P-, 
I-, und D-Anteil bewirken sollen (und warum sie das auch tun) hat sich 
aber schon eingestellt.

Aber genau bei dem Skalierungsproblem komme ich auch nicht weiter.

Also angenommen man möchte eine Temperatur regeln, z.B. auf 50°C.

Und angenommen, irgendwann würde diese Temperatur ereicht und sich nicht 
mehr ändern (also quasi Störgröße konstant -> Regleroutput (z.B. 
50%)auch konstant und gleicht die Störgröße  aus).

Dann müsste ja der I-Anteil des Reglers bei einem Ausgangssignalbereich 
von 0..100 (%) permanent 50 rausgeben, oder? (Damit dann ein einfaches 
Stellventil z.B. immer in dieser Stellung bleibt).

Ist das soweit richtig bzw. nachvollziehbar?

Na, ich schau erstmal, ob da jemand antworten mag, dann kann's weiter 
gehen
mit der Frage ;-)

Danke, so oder so (wirklich informatives Forum, hat mir schon öfter 
geholfen)

Stefan

von Dieter W. (dds5)


Lesenswert?

Das stimmt so.

Da bei Regelabweichung 0 der P-Anteil der Stellgröße ebenfalls 0 ist, 
muss der I-Anteil allein die erforderliche Stellgröße liefern.

btw. Stellventile steuert man oft mit einem Dreipunktschrittregler an.

siehe z.B.
http://www.jumo.de/de_DE/support/faq-weiterbildung/faq/regler/T2/Q16.html

von Stefan (Gast)


Lesenswert?

Moin Dieter Werner,

danke für die schnelle Antwort!

Nun denn.

wenn ich jetzt mal die u.A. auch in diesem Forum benutzte Formel

esum += e_neu

y= Kp *e + Ki*esum + Kd* (e_neu-e_alt)

wobei esum dann ja oft auf y_max begrenzt wird (was dann ja oft als 
Anti-Wind-Up bezeichnet wird). Meine ich auch hier und anderswo gefunden 
zu haben.

Dann müsste, wenn ich Ki auf z.B. 0.5 gesetzt hätte, esum ja 100 sein?

Wenn ich jetzt den Sollwert auf z.B 60° setzen würde, müsste ich also Ki 
vergrößern, um die Regelabweichung im oben angenommenen ZUSTAND 
überhaupt noch kompensieren zu können, da  esum ja auf 100 begrenzt 
ist??

Soweit auch noch richtig?

Stefan

von Stefan (Gast)


Lesenswert?

...

Den Drei-punkt-schrittregler habe ich mir schon schön programmiert- und 
zwar so, dass er immer 0..100% möchte.

Jumo- PID-Regler beschreibung, Adruino-PID-Regler (sehr schön! Den 
Hinweis habe ich, glaube ich. auch hier im Forum gefundenund) und 
vieles, vieles andere habe ich mir auch schon 'reingezogen'

Stefan

von c-hater (Gast)


Lesenswert?

Mirko schrieb:
> Was sind im Rahmen eines PID-Algorithmus die Einheiten für die
> Grössen
> Messwert, Stellwert, Fehler, Kp, Tn, Tv?
>
> Ich sehe öfter in PID-Sourececodes Formeln wie yp = Kp * error /*
> P-Anteil berechnen */ (z.B. Beitrag "PID-Regler so realisierbar?"),
> was auf mich wie das Verrechnen von Kartoffeln mit Äpfeln wirkt. Bei
> einer Heizung würde man so durch Multiplikation aus Fehler ([Celsius])
> mit Konstante eine Leistung erhalten.


Kommt drauf an. Bleiben wir doch gleich beim Beispiel einer 
Heizungsregelung. Soll- und Istwert sind °C. Der Fehler ist dann einfach 
nur K.

Der Stellwert ist meinetwegen der Duty-Faktor einer PWM, also 
dimensionslos. Nun muß man also nicht weiter machen, als festzulegen, 
daß die Einheiten der Koeffizienten eben 1/K betragen sollen, damit das 
K bei der Multiplikation korrekt verschwindet. Oder man stellt wirklich 
direkt eine Leistung in kW. Auch kein Problem, dann wird eben einfach 
festgelegt, daß die Einheit der Koeffizenten kW/K sein soll.

Genau das ist der Trick: Die Konstanten haben immer genau die Einheit, 
die sie brauchen, um die Fehlergröße bei der Multiplikation korrekt in 
die Stellgröße zu überführen. Da das sowohl zur Entwurfs- als auch zur 
Laufzeit Aufwand spart, ist es sinnvoll. Und weil es sinnvoll ist ist, 
wird es immer so gemacht und jeder (außer dir offensichtlich) weiß auch, 
daß es immer so gemacht wird. Deswegen kümmert sich auch niemand darum, 
in der Doku mit irgendwelchen Einheiten zu hantieren. Sie sind schlicht 
und einfach irrelevant.

von Stefan (Gast)


Lesenswert?

Okay, dann muss ich wohl ein neues Thema aufmachen?

Stefan

von Ulrich (Gast)


Lesenswert?

Beim Anti-windup gibt es verschiedene Möglichkeiten. Die wohl einfachste 
ist es die Integration auszusetzen, wenn der Ausgang in der Begrenzung 
ist. Sehr ähnlich ist die Methode, dann wenn der Ausgang in der 
Begrenzung ist, esum so zu berechnen das gerade so die Begrenzung 
erreicht wird. Die 3. methode ist es einfach Esum zu begrenzen. Das 
klingt einfach, aber die Wahl der Grenzen ist halt das Probem, und da 
gibt es mehrere Möglichkeiten:

1) Etwa so das noch der Maximale Sollwert plus etwas Reserve erreicht 
wird.
2) So das noch der maximale Stellwert erreicht wird.
3) So das um den aktuellen Sollwert noch eine genügende Reserve besteht.

Den letzten Fall kriegt man z.B. indem man zum Ausgangswert noch den 
Schätzwert für den aktuellen Sollwert dazu addiert - als ein einfache 
Form von Feed-Forward. Dann muss esum*Ki nur noch den Fehler der 
Schätzung korrigieren, und das kann man meist relativ eng begrenzen.

von короткое троль (Gast)


Lesenswert?

Man sollte sich von der ganzen Theorie loesen und sich das Verhalten 
anschauen. Es gibt immer einen Grund weshalb das System nicht linear 
ist. Der PID ist das Werkzeug fuer die Denkfaulen.

von Stefan (Gast)


Lesenswert?

Danke,

aber das Problem, auf das ich hinausmöchte ist die Skalierung / 
Normierung der Ein- und Ausgangsparameter eines Regel-Algos.


Wenn ich dann nun mit einer der oben genannten Formeln eine Temperatur 
um die 500° (was auch immer) regeln möchte, aber immer noch 0..100 (%) 
als out erhalten möchte- wo fange ich da am besten an rumzuschrauben?

Skaliere ich z.B. den Temperatur-Ist- & Sollwert z.B. von 450..550 auf 
0..100 herunter?

Oder (habe ich auch irgendwo gesehen) bekommen die Beiwerte (Kp, Ki, Kd) 
nen Faktor..

Oder nehme ich den Reglerausgang und versuche den wieder auf 0..100 
runterzurechnen?

Stefan

von Stefan (Gast)


Lesenswert?

короткое троль schrieb:
> Man sollte sich von der ganzen Theorie loesen und sich das
> Verhalten
> anschauen. Es gibt immer einen Grund weshalb das System nicht linear
> ist. Der PID ist das Werkzeug fuer die Denkfaulen.

Ja, wie machst Du das denn???

Lass mich / uns doch nicht dumm sterben.

von короткое троль (Gast)


Lesenswert?

Siehe auch Beitrag "PID-Algorythmen Ein- und Ausgangsparameter skalieren"

Man kann in ADC-Koordinaten denken, oder so. Falls der Sensor linear 
verwende ich als Rechenwerte das ADC System. Dh. Sollwert ist der 
gewollte ADC Wert. Der Regelalgorithmus laeuft dann in Longinteger. Am 
Schluss wird dann auf das Stellglied runterskaliert. Nie Float.
Falls der Sensor nicht linear ist, wird erst auf eine sinnvolle Groesse 
linearisiert. Natuerlich auf Ganzzahl. Fuer Temperaturen zB auf 
Milikelvin.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.