Forum: Mikrocontroller und Digitale Elektronik Steh auf der Leitung beim I-Regler


von Max W. (mo0oxx)


Lesenswert?

Hi,
hab eine Frage zur Programmierung eines PI-Reglers.

die Software wird irgendwie so aussehen:

e = w - x;
esum = esum + e;

if(esum < -max)
  esum = -max;
if(esum > max)
  esum = max;

y = kp*e + ki*Ta*esum

if(y < 0)
  y = 0;
if(y > maxStell)
  y = maxStell;

Ich weiß ich muss esum z.B. über 20 Messwerte bilden, schreibe ich dazu 
den code in c?

Ich glaub die Lösung ist sehr Simpel aber ich steh grad total auf der 
Leitung, wenn mir kurz wer helfen könnte bitte.

MfG
Max

von Falk B. (falk)


Lesenswert?

@ Max Wildfellner (mo0oxx)

>Wann und wie muss ich esum rücksetzen?

Die wird doch schon begrenzt!
1
if(esum < -max)
2
  esum = -max;
3
if(esum > max)
4
  esum = max;

> weil in dem jetzigen Code würde
>esum ja irgendwann den maximalwert der Variable erreichen.

Nö.

>Ich glaub die Lösung ist sehr Simpel aber ich steh grad total auf der
>Leitung, wenn mir kurz wer helfen könnte bitte.

Mach de Glotzn off, geeene Fettbemm fressen und orweidn!

;-)

von Max W. (mo0oxx)


Lesenswert?

Aber auf unendlich lange Zeit ist esum ja dann dauerhaft 400, aber ich 
will ja z.B. nur über 20 Messwerte integrieren.

von Pandur S. (jetztnicht)


Lesenswert?

esum wird eigentlich ueber die letzten unendlich vielen Messwerten 
gebildet. Resp solange wie das Teil schon laeuft...
Eigentlich laeuft der Integrator Wertemaessig solange bis der e gleich 
Null wird. Resp waehrend e ungleich null wird addiert.

von Max W. (mo0oxx)


Lesenswert?

Aber ich kann bei einem digitalen System nicht unendlich viele Messwerte 
speichern ;)

von Ingo L. (corrtexx)


Lesenswert?

Max W. schrieb:
> Aber auf unendlich lange Zeit ist esum ja dann dauerhaft 400, aber ich
> will ja z.B. nur über 20 Messwerte integrieren.
Ich glaube du verwechselst da was. Du integrierst die Regelabweichung. 
Die sollte irgendwann ja mal bei 0 landen. Dann wird halt 0 integriert.
Dein I-Anteil regelt sich doch selbständig ein. Wichtig ist halt nur das 
er nicht ins Unermessliche wächst und sättigt wenn du etwas falsch 
Dimensioniert hast (Anti-Wind-up). Aber das fängst du ja bereits ab.

Was auch immer hilft, wenn man den Regler abschaltet, den Integralanteil 
zu löschen. Dann gibts keine Einschaltüberschwinger.

von Falk B. (falk)


Lesenswert?

@Max Wildfellner (mo0oxx)

>Aber auf unendlich lange Zeit ist esum ja dann dauerhaft 400,

Richitg, dann ist dein I-Anteil in der Begrenzung.

> aber ich
>will ja z.B. nur über 20 Messwerte integrieren.

Kann es sein, dass du einen Integrator mit einem Mittelwert 
verwechselst?

>Aber ich kann bei einem digitalen System nicht unendlich viele Messwerte
>speichern ;)

Eben darum gibt es ja die Begrezung des I-Anteils. Weil irgendwann mal 
die Variable überlaufen würde und dein Regler von einem Anschlag auf den 
anderen schießen würde. Das ist meist nicht so toll.

von Ingo L. (corrtexx)


Lesenswert?

Max W. schrieb:
> Aber ich kann bei einem digitalen System nicht unendlich viele Messwerte
> speichern ;)
Das tust du auch nicht. Du speicherst die Regelabweichung.

von Max W. (mo0oxx)


Lesenswert?

Jo bin schon wieder dabei hatte das ganze irgendwie mit einem digitalem 
Filter verwechselt.
Dank euch

von Pandur S. (jetztnicht)


Lesenswert?

Auch ein einfacher Tiefpass, dessen fruehere Eingabewerte mit einer 
Gewichtung von 1/e abfallen, benoetigt nur einen einzigen Speicherwert.

Die digitalen Filter mit mehr als einem Koeffizienten arbeiten mit 
Schiebregistern, die sinnvollerweise als Ringbuffer implementiert sind.

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.