PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regelungstechnik: Geschwindigkeitsregelung



teamohnename
26.03.2013, 19:45
Hallo an alle,
auch, wenn das schon 1000000x durchgekaut und erklärt wurde, komme ich bei einem aktuellen Projekt nicht weiter.
Es geht um die Geschwindigkeitsregelung eines Roboters. Geregelt werden soll mit einem PID Regler. Ich bin schon so weit, dass ich die Regelabweichung berechne (also die aktuelle Geschwindigkeit (Differenz von zwei Encoderwerten über Zeitraum von 0.1s, logischerweise wird mit dieser Periode dann auch der Regler aufgerufen)). Dann komme ich aber schon nicht mehr wirklich weiter. Die Reglergleichung sieht momentan so aus:



e_speed_l = speed_l - speed_l_raw;
esum_speed_l += e_speed_l;
steer_l = ((KP_SPEED * e_speed_l) + (KI_SPEED * TA_SPEED * esum_speed_l) + ((KD_SPEED * (e_speed_l - ealt_speed_l))/TA_SPEED));

(Aus dem RN Wissen Artikel Regelungstechnik übertragen). KI und KD sind 0, KP ist 1, sodass ich anfangs einen reinen P-Regler habe. Wie übertrage ich aber nun das Ergebnis der Reglergleichung auf den PWM Wert? Momentan ist der PWM Wert = steer_l, also das Ergebnis der Reglergleichnung. Mit KP = 1 schwingt die Geschwindigkeit extrem, wenn ich KP heruntersetze, ist die Schwingung gleich groß, die Geschwindigkeit wird nur logischerweise kleiner.

Ich hoffe, dass ich das halbwegs verständlich erklärt habe und dass das Problem verstanden wurde.
Vielen Dank und
Viele Grüße
Jan
teamohnename.de

SeveQ
27.03.2013, 23:42
Du gibst einfach das Ergebnis steer_l als Tastverhältnis für dein PWM raus.

Dadurch ergeben sich zwei Dinge, die du beachten musst:

1. hast du eine Stellgrößenbegrenzung auf den Bereich 0 - 100 (= dein Tastverhältnis in Prozent; die Begrenzung kann bei einem I-Regler oder einem Regler mit I-Anteil problematisch werden und zu unschönen Nichtlinearitäten führen; Gegenmaßnahme: Anti-Windup)
2. musst du deinen P-Parameter entsprechend anpassen, dass der Regelkreis nicht schwingt; später deine Parameter für I und D natürlich ebenfalls. Wenn die Strecke selbst schon schwingungsfähig ist, kannst du Zieger & Nichols als einfaches Auslegungsverfahren verwenden.

//update: deinen letzten inhaltlichen Satz habe ich überlesen. Ja, steer_l als PWM Tastverhältnis ist korrekt. Das Auslegen der Parameter ist jedoch relativ tricky. Da dein System aber schwingt, guck dir mal Ziegler & Nichols als Auslegungsmethode an. Die ist zwar nicht sooooo super genau am Ende, aber du kriegst damit recht schnell die passenden Parameter raus.

//update: mir fällt gerade noch ein: sorgst du dafür, dass steer_l keine Werte außerhalb deines Intervalls für das Tastverhältnis annehmen kann? Also < 0% oder > 100%? Das musst du begrenzen. Es ist nicht ersichtlich, wie dein PWM reagiert, wenn es Werte außerhalb des Intervalls [0%, 100%] bekommt.

oberallgeier
28.03.2013, 09:33
Hei Jan,
Regelungstechnik mit den Mikrocontrollern machte mir auch n Riesenproblem beim (Wieder-) Einstieg (nach dem Schulwissen).

... Geregelt werden soll mit einem PID Regler. Ich bin schon so weit, dass ich die Regelabweichung berechne ...Einen gewissen Fortschritt brachte es für mich, als ich mir die Skizze der Regelungsschleife hernahm und alle Größen mit MEINEN Namen beschriftet hatte. Sieh mal hier (klick). (https://www.roboternetz.de/community/threads/37518-Linie-Folgen?p=357670&viewfull=1#post357670) Das brachte - mir - den Durchblick. Na ja, die Einstellregeln aus dem RNWiki taten ein Übriges - daraus hatte ich prima die Werte von Kp, Ki und Kd ableiten können - und es funzt prima. Natürlich war die Vorarbeit die Aufnahme der Sprungfunktion >>im vollständig aufgebauten System<< - ist im ersten Link unten mal beispielhaft zu sehen oder auch hier. (https://www.roboternetz.de/community/threads/36121-Autonom-in-kleinen-Dosen-R2_D03-Nachfolger-R3D01?p=427784&viewfull=1#post427784) Ob Dir mein Code weiterhilft (https://www.roboternetz.de/community/threads/37544-Kurve-fahren?p=378795&viewfull=1#post378795) weiß ich nicht, aber vielleicht ists ne Anregung.

Viel Erfolg (und wenn Du Lust hast, kannst Du hier die Regelung beim Arbeiten (https://www.roboternetz.de/community/threads/36121-Autonom-in-kleinen-Dosen-R2_D03-Nachfolger-R3D01?p=503279&viewfull=1#post503279) sehen).

teamohnename
28.03.2013, 15:42
Hallo,
vielen Dank für Eure Antworten.
Ich habe die Ursache des Problems nun gefunden und auch korrigiert: Es werden LEGO Motoren und die integrierten Quadraturencoder verwendet. Zuvor wurde nur ein Kanal des jeweiligen Encoders über einen normalen Interrupt Eingang des ATmega2560 eingelesen und eine Variable entsprechend inkrementiert. Bei langsamen Geschwindigkeiten macht das auch keine Probleme, wenn der Roboter aber schneller fahren soll, wird das wohl doch irgendwie beeinflusst (wie und warum genau, kann ich nicht sagen, aufgefallen ist das aber besonders beim Geradeausfahren nach trecke über Encoder, was über einer Geschwindigkeit nicht mehr richtig funktionierte, da der Encoderwert nur in eine Richtung hochgezählt wurde und eben auch, wenn der Motor nur minimal rückwärts gedreht hat => noch extremer, wenn Motor blockiert bzw. stark abgebremst wurde). Jetzt werden die Encoder über einen Timer und normale IOs des µCs ausgewertet (siehe mikrocontroller.net (http://www.mikrocontroller.net/articles/Drehgeber)).
Nun schwingt die Geschwindigkeit nicht mehr (so extrem, also nicht mehr nur Motor an/aus).

@SeveQ:Das Ergebnis der Reglergleichung wird entsprechend begrenzt.
@oberallgeier: Mit Regelungstechnik beschäftige ich mich relativ oft, das sind aber meist sehr sehr einfache Regelungen, z.B. Abstand zu einer Wand halten (da wird das Ergebnis der Reglergleichung nämlich von der Maximalgeschwindigkeit subtrahiert/addiert: Bei keiner Abweichung beide Motoren mit voller Geschwindigkeit fahren lassen, sonst die Abweichung einrechnen).
Verwirrt hat mich nun, dass beim P-Regler die Sollgeschwindigkeit nie erreicht wird, ohne dass die Geschwindigkeit stark schwingt, aber das ist ja laut dem RN-Wissen Artikel normal und kann nur mit I-Anteil behoben werden.
Ich habe auch schon bei anderen Dingen die Ziegler/Nichols Methode angewandt. Danke auf jeden Fall für die Links, werde ich mir anschauen!

Habe ich es richtig verstanden, dass die Sprungantwort das Ergebnis der Reglergleichung aufgetragen zur Zeit ist?

Vielen Dank für Eure Hilfe!

Grüße
Jan

ichbinsisyphos
28.03.2013, 17:32
Ich würd den PID-Algorithmus nicht das Tastverhältnis bestimmen lassen, sondern eine Änderung des Tastverhältnisses ausgehend vom letzten Wert. Sonst stellt der Motor kurz ab, sobald er die Sollgeschwindigkeit erreicht, nen.

edit: Sprungantwort ist generell die Reaktion eines Systems auf eine stufenförmig verlaufende Eingangsgröße. Hier meint das die Reaktion der "Regelstrecke" (PWM bis Geschwindigkeitsmessung) auf eine abrupt veränderte Sollgröße, also der zeitliche Geschwindigkeitsverlauf, wenn man ein neues (konstant gehaltenes) Tastverhältnis vorgibt.

oberallgeier
28.03.2013, 19:22
Hallo Jan.

... dass die Sprungantwort das Ergebnis der Reglergleichung aufgetragen zur Zeit ist ...Diese Aussage verstehe ich nicht wirklich.

Die Sprungantwort ist der Verlauf der zu regelnden Größe beim/am/im betrachteten (zu betrachtenden) System auf eine sprunghafte Änderung der Stellgrösse. Genauer gesagt: bei ansonsten gleichbleibenden Bedingungen.

Beispiel mit Regelgröße (zu regelnde Größe) = Geschwindigkeit, Stellgröße = Gaspedalstellung: Kupplung im Auto praktisch schlagartig kommen lassen und sozusagen gleichzeitig Gaspedal bis ans Bodenblech oder auf eine während der Messung konstant bleibende Stellung. Die "Antwort" ist die Reaktion des Systems, also, hier der zeitliche Geschwindigkeitsverlauf. Das ist aber nicht das, was ich unter dem Ausdruck "Reglergleichung" verstehe.


... Sprungantwort ist generell die Reaktion eines Systems auf eine stufenförmig verlaufende Eingangsgröße ...Sorry wenn ich jetzt pingelig bin: das ist nur richtig, wenns nur EINE Stufe gibt. Diese eine Stufe heißt eben dann "Sprung".

SeveQ
29.03.2013, 08:55
Die Reglergleichung ist doch jene, die du oben schon genannt hast: Kp * e + Ki * (i * dt) + Kd * (de / dt) mit e = Regelfehler; i = akkumulierter Regelfehler; de = Delta Regelfehler; dt = Delta Zeit. Oder irre ich mich? (geht hier eigentlich MathML oder LaTeX Math?)

oberallgeier
29.03.2013, 11:00
Die Reglergleichung ist doch jene, die du oben schon genannt hast ...Das glaube ich auch, vermutlich schon. Diese Gleichung hat aber mit der Sprungantwort erstmal nicht viel zu tun, da sie und ihre Parameter ohne praktische Messung eher mühsam theoretisch bestimmt werden müssen. 1) Die Sprungantwort wird ohne Regler bestimmt, bei der praktischen Bestimmung wird einfach eine sprungförmige Stellgröße aufgeschaltet, siehe Beispiel oben, weil sonst die tatsächliche Reaktion des Systems auf die sprunghafte Vorgabe "weggeregelt" wird.

Dazu kommt noch, dass die Reglergleichung nur eine modellhafte und >handhabbare< Lösung einer Differentialgleichung ist. Da bleiben Glieder höherer Ordnung im Lösungsteil oder gering bewertete Anteile öfters/meistens vernachlässigt. Die Gleichung kann also kaum das genaue Verhalten des Systems bei einer sprunghaften Erregung abbilden. Klar - das klingt ziemlich theoretisch, ist es auch. Und deshalb ist die Bestimmung der Sprungantwort und deren Auswertung für die Dimensionierung des Reglers auch die Verbindung des realen Systems zur theoretischen Abbildung/Nachempfindung.

1) Natürlich wird der Regler häufig theoretisch ausgelegt. Die Regelung des Seitenruders eines Airliners (und vieler anderer realer, technischer Produkte) beispielsweise wird erstmal theoretisch ausgelegt was die Verbindung Steuerknüppel zu Seitenruder betrifft. Ich habe nur einmal in meinem Leben experimentell etwas Ähnliches wie einen sprunghaften Seitenruderausschlag im Airliner in der Luft provoziert : Umschalten von einem Kompasssystem aufs andere. Die geringe Differenz der Systeme wird dann ungefiltert wirksam. Da denkt man schon, dass die Mühle auseinanderfliegt. Sprich: manche Systeme sind so groß, manche auch so komplex, dass das Experiment durch analytische Rechnungen ersetzt werden muss. Im vorliegenden Fall des Fahrroboters hiesse es also z.B. die Kennfelder des Motors und der Energiestation u.ä. zusammenrechnen und die in der Bewegungsgleichung für das Fahrzeug mit den Kennfeldern von Trägheits-, Roll-, Reibungs- Luft- und anderen Widerständen verrechnen. Da ackere ich lieber durch ein Sprung-Experiment oder finde mich mit einer Näherungslösung ab.

PICture
29.03.2013, 11:26
Hallo!

@ teamohnename

Mir ist noch eingefallen, dass ein bestehender oszillierender Regler sich praktisch am einfachsten mit Tiefpassfilter bzw. Hysterese am Vergleichknoten (ist = soll) "stabilisieren" lässt. :)