Forum: Mikrocontroller und Digitale Elektronik Pi Regler als Geschwindigkeitsalgorithmus


von Micha (Gast)


Angehängte Dateien:

Lesenswert?

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

von Micha (Gast)


Lesenswert?

keiner eine Idee?

von Stefan F. (Gast)


Lesenswert?

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.

von Pandur S. (jetztnicht)


Lesenswert?

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.

: Bearbeitet durch User
von AVR-Neuling (Gast)


Lesenswert?

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.

von AVR-Neuling (Gast)


Lesenswert?

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.

von Micha (Gast)


Lesenswert?

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

von Karl (Gast)


Lesenswert?

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.

von Karl (Gast)


Lesenswert?


von AVR-Neuling (Gast)


Lesenswert?

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.

von Stm M. (stmfresser)


Lesenswert?

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.

von Micha (Gast)


Lesenswert?

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

von Micha (Gast)


Lesenswert?

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.

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.