Der Pi-Regler und ich,
hallo an die Gemeinde.
Ich möchte den Strom mittels eines PI Reglers regeln. Als Strecke dient
mir ein Universalmotor. Den Stromsollwert kann ich durch ein
Potenziometer, das auf meiner W1 Schaltung mit verbaut, ist frei
zwischen 0-4A einstellen. (4A = Nennstrom des Motors). Den Stromsollwert
erhalte ich über einen Beobachter (Binärer Wechselstrombeobachter).
Programmiert ist das Ganze auf einem ATmega 2561. Soweit zu den
Gegebenheiten.
Zur Regelung kommt ein PI Regler zum Einsatz, der dafür sorgt dass der
vorgegebene Stromsollwert nicht überschritten wird.
Als Regelalgorithmus kommt der „Geschwindigkeitsalgorithmus“ zum
Einsatz. Dieser errechnet ein Steuerwort. Das Steuerwort wird zur
Berechnung der Zündwickel benötigt. Der Zündwickel wird über das
Inversekennlinienglied des Stromrichters errechnet und kann zwischen 0°
für Vollsteuerung und 180° für Stillstand liegen.
Mein Problem:
1)Wenn ich die Sprungantwort bei großen Zündwickeln (kleiner Strome,
Spannung ) erhalte ich einen ziemlichen Überschwinger, wenn ich mit der
errechneten Proportionalverstärkung arbeite. Bei größeren Strömen ist
der Überschwinger zwar auch da, aber halt geringer.
2) Übergebe ich die erforderlichen Werte alle richtig?
Zum PI-Regler als Geschwindigkeitsalgorithmus
uk = uk-1 + kRi*(Δik – Δik-1) + kRi * (TAB / TRi)* Δik-1
uk = Steuerwort
uk-1 = Steuerwort zum Zeitpunkt k-1
kRi = proportionalverstärkung
Δik = Regeldifferenz
Δik-1 = Regeldifferenz zum Zeitpunkt k-1
TAB = PI-Algorithmus
TRi = Abtastzeit der Strecke
Im Nulldurchgang der Netzspannung lasse ich eine Variable „p“
hochzählen. In der Main erfolgt die Abfrage
if (p == 1)
{
Ieff_neu = Ieff;
}
if (p == 2)
{
Ieff_alt = Ieff_neu;
p = 0;
}
Ieff_neu und Ieff_alt werden dem PI Regler zur Verfügung gestellt. Des
Weiteren wird in der Main die Stellung des Potis eingelesen und daraus
der Stromsollwert errechnet.
Stromsollwert
u = (ADC_Lesen());
R = u/1024;
Imax = (R *4);
Ist der PI Regler einmal ab gefrühstückt wird das errechnete Steuerwort
zum Steuerwort uk-1.
Den PI Regler habe ich als Datei angehängt, ebenso wie ein Strukturbild
des Systems. Ich hoffe einer von euch kann was damit anfangen und hat
einen goldenen Tip für mich.
Besten Dank. Micha
Ich bin irritiert.
Also du möchtest die Drehzahl eines Motors regeln und den Sollwert in
Ampere festlegen? Ampere ist keine Drehzahl! Und dann gibt es da noch
einen Zündwickel - wasndasn? Mein Motorrad hat eine Zündspule - aber das
meinst du wohl nicht, oder doch?
Um die Drehzahl zu regeln würde ich den Sollwert in einer entsprechenden
Einheit vorgeben, zum Beispiel U/min. Und ich würde den istwert mit
einem entsprechenden Sensor messen, z.B. einer gelochten Scheibe, die
mit einer Lichtschranke abgetastet wird.
Der Zuendwinkel bezieht sich auf den Thyristor. Und die Stromregelung
soll das Drehmoment regeln. Nehm ich an. Der Regler funktioniert so
nicht. Denn er bezieht die Last nicht ein. Ein wesentlicher Feedback,
und der ist wirklich essentiell, ist die EMK des Motors. Die ist etwa
Proportional zur Drehzahl. Und zusammenhaengend mit dem Problem ist noch
der Innenwiderstand.
Erst sollte man ein Modell der Strecke haben, vorher bringt nichts
etwas.
Das könnte ein Parameter Problem sein, der P-Antei ist möglicherweise zu
hoch gewählt. Setz den einfach mal stufenweise herab und schau, ob die
Reglung noch funktioniert.
Du muss dir natürlich das Ganze irgendwie visual z.B als Diagramm
anzeigen lassen können. Damit du sehen kannst, ob die Reglung in der
gewünschten Qualität arbeitet.
Ich hatte in der Vergangenheit ein ähnlichen Problem mit überschwingern.
Lag daran das die Taktgeschwindigkeit mit der der Regler gearbeitet hat,
zu langsam war. Man muß halt darauf achten das der Regler mit einen
geschwindigkeit arbeitet, welche die Hardware in deinen Fall der Motor +
Steuerung auch bewätigen kann.
Arbeitet der Regler zu schnell, so das die Hardware die Änderungen gar
nicht Real umsetzen kann, dann kann es zu Problemen kommen. Oder wenn
der Regler zu langsam Taktet hat man auch Probleme. Beides kann sich als
Überschwinger bemerkbar machen.
AVR-Neuling schrieb im Beitrag #4102981:
> Eine kleine Ergänzung noch, mit P-Anteil meinte ich den Faktor K_P.> Dieser ist ja die Verstärung für den P-Anteil des Reglers.
Erst mahl danke für vielen Anregungen.
Da habe ich eine Nachfrage. zu dem Verstellen des K_P. Also, der PI
Regler besteht zwar aus einem I und einem P Anteil, aber die
Proportionalverstärkung ist doch für beide Fälle, also im PI Regler
immer die Gleiche.
Ich benutze als Halbleiter einen Triac, mit andern worten es erfolgt nur
eine Regleränderung pro Netzhalbwelle. Die Parameter mit denen ich den
Regler entwurf gemacht habe beziehen sich ja unter anderem auf die
Strecke. Diese liegt also als Model vor. (R, X, L)
grüße Micha
Micha schrieb:> Da habe ich eine Nachfrage. zu dem Verstellen des K_P. Also, der PI> Regler besteht zwar aus einem I und einem P Anteil, aber die> Proportionalverstärkung ist doch für beide Fälle, also im PI Regler> immer die Gleiche.
Da hast du einen Fehler gemacht. Es gibt für den P-Anteil und für den
I-Anteil jeweils einen eigenen Faktor.
Micha schrieb:> aber die> Proportionalverstärkung ist doch für beide Fälle, also im PI Regler> immer die Gleiche
Nein, die müßen nicht gleich sein, in meinem Fall hatte ich einen K_P
und ein K_I Faktor. Es kommt sicher auf die Anwendung an, aber ich denke
mal beide brauchen eine eigene Verstäkung. In meinen Fall war das so,
dass für K_P=300-350% und für K_I=5-20% eingestellt werden mußte, um
brauchbare Ergebnisse zu erziehlen.
Ich hatte das auch so realisiert, dass beide Parameter Variabel
einstellbar waren, da für jede Baugruppe toleranz bedingt ein manuelles
feintuning gemacht werden mußte.
Gewöhnungsbedürftiges Bildchen.
Was soll der Block 'LIN' sein sowie die coole Bezeichnung Beobachter.
Ein Regelungstechniker könnte dabei Krise bekommen.
Wie schon oben erwähnt wurde, sollte zumindest ein grobes Modell von der
Strecke gebildet werden. Durch Eingangssprüngen kann man die Strecke
evtl. als PT1-Glied identifizieren.
Stm Mc schrieb:> Wie schon oben erwähnt wurde, sollte zumindest ein grobes Modell von der> Strecke gebildet werden. Durch Eingangssprüngen kann man die Strecke> evtl. als PT1-Glied identifizieren.
Ich dachte das währe klar geworden. Ja es handelt sich um eine PT1 / VZ1
Strecke.
Also ich könnte jetzt den KI und den KP Anteil separat verstellen. ICh
war nur immer der Meinung das es nur ein K geben dürfte, weil in dem
Kästchen in dem man die Sprungantwort immer rein malt ja auch immer nur
ein K drin steht. (zum anderen war das die Anweisung von meinem Prof :-)
ich wird das mal so versuchen mit zwei unterschiedlichen K's evt. klapts
ja so besser
Es scheint als hätte ich den Fehler gefunden. Die Regeldifferenz soll ja
nur einmal pro Netzperiode gerechnet werden.
if (p == 1)
{
Ieff_neu = Ieff;
}
wird aber erst in der nächsten zurückgesetzt.
Ich habe jetzt zwei Variablen definiert und "Schwups" das Überschwingen
war Geschichte. Vielen Dank für die Anregungen.