ein PID-Regler soll's werden, wie fängt man an

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • ein PID-Regler soll's werden, wie fängt man an

      Ich brauche für die magnetische Levitation einen Regler, alles schwärmt vom 'universellen PID-Regler', also soll so einer aufgebaut werden. Jetzt könnte ich vorhandenen code verwenden, aber ich möchte es doch gerne verstehen, warum der code so ausschaut, wie kommt man zu den Parametern.
      Im Netz gefunden
      rn-wissen.de/wiki/index.php/Regelungstechnik ist schon mal ganz gut, aber für mich nicht komplett. Ich fang mal an:

      Der pseudocode (im link zu finden)
      Der nachfolgende Code wird im Rhythmus der Abtastzeit Ta immer wieder aufgerufen.
      e = w - x; //Vergleich Soll-Ist
      esum = esum + e; //Integration I-Anteil
      y = Kp*e + Ki*Ta*esum + Kd/Ta*(e – ealt); //Reglergleichung
      ealt = e;
      e=Abweichung vom Sollwert
      esum=die Summe aller Abweichungen
      ealt ist die Abweichung vor der letzten Regelung
      y= der neue Wert für den Aktor, der dann einen neuen Ist-Wert generiert.

      Das ist soweit klar.
      Jetzt geht's los: Ta, die Abtastzeit, der PID-Regler soll schnell sein, gut, was bedeutet das? Soll man jetzt möglichst schnell arbeiten oder schätzt man irgendwie da was ab? Wenn ich bei meinem Beispiel mit dem Schwebemagneten bleibe, ist der träge und man lässt die Regelschleife nur 50/s durchlaufen oder langsamer/schneller?
      Und jetzt Kp, Ki*Ta und Kd mit welchen Werten fängt man da an? Richtet sich das nach dem Werteumfang des Ausgangs (PWM von 0 bis 255)? Hängt das auch an dem Werteumfang der Abweichung?
      Wenn jetzt mein Ist-Wert zB. 0..511 geht und y als PWM-Wert vom 0..255 dann ergäbe sich daraus die maximale Regelstrecke:
      Eine Abweichung um 511 Punkte soll eine Ausgangsänderung von 255 Punkten ergeben. Kann man damit was aussagen für die Größenordnungen der K-Werte?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich würde die Abtastzeit hier aus dem Bauch heraus auf 10ms setzen, also 100Hz.
      Aus meiner Erfahrung: zu langsam neigt zu Schwingen und bei zu schnell kann man den I-Anteil schlecht einstellen.


      tschoeatsch wrote:

      Eine Abweichung um 511 Punkte soll eine Ausgangsänderung von 255 Punkten ergeben. Kann man damit was aussagen für die Größenordnungen der K-Werte?
      dann ist dein Kp-Wert 0,5
      Oder was meinst du jetzt?
    • Hi
      Der Regler sollte natürlich schnell genug sein, Aber du hast da ja auch Grenzen.
      Wenn du deinen AD-Wandler im Controller zum Messen nimmst, kannst du etwa ausrechnen, wie lange eine Messung dauert. 13 Takte für die Messung. Aber dann sind die Daten noch nirgens abgelegt. Dann kommen Berechnungen hinzu.

      Vielleicht fängst du mal mit grob 1000 Messungen pro Sekunde an.
      Brauchen die Berechnungen länger, dann vielleicht 500 Messungen/s.

      Anfangen würde ich immer mit dem P-Anteil, während der I-Anteil und der D-Anteil 0 sind.
      Den P-Anteil so weit erhöhen, bis das System beginnt zu schwingen, dann wieder zurück fahren.
      Dann kommt der I-Anteil dazu, der den Rest, was der P-Regler nicht schafft ausgleicht.
      Vielleicht kannst du aber auch auf den I-Anteil ganz verzichten und machst einen PD-Regler.

      Dann zum Schluss den D-Anteil dazu.

      Hilft dir das schon mal weiter?
    • @Michael macht man das so, dass der Regler mit einem Durchlauf sofort fertig ist? Würde der dann nicht bei einen nichtlinearen Zusammenhang von Fehler zu Ausgang wild schwingen?
      @Mitch64 ja eben, der Anfang, mit welchem Wert? Kann man den abschätzen, oder muss man das probieren? Wann kommt's um Schwingen? Wenn mit y nicht der passend Wert erreicht wird, also macht man Kp eher klein, dass in kleinen Schritten y verändert wird?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Die Abtastzeit sollte in etwa der Verzögerung der Regelstrecke entsprechen. Also die Zeit, wenn sich der Ausgang des Reglers ändert, diese Änderung auch am Feedback-Sensorsignal sichtbar ist. Eine höhere Abtastrate bringt keinen Vorteil, weil in der kurzen Zeit keine neue Information für den Regler vorhanden ist, die dieser ausregeln könnte, umgekehrt bei zu niedriger Abtastrate verpasst der Regler Sensorwerte, die eine feinere Regelung erlauben würden. Messen kann man das ganz gut über die Sprungantwort: Ausgang von 0 auf 100% setzen (als Beispiel, hängt von der Regelstrecke ab, sie sollte sich nicht von selbst zerlegen) und die Messwerte protokollieren.

      Allzu kritisch ist die Abtastrate aber nicht, wenn die Regelstrecke gerne mit 50 Hz laufen würde, der Regler aber mit 60Hz arbeitet, wird dieser auch gut funktionieren.
      Für eine Mehrkanal-Heizungssteuerung habe ich einfach eine Abtastrate von 1 Sek gewählt, wobei die thermische Masse an einem Kanal 10x so hoch war wie auf einem anderen, trotzdem hat die Regelung auf wenige Zehntel °C genau funktioniert, was für diese Anwendung vollkommen ausreichend war.

      Zum Ermitteln der Parameter fängt man meist mit einem reinen P-Anteil an (Ausgang = Fehler * P), bis die Regelstrecke zum Schwingen anfängt. Dann reduziert man diesen ein bisschen, bis er nicht mehr schwingt, sondern nur einen leichten Overshoot hat. In der Grafik sieht man das recht gut:


      Der I-Anteil sorgt dafür, das der Ausgang sich mit der Zeit genauer einstellen kann, die Regelabweichung also genau 0 ist. Eine Heizung zB., die nur einen P-Anteil hat, braucht also immer einen Fehler >0, damit der Ausgang aktiv ist, also kann der Sollwert gar nicht erreicht werden. Als Richtwert wählt man einen I-Anteil von P/10, P/5, das kann man dann mit probieren an die Regelstrecke anpassen (ein zu hoher I-Anteil lässt den Regler leicht aufschwingen, ein zu niedriger kann dagegen nie den Fehler auf 0 ausgleichen). Zusätzlich wird meist der I-Anteil esum begrenzt, um ihn nicht zu weit aufschwingen zu lassen.

      Mit dem D-Anteil reagiert der Regler auf externe Einflüsse, indem er kurz aber stark gegensteuert. Wieder bei der Heizung, wenn die Temperatur zB. durch einen Luftstrom in kurzer Zeit recht schnell absinkt, bewirkt der D-Anteil, dass die Heizung einen kurzen "Gegenimpuls" geben kann, um das auszugleichen.
    • zaubara wrote:

      Eine Heizung zB., die nur einen P-Anteil hat, braucht also immer einen Fehler >0, damit der Ausgang aktiv ist, also kann der Sollwert gar nicht erreicht werden.
      Wenn man nur einen P-Regler hat bleibt grundsätzlich immer eine Abweichung. Denn würde man den P-Regler aufdreht, um die Abweichung auf 0 zu bringen, beginnt das System zu schwingen.
      Das ist aber nicht erwünscht. Daher die Abweichung. Der Reglerausgangswert ist bei 0 Abweichung auch 0. Der Magnet würde abfallen. Der Regler dreht dann überproportional auf, um das abzufangen. Wegen der Trägheit schießt dann der Magnet über seine Sollposition raus. Ins Minus regeln kann der Regler vermutlich nicht. Anso muss man warten, bis der Magnet wieder etwas unter die Sollposition abgefallen ist. Der I-Anteil gleicht bei richtiger Einstellung diese Abweichung auf genau 0 aus.

      Ein zu kleiner I-Anteil sorgt lediglich dafür, dass der Sollwert langsamer erreicht wird. Aber die Regelabweichung wird früher oder später 0 sein. Das kommt daher, weil beim I-Anteil der Fehler bei jeder Messung aufsummiert wird.

      e = w - x; //Vergleich Soll-Ist
      esum = esum + e; //Integration I-Anteil

      Bei einem zu hohen I-Anteil beginnt das System wieder zu schwingen.

      @tschoeatsch
      Ich denke auf den I-Anteil kannst du verzichten. Ein PD-Regler ist an der Stelle vermutlich ausreichend.

      Also Proportional-Anteil und Differenzial-Anteil.

      Der P-Anteil gibt erst mal die Power, um den Magneten hoch zu halten. Der D-Anteil sorgt für ein stabileres Schweben bei Störungen (Seitenwind oder anschupsen).
      Am besten per Poti erst mal den P-Anteil einstellen, bis der Magnet in der richtigen höhe ist ohne zu schwingen (Tänzeln). Dann den D-Anteil per Poti hinzu, bis das ganze ruhig steht und recht unempfindlich wird gegen Störungen.

      Wichtig ist, das das Messen und das Nachregeln in regelmäßigen Abständen erfolgt (z.B. 500Hz). Hier könnte man mit einem Timer eine PWM für den Reglerausgang verwenden und den Overflow-Interrupt zum Messen und neuen Reglerwert berechnen.

      The post was edited 2 times, last by Mitch64 ().