Hi, Ich versuche für einen DC brushed Motor einen Positionsregler zu implementieren. Kann ich dafür 2 PI Regler in Serie schalten oder wie würdet ihr das machen? Ich habe das folgendermaßen implementiert: Der PI Controller für die Position gibt mir direkt den Referenzwert für den PI Speed Controller, welcher dann am Ausgang die DutyCycle für den Motor bestimmt. Nun funktioniert das eigentlich relativ gut, aber der Positionskontroller reagiert noch zu schwach auf kleine Fehler, wobei ich dies nicht wirklich tunen kann, sonst ist die Dynamik hin. Weiter ist auch der SpeedController nicht wirklich gut, speziell für langsame Geschwindigkeiten, wobei dies evtl. auch auf die Geschwindigkeitsschätzung zurückzuführen ist. Was verwendet ihr so für Regler Topologien für einen Positionsregler? Edit: Wenn ich nur einen PD Regler für die Position verwende, habe ich sehr gutes Tracking der Position, zumindest für langsame Geschwindigkeiten. Jedoch wirkt das ganze dann ziemlich "hart".
:
Bearbeitet durch User
Hallo Bert, ich würde einen Lageregelkreis (P-Regler) mit unterlagertem Drehzahlregelkreis (PI-Regler) nehmen (Kaskadenregelung). PI-Regler ist als Lageregler zu langsam. Gruss Werner
WR schrieb: > Hallo Bert, > > ich würde einen Lageregelkreis (P-Regler) mit unterlagertem > Drehzahlregelkreis (PI-Regler) nehmen (Kaskadenregelung). > > PI-Regler ist als Lageregler zu langsam. > > Gruss Werner Danke Werner, Mir gelingt es aber leider nicht den PI Regler für die Geschwindigkeit angemessen zu tunen. Wahrscheinlich liegt das an meiner Geschwindigkeitsmessung. Wie genau sollte man die Geschwindigkeit bei langsamen Drehzahlen messen? Ich habe einen Timer, der mir mit etwa 100Hz die zwei Positionen vergleicht und daraus die Geschwindigkeit schätzt. Schnelleres messen führt zu kleineren Differenzen und da ich einen Abolutwertgeber habe, der +-0.1% schwankt, kann ich irgendwann nicht mehr vernünftig messen. Oder soll ich die Positionen mit hoher Frequenz in einem Ringbuffer speichern und dann z.B alle 20ms die Geschwindigkeit ermitteln?
:
Bearbeitet durch User
Ich habe mal vor einiger Zeit einen Positionsregler gemacht. Das Tunen der Regler nimmt schon Zeit in Anspruch. Zu deiner Frage. Ich lese mein Positonsgeber mit 1kHz aus. Eine Positionsregelung alle 20ms halte ich schon für sehr langsam. Kommt aber auf die Anwendung und deren Anforderungen an. Was willst du genau? Einen Positionsregler oder nur einen Geschwindigkeitsregler?
Gad Z. schrieb: > Ich lese mein Positonsgeber mit 1kHz aus. > Eine Positionsregelung alle 20ms halte ich schon für sehr langsam. > Kommt aber auf die Anwendung und deren Anforderungen an. Der Controller läuft mit 2kHz, aber die Geschwindigkeitsmessung nur mit 50Hz, da sonst das Rauschen im Vergleich zu der vergangenen Position zu groß und die Messung nichtig wird. Ich versuche vielleicht mal eine art "time stamping" Algorithmus zu implementieren für die Geschwindigkeitsmessung, diese nimmt dann auch ältere Samples mit in Bezug, daher sollte es so viel genauer sein und die Sampling-Frequenz kann wesentlich erhöht werden. https://www.mathworks.com/matlabcentral/answers/uploaded_files/10191/6868.pdf Gad Z. schrieb: > Was willst du genau? > Einen Positionsregler oder nur einen Geschwindigkeitsregler? Beides in einer kaskadierung, so das man auf Geschwindigkeitsregelung umschalten kann bei Bedarf.
:
Bearbeitet durch User
> Position gibt mir direkt den Referenzwert für den PI Speed Controller, > welcher dann am Ausgang die DutyCycle für den Motor bestimmt. Wenn ich dich richtig verstehe dann aendert die Ausgangsgrosse deines Reglers die mittlere Spannung am Motor und nicht den Strom? Dann hast du keinen linearen Zusammenhang. Das wird dann IMHO nicht funktionieren weil Regler LTI Systeme vorraussetzen. Olaf
Bert S. schrieb: > Beides in einer kaskadierung, so das man auf Geschwindigkeitsregelung > umschalten kann bei Bedarf. Dann würde ich auch den Regler umschalten. Ich würde für den Motor einen P-Stromregler und je nach "Bedarf" einen überlagerten PI für die Drehzahl -> da genügen wahrscheinlich die 20ms ODER einen überlagerten PD für die Position (Wenn nicht sogar PID mit antiwindup - je nach geforderter Genauigkeit). Bei der Positionsregleung würde ich wie Gad Z. rein Gefühlsmäßig auch die Abtastrate erhöhen.
Ich denke auch das Problem hier ist die Geschwindigkeitsermittlung. Wenn diese mit 50Hz abtastet, dann ist grob gesagt wohl kaum mehr als 5Hz Regelbandbreite für den Geschwindigkeitsregler drin und für den darüber liegenden Positionsregler dann 1/10 davon. Generell in Servo Drives braucht es eine hohe Encoderauflösung oder einen separaten Tacho um hohe Regelbandbreiten und niedriges Rauschen zu erreichen. Man könte noch versuchen mit einem Observer der ein "weicheres", besser interpoliertes Geschwindigkeitssignal rekonstruiert die Performance zu optimieren. Ein Observer ist am Ende jedoch nichts anderes als ein Tiefpass und würde die Regelbandbreite weiter reduzieren. Wenn die 50Hz Abtastung nur zwei Encoder Zählerstände subtrahiert um die Geschwindigkeit zu ermitteln, wird es so bald dieser Wert in den einstelligen Bereich kommt wohl rauh laufen. Man könnte noch die Zeit zwischen zwei Zählerwerten messen.
Ok, danke euch für die Tipps, ich probiere die mal aus. Noch eine Frage zur Kaskadierung von den Reglern, die inneren Regler müssen ja viel schneller sein als die äußeren, zumindest habe ich das damals so gelernt? Z.B wenn der Positionsregler mit 200Hz arbeitet sollte der Geschwindigkeitsregler sagen wir mit mit 600Hz arbeiten und ein Stromregler darunter mit 2kHz, oder so ähnlich. Oder kann ich auch hier sagen, umso schneller umso besser, also alles zusammen in der gleichen Loop?
Wieso genau hast du "nur" so tiefe Abtastfrequenzen? Nur ein Verrauschen des Messwertes kann ja nicht der Grund sein. Ausser du hast eine überempfindliche Schaltung. Aber dann wird das sowieso eine kritische Angelegenheit, wenn du von deinem Labortisch in die reale Welt gehst. Unsere eigenen Positionsregler sind alle so ausgelegt, dass die Soll-Positionswerte alle 1ms aktualisiert werden. Darunter ist ein Stromregler, welcher dann 10kHz hat. Also jede Kaskade arbeitet um Faktor 10 schneller. Und wie schon gesagt wurde, müssen die Ist-Werte eine höhere Auflösung haben, als die Vorgaben. Wir haben hier auch Faktor 5-10 umgesetzt. Und dann immer schön von innen nach aussen die Regler tunen...
Patrick B. schrieb: > Wieso genau hast du "nur" so tiefe Abtastfrequenzen? > Nur ein Verrauschen des Messwertes kann ja nicht der Grund sein. Ausser > du hast eine überempfindliche Schaltung. Aber dann wird das sowieso eine > kritische Angelegenheit, wenn du von deinem Labortisch in die reale Welt > gehst. > > Unsere eigenen Positionsregler sind alle so ausgelegt, dass die > Soll-Positionswerte alle 1ms aktualisiert werden. Darunter ist ein > Stromregler, welcher dann 10kHz hat. Also jede Kaskade arbeitet um > Faktor 10 schneller. > Und wie schon gesagt wurde, müssen die Ist-Werte eine höhere Auflösung > haben, als die Vorgaben. Wir haben hier auch Faktor 5-10 umgesetzt. Und > dann immer schön von innen nach aussen die Regler tunen... Diese Abtastraten waren nur ein Beispiel. Ich kann den Regler schon mit bis zu 5kHz ausführen, zumindest den Stromregler. Wenn der Regler aber jetzt zu Zeitaufwendig ist für in einem Interrupt abgearbeitet zu werden, wie genau macht ihr das, damit ihr genau mit z.B 1kHz regeln könnt? Ein FreeRtos? Oder einfach mit dem Timer ein globales flag triggern und in der Main die Funktion aufrufen?
:
Bearbeitet durch User
Bert S. schrieb: > Oder einfach mit dem Timer ein globales flag > triggern und in der Main die Funktion aufrufen? Also auf einem AVR mache ich das so in der Art. In der ISR nen Regler durcharbeiten würde viel zu lange dauern. Solange man in der ISR ist kann man ja auf rein gar nichts anderes reagieren.
Bert S. schrieb: > Wenn der Regler aber > jetzt zu Zeitaufwendig ist für in einem Interrupt abgearbeitet zu > werden, wie genau macht ihr das, damit ihr genau mit z.B 1kHz regeln > könnt? Ein FreeRtos? Ok, ich hab wohl irgendwo überlesen, dass es um einen AVR 8-Bitter geht. Die "einfachen" Regler laufen auf STM32F0 mit 72MHz. Und auch hier wurde halt auf "unnötiges" verzichtet sowie die Taktfrequenzen der Regler reduziert. Die aufwendigeren sind auf einem FPGA mit Soft-Core. Alle PI und PID Regler sind da in VHDL geschrieben, mit direkter Anbindung an ADCs und PWM Outputs. So kann die Kommunikation im Softcore entspannt abgearbeitet werden. P.S.: Ein Rtos ist nicht immer die beste Lösung. Oft generiert es mit Task-Switch und Inter-Task-Kommunikation bei einfachen Systemen mehr Probleme als es löst. Da muss man halt auf die gute alte FSM und geschicktes Firmware-Design ausweichen.
Danke euch für die vielen Ratschläge. Wenn ich also einen P-Regler für die Position und einen PI-Regler für die Gewschwindigkeit wähle, wie bestimme ich da, wie viel Fehler jedes mal akkumuliert wird und wie groß die Anti-Windup Grenzen sein sollen? Ich habe momentan folgendes: speed_control.sum+=speed_control.speed_err*speed_control.sum_period; wobei speed_control.sum_period hier 0.001 ist, da der Controller mit 1kHz ausgeführt wird. Das Problem ist nur, dass nun der Controller sehr träge wird für die Geschwindigkeit. Anti Wind-Up Grenze habe ich 10.
Wie schon gesagt, muss der unterlagerte Regelkreis deutlich schneller als der Positionsregler sein, so dass er z.B. durch ein einfaches PT1-Glied ersetzt werden kann. Der überlagerte Regelkreis sähe dann wie im Anhang aus. Die Strecke besteht dann aus dem PT1 des Motors und dem Integrator der Spindel. Ein PI-Regler ist schon die richtige Wahl, allerdings geht das prinzipbedingt nicht ohne erhebliche Überschwinger. Wenn Überschwinger nicht zulässig sind, schaltet man vor den Sollwert eine Sollwertverzögerung (PT1).
Noch eine Frage: warum schaltet ihr einen Stromregler vor den Motor? Der Strom gibt das Moment vor, gefragt ist aber die Spannung. Die Spannung gibt die Drehzahl vor, die dann durch die Spindel zum Weg integriert wird. Einen Strom könnte man im Regelkreis nicht ohne weiteres nachbilden, das ergäbe also eine undefinierte Strechennachbildung. Meiner Meinung nach kann die Spannung einfach gestellt werden, da die Fehler durch den überlagerten Regelkreis ausgeglichen werden.
Für die Auslegung des Reglers ist es hilfreich, den Regelkreis zu simulieren, da man leicht an den Parametern spielen kann, um das Ergebnis zu optimieren. Da ich das schon mal gemacht habe, kann ich das auch zeigen. Die Regelparameter sind nach Lehrbuch berechnet. Wie man am rechten Diagramm erkennen kann, kommt der Reglerausgang an die Spannungsbegrenzung, was zum Überschwingen führt - dies ist bewusst gemacht, um die Auswirkung zu testen. Weiterhin ist der Integrator sehr früh begrenzt, das vermindert das Überschwingen und der Integrator soll sowieso nur die Genauigkeit bei kleinen Abweichungen erhöhen.
Hermann schrieb: > Noch eine Frage: warum schaltet ihr einen Stromregler vor den Motor? Weil praktisch alle relevanten Grössen eines Motors sich nur durch den Strom berechnen lassen (Drehmoment, induzierte Spannung, Ankerspannung... Ein Motor ist nichts anderes als ein komplexes Gebilde, dass sich Magnetfelder zunutze macht. Und Magnetfelder werden über Ströme und nicht Spannungen definiert. Ausserdem verhält sich das ganze dann auch linear und die Dynamik des Motors wird verbessert. Die Stellgrösse im Kreis entspricht dann schon einer Spannung (über PWM durch den Regelkreis definiert). Falls du mehr Details willst, such nach Formelsammlungen oder fertige Regler von namhaften Herstellern.
:
Bearbeitet durch User
Patrick B. schrieb: > Weil praktisch alle relevanten Grössen eines Motors sich nur durch den > Strom berechnen lassen Das ist schon klar. Aber das hilft nicht für die Auslegung des Regelkreises. Mit welchem Übertragungsglied ergibt sich denn die Drehzahl aus dem Strom. Da geht insbesondere das erforderliche Moment mit ein. Jedenfalls ist die Berechnung aus dem Strom für die Regelung ein nicht zielführender Weg.
Hermann schrieb: > Mit welchem Übertragungsglied ergibt sich denn die > Drehzahl aus dem Strom. Der Strom ist direkt Proportional zum Moment und die Summe aller Momente proportional zur Winkelbeschleunigung. Die Winkelbeschleunigung integriert ergibt die Drehzahl.
Christopher J. schrieb: > Hermann schrieb: >> Mit welchem Übertragungsglied ergibt sich denn die >> Drehzahl aus dem Strom. > > Der Strom ist direkt Proportional zum Moment und die Summe aller Momente > proportional zur Winkelbeschleunigung. Die Winkelbeschleunigung > integriert ergibt die Drehzahl. Christopher J. schrieb: > Der Strom ist direkt Proportional zum Moment und die Summe aller Momente > proportional zur Winkelbeschleunigung. Die Winkelbeschleunigung > integriert ergibt die Drehzahl. Auch richtig! Der Reglerausgang als PWM-Spg ist der Drehzahl-Sollwert. Das daraus ein Strom entsteht, der das Moment und alles weitere verursacht ist klar. Das ist aber nur Mittel zum Zweck. Für die Reglerauslegung muss man aber eine definierte Regelstrecke finden. Die durch den Umweg über den Strom unnötig komplizierter wird. Das Ergebnis ist doch wieder eine PT1-Motorsimulation, weil sich etwas anderes kaum besser regeln lässt. Was allerdings helfen würde, ist ein unterlagerter Drehzahlregler. Der verbessert dann das Anlaufverhalten und die Regelung bei kleinen Drehzahlen. Der Drehzahlregler mit Motor ist dann für die übergeordnete Regelung wieder eine PT1-Simulation des Motors. Für mein obiges Beispiel habe ich einfach den Motor am Oszi ausgemessen. Sehr einfach: durch oszillografieren des Aufnahmestroms. Die gemessene Zeitkonstante entspricht der der Drehzahl. Das kann man dann auch mit der Drehzahlregelung machen.
Noch eine Frage zu den hardware : was ist die Auflosung von encoder ? Wird beide kanalen (A/B) und Flanke verwendet um die Position/Speed zu vermessen ? Welchen typ von DC motor ist das ? Wiefiel Polen hat das Anker ? Billig DC-motoren haben oft 5 Polen, und damit ist das Moment bei kleine Winkelanderungen nicht constant. Idealerweise soll das so ein "Eisenloss" Anker sein (Maxon, Minimotor). Wie werd die H-Brucke angesteurt ? Die "harte" Ansteuerung ergibt fiel besseres Regelung : Enable immer hoch, Kanal A für Richtung, Kanal B für PWM. Das ist eine "harte" Ansteuerung. Wenn sie PWM auf "Enable" schalten, lauft der Motor immer frei bei PWM "low", damit wird er nicht gebremst.
Ich hab die Unterlagen aus dem Studium leider nicht gerade zur Hand, aber hier kannst du dich ja auch ein wenig einlesen: http://www.control.tu-berlin.de/images/b/be/Versuch1_Motor.pdf Meine Erfahrung mit Reglern zeigte, dass die Regelstrecke sich nur bis zu einem bestimmten Grad vereinfachen lässt: - Temperaturbedingte Reibungen durch unterschiedliche Schmiermitteleigenschaften - Dynamik und Umkehrspiel von Spindeln Getrieben Riemen - Messgrösse wird oft vom Motor genommen und nicht vom Ende der Regelstrecke (-> z.B. Linearer Positionsencoder von einem Tisch) - Alterungs- und Verschmutzungsbedingte Reibungen - Überlastete Mechanik, die zum Verbiegen und somit höheren Reibungen führte - Kosteneinsparung bei Positionsgebern und Führungen Daher würde ich die Strecke soweit vereinfachen, wie möglich. Aber um ehrlich zu sein: Mein letzter Regler liegt schon ein paar Jahre zurück.
> Meine Erfahrung mit Reglern zeigte, dass die Regelstrecke sich nur bis > zu einem bestimmten Grad vereinfachen lässt: Jo, das ist auch meine Erfahrung. Modellbildung und Theorie gut und schoen, aber fuer die letzten 10% braucht es dann 50% der Arbeit auf der Basis von Intuition. Olaf
RP6conrad schrieb: > Die "harte" Ansteuerung ergibt fiel > besseres Regelung Das halte ich für eine Vergewaltigung des Motors. Der Kurzschluss des Motors ist eigentlich nur eine Abbremsung zum Stillstand. Kurzschluss nach jedem PWM-Impuls verbrät die gesamte Energie im Motor und in der Brücke. Schon der Lärm und das Rütteln tut mir in der Seele weh. Bei kleinen Drehzahlen und Frequenzen steppt der Motor nur noch. Dass das für die Regelung gut ist, kann ich mir nicht vorstellen. Haben andere noch Erfahrung mit diesem "harten" Betrieb?
Patrick B. schrieb: > Meine Erfahrung mit Reglern zeigte, dass die Regelstrecke sich nur bis > zu einem bestimmten Grad vereinfachen lässt Das stimmt wohl. Die Feineinstellung macht man dann im realen Betrieb. Die theoretische Betrachtung gilt erstmal für das grundlegende physikalische Verhalten. Das ermöglicht dann die Auswahl des richtigen Reglertyps und die Grundeinstellung der Reglerparameter. Um näher an der Praxis zu sein, messe ich die reale Strecke vorher aus. Wenn andere Einflüsse bekannt und messbar sind, kann man sie auch in das Modell einbeziehen und die Reglerparameter adaptiv machen. Auf jeden Fall hilft die analytische Betrachtung für die richtige Vorgehensweise. Das führt zum optimalen Reglertyp und vermeidet ein probieren an der falschen Stelle.
Hermann schrieb: > Das halte ich für eine Vergewaltigung des Motors. Der Kurzschluss des > Motors ist eigentlich nur eine Abbremsung zum Stillstand. Zum Stillstand kommt es nicht, da den PWM frequenz zu hoch ist ! Aber das Stromverbrauch ist hoher (ca +50%), da haben sie recht. Aber der Inductivität des Motor ist zo hoch, das sich fast normale Stromen einstellen. Bei eine harte Ansteuerung, haben sie fast eine liniair Verhaltnis zwischen PMW Wert und Drehzahl, das hilft stark bei eine Regelung. Bei eine "Sanfte" Ansteurung ist das Drehzahl fiel mehr abhangig von der Belastung von Motor ! Auch hier mussen sie umpolen wen eine active Bremsung gewunscht ist, und das ist naturlich noch slimmer ! Ich mache seit lange das so bei al meine "Differential Drive" robots, mit gute Regel Ergebnissen !
Danke euch für die vielen Antworten. Ich habe nun die Geschwindigkeitsmessung optimiert und ziemlich gute Resultate erhalten, aber noch nicht optimal. Im inneren habe ich den Stromregler, welcher mit 5.6kHz läuft (maximum möglich), dann die Geschwindigkeitsregelung mit 2kHz und die Positionsregelung mit 500Hz. Ich denke das hier die Positionsregelung und die Geschwindigkeitsregelung noch zu schnell sind, oder? Aber viel spatzig habe ich ja nicht, da für digitale Regler eine gewisse Bandbreite vorhanden sein muss. Wie würdet ihr da die einzelnen Reglergeschwindigkeiten wählen?
Bert S. schrieb: > Im inneren habe ich den > Stromregler, welcher mit 5.6kHz läuft (maximum möglich), dann die > Geschwindigkeitsregelung mit 2kHz und die Positionsregelung mit 500Hz Eine 3-fache Reglerstruktur ist wohl auch übertrieben. Kannst du mal die gesamte Reglerstruktur aufzeichnen?! Mir ist nicht klar, wie der Stromregler eingebaut ist und woher der Strom-Sollwert kommt. Die Abstufung der Reglerfrequenzen sollte mindestens Faktor 5 (besser 10) erreichen. Die Zeitkonstanten der Strecken sollten auch Faktor 5 bis 10 niedriger als die Abtastfrequenzen sein. Das bedeutet: wenn die Strecke der der Lageregelung eine Zeitkonstante von 1 sek hat, sollte der Positionsregler mit 10 Hz, der Drz-Regler mit 100 Hz und der I-Regler mit 1000 Hz arbeiten. Das setzt voraus, dass die Strecken die gleichen Dynamikabstufungen haben. Bert S. schrieb: > Wie würdet ihr da die einzelnen > Reglergeschwindigkeiten wählen? Was heißt Reglergeschwindigkeit? Ein PI-Regler hat eine Verstärkung und eine Zeitkonstante. Die würde ich nach den Stabilitätskriterien der Regelungstechnik berechnen und im realen Aufbau feinjustieren. Die Reglerparameter kann man nicht aus dem Handgelenk zaubern. Dafür muss die Strecke bekannt sein. Dazu fängt man innen beim Stromregler an und bestimmt die Strecke (im einfachsten Fall schätzen, aber am besten messen). Dann wird dieser innere Regler optimiert. Dieser innere Regler ist dann die Strecke für den nächsten Regler, der wieder gemessen wird. Also Stück für Stück bis man beim Positionsregler ist. Wenn hier einer mit Zahlenwerten aus der Hüfte schießt (wie von dir gewünscht), kannst du die in die Tonne hauen.
Hermann schrieb: > Kannst du mal die gesamte Reglerstruktur aufzeichnen?! > Mir ist nicht klar, wie der Stromregler eingebaut ist > und woher der Strom-Sollwert kommt Ich habe im Anhang den unterlagerten Drehzahlregler eingezeichnet. Wie da jetzt ein unterlagerter Stromregler reinpasst, ist mir unklar - würde mich aber interessieren. Sizziere den doch mal - vielleicht hast du ja noch einen Designfehler.
Hermann schrieb: > Mir ist nicht klar, wie der > Stromregler eingebaut ist und woher der Strom-Sollwert kommt. Eventuell so? https://de.wikipedia.org/wiki/Kaskadenregelung Bert S. schrieb: > Wie würdet ihr da die einzelnen > Reglergeschwindigkeiten wählen? Wie schon erwähnt wurde Faktor 5-10 schneller nach innen. Kommt auf deine Anforderungen an, aber so könnte es gehen: I-Regler 5kHz, V-Regler 500Hz, und s-Regler 50Hz oder I-Regler 5kHz, V-Regler 1kHz, und s-Regler 200Hz
:
Bearbeitet durch User
Patrick B. schrieb: > Hermann schrieb: >> Mir ist nicht klar, wie der >> Stromregler eingebaut ist und woher der Strom-Sollwert kommt. > > Eventuell so? > https://de.wikipedia.org/wiki/Kaskadenregelung Ja, Danke, so macht es Sinn. Der Strom-Sollwert ist also die Beschleunigung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.