Forum: FPGA, VHDL & Co. I-Regler implemtieren


von Chris R. (mrgreen)


Lesenswert?

Hallo,
nachdem ich schon im µC Forum nach Reglern gefragt hatte, und mir die 
Arbeitsweise glaub ich klar geworden ist, gehts an die Implementierung.

Der Regler summiert also ständig die Abweichungen auf.

Ich bekomme alle 1/16 sec den aktuellen Messwert, werfe ich den 
Integrator dann auch immer nur dann an, wenn es eine Änderung gab?

esum = esum + e
y = Ki x Ta x esum

Wenn ich diese Formel verwende, wie wähle ich Ki und Ta? Wird die 
Abtastzeit Ta dann 1/16, und über Ki stelle ich die "Reaktionszeit" ein?


Am Ende will ich ein 10Bit PWM Signal haben. Kann ich den Wert y dann 
einfach auf 1024 normieren?

MfG
Mr.Green

von der mechatroniker (Gast)


Lesenswert?

Der Wert wird immer aufintegriert, ob er sich ändert oder nicht.

Zu den 1024: Normierung (eines Shorts?) ist quatsch, da machst du dir 
die Reglerverstärkung wieder kaputt. Hier würde ich mit einer 
Sättigungscharakteristik arbeiten, also den Wert auf das entsprechende 
Intervall beschränken. Das solltest du dann bereits mit esum machen, 
sonst führt das Erreichen der Begrenzung zum berüchtigten Windup-Effekt.

von Chris R. (mrgreen)


Lesenswert?

Aber meine Messwerte (Drehzahl in rpm) kommen ja nur alle 1/16 sec...

Das heißt doch, dass zwischen zwei Messwerten der alte viel zu lange 
aufaddiert wird, oder?

Mit der Beschränkung meint du, dass esum nur Werte zwischen 0 und 1024 
annehmen soll?

Ich krieg Soll und Ist Wert als rpm, und zwar den Ist-Wert alle 1/16 
sec.


Jetzt ist der Unterschied Soll-Ist meinetwegen 1 rpm, die addiert der 
Integrator dauernd auf.
Dann ist das y des Reglers nach 1024 mal addieren ja schon an der 
Obergrenze der PWM, das heißt der Motor wird dann mit voller Leistung 
gefahren?

Führt das nicht zum Schwingen?

von Matthias L. (Gast)


Lesenswert?

>Aber meine Messwerte (Drehzahl in rpm) kommen ja nur alle 1/16 sec...

Dann sollte der Rechenalghorithmus, der den Regler darstellt, auch nur 
alle 1/16sek aufgerufen werden.

Das nennt sich dann Abtastfrequenz.
ALso 16mal je sekunde folgendes rechnen (egal welchen Wert Istwert 
hat!):

-Sollwert minus Istwert ergibt Regeldifferenz
-Regeldifferenz durch Reglerformel schicken (hier wohl nur? I)
-Ergebnis ist neuer Stellwert für dein Stellglied (hier duty-Cycle für 
pwm)

Nachtrag:
Ich bezweifle stark, das ein nur I-Regler für eine Drehzahlregelung 
geegnet ist..

von der mechatroniker (Gast)


Lesenswert?

> Mit der Beschränkung meint du, dass esum nur Werte zwischen 0 und 1024
> annehmen soll?

Na ja, genauer gesagt, daß esum nur solche Werte annimmt, daß y am Ende 
nur Werte zwischen 0 und 1024 annimmt.

> Jetzt ist der Unterschied Soll-Ist meinetwegen 1 rpm, die addiert der
> Integrator dauernd auf.

Nicht dauernd, sondern solange bis der Unterschied Soll-Ist null ist. 
Der Stelleingriff des Reglers zeigt ja hoffentlich irgendwann mal 
Wirkung.

> Dann ist das y des Reglers nach 1024 mal addieren ja schon an der
> Obergrenze der PWM, das heißt der Motor wird dann mit voller Leistung
> gefahren?

Was meinst du mit "schon"? 1024 Abtastperioden sind ja immerhin 64 
Sekunden. Wenn der Regler es nicht hinkriegt, in 64 Sekunden eine 
Solldrehzahl einzuregeln, sondern der Istwert dauerhaft darunterbleibt, 
ist der Motor mechanisch wohl an der Lastgrenze. In diesem Fall ist es 
im Sinne eines "Best effort" natürlich angesagt, mit maximaler Leistung 
zu fahren, um noch möglichst nahe an die geforderte Drehzahl zu kommen.

> Ich bezweifle stark, das ein nur I-Regler für eine Drehzahlregelung
> geegnet ist..

Könnte mit vorsichtig eingestellter Reglerverstärkung klappen. 
Geschwindigkeit ist dann nicht wirklich berauschend ;-)

Würde zum PI-Regler raten.

von Chris R. (mrgreen)


Lesenswert?

Danke für die Antworten!!

Die Abtastzeit Ta ist bei mir also 1/16, und das setze ich auch so in 
die Formel für y ein, richtig?

Kann ich als Verstärkung Ki einfach mal 1 wählen?
Wenn Ki zu groß ist schwingt es, und wenn es zu klein ist dauert es 
ewig, den Motor zu regeln, oder?

von der mechatroniker (Gast)


Lesenswert?

> Die Abtastzeit Ta ist bei mir also 1/16, und das setze ich auch so in
> die Formel für y ein, richtig?

Richtig.

> Wenn Ki zu groß ist schwingt es, und wenn es zu klein ist dauert es
> ewig, den Motor zu regeln, oder?

Richtig. Wobei der Einsatz eines reinen I-Reglers eh suboptimal ist. Hör 
doch auf uns und nimm einen PI-Regler.

> Kann ich als Verstärkung Ki einfach mal 1 wählen?

Kannst du machen. Allerdings ist reines Probieren recht langwierig, wenn 
man noch nicht einmal die Größenordnung kennt, in der die richtige 
Einstellung liegt.

Hast du die Möglichkeit, irgendwie die Sprungantwort der ungeregelten 
Strecke Motor-Getriebe?-Last aufzunehmen, z.B. Oszi, oder in dem du den 
µC mal die Meßwerte über Seriellkabel an den PC übertragen läßt oder 
meinetwegen auf dem Display anzeigen?

Unter Sprungantwort versteht man den Zeitverlauf der Geschwindigkeit 
unmittelbar nach einer sprungförmigen Änderung des PWM-Tastgrads 
(beispielsweise 0 auf 1023, dann sieht man am meisten).

Wenn nein, ermittel zumindest mal die Leerlaufdrehzahl bei dauerhaftem 
Betrieb mit voller Spannung, dann brauchst du nur noch einen Parameter 
zu schätzen.

Anschließend bietet sich (für den PI-Regler) das Einstellverfahren nach 
Ziegler-Nichols an, um zu vernünftigen Ergebnissen zu kommen.

von der mechatroniker (Gast)


Lesenswert?

Nachtrag: Ich sollte mal denken, bevor ich schreibe. Du hast ja dem von 
dir gewählten Unterforum nach zu urteilen gar keinen µC, sondern einen 
FPGA. Trotzdem: besteht eine Kommunikationsmöglichkeit?

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.