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.
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.
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.