PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : digitaler PID Regler



hacker
24.09.2009, 16:37
Hallo,

der Threadname sagt ja schon alles. Ich bin momentan dabei einen digitalen PID Regler zu entwerfen. Dieser soll eine servohydraulische Schwingprüfmaschine auf Weg und Kraft regeln können. Momentan teste ich noch nicht mit der echten Maschine als Regelungsstrecke. Sondern habe seine Eigenschaften versucht in einem negativen Integratorglied nach zu bilden.

Mein Aufbau bisher ist folgender:
Differenz zwischen Soll- und Istsignal wird analog gebildet. Die Differenz geht mittels einem A/D Wandler in den µC. Die Steuergröße wird über einen D/A Wandler auf den Integrator gegeben, dessen Ausgang wiederrum das Istsignal darstellt.

Nach anfänglichen Schwierigkeiten die verschiedenen Variablen vom ADC, DAC und PID Berechnung in ein gemeinsames System zu transformieren, läuft jetzt zumindest schon ein P-Regler (mit der bekannten bleibenden Regelabweichung).

Nun zu meinen Fragen:

1) Wie fange ich Quantisierungsfehler ab bzw. wie glätte ich meine Eingangssignale?
2) Es tritt jedes Mal (mit I-Anteil) rel. große Schwingungen auf. Ich hab ihn schon mal reduziert, jedoch keine Verbesserung.
3) Beim Überschneiden von Soll und Istkurve hab ich teilweise beim Istsignal ein Sprung drin. Da rastet die Regelung kurz aus hab ich den Eindruck. (auch nur beobachtet mit I-Anteil)
4) Der I-Anteil soll die Regelabweichung auf 0 bringen. Bei mir ist aber der Faktor Ki dafür verantwortlich, wie weit mein Ist- an das Sollsignal dran kommt. Die Regelabweichung verschwindet nicht über Zeit. Woran liegt das?

Bei Interesse kann ich den Code auch online stellen.


Mich interessieren ebenfalls Phänomene und Probleme, die sich bei meiner Anordnung noch ergeben können (mit AD bzw. DA Wandlung).

Ich merke, dass ist was ganz anders, als wenn man Soll und Ist direkt im Controller digital hat und man akkurat rechnen kann.


Grüße,
hacker

Besserwessi
24.09.2009, 17:30
Wenn man den Regler schon digital macht, dann in der Regel auch ganz Digital. Es wird also nur das Sensorsignal Digitalisiert. Der Sollwert wird schon digital vorgegeben. Wurde am Ende ja auch Auch so erkannt.

Gegen ein Schwingen des Regelers hilft es die Regler parameter passend zu wählen. Klingt einfach, ist aber die eigentliche Aufgabe bei der Auslegung des Reglers.

Zu 1) Der Quantisierungsfehler sollte bei einem richtig gewähltem AD Wandler nicht so groß sein, dass er stark stört. Wenn man deutlich schneller abtasted als die Regelschleife ist, kann man noch etwas durch Überabtastung gewinnen. Die Regelung bzw. der Aktor dient dabei al glättungsglied. Eine etwas andere Sache ist die Quatisierung bei der Ausgabe der Steuergröße. Hier kann man ggf. durch dithering etwas machen: Der Ausgabewert wird zwischen 2 benachbarten Werten moduliert (PWM ähnlich) um zwschenwerte darzustellen. Hängt aber von den Stellgleidern ab, ob das sinn macht. Bei heizungen geht das oft gut, bei eher schnellen Aktore eher nicht.

zu 2) Die Schwingungen sollten verschwinden wenn die Parameter richtig gewählt sind.

zu 3) was ist mit ISt Signal gemeint ?, Gibt es da irgentwie eine Rückkopplung schon auf den Siensor ? Es könnte ein Fehler beim Integrator sein, Eventuell kommt der irgendwie in die Sättigung.

zu 4) Wenn der Regler schwingt, kann es passieren das einige Größen in die Sättigung kommen, gerade wenn teile analog realiseirt sind. Dann funktioniert der I anteil noch nicht richtig.


Die Empfehlung ist erst mal den Regler so weit wie möglich digital zu realisieren. Aus dem Integral wird dann einfach eine Summe.

PICture
24.09.2009, 18:25
Hallo!

Der besserwessi hat es chon geschrieben, ich möchte es noch betonen, dass ein digitaler Regler nur mit digitalen Werten synchron mit Taktfrequenz arbeitet und enhält nur für analoge Ein- und Ausgangwerte entsprechend A/D und D/A Wandler.

Der von analoger Regelungtechnik bekannter Regler hat mit dem Digitalen nichts zu tun und alle seine Funktionen (P, I und D) werden rein digital (also virtuell) realisiert.

Es ist vielleicht möglich eine Mischung zum Laufen zu bringen, aber nicht ohne spezifischen Probleme.

MfG

hacker
24.09.2009, 18:32
Wenn man den Regler schon digital macht, dann in der Regel auch ganz Digital. Es wird also nur das Sensorsignal Digitalisiert. Der Sollwert wird schon digital vorgegeben. Wurde am Ende ja auch Auch so erkannt.

Der Sollwert wird nicht in dem Sinn digital extra vorgegeben. Ich habe das analoge Sensorsignal und das analoge Sollsignal (die Option für analoge Sollsignale muss vorhanden sein!). Von diesen beiden Signalen bilde ich mit einem Op die Differenz, welche dann anschließend auf den A/D Wandler geführt wird.


Zu 1) Der Quantisierungsfehler sollte bei einem richtig gewähltem AD Wandler nicht so groß sein, dass er stark stört. Wenn man deutlich schneller abtasted als die Regelschleife ist, kann man noch etwas durch Überabtastung gewinnen. Die Regelung bzw. der Aktor dient dabei al glättungsglied. Eine etwas andere Sache ist die Quatisierung bei der Ausgabe der Steuergröße. Hier kann man ggf. durch dithering etwas machen: Der Ausgabewert wird zwischen 2 benachbarten Werten moduliert (PWM ähnlich) um zwschenwerte darzustellen. Hängt aber von den Stellgleidern ab, ob das sinn macht. Bei heizungen geht das oft gut, bei eher schnellen Aktore eher nicht.

Da es bei dem Aktor um einen sehr schnellen Aktor handelt (es müssen Geschwindigkeiten um die 2 m/s auf einer Strecke von ca. 5cm geregelt werden), fällt dieser Vorschlag wohl flach.


zu 2) Die Schwingungen sollten verschwinden wenn die Parameter richtig gewählt sind.

Die richtigen Parameter...das ist die Kunst ich weiß. Nur spielen die bei mir in völlig verschiedenen Zahlenwelten (Kp = 75, Ki = 0,0001, ...) Ich werde morgen daran weiter probieren.


zu 3) was ist mit ISt Signal gemeint ?, Gibt es da irgentwie eine Rückkopplung schon auf den Siensor ? Es könnte ein Fehler beim Integrator sein, Eventuell kommt der irgendwie in die Sättigung.

Mit dem Ist-Signal meinte ich den Ausgang vom Integratorglied. Ich hatte die Maschine auf Ihr Regelungsverhalten hin mal ausgemessen. Sie zeigt sich nach außen wie ein neg. Integrierer. Daher hab ich dieses Verhalten momentan mit einem Op aufgebaut. Dieser Ausgang entspricht praktisch dem Sensorsignal (Ist-Wert).
Fast immer beim Überschreiten von Ist und Soll Signal, wenn die beiden also gleich sind, dann hüpft mein Istsignal plötzlich. Vielleicht liegt das wirklich am Integrierer. Das werde ich morgen ebenfalls testen.

Vllt. schaffe ich es auch ein paar Bilder zu machen.

Danke und bis morgen,
hacker

/edit

Ich glaube ihr habt mich falsch verstanden. Ich habe nicht den I-Anteil als analogen Integrierer aufgebaut.

Der Regler ist rein digital. Analoge Eingänge über AD und Ausgänge über DA.

Die Regelstrecke (die Prüfmaschine) hab ich momentan mit einem Integrator emuliert, da die Regelstrecke ein negatives I-Glied ist.

PICture
24.09.2009, 18:43
Der Sollwert wird nicht in dem Sinn digital extra vorgegeben. Ich habe das analoge Sensorsignal und das analoge Sollsignal (die Option für analoge Sollsignale muss vorhanden sein!).

Ist es verboten die beide Eingangsignale zu digitalisieren ?

MfG

hacker
24.09.2009, 18:46
Natürlich nicht. Aber meine Pins am Controller waren alle schon belegt, sodass ich nur ein ADC anschließen konnte (parallel 12bit)

PICture
24.09.2009, 18:58
Entweder machst du es rein digital, wie du eigentlich willst, oder musst du mit unabsehbaren Problemen in analog Technik kämpfen. Der Digitalregler kann eben nur die erhaltene digitale Werte verarbeiten. Zu geringe Anzahl von µC Pins sind für mich kein Argument um sich das Leben zu erschweren... O:)

MfG

Besserwessi
24.09.2009, 19:21
Wenn die Regelstrecke praktisch druch ein I Glied beschrieben wird, dann kann man das I-Gleid im Regeler auch Weglassen und mit einem PD Regler arbeiten. Durch die Integrierenden Funktion der Regelstrcke wird auch dem PD dann so was ähnliches wie sonst ein PI regler bei einer normalen Regelstrecke. Eine bleibende Regelabweichung sollte man damit auch fast nicht bekommen.
Statt einem I Glied wäre eher schon ein D² Gleid sinnvoll um den Regler schneller zu machen.

Gerade bei einer extremen Regelstrecke kann es schwer werden die Parameter rein durch raten / probieren zu bestimmen.


Ob man das System jetzt als schnell oder langsam ansehen muß ist relativ. Bei Rastermikroskopen wird zum Teil mit Regelbandbreiten im MHz Bereich gearbeitet, auch mit digitalen Reglern.

pongi
25.09.2009, 09:48
Wenn dein Aktor schnell ist, musst du auch insbesondere darauf achten, dass die Abtastfrequenz hoch genug ist, ansonsten wird das sowieso nichts. In der Theorie der Regelungstechnik funktioniert das Einlsen des Istwertes und die Ausgabe der Stellgröße zeitsynchron, was natürlich in der Realität nicht geht, da du inzwischen was zum rechnen hast. Normalerweise ist das kein Problem, wenn man aber zu viel Zeitverschiebung hat (vor allem bei schnellen Strecken), kann es auch zu Problemen kommen. Dagegen hilft eine algorithmische Verbesserung des Codes, wo alle möglichen Operationen, die nicht vom Zustand xk+1 abhängen, im voraus berechnet werden.

Hast du evtl. eine Stellgrößenbeschränkung im System? Zb Umax < 10V? Wenn ja, muss du den Regler so entwerfen, dass die Integration angehalten wird, falls die Stellgröße diese Grenze erreicht, denn es macht keinen Sinn, dass die Stellgröße zB 12V vorgegeben ist, wo das in der Realität nicht möglich ist. Dadurch integriert der Integrierer zu weit auf, und es kommt zu einer Überschwingung.

jeffrey
25.09.2009, 10:56
hoi,
also irgendwas stimmt meiner meinung nahc mit deiner beschreibung oder deinem aufbau nicht. wenn deine strecke ein integrator (ka, was ein negativer integrator sein soll) ist, bekommst du auch mit einem p-rgeler keine bleibende regelabweichung. durch das hinzufügen eines i-anteils im regler meachst du aber dann dein system schwingfähig, was ja eher kontraproduktiv ist.
mfg jeffrey

hacker
25.09.2009, 16:24
Ein neg. Integrator sollte ein "invertierender Integrator" bei mir sein ;-)

Ich hab heute mal nur einen reinen P-Regler implementiert. So sieht das bei einer Rechteckspannung aus:
Bitte nicht an den Beschriftungen stören.

Blau ist Sollsignal
Rot ist Istsignal
Gelb ist die Regelgröße was aus dem DAC rauskommt
http://www.imgbox.de/users/public/images/g53951d137.jpg

Hier sieht man deutlich die Regelabweichung, die bleibt, obwohl die Regelstrecke in Integrator ist. Keine Ahnung wieso. Was auch extrem komisch ist, sind die extremen Stellgrößen Peaks immer an der selben Stelle. Was passiert hier? Die verbiegen auch mein Ist-Signal, was plötzlich zu springen scheint.


Jetzt nochmal ein Sinus

Blau ist Sollsignal
Rot ist Istsignal
Gelb wieder Regelgrößte
Grün Differenz Soll-Ist

http://www.imgbox.de/users/public/images/d6495u137.jpg

Wenn man bedenkt dass bei Soll und Istsignal (Blau und Rot) eine DIV 100mV sind, sind die beiden Kurven ja echt ziemlich gut geregelt (paar mV Unterschied)

Aber hier sieht man wieder die Ausraster auch in der Differenz. Wo zum Henker kommen diese Sprünge her?

Grüße,
hacker

Edit von BastiUniversal: Bilder zu breit, bitte die Links anklicken!

Besserwessi
25.09.2009, 21:10
Die Störungen sehen wirklich recht stark aus. Es sieht ein bischen so aus, als kommen die Störungen dann wenn ein bestimmter Wert am DAC ausgegeben wird. Es ist aber nicht so richtig zu erkennen wo die Störungen herkommen, und was nur Folgen davon sind. Da fehlt noch etwas mehr Zeitauflösung um zu erkennen ob der Regler das System anstößt oder andersherum.

Mögliche Ursachen könnte ein Fehler beim DAC, ein Fehler bei der Umwandlung signed / unsigned sein. Möglich wäre auch irgrndwo eine Umwandlung foat in Integer, wo die Nachkommastellen abgeschnitten werden und es dann bei 0 zu einem größernen Sprung kommt.

hacker
29.09.2009, 18:10
Mehr Zeitauflösung ist bei dem Oszi leider verdammt schwierig (das im Bild einzufangen)

Dafür gibt es ein neues Bild:

http://www.imgbox.de/users/public/images/o4372v34.jpg (http://www.imgbox.de)

BLAU - Sollsignal 500mV/DIV
ROT - Istsignal 500mV/DIV
GRÜN - Differenz Soll-Ist 20mV/DIV
ORANGE - Stellgröße DAC Ausgang 100mV/DIV

Hier sieht man eine Störung recht gut. So wie das aussieht, ist das Differenzsignal aber sauber und trotzdem bricht die Stellgröße plötzlich aus.

Was meint ihr?

Ich gehe momentan akribisch meinen Code durch bezüglich Casts oder dergleichen. Bis jetzt scheint mir aber alles ok zu sein.

hacker
30.09.2009, 15:48
Die letzte Störung hab ich beseitigen können. Da kam der ADC wohl nicht mehr ganz so hinterher, sodass die oberen 4 Bits immer hops gingen. Ist jetzt behoben.

Heute hab ich dann auch gemerkt, dass eine Hydraulik so ziemlich das Hässlichste ist, was man regeln könnte...

Parameter Einstellen ging teilweise. Jedoch konnte ich keine "allgemeinen" Parameter finden, die für jede Amplitude, jede Kurvenform und jede Frequenz gepasst haben.

hacker
04.10.2009, 09:48
So der Regler läuft jetzt wunderbar. Ich werde bei fertiger Platine nochmals ein Bild einstellen.