PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Einstellung Regelparameter (Tempregelung) mit PIC



Oersted
10.10.2008, 12:47
Hallo!

Ich bin ein ziemlicher Neuling auf dem Gebiet der dig. Regelungstechnik, habe mich aber trotzdem an einer Temperaturregelung versucht.
Folgendes Stück Code ist dabei raugekommen:



#define I_BEGR 3000 // I-Anteil begrenzen
#define TA 4 // Sek.

float pAnteil = 0;
static float iAnteil = 0;
float e = 0; // Regelabweichung
static float esum = I_BEGR; // Integral (Summe der Regelabweigungen)
char outputPower = 0; // Leistung, die auf die Heizung gegeben wird (per PWM)
float Ta = TA; // Abtastrate (Zeit in Sek.)

e = (float) (presetTemp - currentTemp);

// P-Anteil
pAnteil = (e * Kp);

if (pAnteil > 100) { pAnteil = 100; }

if (TIMER_REGLER >= (char) (10*Ta)) // Der Timer wird alle 100ms aufgerufen
{
// I-Anteil
esum = esum + (e * Ta);
if (esum > I_BEGR) { esum = I_BEGR; }
else if (esum < 0) { esum = 0; }

iAnteil = esum * Ki;

TIMER_REGLER = 0;
}

outputPower = (int) (pAnteil + iAnteil);



Das zu regelnde System ist ziemlich langsam. Die Einheit der X-Achse ist Minuten.

Meine Frage jetzt: Wie bekomme ich den Unterschwinger weg? (Siehe Anhang) Der Überschwinger ist sogar gewollt.

Vielen Dank schonmal im Voraus!

bb_stefan
10.10.2008, 15:43
Servus!

Die Sprungantwort Deiner Temperatur hat PT2-Charakter. Um das Schwingen weg zu bekommen, musst Du die Dämpfung erhöhen, d.h. die Verstärkung Kp kleiner machen. Sieht man auch schön an der Leistungskurve, die zwei Mal in die Begrenzung läuft (-> Verstärkung zu groß).

Schön wäre es natürlich, wenn man die Sprungantwort Deiner Strecke kennen würde, dann könnte man ein wenig analytisch an die Reglerberechnung rangehen:
Kompensation der Streckenzeitkonstante mittels der PI-Regler Zeitkonstante und Kp so wählen, dass die Dämpfung des Gesamtsystems (PT2) etwa d=1/sqrt(2) ist. Dann bekommst Du einen minimalen Überschwinger (ohne Unterschwingen). Besonders schnell wird der Regelkreis dadurch aber nicht! Willst Du deutlich schneller werden, als es Deine Strecke allein vorgibt, dann solltest Du vielleicht auf einen PID-Regler ausweichen.

Besserwessi
10.10.2008, 15:50
Im Prinzip sind Über- und Unterschwinger symetrisch, solange das System linear ist. Man könnte die Über- und Unterschwinger wegkriegen wenn man die Regelparameter anders abgleicht. Meistens reicht weniger Verstärkung, also Ki und Kp kleiner. Dadurch wird der Regler aber auch eher langsamer. An sich sieht die Reglereinstellung schon gar nicht so schlecht aus. Wenns schneller gehen soll, dann hilft eventuell ein PID Regler.

Beim I-Anteil sollte man das Aufintegrieren weglassen, wenn die Stellgröße am Anschlag ist. Dann paßt der Fehler nicht zum linearem Modell und der I Anteil wird nur unnötig groß werden.

bb_stefan
10.10.2008, 16:48
Im Prinzip sind Über- und Unterschwinger symetrisch, solange das System linear ist.
Nö, wieso das denn?
Das ist eine gedämpfte Schwingung. Die klingt langsam ab, wie soll da die Amplitude symmetrisch sein? Das einzige was konstant bleibt, ist die Schwingungsdauer, die interessiert hier aber nicht.


Meistens reicht weniger Verstärkung, also Ki und Kp kleiner. Dadurch wird der Regler aber auch eher langsamer.
Ja, hab ich ja schon gesagt.


Wenns schneller gehen soll, dann hilft eventuell ein PID Regler.
Hmm, ja... hab ich auch schon gesagt.



Beim I-Anteil sollte man das Aufintegrieren weglassen, wenn die Stellgröße am Anschlag ist.
Macht er im Prinzip auch schon durch I_BEGR!

Oersted
13.10.2008, 09:12
Vielen Dank für eure Antworten.
Den Regler langsamer zu machen ist nicht erwünscht. Er kann auch ruhig 10% überschwingen.
Ich hab die Lösung auch jetzt: I_BEGR um Faktor 3 nochmal erhöhen: auf 12000 und Ki auf 0,0021.
Jetzt gibt's einen Überschwinger und dann geht's zur Solltemp.
Die Verstärkung hab ich auch noch ein wenig gedrosselt.
Also, es klappt jetzt, super! :-)

jeffrey
13.10.2008, 14:22
hi,
freut miach, dass es funktioniert.
aber mal noch paar fragen. warum darf dein i-anteil nicht negativ werden, und warum begrenzt du den p-anteil?





Beim I-Anteil sollte man das Aufintegrieren weglassen, wenn die Stellgröße am Anschlag ist.
Macht er im Prinzip auch schon durch I_BEGR!
nicht wirklich. diese begrenzung ist ja nur sinnvoll, damit der zahlenbereich der variable nicht überschritten wird und dadurch dann ein falscher wert(inkl. falsches vz) in der variable steht. allerdings sollte man eben den integrator dann anhalten, wenn die stellgröße die beschränkung überschreitet, und nicht dann, wenn der i-anteil einen maximalwert erreicht.

mfg jeffrey

jeffrey
13.10.2008, 14:24
hi,
freut miach, dass es funktioniert.
aber mal noch paar fragen. warum darf dein i-anteil nicht negativ werden, und warum begrenzt du den p-anteil?





Beim I-Anteil sollte man das Aufintegrieren weglassen, wenn die Stellgröße am Anschlag ist.
Macht er im Prinzip auch schon durch I_BEGR!
nicht wirklich. diese begrenzung ist ja nur sinnvoll, damit der zahlenbereich der variable nicht überschritten wird und dadurch dann ein falscher wert(inkl. falsches vz) in der variable steht. allerdings sollte man eben den integrator dann anhalten, wenn die stellgröße die beschränkung überschreitet, und nicht dann, wenn der i-anteil einen maximalwert erreicht.

mfg jeffrey

Oersted
14.10.2008, 12:53
Hi!



aber mal noch paar fragen. warum darf dein i-anteil nicht negativ werden, und warum begrenzt du den p-anteil?

Wie gesagt, ich bin Anfänger auf dem Gebiet.
Also: keine Ahnung, mir erschien es sinnvoll.
Dehalb hab ich ja hier gefragt, um nochwas zu lernen. :)
Die drei Sachen werde ich noch ändern und ausprobieren:
- Integrieren anhalten, wenn Stellgröße (Ausgangsleistung) am Anschlag (100%)
- I-Anteil auch negativ werden lassen (also neg. esum ?!)
- P-Anteil auch nach oben hin nicht begrenzen

Da es jetzt erstmal auch ohne diese Änderungen funktioniert, werde ich mit den Änderungen und Tests warten müssen, bis ich Zeit habe.

Aber diese wertvollen Tipps werde ich mir für die nächste Regelung merken.

Danke nochmal

Gruß
Kai