Simulation einer PT1-Regelung

Hallo,

ich versuche gerade eine Simulation einer Regelung mit einem P-Regler und einer PT1-Strecke. Ich füge mal das Scilab-Programm bei, dies ist allerdings soweit einfach, daß dies auch Nicht-Scilab-Kenner verstehen werden.

Mein Problem ist dabei, daß die Regelung sehr schnell zur Dauerschwingung kommt, obwohl diese Einstellung nur überschwingen sollte, und dann auf einen Wert konvergiert. Ich verstehe nicht, wieso ich ständig Dauerschwinger habe, irgendwo muß ein konzeptioneller Fehler sein, denn in Visual Basic ist das Ergebnis das Gleiche. Auch ist auffällig, daß die Schwingungen mit unterschiedlicher Schrittweite unterschliedlich sind.

P=5.0; // Verstärkung P-Regler w=5.0; // Sollwert for t=0:0.01:0.05 // Schleife von 0 bis 0.025 mit 0.01 Schritten xd=w-xa; // Berechnung der Regelabweichung y=3.0*(1-exp(-t/0.1)); // Berechung des Ausganges der PT1-Strecke xa=xd*P*y; // Berechung der Strecke mit Regler auf Basis Regelabweichung end; // Ende der Schleife

Für Eure Unterstützung danke ich mal im voraus.

Gruss Marc

Reply to
Marc Vollmer
Loading thread data ...

Marc Vollmer schrieb:

Hallo Marc, als erstes stellt sich mir die Frage des Anfangswertproblems: Welcher Wert hat xa am Start? In C z.B. ist die Variable nicht initialisisiert, somit Wert von xa Zufällig, dadurch auch Xd usw... braucht je nachdem ewig zum Einschwingen. Ein Xa=0 würde sicherlich nicht schaden.

Dann mußt du dir Gedanken über die Kausalitäten machen. Du hast eine Totzeit vom Betrag deiner Schrittweite. Stell dir folgendes Szenario vor. P-Regler und P-Strecke, dürfte ja nicht schwingen... aber?

P=5.0 w=5.0 xa=0 while(1) { xd=w-xa y=3 xa=xd*P*y }

erster Durchlauf: xd=5; xa=5*5*3=75

2.Durchlauf xd=5-75=-70; xa=-70*5*3 usw.

um der Lage Herr zu werden mußt du viel mehr Sampeln als die Zeiten in deiner Regelschleife groß sind. Oder du machst es gleich richtig diskret in dem du die Differentialgleichung in einer Differenzengleichung umwandelst und somit den diskreten Algorithmus für den Regler hast.

ein PT-1 ist dann z.B. y_k=(x_k+tau/Tsample*y_k-1)/(1+tau/Tsample) Gruß Andy

Reply to
Andreas Weber

Marc Vollmer schrieb:

Das habe ich gar nicht so recht durchgelesen... Der Ansatz paßt überhaupt nicht. Ein PT-1 Gleid ist eine Differentdialgleichung 1 Ordnung. T1*dxa(t)/dt+xy(t)=kp*xe(t) Diese mußt du "lösen". Was du da schreibst ist einfach nur die Sprungantwort eines PT-1 Gliedes. Ist also vom Ansatz her schon falsch. Also doch sequenziell als Reihe lösen (siehe anderes Posting) oder numerisch integrieren. HTH Gruß Andy

Reply to
Andreas Weber

"Marc Vollmer" schrieb im Newsbeitrag news: snipped-for-privacy@individual.net...

Hallo Marc, es ergibt sich eine gedämpfte Schwingung wenn ich das in LTspice simuliere. Ich behaupte dein y=... ist falsch. Im diskreten Fall muß das so aussehen:

y(n)=y(n-1)+k*(x(n)-y(n-1))

sein. Wobei k=(1-exp(-0.01/0.1)) ist. Den Faktor 3 würde ich einfach dahinter setzen. y3(n)=3*y(n) Wie man das in Scilab formuliert überlasse ich dir.

Hast du denn auch xa=0 gesetzt als Eingangsbedingung?

Wer will kann das Ganze als LTspice Schaltplan bekommen. Dazu habe ich die einzelnen Elemente deiner Regelung in entsprechende Komponenten umgesetzt.

Gruß Helmut

Reply to
Helmut Sennewald

"Helmut Sennewald" schrieb im Newsbeitrag news:d17npj$cq0$01$ snipped-for-privacy@news.t-online.com...

Dauerschwingung

Hallo, die Formel von Andreas scheint die Richtigere zu sein:

y(n) = (y(n-1)+ k*x(n))/(1+k) k = T/Tau=0.01/0.1 = 0.1

Allerdings zeigt auch die noch kleine Abweichungen zum zeitkontinuierlichen PT1. Wieso?

Reply to
Helmut Sennewald

Helmut Sennewald schrieb:

Hallo Helmut, in wie weit Abweichungen? (Die LTSpice Files würden mich interessieren) Ist der Verlauf der Sprungantwort nicht identisch? Es ist ja eine numerische Integration, wird irgendwo gerundet? Um eine möglichst gute Approximation zu haben sollte auch die Abtastzeit/tau eher gegen 1/20 gehen. Wenn du mir die LT Files schicken würdest, würde ich mir das gerne einmal ansehen und durchspielen (allerdings erst morgen Abend). Gruß Andy

Reply to
Andreas Weber

"Helmut Sennewald" schrieb im Newsbeitrag news:d17pun$t6c$00$ snipped-for-privacy@news.t-online.com...

PT1-Strecke

Ich habe gerade nochmal in einem Buch nachgeschaut.

y(n) = (1-k)*y(n-1)+ k*x(n) k = 1-exp(-T/Tau)= 0.0951626

Damit stimmt die Sprungantwort exakt überein mit der zeitkontinuierlichen Lösung des PT1-Glieds. Damit war meine erste Antwort doch richtig.

Gruß Helmut

Reply to
Helmut Sennewald

Hallo Andreas,

Die Anfangswerte sind gesetzt, daran habe ich als erstes gedacht, aber Scilab setzt die Variablen sowieso mit Null vor.

Das Ergebnis mit der Differenzengleichung sieht schon viel besser aus, allerdings ist das Überschwingverhalten sehr stark von der Schrittweite TSample abhängig -- was auf Basis der Formel logisch ist.

Gruss Marc

Reply to
Marc Vollmer

Hallo Helmut,

Ich kann zwar bestätigen, daß die Sprungantwort funktioniert, aber wenn ich die Formel in den geschlossenen Regelkreis hole, schwingt das Teil wieder undefiniert in der Gegend.

Die Differenzgleichung von Andreas funktioniert schon besser, wobei ich eine Abhängigkeit vom Überschwinger zur Abtastzeit habe.

Gruss Marc

Reply to
Marc Vollmer

"Marc Vollmer" schrieb im Newsbeitrag news: snipped-for-privacy@individual.net...

Hallo Marc, ich hatte erwartet, daß du mehr Übung in Scilab hast als ich. Es funktioniert richtig mit meiner Formel. Also ist deine Umsetzung nach Scilab falsch. Ich habe mich jetzt hingesetzt und das Ganze selber programmiert. Das Programm ist so aufgebaut, daß alle abhängigen Werte ausgerechnet werden. Die Kommentare sind auch wichtig wenn du in einem Monat noch verstehen willst was du programmiert hast.

Speichere das Programm in einem File pt1.sce . In Scilab kannst du den File dann aufrufen.

--> exec('pt1.sce')

// Simulation of a control loop with one PT1-element // w=5; // Input step function

p=5; // P ts=0.01; // Sampling time Tmax=0.1; // 0.1 n=int(Tmax/ts+0.5)+1; // Number of simulted steps

k=1-exp(-ts/0.1); // PT1: y=(1-exp(-t/0.1)

yn=0; // Initialize variables yn_1=0; t=zeros(n,1); // Initialize vectors to 0 xa=zeros(n,1);

// for i=1:n-1; xd=w-xa(i); // Target - actual xn=3*xd; // PT1: 3*(1-exp(-t/0.1)) yn=(1-k)*yn_1+k*xn; yn_1=yn; xa(i+1)=p*yn; // Proportional t(i+1)=i*ts; end; // xbasc; // Clear graphics window plot2d2(t,xa,style=5); // Red colour //xa // Print output vector

Diese Abhängigkeit ist völlig normal. Durch die diskrete Abtastung führst du eine Verzögerung ein. Im Frequenzbereich bewirkt das eine zusätzliche Phasenverschiebung. Große Abtatstzeit = viel Phasenverschiebung -> wenig Phasenreserve=Überschwingen

Gruß Helmut

PS: Die Kommentare sind nur deshalb in englisch weil ich das Programm als Kommentar zu meinem LTspice Schaltplan hinzufüge. Dieser wird dann irgendwann als Beispiel in der LTspice users group landen.

Reply to
Helmut Sennewald

Hallo Helmut,

Dein Beispielprogramm funktioniert tadellos. Ich denke, ich habe den Fehler gemacht, daß ich meine Tests mit viel zu großer Verstärkung gemacht habe, so daß sich das Teil aufgeschwungenen hat, und ich vor lauter Wald die Bäume nicht mehr gesehen habe.

In welchem Buch schaust Du nach?

Ich habe nicht sehr viel Ahnung von Scilab, ich habe es nur benutzt, da die Sprache für andere leichter verständllich ist, hätte ich dies in Python oder Basic programmiert, hätte mir wahrscheinlich keiner geantwortet.

Ich verstehe es bis heute noch nicht, bzw. ich kann mir die Formel zur Zeit nicht herleiten. Irgendwo habe ich noch grundsätzliche Verständnisprobleme. Vielleicht kann ich es in einem Monat. :-)

Dieses Wissen muß ich mir erst wieder aneignen, man vergißt doch einiges mit den Jahren, aber ich bin dran.

Ich bedanke mich für Deine tolle Unterstützung. Ich probiere mal weiter.

Gruss Marc

Reply to
Marc Vollmer

Hallo Helmut,

Ich habe eine Auflage von 1995, allerdings habe ich mir schon vorgestern die neuste bestellt. Ich warte schon drauf...

Nee, hast keinen Grund dazu, hattest ja Recht.

Hut ab, dann möchte ich nicht wissen, wie Du mein Wissen bezeichnest :-)

Ich habe auch ein fertiges Simulationsprogramm, auch kenne ich PSpice, aber ich wollte ursprünglich etwas anderes machen: Ich will ein Programm zur Selbstoptimierung eines Kaskadenreglers programmieren. Also die Strecke existiert real, damit ich nicht soviel an der Maschine probieren muß, habe ich überlegt erst mal eine Simulation zu schreiben. Dies ging erst mal in die Hose, was aber mein Interesse geweckt hat. Ich habe mit dieser kleinen Regelung (P-PT1) schon sehr viel gelernt, und deswegen mache ich weiter. Ist zwar nicht einfach, aber hochinteressant.

Gruss Marc

Reply to
Marc Vollmer

PolyTech Forum website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.