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
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?
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.
> 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.
Prof. Loviscach: P- und PI-Regler; Einstellung nach Ziegler-Nichols https://www.youtube.com/watch?v=quqxyny5kBU
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.
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
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.
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.
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
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
Hier nochmal der Quellcode (ohne die letzten Änderungen)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.

