D-Anteil wirkt sich nicht aus

Gast #1570796
Hallo zusammen ich habe einen PID Regler mit einem Atmega128 realisiert. 
Damit regel ich einen Lüfter.

Für die Parameter des Reglers habe ich Kp=4.8 Tn=2 und Tv=0.13 gewählt. 
Mein Problem ist jetzt. Die Sprungantwort des Regelkreises sieht immer 
gleich aus egal ob Tv=0 oder Tv=0.13.

Woran kann das liegen.

Im Anhang mein Code.
Angehängte Dateien:
PID schrieb:
> Hallo zusammen ich habe einen PID Regler mit einem Atmega128 realisiert.
> Damit regel ich einen Lüfter.
>
> Für die Parameter des Reglers habe ich Kp=4.8 Tn=2 und Tv=0.13 gewählt.
> Mein Problem ist jetzt. Die Sprungantwort des Regelkreises sieht immer
> gleich aus egal ob Tv=0 oder Tv=0.13.
>
> Woran kann das liegen.

Es könnte daran liegen, dass du hier

y = (Kp*e)+(I*esum)+(D*(e-ealt));   //Reglergleichung

dein so schön ausgerechnetes Kd gar nicht benutzt.

Edit: vergiss es. Hab die Berechnung schon gesehen.
Gast
ok, da wurde gerade ein Beitrag gelöscht...

was mir gerade auffällt, du hast cli(); und sei(); in der ISR mit drin. 
das verträgt die schon mal gar nicht
regler schrieb:
> Kd ist in D mit enthalten

Schon gesehen.
Dein Code ist aber auch unübersichtlich.

Hast du dir den Wert für D schon einmal ausgeben lassen? Auch e-ealt 
wäre mal interessant.

sei() und cli() haben in einer ISR (normlalerweise) nichts verloren.
Gast
Hallo

was meinst du damit, das weiß ich doch. das Problem ist das D, Kd oder 
Tv nenns wie du lustig bist, sich nicht bemerktbar macht. Ich habe einen 
anderen PID Regler, wenn ich da Tv=0,125 setze, ist der Regelkreis 
schneller, dafür wird die Stellgröße stärker beansprucht.

Danke für deine Antwort.
PID schrieb:
> ja für D bekomme ich 581 finde ich seltsam

Kd ausgeben lassen und alle anderen Werte, die zur Berechnung benutzt 
werden. Eigentlich sollte 624 raus kommen. Deine Zahlenbereiche sind 
zwar nicht so schlecht, aber ein gewisser Schwund ist bei float Rechnen 
immer drinnen.

Aber sei es wie es sei.
Auch mit 581 sollte sich D*(e-ealt) bemerkbar machen, wenn e von ealt 
abweicht. Daher: diese Werte mitprotokollieren.
Gast
Hi danke für den Tip

also jetzt weiß ich zwar warum der D-Anteil sich nicht bemerktbar macht.
e ist nämlich gleich ealt
Warum ist das aber so ??? Was muss ich ändern ???
PID schrieb:
> Hi danke für den Tip
>
> also jetzt weiß ich zwar warum der D-Anteil sich nicht bemerktbar macht.
> e ist nämlich gleich ealt
> Warum ist das aber so ???

Weil du es so programmiert hast!

Und das ist auch richtig so: Bei einem PID Regler steht das D für die 
Differenz der Regelabweichung. Und die ist nun mal die Differenz zum 
vorhergehenden Wert.

> Was muss ich ändern ???
Gar nichts. Dein Regler wird auch ohne D Anteil gut funkionieren.
Gast
Sorry aber das ist doch der PID Algorithmus oder habe ich da was 
grundsätzliches Falsch verstanden.
Normal müsste sich doch e nach jedem Zyklus ändern. Dann wäre e nicht 
mehr gleich ealt.

Oder. Danke für eure/deine hilfe.
Gast
>
> Was muss ich ändern ???
>Gar nichts. Dein Regler wird auch ohne D Anteil gut funkionieren.

Stimmt zwar aber ich hatte das ja oben schon erwähnt ich habe noch einen 
andere PID Regler und bei dem Funktioniert es auch. Der Vorteil ich halt 
das der Regelkreis schneller ausgeregelt.

Danke das müsste doch klappen. Bitte.
PID schrieb:

> Danke das müsste doch klappen. Bitte.

Dann zeig mal, wie du die Protokollierung eingebaut hast.
Die kannst du nur an 3 Stellen einbauen. Überall sonst ist e 
selbstverständlich gleich ealt.
1
ISR (TIMER0_OVF_vect)
2
{
3
  // Regeldifferenz bilden
4
  e = w - x;                                    // aktuelle Regelabweichung bestimmen
5

6
  esum = esum + e;                               // Summe der Regelabweichung aktualisieren  
7
   
8
  y = (Kp*e)+(I*esum)+(D*(e-ealt));   //Reglergleichung 
9

10
  ealt = e;

und ab da ist ealt und e wieder gleich.
Dich interessieren die Werte von e und ealt gleich nachdem e berechnet 
wurde.
Gast
Also ich habe einen breakpoint in die main und einen bei e=w-x und einen 
nach ealt=e;

w ist übriges bei mir 511

Super das du mir so hilfreich zu seite stehst.

sorry, dass das bild so unscharf ist
Angehängte Dateien:
PID schrieb:
> Also ich habe einen breakpoint in die main und einen bei e=w-x und einen
> nach ealt=e;

Na ja
Was erwartest du. Nach ealt = e; haben ealt und e klarerweise denselben 
Wert. Genau das steht ja im Programm. Wenn schon, dann musst du dir ealt 
und e vor dieser Zuweisung ansehen.
Gast
Hallo noch mal

also ich habe e und ealt mal jetzt vor der Zuweisung angeschaut, aber 
komischerweise sind die immer gleich. Kann das daran liegen das der DA 
Wandler zu langsam läuft. Ich weiß echt nicht mehr was ich machen soll. 
Ich bin euch  wirklich mit dank verbunden wenn mir einer sagen würde was 
ich da noch machen kann.


danke
PID schrieb:
> Hallo noch mal
>
> also ich habe e und ealt mal jetzt vor der Zuweisung angeschaut, aber
> komischerweise sind die immer gleich. Kann das daran liegen das der DA
> Wandler zu langsam läuft.

Das kann an allem möglichen liegen.
zb daran, dass sich der Messwert (und damit der Regelfehler bei 
gleichbleibendem Sollwert) tatsächlich nicht geändert hat.

Der D-Anteil im PID Regler soll ja auch nur dann zum tragen kommen, wenn 
sich eine Änderung im Fehler ergibt. Solange der Fehler konstant ist 
wirkt sich der D-Anteil nicht aus.
Seine Aufgabe ist es einer sprunghaften Änderung des Fehlers etwas 
entgegenzusetzen aber nicht den Fehler auf 0 zu bringen.

> wenn mir einer sagen würde was ich da noch machen kann.

Wie wäre es mit: Verstehen was die einzelnen Teile im PID Regler machen, 
was ihre Aufgabe ist und warum sie benutzt werden.
Also jetzt nicht: Wie soll die Springantwort aussehen. Das ist nur die 
graphische Repräsentierung eines allgemeineren Prinzips. Hat man das 
allegemeinere Prinzip verstanden ergibt sich daraus welche Sprunantwort 
man erwarten kann.
Gast
Hallo

danke für deine Antwort. Ich hatte jetzt beim lesen den Eindruck ich 
habe dich verärgert. Das war bestimmt nicht mein Ziel.

Zu

>Wie wäre es mit: Verstehen was die einzelnen Teile im PID Regler machen,
>was ihre Aufgabe ist und warum sie benutzt werden.

Ich glaube schon, dass ich das Verstanden habe. Ich weiß, dass der 
D-Anteil den Regler schneller macht und nicht den Fehler behebt.
Ich weiß aber auch das bei einer Drehzahlregelung, man den Versuch mit 
PI macht und dann mit PID und sich dann die Ergbnisse vergleichen kann.

Wie bereits oben geschrieben habe ich für die selbe Strecken noch einen 
anderen Regler benutzt. Und da sieht man halt den Unterschied zwischen 
PI und PID Regler. Das ist auch mein Ziel für diesen Versuch den ich 
gerade Versuche zu realiseren.

Trotzdem danke für deine Zeit !!!!

P.S. sorry das ich nicht direkt geantwortet habe, bin leider noch an 
anderen Sachen dran.
PID schrieb:

> Ich glaube schon, dass ich das Verstanden habe. Ich weiß, dass der
> D-Anteil den Regler schneller macht

Schon.
Aber WARUM macht er den Regler schneller?

Weil er dafür sorgt, dass bei einer Änderung von entweder Sollwert oder 
Istwert, wenn also die Fehlerdifferenz sich verändert, sofort 
gegengesteuert wird. Der P-Regler kann das nicht, weil er nur 
proportional zum Fehler ausregelt. Der I-Regler kann das auch nicht, 
weil da der Fehler sich erst einmal aufsummieren muss, bis das 
Stellglied nennenswert in Bewewgung kommt (dafür kann der wiederrum 
feiner Regeldifferenzen ausregeln)

Das ist wie wenn du einen Stab mit der Hand balancierst.
Neigt sich der Stab nach rechts, dann zuckt deine Hand auch erst mal 
nach rechts, obowhl du noch gar nicht weißt wieviel. Erst dann fängt 
dein Gehirn an, die dann noch verbleibende Regldifferenz auszugleichen. 
Das Zucken ist vergleichbar mit dem D-Anteil.
Bei kleinen Neigungen, kleinen Änderungen des Fehlers, unternimmst du 
kein Zucken und das Gehirn regelt nach. Kommt aber ein Windstoss und 
nimmt der Fehler (die Winkeldifferenz zur Senkrechten) schlagartig zu, 
dann denkst du nicht lange darüber nach, sondern zuckts einfach nach 
rechts.

Jedes der 3 Glieder im P Regler hat gewisse Eigenschaften und Aufgaben. 
Wenn dir die klar sind, ist auch das Verhalten des kompletten Reglers 
verstehbar
Gast
hi

Deine Antworten Ehren dich wirklich. Ich muss auch zugeben so gut hat 
mir das noch kein Prof. erklärt.

Aber das löst nicht mein Problem, warum der D-Anteil sich beim zweiten 
Regler nicht bemerkbar macht. Gleicher Versuch, nur halt ein anderer 
Regler ich denke es muss auf jeden Fall am Programm liegen.

Danke für deine Bemühungen auch wenns mir nicht so richtig geholfen hat.

schönen Abend noch.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.