Moin,
habe gerade ein Problem, welches vielleicht doch nicht so einfach ist, wie zuerst gedacht. Ich muss zur Erklärung leider etwas ausholen:
Gegeben ist eine Steuerung für einen Positionierantrieb. In dieser sind viele Parameter einstellbar. Einstellung erfolgt per Software, alles programmierbar.
Im normalen Ablauf gibt der Anwender den Befehl, dass der Antrieb auf Position X fahren soll.
Der erste Block des Steuergerätes errechnet daraus (unter Berücksichtigung von maximaler Beschleunigung und Geschwindigkeit) welches Profil der Motor dazu fahren muss: zu welchem Zeitpunkt er welche Geschwindigkeit, Beschleunigung und Position haben muss.
Diese Werte, also a_s, v_s und p_s (_s = Soll) gehen auf den Motorregler.
Dieser errechnet aus diesen Werten und der gemessenen Ist-Position eine Motorspannung.
Der Regler hat einen Block in den der Positionsfehler eingeht. Dieser Fehler wird über ein P, D und I-Glied mit jeweils einstellbaren Koeffizienten auf die Motorspannung gegeben.
Ein anderer Block bekommt die Soll-Geschwindigkeit und Beschleunigung. Über einstellbare Koeffizienten werden diese ebenso auf die Motorspannung addiert. Darüber hinaus kommt noch ein Gleichspannungs-Bias mit drauf (natürlich einstellbar), mit dem sich die Schwerkraft kompensieren lässt (falls der Motor vertikal fahren muss).
Nun dachte ich mir, ich mache mit dem Antrieb einfach Testfahrten und messe den maximalen Positionsfehler während der Fahrt. Den gebe ich auf ein Optimierungsprogramm und lasse die Koeffizienten so lange variieren, bis das Ergebnis optimal ist.
Mir dämmert aber, dass es so eine optimale Lösung garnicht gibt.
Ich möchte erreichen, dass die maximal vorkommende Abweichung zwischen Soll- und Istposition während der Fahrt minimiert wird. Hat jemand eine Idee, mit welcher Prozedur ich die optimalen Reglerparameter herausfinden kann?
Das Problem ist, dass allein schon optimal angepasste Koeffizienten für die Geschwindigkeit und Beschleunigung auf die Motorspannung im Idealfall den Antrieb fehlerfrei steuern können, der PID-Regler wäre im Idealfall überflüssig. Wie finde ich optimale Koeffizienten für einen Regler heraus, der überflüssig ist?
Zur Erläuterung noch mal:
+------(d/dt)---(*Kd)---+ | v P_s->---O------+---------(*Kp)---------O---O----O----O->U_motor ^- | ^ ^ ^ ^ P_i | +---(int dt)--(*Ki)-----+ | | | | | | | | | | Bias Ist-Position | v_s*Kvs a_s*KasP_s=Soll-Position, P_i=Ist-Position, a_s*K_as=Soll-Beschleunigung mal Koeffizient, v_s*K_vs=Soll-Geschwindigkeit*Koeffizient, Bias=Gleichspannung zum Ausgleich von Schwerkraft o.ä.
Für die einstellbaren Koeffizienten Kp, Ki, Kd, Kas, Kvs und Bias würde ich gerne optimale Werte finden.
Wie geht man vor? Sollte ich erstmal Kas, Kvs und Bias auf Null setzen und den Regler (Kd, Ki, Kp) optimmieren? Dann Ki, Kp, Kd auf Null setzen und dide anderen Koeffizienten optimieren und dann am Ende alle Werte auf die gefundenen Optima setzen? Oder ist das dann doppelt gemoppelt und damit sehr schlecht?
CU Rollo