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.
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.
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
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?