digitaler PID-Regler

Michael Rübig schrieb:

Hallo,

gehe in eure Bibliothek, suche geeignete Bücher und schlage darin nach. Etwas Literatur solltest Du bei der Diplomarbeit sowieso gelesen haben und auch angeben.

Bye

Reply to
Uwe Hercksen
Loading thread data ...

Genau! In "Regelungstechnik für Ingenieure" steht sogar der komplette Algorithmus für einen PID Regler...

Gruß, Artur

Reply to
Artur Pundsack

formatting link
Heft 2 mit Blick auch parallele Anordnung und simpele Varianten für I und D. Das Programm ist weniger gut.

Ich hatte nie den Eindruck, daß deren Definition so völlig einheitlich ist. Theoretische DIN-Normen mal abgesehen.

Wenn man Einstellregeln orginal Ziegler & Nichols will: die der Analogschaltung entsprechende Form ist seriell und der Diffenerenzierer DT1. Muß man also Schaltung biegen. Bezüglich der "digitalen" Einstellregeln a la Takahashi: ich kann den Orginal-Artikel scannen wie er mal in der akademiologischen Zeitschrift rt erschienen ist. Ich wäre damit vorsichtig: wird gern in Lehrbüchern zitiert, in der Praxis glaube ich nicht so oft verwendet.

Hat bezüglich Glättung mit FIR was für sich, wenn man später tatsächlich D-Anteil verwendet. Aber eigentlich nicht für PID nötig. Es sei denn, man will den PID als FIR-Filter implementieren und hat integrierende Strecke dafür. Oder klebt den I-Anteil ans FIR ran.

MfG JRD

Reply to
Rafael Deliano

Hi Leute, ich muss für meine Diplomarbeit per PC-Software einen PID-Regler realisieren. Programmiersprache ist C.

Dazu habe ich mir erst mal ein "Schieberegister" programmiert, das in meinem Fall 10 Messwerte aufnehmen kann.

Jetzt benötige ich die Übertragungsunktion eines PID-Reglers in der k-Ebene mit den Parametern Vorhaltezeit, Nachstellzeit, Proportionalitätsfaktor. Meine Vorlesungsmitschriften sind dummerweise gerade nicht greifbar.

Es gibt doch bestimmt so Standardformen für PID-Regler. Ich brauche ne Formel für den Stellwert in Abhängigkeit der letzten Messwerte und der letzten Stellwerte. Parameter sind dann Vorhaltezeit, Nachstellzeit, Proportionalitätsfaktor.

Kann mir von Euch jemand einen Tip geben?

Michael

Reply to
=?ISO-8859-1?Q?Michael_R=FCbig

Uwe Hercksen schrieb:

Ich sitze aber grad in der Firma, in der ich mein Dipl.Arbeit mache und die Bibliothek ist weit. Den Algorithmus brauche aber am besten heute noch. Ich habe unter

formatting link
was gefunden. Ich glaube, der Geschwindigkeitsalgorithmus ziemlich unten ist das richtige für mich. Über das Delta Uk bin ich noch ein wenig am grübeln.

Was muss ich dafür einsetzen?

Momentan hab ich mir selbst einen Algorithmus ausgedacht, der auch funktioniert. Aber ich denke, dass ein Standardalgorithmus da deutlich besser ist, zumal, das Projekt nach meiner Arbeit jemand anderes weiterführen muss.

Michael

Reply to
=?ISO-8859-1?Q?Michael_R=FCbig

Rafael Deliano schrieb:

Ich hab das jetzt mal so implementiert (0 ist jeweils der neueste Wert):

D =((MeasBuf[0]-MeasBuf[1])+ (MeasBuf[1]-MeasBuf[2])+ (MeasBuf[2]-MeasBuf[3])) /3;

I = (Sollwert-MeasBuf[0]+ Sollwert-MeasBuf[1]+ Sollwert-MeasBuf[2]+ Sollwert-MeasBuf[3]+ Sollwert-MeasBuf[4]+ Sollwert-MeasBuf[5]) /6;

if (I > 1) I = 1; if (I < -1) I = -1; P = Sollwert-MeasBuf[0];

Y = kd * D + ki * I + kp *P;

Den D-Anteil filtere ich deshalb, um das Rauschen ein wenig wegzukriegen.

Den I-Anteil hab ich jetzt mal als Mittelwertfilter gelöst. Bin mir nicht sicher, ob das das richtige Vorgehen ist. Ich könnte ihn auch als IIR mit 2 Koeffizienten lösen, was der analpgen Lösung deutlich näher kommt. Was ist besser.

Im Prinzip hat der Regler jetzt 5 Parameter: kd, ki, kp, Anzahl Messwerte für d-Anteil (3), und Anzahl Messwerte i-Anteil(6).

Damit werde ich es jetzt mal probieren.

Ich hatte zwar schon vorher was leidlich funktionierendes zusammengebastelt. Das war aber saumäßig unübersichtlich.

Danke für den Link

Michael

Reply to
=?ISO-8859-1?Q?Michael_R=FCbig

Rafael Deliano schrieb:

Ich hab das jetzt mal so implementiert (0 ist jeweils der neueste Wert):

D =((MeasBuf[0]-MeasBuf[1])+ (MeasBuf[1]-MeasBuf[2])+ (MeasBuf[2]-MeasBuf[3])) /3;

I = (Sollwert-MeasBuf[0]+ Sollwert-MeasBuf[1]+ Sollwert-MeasBuf[2]+ Sollwert-MeasBuf[3]+ Sollwert-MeasBuf[4]+ Sollwert-MeasBuf[5]) /6;

if (I > 1) I = 1; if (I < -1) I = -1;

P = Sollwert-MeasBuf[0];

Y = -kd * D + ki * I + kp *P;

Den D-Anteil filtere ich, um das Rauschen ein wenig wegzukriegen.

Den I-Anteil hab ich jetzt mal als Mittelwertfilter gelöst. Bin mir nicht sicher, ob das das richtige Vorgehen ist. Ich könnte ihn auch als IIR mit 2 Koeffizienten lösen, was der analpgen Lösung deutlich näher kommt. Was ist besser.

Im Prinzip hat der Regler jetzt 5 Parameter: kd, ki, kp, Anzahl Messwerte für d-Anteil (3), und Anzahl Messwerte i-Anteil(6).

Damit werde ich es jetzt mal probieren.

Später wird das Integrieren dann natürlich über Schleifen laufen.

Ich hatte zwar schon vorher was leidlich funktionierendes zusammengebastelt. Das war aber saumäßig unübersichtlich.

Danke für den Link

Michael

Reply to
=?ISO-8859-1?Q?Michael_R=FCbig

Übliches, glättendes FIR eher wie im PID-Artikel: D = 1,5 * MeasBuf[0] + -2 * MeasBuf[1] + -0,5 * MeasBuf[2]

Weitere Differenzierer in Heft 6 Seite 18 Tabelle 2. Obige Formel ist der 3 Taps in ersten Zeile, Schätzung an y0. ( Im Text ist Fehler es ist Schätzung an y0 nicht y2 ).

Wohl nicht. Integrator ist eben Integrator. Einfache Formel ca.:

I = I + MeasBuf[0]

Trapez:

I = I + ( MeasBuf[0] + MeasBuf[1] ) / 2

Man beachte die in der Praxis nötige Abschaltung bei Sättigung: wenn Y auf Anschlag sollte Integrator gestoppt bleiben. Also mit if ... überspringen. MfG JRD

Reply to
Rafael Deliano

Hi,

Das war auch mehr als dämlich (umständlich), weil =(MeasBuf[0]-MeasBuf[3]) /3

Da ist was faul.

Sind alle drei Werte identisch (z.B. 5), dann ist die Ableitung=0 und es müsste folglich 0 rauskommen, tut es aber nicht, sondern -5. Wenn man den 3. Koefizient = +0,5 macht, wirds schon besser, aber irgendwie stimmts immer noch nicht. Bei MeasBuf[0]=5 MeasBuf[1]=3 MeasBuf[2]=1 müsste 2 rauskommen, es kommt aber 1 raus.

Denkfehler bei mir?

Seltsames Satzkonstrukt, verstehe ich nicht ganz.

Klar, manchmal bin ich selten dämlich.

Was mir aber an meiner Variante doch besser gefällt: Ein echter Integrierer führt zwandgsweise zum Überschwingen, damit das Integral irgendwann 0 wird. In meinem Fall ist Überschwingen extrem unerwünscht, da der Steller nur in eine Richtung ziehen kann. Überschwingt das ganze, kommt das System nur sehr langsam auf den Sollwert zurück.

Anwendung: In Wasser wird eine flüchtige Flüssigkeit (Alkohol) zudosiert. Diese verschwindet langsam und muss nachdosiert werden. Alkohol entnehmen geht nicht und Wasser zudosieren geht auch nicht.

In meinem falschen Integrator werden die ganz alten Fehler einfach nicht mehr berücksichtigt und wenn der D-Anteil groß genug ist, nähert sich die Konzentration dem Sollwert ausschließlich von unten an.

Der bleibende Regelfehler, der dabei entsteht, ist nicht so tragisch. 1% Genauigkeit reichen aus. Oder gibts ne andere Lösung führ das Problem?

Ich beschäftige mich hier das erste mal mit digitalen Reglern und Filtern in der Praxis, man verzeihe mir meine Fehler und falschen Denkansätze.

Ich lade den Integrator jetzt nur, wenn ich schon relativ nahe am Sollwert dran bin.

Danke für die Hilfe, bin schonmal ein großes Stück weiter.

Michael

Reply to
=?ISO-8859-1?Q?Michael_R=FCbig

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.