Forum: Mikrocontroller und Digitale Elektronik D-Anteil wirkt sich nicht aus


von PID (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von regler (Gast)


Lesenswert?

Kd ist in D mit enthalten

von regler (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von PID (Gast)


Lesenswert?

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.

von PID (Gast)


Lesenswert?

ja für D bekomme ich 581 finde ich seltsam

von Karl H. (kbuchegg)


Lesenswert?

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.

von PID (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von PID (Gast)


Lesenswert?

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.

von PID (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von PID (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von PID (Gast)


Lesenswert?

okay das werde ich morgen mal machen, weil ich das heute nicht mehr 
schaffe.

Danke

von PID (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von PID (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von PID (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.