Regelungstechnik- Was macht man wenn man mit der Sensorauflösung nicht hinkommt?
Folgendes: Ein Roboter balanciert auf 2 Rädern. Der verwendete Sensor, der den Neigungswinkel misst, hat eine Auflösung von 1 Grad.
Nun wird ein Zustandsrückführungsregler dafür ausgelegt, dass er senkrecht zum Boden (Winkel 0 Grad) balanciert. Das dafür benötigte Programm braucht für einen Schritt ca. 0,7 ms. Das Problem ist, dass der Roboter nicht richtig stabilisiert. Das liegt an der geringen Auflösung des Sensors von nur 1 Grad. Eine zeitdiskrete und quantisierte Simulation über MatLab/Simulink zeigt ebenfalls eine periodische Schwingung um die Ruhelage.
Andere Sensoren stehen nicht zur Verfügung. Welche Möglichkeiten hat man?
4 Antworten
Das ist ein Problem der Regelungstechnik. Um einen Prozess stabil zu bekommen, muss man darauf achten, dass
1.) Die Ringverstärkung nicht zu gross wird
2.) Statt eines primitiven 2-Punktreglers einen intelligentere Algorithmus einsetzen, z.B. einen pi-regler.
Wie du aus meiner Antwort siehst, muss man mit den Grundlagen der Regelungstechnik vertraut sein, um eine Lösung finden zu können.
Habe selbst Klimaanlagen programmiert.
Man kann durch den Trick der Einführung eines gut dimensionierten Tiefpasses durch Anwendung einer möglichst schnellen Abtastrate für die Positionsmessung eine effektive höhere Auflösung als die nominelle Auflösung erreichen.
Wieso so kompliziert? Ist K nicht einfach eine Konstante?
Das tp-Filter ist bei meiner Lösung einfach Teil der Erfassung des Messwertes, indem, wie gesagt, nur die Änderung Δx zwischen zwei Abtastung en erfasst wird, mit einem Dämpfungsfaktor verkleinert wird und in einen Messwertspeicher addiert wird.
Also in der Schleife, die ich allerdings nicht durch eine while-Schleife realisiert habe, sondern mit einem Hardware-Interupt produziert habe, der pro Messstelle eine Messwerterfassung startet.
M (n)= M(n-1) + (m(n-1) - m(n)) * k
M- gefilterter Messwert
m(n) - roher Messwert
k - Konstante des Tiefpasses
Das ganze lief sehr elegant mit einem Motorola-Prozessor. Der hat nämlich die lobenswerte Eigenschaft, sämtliche CPU-Register automatisch in den Stack zu schieben und am Ende der Subroutine wieder zurück zuholen.
Ich weiß natürlich nicht, ob du so hardwarenahe vorgehen kannst.
In meinem Projekt wurden maximal 64 Stellmotoren mit Messstelle geregelt.
Dazu brauchte ich zwar ein Array für die Daten. Damit wurden aber keine Matrizen -Operationen durchgeführt. Ich sehe auch nicht, wozu man einen Vektor braucht, aber vielleicht unterschätze ich dein Projekt. Meines ist schließlich Jahrzehnte alt, und ich bin auch nur Physiker und kein Elektroingenieur, obwohl ich mir auf dem Gebiet einige Kenntnisse angeeignet habe.
Ich weiß auch nicht, wozu du eine Fourieranalyse brauchst. Man kann einen Pd- Regler auf die ersten Terme der Analyse beschränken
OK, ich habe leiichtinnigerweise den PD-Reglsr von stbitter übernommen. Selber habe ich PI- Regler eingesetzt.
Es gibt leider ein Problem mit der nicht vollständigen Erreichbarkeit des mit Integratoren erweiterten Systems
Es ist ein System mit 4 Zuständen und 2 Eingängen
nun, ein Integrator hat eine Polstelle bei 0 und somit ist es ein "langsamer Pol" und man kann nicht von Verzögerungs-Vobeugung durch I-Anteil sprechen.
Und was soll ich nun machen, wenn die Rangbedingungen der vollständigen Erreichbarkeit nicht erfüllt werden?
Da ich fernab der Technik als Physiker ausgebildet bin, ist mir der Begriff "vollständige Erreichbarkeit" nicht geläufig. Ich habe soeben ein pragmatisches Beispiel geschildert, wie ich die Erreichung des Sollwertes für eine Klimaanlage pragmatisch erzielt habe.
- Die Auflösung vomn 1 Grad ist natürlich schon sehr grob, das wird schwierig.Aber ohne die übrigen Parameter deiner Modellierung kann dir keiner helfen. Wenn du schon einen Simulator hast und dein Modell stimmt, schraubt doch an allen möglichen Parametern, bis es hinhaut.
- Da spielt das Trägheitsmoment eine grosse Rolle
- und die Leistung des Stellglieds
- Vielleicht kann man das Trägheistmoment vergrössern, oder noch eine Dämpfung einbauen.
wie sieht es mit Oversampling bzw. TP-Filtern aus. Das sollte funktionieren, aber wie würde man das programmiertechnisch lösen?
also sozusagen die aktuellen Mittelwerte von allen Daten bzw. bis zur nächsten Änderung nach jedem Schritt ausgibt?
Mit Bruchteil meine ich einen konstanten Faktor z.b.0,1 oder 0,001, aus dem sich die Zeitkonstante im Zusammenspiel mit der Abtastrate ergibt. Also je kleiner die Zahl, desto größer ist die resultierende Zeitkonstante.
Man braucht nur jeweils die verminderte Messwertänderung aufaddieren. Damit bekommt man einen Mittelwert über einen gewissen Zeitraum. Der Inhalt des beschriebenen Speicherplatzes folgt mit Verzögerung, dadurch gemittelt, dem tatsächlichen Wert und enthält mehr Information als die nominelle Auflösung glauben macht. Unterstützt wird das Verfahren, wenn es ein überlagertes weißes Rauschen über dem Messwert gibt. Deshalb habe ich für Temperaturmessungen unabgeschirmte Leitungen zugelassen. Bei einem digitalen Geber ist das schwierig. Man kann hier nur auf mechanische Unregelmäßigkeiten hoffen, z.b. jitter.
P.S. ich habe deine Frage noch mal durchgelesen und bemerkt, dass ich übersehen habe, dass du die Richtung der Neigung mit berücksichtigen musst.
Meine Darstellung bezieht sich leider nur auf skalare Größen.
Ich hoffe du kannst cum grano salis die dahinterstehende Idee erkennen und auf deine Arbeit extrapolieren. Ich gehe davon aus, dass mein Verfahren auf die beiden Koordinaten des Vektors anwendbar ist.
Oversampling nützt nichts, wenn die mechanische Auflösung zu gering ist (ausser du hättest genug Zeit, um aus zig stark unterschiedlichen Abweichungen mehrerer Schrittweiten gebrochene Schrittweiten zu interpolieren.)
Hat dein Regler einen I-Anteil?
Denn nur mit P und D allein bekommst du die Regelabweichung nie weg, egal wie fein die Auflösung ist.
übrigens ist meine Zustandsgröße (der Winkel) tatsächlich eine skalare Größe, die eben zusammen mit anderen Zuständen einen Zustandsvektor bildet (deshalb ist K auch eine Matrix). Also ich kann das durchaus so anwenden
In meiner ersten Antwort habe ich bereits von einem PI-Regler berichtet.
Übrigens habe ich noch einen von den Theoretikern abgelehnten, weil unverstanden, Zusatz eingebaut.
Bei der Temperatur Regelung eines Gebäudes oder eines Gewächshauses gibt es ein klimabedingtes Problem:
Bei dem üblichen Wetter sinkt die Außentemperatur ab ca. 17:00 Uhr bis in die Morgenstunden des folgenden Tages dauernd ab. Um diesen stundenlang dauernden Gradienten wegzuregeln, benötigt ein PI-Regler dauernd eine Regelabweichung, um der fallenden Temperatur entgegen zu wirken. Man kann einem Laien nicht zumuten, zu akzeptieren, dass ein teurer Regler auf Dauer nicht schafft, die Innentemperatur auf Sollwert zu bringen(Gärtner). Deshalb habe aus der Regelabweichung mit geringer Verstärkung einen zusätzlichen Term in den I-Anteil addiert. Hat trotz der Skepsis des Theoretikers gut funktioniert. Diese Problematik ist den Theoretikern fremd, weil sie sich vorwiegend mit sehr schnellen Prozessen befassen, Flugzeugstabilisierung, Düsentriebwerk.
Um der Probleme Herr zu werden, empfehle ich eine empirische Vorgehensweise. Du solltest dein System durch irgendeinen Trick so verlangsamen, dass du die Regelschwingungen beobachten kannst. Bei meinem Gewächshaus brauchte ich dazu nur Geduld und eine ganze Beobachtungsnacht.
Gute Idee...
Tja, Klimaregelungen sind da tatsächlich bedeutet angenehmer und gnädiger...
Gute Idee. Sagt man dem nicht Feed-forward-"Regler"?
Also Erfahrungen vorausschauend berücksichtigen?
Empirisch ist bei Regelungstechnik nie falsch, und die Theoretiker sind immer skeptisch, bekommen aber selten recht.
Uns hat schon der Ausbildner im Praktikum damals gesagt, wenn die Formeln nicht hinhauen, nimm die Faustregeln, die funktionieren immer.
Ich versteh das Fachchinesisch nicht. Jeder Sensor hat aber eine Ansprechschwelle, womit es immer zu Schwingungen kommt.
welche Signalform liegt vom Sensor vor ?
in dem Fall wird der absolute Winkel ausgegeben, also eine ganze Zahl. Ebenfalls verwendet wird die Ableitung mit Hilfe des Differenzenquotienten. Das ist aber aufgrund der geringen Auflösung sehr bescheiden
ich fürchte, das wird mit diesem bescheidenen Teil nicht möglich sein^^
Der digitale EV3-Gyrosensor misst die Drehbewegung und die Richtungsänderungen des Roboters. Die Schüler können somit u. a. Winkel messen, balancierende Roboter erschaffen und eine Technologie erkunden, die im wirklichen Leben häufig zum Einsatz kommt – zum Beispiel in Navigationssystemen und Spielkonsolen oder auch bei der Verwacklungskorrektur in Kameras.
ich habe grundlegende regelungstechnische Kenntnisse, dies hier ist eine Projektarbeit an einer Hochschule. Bisher habe ich eine Zustandsrückführung realisiert (entspricht ja einem PD-Regler).
Wie würde denn die Tiefpassfilterung programmiertechnisch aussehen? Bisher lese ich innerhalb einer While-Schleife die Sensordaten ein, stelle einen Zustandsvektor auf und tippe am Ende das Regelgesetz u=-Kx für meine Stellgrösse ein (mit K als Verstärkungsmatrix des Reglers und x dem Zustandsvektor)...
wie genau baue ich jetzt einen Filter ein?