Forum: Mikrocontroller und Digitale Elektronik PI Regler funktioniert nicht - Spannungsregelung


von Salu (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mit einem uC eine Spannungsregelung (PI Regler) realisiert.

Die Regelgröße (Istwert) bekomme ich als PWM Signal ( 7,5ms ).
Dessen Tastgrad gibt mir die Ausgangsspannung an (bei a=1 ca. 3,5V; bei 
a=0,5 ca. 15V).
Die Regelgröße wird mit 75us abgetastet (per Timer Interrupt, etwa 100 
mal pro Periode) und so der Tastgrad (Spannung) ermittelt

Meine Stellgröße ist die Totzeit der PWM Signale (30kHz), die an meine 
H-Brücke gehen.
Anhand der Totzeit lasse ich eine zu hohe Spannung abfallen (vergrößern 
der Totzeit).
Bei einer zu kleinen Spannung (unter Sollwert) lasse ich die Totzeit auf 
minimal 1us fallen, da es sonst zu kurzschlüssen an meiner H-Brücke
kommen würde.

Mein Problem ist nun, dass die Regelung die Spannung auf 0V fallen 
lässt, sobald ich es laufen lasse. Sprich die Totzeit geht so hoch, dass 
keine Spannung mehr am Ausgang
anliegt.
Mein Sollwert liegt dabei bei 0,9 (ca. 5-5,5V). Die Spannung liegt zu 
beginn bei ca. 15V (was auf 5V geregelt werden sollte) und geht sofort 
auf 0V, wenn die Regelung startet.
Ich verstehe leider nicht, warum das so ist. Vielleicht sehr Ihr was, 
was ich nicht sehe. Ich habe es hochgeladen

KP und KI sind beide derzeit bei 1.

Nochmal alles zusammengefasst:

- PWM Signal geht mit 7,5ms in den uC. (Der Tastgrad ist die Spannung)
- Dieses wird mit 75us etwa 100 mal abgetastet und so der 
Tastgrad/Spannung ermittelt.
- Meine gewünschte Spannung ist der Tastgrad 0,9 (entspricht etwa 5V)
- Beim start (bevor die Regelung läuft) ist mein Tastgrad auf 0,5 
initialisiert (15V)
- Die Regeldifferenzen sind sehr klein, weil ich mit dem Tastgrad 
arbeite (0,0.. - 0,5, je nachdem welche Spannung ich eingebe)
- Der uC erzeugt eine PWM ("nicht" die selbe PWM, aus der ich die 
Spannung messe) mit der entsprechenden Totzeit für die H-Brücke
- Tastgrand a=1 entspricht 3,5V. a=0,5 entspricht 15V.

Danke

von Karl H. (kbuchegg)


Lesenswert?

Salu schrieb:

> Ich verstehe leider nicht, warum das so ist.

Um Verständnis zu kriegen ist es meistens eine zimlich gute Idee, sich 
die Werte dieverses Variablen im Programm irgendwo ausgeben zu lassen. 
Dann sieht man meistens sehr schnell, wie sich die Werte entwickeln und 
zusammen mit dem Code kann man auch nachvollziehen warum das so ist.

Von daher ist es eine extrem schlechte Idee, eine Probeschaltung so 
aufzubauen, dass man keine Möglichkeit der Programmbeobachtung in diesem 
Sinne hat.

Hast du wenigstens eine Möglichkeit, dir die Eingangswerte (und die 
errechneten Stellwerte) irgendwo aufzuzeichnen, so dass du diese 
Eingangswerte in eine PC Version deines Programms einspielen kannst, so 
dass du wenigstens dort die Rechnungen nachvollziehen kannst?

von Michael B. (laberkopp)


Lesenswert?

Salu schrieb:
> Mein Problem ist nun, dass die Regelung die Spannung auf 0V fallen
> lässt, sobald ich es laufen lasse

Wahrscheinlich ist deine PWM Filterung in Steuergösse viel träger als 
dein Regler.
Bei 133Hz PWM und einem RC Filter wird der auf 1Hz ausgelegt werden 
müssen, bis dahin hast du 15000 Iterationen deiner Regelschleife durch. 
Ich denke mal, die ist nicht so langsam.

Der PWM Schwachsinn ist VIEL zu langsam.

von Karl H. (kbuchegg)


Lesenswert?

> KP und KI sind beide derzeit bei 1.

Ein PI Regler steht und fällt mit der richtigen Wahl der Konstanten 
Faktoren. Wenn die nicht annähernd passen, funktioniert auch die 
Regelung nicht.

Ki erst mal auf 0 und dann Kp erhöhen, bis der Ausgang zu schwingen 
anfängt. Der Ausgangswert ist dabei noch nicht so, dass der Sollwert 
aucch tatsächlich erreicht wird. Mit Kp stabilisiert man den Regler nur 
dahingehend ein, dass er zumindest erst mal einen stabilen Ist-Wert 
hinkriegt, die Reglerdifferenz also konstant bleibt.
Hat man diesen Punkt Kp erreicht, dann wird Ki erhöht, damit die noch 
verbliebene Reglerdifferenz auf 0 reduziert wird.

Könnte natürlich auch sein, dass dein AntiWindup zu eng ist, so dass Ki 
überhaupt nicht wirksam wird.

Könnte natürlich auch ein simpler Vorzeichenfehler sein.

In den Werten würde man das sehen, ob der Stellwert überhaupt aus den 
Startlöchern kommt, und ob sich der Istwert wie gewünscht zumindest in 
der richtigen Tendenz ändert, oder genau anders rum oder wie oder was.

von Bernd (Gast)


Lesenswert?

Prof. Loviscach: P- und PI-Regler; Einstellung nach Ziegler-Nichols

https://www.youtube.com/watch?v=quqxyny5kBU

von Amateur (Gast)


Lesenswert?

Wenn Du, wie so oft, einen bestehenden Regler übernommen hast - also 
etwas das eigentlich funktionieren sollte - so kann es nur an Fehlern 
beim Copy&Past liegen, an den eingesetzten Konstanten, oder daran, dass 
die Umgebung wie Zeiten Werte usw. nicht passt.

von Karl H. (kbuchegg)


Lesenswert?

Salu schrieb:

> Meine Stellgröße ist die Totzeit der PWM Signale

D.h. je höher der Wert, desto kleiner wird die zu erzeugende Spannung?
Wenn ja, dann hast du hier einen inversen Zusammenhang zwischen 
Stellgröße und Istwert.
Dementsprechend müssten dann ein paar minus in deiner Rechnung (bzw. bei 
den Konstanten) auftauchen. Sonst hast du keine Gegenkopplung sondern 
eine Mitkopplung. Anstatt dem Fehler entgegen zu steuern, verstärkt ihn 
der Regler noch.

Aber auch das würde man an den Werten und ihrer zeitlichen Entwicklung 
(zusammen mit einem Voltmeter) sehen können.

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Vielleicht reicht ja wirklich ein Minuszeichen. Eine mögliche Erklärung 
für Extremisten wie:
>Mein Problem ist nun, dass die Regelung die Spannung auf 0V fallen
>lässt, sobald ich es laufen lasse. Sprich die Totzeit geht so hoch, dass
>keine Spannung mehr am Ausgang
>anliegt.

von Karl H. (kbuchegg)


Lesenswert?

Amateur schrieb:
> Vielleicht reicht ja wirklich ein Minuszeichen. Eine mögliche Erklärung
> für Extremisten wie:
>>Mein Problem ist nun, dass die Regelung die Spannung auf 0V fallen
>>lässt, sobald ich es laufen lasse. Sprich die Totzeit geht so hoch, dass
>>keine Spannung mehr am Ausgang
>>anliegt.

Es könnte auch sein, dass man die vom Regler ermittelte Stellgröße dann 
von der maximalen Stellgröße abziehen muss, um den Wert zu kriegen, der 
dann an das Stellglied gehen muss.

Aber wie schon gesagt: Dem Regler bei der Arbeit zusehen und sich die 
zeitliche Entwicklung ansehen. Das verschafft schnell Klarheit, was da 
tatsächlich passiert. Und 'nebenbei' lernt man seinen Regler dabei auch 
kennen weil man gezwungen ist darüber nachzudenken, wie das eigentlich 
funktioniert.

von Salu (Gast)


Lesenswert?

Danke erstmal für die Hilfestellungen. Da waren einige gute Tips dabei.

Ich denke, ich habe die Ursache für das merkwürdige Verhalten der 
Regelung entdeckt.

Es scheint so, als hätte ich in meiner Schaltung zur Spannungsmessung 
(Komparator, welcher die Spannung mit einem Dreiecksignal vergleicht und 
als PWM an den uC gibt) eine oder mehrere defekte Komponenten, da ich 
beim ansehen des PWM Signals mit einem Oszi festgestellt habe, dass 
dieses nicht stabil funktioniert, sprich das Signal verzerrt bei 
gewissen Spannungen.

Mit einem solchen PWM Signal kann die Regelung natürlich nichts 
anfangen.

Also muss ich erstmal einen Schritt zurück machen und zusehen, dass 
erstmal dies anständig funktioniert.

Wenn es soweit ist, würde ich eventuell den Thread wieder hochziehen, 
falls ich Fragen zu der Regelung habe. Vielleicht klappt es auch, wenn 
den Fehler in der Schaltung behebe.

Danke

von Salu (Gast)


Lesenswert?

Hallo Leute,

also ich habe die Spannungsmessung nun wieder am laufen. Bin nun wieder 
bei der Regelung.

Da die Spannungsmessung anständig läuft, konnte ich bereits einige 
Ergebnisse erzielen, welche mich leider noch nicht zufrieden stellen.

Ich habe es hinbekommen, die Spannung auf den 100mV Bereich genau zu 
regeln (die Spannung springt +-100mV am Multimeter).
Was jedoch nicht klappt ist, das die Regelung auf mein Sollwert regelt. 
Bedeutet, wenn ich den Sollwert als 4,5V vorgebe, regelt es auf 6,8V.

Das Problem, welches ich habe, liegt darin, dass ich die Regelgröße als 
Tastgrad einer PWM bekomme und die Stellgröße als Totzeit einer PWM 
rausgeben muss.
Ich finde einfach nicht die passenden Stellungen der Parameter (siehe 
Fragezeichen im Bild)

Ich bekomme die gemessene Spannung als PWM, welches einen Tastgrad von 
ca. 0,52 (ca. 15V) bis 1 (ca. 3,5V) haben kann.
Unter 0,5 bekomme ich nichts, weil bei einem Tastgrad von 0,52 meine 
Maximalspannung anliegt. (unter 0,5 fällt es auf 0 ab, sprich die 
Regeldifferenz wird maximal, weil der uC denkt, die Spannung sei ins 
unendliche gestiegen).

Da ich vorher gemessen habe, bei welchem Tastgrad ich welche Spannung 
habe, weiß ich welchen Tastgrad ich als Sollwert für die 
Regeldifferenzberechnung angeben muss.

Wenn ich nun die Regeldifferenz habe (welche maximal 0,5 sein kann), 
berechne ich daraus die P- und I-Anteile.

Hier komme ich leider auf keine gute Kombination der Parameter.

Aktuell liegt mein Ki und Kp bei 1. Der Wert, die Stellgröße 
multipliziere ich mich 5us um die Totzzeit zu erhalten und die I-Anteil 
Begrenzung liegt bei 3,1.
Ich kann die Totzeit bis maximal 16us einstellen.

Das würde nach einigen Zyklen bei einer Regeldifferenz von 0,05 bedeuten 
stellgr = (0,05 + 3.1) * 5us = 15,75us.

Also kann mit diesen Einstellungen fast über den gesamten Bereich der 
Tastgradeinstellung gleiten. Weil der I-Anteil zwischen 0 und 3.1 
variieren kann. Der P-Anteil korrigiert in einem sehr kleinen Bereich 
die differenzen.

Liege ich damit falsch oder warum will es nicht sauber gelingen?

Danke

von Salu (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal der Quellcode (ohne die letzten Änderungen)

von Forist (Gast)


Lesenswert?

Salu schrieb:
> Regelung__PI_I.PNG
> Hier nochmal der Quellcode (ohne die letzten Änderungen)

Was soll diese Pixelansammlung?

Was meinst du, wozu ASCII erfunden würde - übrigens erheblich vor 
irgendeinem PNG-Pixelkomprimierungsalgorithmus?

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.