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.
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.
:
Wiederhergestellt durch User
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.
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.
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.
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.
> > 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.
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
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.
okay das werde ich morgen mal machen, weil ich das heute nicht mehr schaffe. Danke
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.