Hello allerseits im Moment versuche ich, eine einfache Positionsregelung für einen DC Motor zu implementieren. Ich habe dazu eine H-Brücke, welche mit einem STM32 angesteuert wird, des weiteren ist der Motor mit einem Drehgener mit 512 Impulsen pro Umdrehung ausgerüstet. Soweit so gut! Der Motor soll aktiv bremsen, d.h. wenn er an eine Position angefahren ist, dann soll er diese halten, auch wenn eine externe Last in wegzudrehen versucht. Ich will eine Last mit Unwucht positionieren, d.h. es wird ganz sicher vorkommen, dass im Stillstand ein Drehmoment auf den Motor wirkt. Ich habe so eine aktive Bremsung auch schon einmal realisiert. Keine Ahnung, ob das "richtig" war, damals ging es nur um eine Drehzahlregelung, aber im Wesentlichen hatte ich meine H-Brücke so angesteuert, dass am Motor immer eine PWM anlag, und wenn man bremsen wollte, war der Tastgrad halt 50%. Das hat gut funktioniert, und der Motor konnte auch tatsöchlich aktiv bremsen damit. Nun will ich aber eine Positionsregelung machen. Also Servoantrieb wenn man so will. Ich habe gelesen, dass man da einen Stromregler bauen soll, um das Moment zu Regeln. Der Stromregler kriegt seinen Sollwert von einem Drehzahlregler, und dieser bekommt seinen Sollwert von einem Positionsregler. Das leuchtet mir ein. Mir ist allerdings noch grade nicht klar, wo in meiner Schaltung ich den Strom im Motor messen soll. a) genügt eine einfache Strommessung mit Shunt im Lowside-Pfad der H-Brücke, sodass der Strom immer positiv ist, oder b) brauche ich tatsächlich eine "schwimmende" Strommessung in den Leitungen zum Motor?
Nesbit B. schrieb: > Hello allerseits > > > Nun will ich aber eine Positionsregelung machen. Also Servoantrieb wenn > man so will. Ich habe gelesen, dass man da einen Stromregler bauen soll, > um das Moment zu Regeln. Der Stromregler kriegt seinen Sollwert von > einem Drehzahlregler, und dieser bekommt seinen Sollwert von einem > Positionsregler. Das leuchtet mir ein. Mir ist allerdings noch grade > nicht klar, wo in meiner Schaltung ich den Strom im Motor messen soll. > > a) genügt eine einfache Strommessung mit Shunt im Lowside-Pfad der > H-Brücke, sodass der Strom immer positiv ist, oder > b) brauche ich tatsächlich eine "schwimmende" Strommessung in den > Leitungen zum Motor? Du steuerst doch deinen Motor mittels der H-Brücke. Auf der Low Seite kannst du einen Shutwiderstand hinzufügen und den Strom so in deiner Steuerschaltung direkt messen.
>>Drehgener mit 512 Impulsen pro Umdrehung
dann fehlt noch eine Richtungsinformation.
Ohne dem keine Positionsreglung möglich.
Pieter schrieb: > dann fehlt noch eine Richtungsinformation. > Ohne dem keine Positionsreglung möglich. Ich tue mich schwerer einen Drehgeber zu finden der das nicht kann als einen der es kann.
O.K. ich dachte mir schon, dass man das mit dem Shunt im Lowside-Pfad machen kann. Allerdings frage ich mich noch eines: wenn der Motor die Drehrichtung wechselt, dann müsste ja auch theoretisch der Strom die Richtung wechseln, damit der Regler "zufrieden" ist. Denn im einen Fall habe ich ja einen negativen Strom. Oder?
Nesbit B. schrieb: > O.K. ich dachte mir schon, dass man das mit dem Shunt im > Lowside-Pfad > machen kann. > > Allerdings frage ich mich noch eines: wenn der Motor die Drehrichtung > wechselt, dann müsste ja auch theoretisch der Strom die Richtung > wechseln, damit der Regler "zufrieden" ist. Denn im einen Fall habe ich > ja einen negativen Strom. Oder? Ich denke, du mußt die Position anhand des Inkrementalgebers berücksichtigen und auswerten, in welche Richtung er von der Sollposition abweicht. Die Stromrichtung ist in beiden Drehrichtungen gleich, zeigt also nur den Betrag.
Langsam. Der Strom durch den Motor dreht sich natürlich um. Der Strom in den Versorgungsleitungen für die H-Brücke nicht (das wäre Generatorbetrieb). Den Begriff Bremsen musst du in dem Kontext (Elektrische Antriebe) etwas vorsichtiger benutzen.
Ich glaube nicht, dass du einen Stromsensor brauchst, außer vielleicht zum Schutz gegen mechanische Blockierungen. Die Rotation kannst du mit einem inkrementalgeber erfassen (Lochscheibe und Lichtschranke). Ein PI-Algorithmus scheint mir dazu angemessen. Ich habe diesen PI Regler damals mit einem Nibobee Roboter erforscht. Mein Ziel war damals, den Roboter mit einer bestimmten Geschwindigkeit zu einem Ziel zu fahren und dort punktgenau anzuhalten. http://stefanfrings.de/nibobee/index.html Da sind genau die gleichen Aspekte drin, die zu auch beachten musst: Beschleunigung, Bremsen, Drehzahl, Punktgenaues Halten trotz äußerer Kräfte.
Nesbit B. schrieb: > Der Motor soll aktiv bremsen, d.h. wenn er an eine Position angefahren > ist, dann soll er diese halten, auch wenn eine externe Last in > wegzudrehen versucht. Wenn du eine H-Brücke hast und die Ansteuerung nicht versaust, passiert das automatisch. > Nun will ich aber eine Positionsregelung machen. Also Servoantrieb wenn > man so will. Dann mal los. > Ich habe gelesen, dass man da einen Stromregler bauen soll, > um das Moment zu Regeln. Der Stromregler kriegt seinen Sollwert von > einem Drehzahlregler, und dieser bekommt seinen Sollwert von einem > Positionsregler. Das leuchtet mir ein. So macht man das auch. http://elm-chan.org/works/smc/report_e.html > a) genügt eine einfache Strommessung mit Shunt im Lowside-Pfad der > H-Brücke, sodass der Strom immer positiv ist, oder Ich glaube schon. > b) brauche ich tatsächlich eine "schwimmende" Strommessung in den > Leitungen zum Motor? AFAIK nein.
Stefanus F. schrieb: > Ich glaube nicht, dass du einen Stromsensor brauchst, außer vielleicht > zum Schutz gegen mechanische Blockierungen. Schon wieder falsch! Für einen schnellen Stromregler für einen Servo braucht an die schnelle Strommessung sehr wohl! > Die Rotation kannst du mit einem inkrementalgeber erfassen (Lochscheibe > und Lichtschranke). Hat er schon!
Falk B. schrieb: > Schon wieder falsch! Ja, freu dich! > Für einen schnellen Stromregler für einen Servo > braucht an die schnelle Strommessung sehr wohl! Er will aber letztendlich nicht den Strom regeln, sondern die Position. Meiner Meinung nach genügt es dazu, die Soll-Position mit der Ist-Position zu vergleichen und mit einem PI-Regler (eventuell auch PID) zu regeln. Wouin liegt der Sinn, zwei Regler zu verketten (mit dem Zwischenschritt der Strom-Regelung)?
Stefanus F. schrieb: > Wouin liegt der Sinn, zwei Regler zu verketten (mit dem Zwischenschritt > der Strom-Regelung)? Klassischerweise hat man einen schnellen Stromregler (Schutz vor Überlast und bei Betrieb mit vorgegebenem Drehmoment) Drumherum einen langsameren Geschwindigkeitsregler (bei Betrieb mit vorgegebener Drehzahl) Dann wiederum außenrum den noch langsameren Positionsregler (bei Betrieb mit vorgegebener Position). Geschwindigkeitsregler kann man in dem Fall wohl komplett weglassen, Stromregler braucht man, wie Stefanus F. richtig gesagt hat, nur evtl. zu Schutzzwecken, es bleibt der reine Positionsregler. Der Positionsregler ist in den meisten Fällen nur ein P-Regler mit sehr hoher Verstärkung, meistens reicht das. Wenn nicht, kann man natürlich trotzdem vorsichtig einen I-Anteil dazuspendieren.
Stefanus F. schrieb: > Falk B. schrieb: >> Schon wieder falsch! > > Ja, freu dich! Warum sollte ich das, wenn Leute mit Halbwissen schlechte Ratschläge geben? >> Für einen schnellen Stromregler für einen Servo >> braucht an die schnelle Strommessung sehr wohl! > > Er will aber letztendlich nicht den Strom regeln, Nö, aber er muss den Strom als Hilfsgröße SCHNELL regeln. > sondern die Position. > Meiner Meinung nach genügt es dazu, die Soll-Position mit der > Ist-Position zu vergleichen und mit einem PI-Regler (eventuell auch PID) > zu regeln. Nein. Lies den Link und lerne. http://elm-chan.org/works/smc/report_e.html > Wouin liegt der Sinn, zwei Regler zu verketten (mit dem Zwischenschritt > der Strom-Regelung)? Ein Kaskadenregler hat deutliche Vorteile, denn er kann die unterlagerten, schnellen Stellgrößen deutlich schneller und damit besser regeln als ein einstufiger Regler. Damit wird die Gesamtreglung deutlich agiler und genauer. https://de.wikipedia.org/wiki/Kaskadenregelung
Nesbit B. schrieb: > Denn im einen Fall habe ich > ja einen negativen Strom. Oder? Die Logik geht in die andere Richtung: aus der Positionserfassung ergibt sich, in welche Richtung sich der Motor bewegen muss, und daraus die Ansteuerung der H-Brücke. Der PID-Algorithmus der Lageregelung bestimmt ausser dieser Richtung auch die Geschwindigkeit, so erhält die Drehzahlregelung ihren Sollwert. Und die gewünschte Drehzahl wird durch die Stromregelung umgesetzt. Deren Sollwert kann der absolute Stromwert sein, die Richtung steht ja fest. Stefanus F. schrieb: > Wouin liegt der Sinn, zwei Regler zu verketten (mit dem Zwischenschritt > der Strom-Regelung)? Der Sinn liegt darin, dass es alle so machen die etwas davon verstehen, aber das ist heute natürlich kein Argument mehr. Man kann die 3 Algorithmen in einen einzigen zusammenfassen, wenn man mit doppelter Integration arbeitet. Georg
> a) genügt eine einfache Strommessung mit Shunt im Lowside-Pfad der > H-Brücke, sodass der Strom immer positiv ist, oder Miss den Strom in beiden Halbbrücken. Einer von beiden liefert dir dann immer genau den Motorstrom. Wenn Du den Strom nur mit einem Shunt nach der Zusammenführung misst, dann ist es genau genommen der Zuleitungsstrom und nicht der Motorstrom und du musst vom einen in den anderen über die PWM umrechnen. Ohne den inneren Stromregler hats du durch die Induktivität des Motors eine zusätzliche Polstelle. Also ein Verzögerung. Dann musst Du den Drehzahlregler und Lageregler langsamer machen. Geht aber auch. Modellbauservos machen es auch ohne Stromregler.
Falk B. schrieb: > Stefanus F. schrieb: >> Wouin liegt der Sinn, zwei Regler zu verketten (mit dem Zwischenschritt >> der Strom-Regelung)? > > Ein Kaskadenregler hat deutliche Vorteile, denn er kann die > unterlagerten, schnellen Stellgrößen deutlich schneller und damit besser > regeln als ein einstufiger Regler. Damit wird die Gesamtreglung deutlich > agiler und genauer. > > https://de.wikipedia.org/wiki/Kaskadenregelung Wobei die Frage ist, ob das für den Anwendungsfall des TO nötig ist. Wie dynamisch soll der Motor sein, wie stark ändert sich das System (bleibt immer dieselbe "Unwucht" auf der Welle, ändert sich die Trägheit um 10% oder um 200%, wie groß darf die Regelabweichung sein, sind Überschwinger zulässig... Rein praktisch: Willst du einen Seecontainer pro Minute mit einem automatisierten Kran zentimetergenau aufstapeln oder alle zwei Stunden ein Heizungsventil ein paar Millimeter bewegen, um die Raumtemperatur auf 5K genau einzuhalten? Eine Nebenanmerkung noch: Mit Kaskadenreglern kann man auch sehr einfach Mehr-Motor-Lösungen aufbauen, z.B. Gantry-Antriebe in Fräsmaschinen. Eine reine Positions-Sollwert-Kopplung kann zu Verspannungen und Klemmen führen, manchmal will man auch nicht den gleichen Sollwert anfahren, sondern z.B. mit einer zweiten Achse immer im gleichen Abstand zur ersten bleiben - dann bieten sich Geschwindigkeits-Sollwert-Kopplung oder Momenten-Sollwert-Kopplung an. MfG, Arno
Danke für eure Erklärungen zu Kaskadenreglern. Habe ich bisher in dieser Komplexität noch nicht gebraucht, aber nun habe ich eine grobe Vorstellung waozu sie gut sind.
Kolja schrieb: > Die Stromrichtung ist in beiden Drehrichtungen > gleich, zeigt also nur den Betrag. genau! deshalb fragte ich danach. Je nach Drehrichtung soll doch der Motorstrom auch negativ werden. Somit hätte ich ein Problem, da ich nur den Betrag messen kann. Falk B. schrieb: > Wenn du eine H-Brücke hast und die Ansteuerung nicht versaust, passiert > das automatisch. wie das? miau schrieb: > Klassischerweise hat man einen schnellen Stromregler (Schutz vor > Überlast und bei Betrieb mit vorgegebenem Drehmoment) > > Drumherum einen langsameren Geschwindigkeitsregler (bei Betrieb mit > vorgegebener Drehzahl) > > Dann wiederum außenrum den noch langsameren Positionsregler (bei Betrieb > mit vorgegebener Position). genau so wollte ich das auch machen, da ich gelesen habe, dass in professionellen Antrieben das auch so implementiert wird. Das wird schon seine Gründe haben, denke ich ;-) meine erste Idee war aber auch genau diese: miau schrieb: > Der Positionsregler ist in den meisten Fällen nur ein P-Regler mit sehr > hoher Verstärkung, meistens reicht das. > > Wenn nicht, kann man natürlich trotzdem vorsichtig einen I-Anteil > dazuspendieren. Da der P-Regler aber eine stationäre Regelabweichung haben kann (und vermutlich haben wird), die ich nicht will, muss ich wohl noch einen kleinen I-Anteil hinzufpgen. Und hier kommt genau das Problem, weshalb ich ursprünglich diesen Thread zur Positionsregelung erstellt habe: die Motorposition ist doch das Integral von der Drehzahl, und diese ist circa proportional zur Spannung. Wenn ich also über die H-Brücke die Spannung am Motor verändern kann, dann ist meine Regelstrecke doch im Prinzip ein reines I-Glied. Und, soweit ich mich erinnern kann, ist es keine gute Idee, zwei I-Glieder in einem Regelkreis zu haben, die I-Strecke ist also nur mit einem P-Regler in den Griff zu bekommen, alles andere würde schwingen - oder? elki schrieb: > Wenn Du den Strom nur mit einem Shunt nach der Zusammenführung misst, > dann ist es genau genommen der Zuleitungsstrom und nicht der Motorstrom > und du musst vom einen in den anderen über die PWM umrechnen. genau, ein weiterer Grund, weshalb ich diesen Thread erstellte. Ich kann nur den Zuleitungsstrom bequem messen. Andererseits denke ich, dass in meinem Fall auch bei Drehzahl 0 ein 50/50 Rechteck am Motor anliegen wird, und ich glaube kaum, dass dann mein Motorstrom genau 0 sein wird! somit wäre es nicht möglich, mit dieser Konfiguration auf 0 Strom zu regeln. Oder? Arno schrieb: > Wobei die Frage ist, ob das für den Anwendungsfall des TO nötig ist. Wie > dynamisch soll der Motor sein, wie stark ändert sich das System (bleibt > immer dieselbe "Unwucht" auf der Welle, ändert sich die Trägheit um 10% > oder um 200%, wie groß darf die Regelabweichung sein, sind Überschwinger > zulässig... > Rein praktisch: Willst du einen Seecontainer pro Minute mit einem > automatisierten Kran zentimetergenau aufstapeln oder alle zwei Stunden > ein Heizungsventil ein paar Millimeter bewegen, um die Raumtemperatur > auf 5K genau einzuhalten? Naja, meine Applikation ist nicht so rocket science. Muss auch nicht hochdynamisch sein. Gleichwohl will ich schauen, was machbar ist als Bastler. Übrigens fällt mir da was ein: vor Jahren im Studium hatten wir sowas wie Zustandsregler angeschaut. Dort wurden auch solche Positionierregler besprochen. Als Zustandsgrösse hatte man nebst der Position in der Tat auch den Motorstrom. Habe gestern grade die Unterlagen wieder hervor gesucht. Ob das mit einem Zustandsregler wohl auch gehen würde? Alleine anhand der Studiumsunterlagen ist es allerdings weder auf die eine noch auf die andere Weise (weder als Zustands- noch als PID-Regler) machbar. Die Unterlagen sind reine Theorie. Und real aufgebaut habe ich solch einen Regelkreis noch nie :-(
Nesbit B. schrieb: > dann soll er diese halten, auch wenn eine externe Last in wegzudrehen > versucht. Kann jeder Modellbauservo. Man bestimmt den Motorstrom durch die Lageabweichung, d.h. stimmt die Position, bekommt der Motor 0 (Spannung oder Strom, egal), hat man eine Abweichung von 1 (zuviel oder zuwenig) bekommt der Motor x mA bzw. mV (vorwärts bzw. rückwärts), bei Abweichung 2 halt 2x, bei 5 5x und irgendwannn vollen (Strom bzw. Spannung). So positioniert ein Motor, der 2x (Strom oder Spannung) zum Gegenhalten braucht, um 2 daneben. Aber das ist nötig, damit man die Belastung überhaupt erkennt.
Mag sein, dass Dein Beitrag freundlicher ist als der eines Orginal-MaWins. Aber fachlich wünsch ich mir jetzt doch das Orginal zurück.
Falk B. schrieb: > So macht man das auch. > > http://elm-chan.org/works/smc/report_e.html Eine unbedarfte Frage zur Positionsregelung: Wenn ich z.B. Änderungen am Inkrementalgeber im Bereich 5..30ms habe (Getriebemotor, langsamer dreht er nicht an, schneller wird er nicht). In welchen Zyklen setze ich die drei Regelschleifen an?
Framulestigo schrieb: > Eine unbedarfte Frage zur Positionsregelung: > > Wenn ich z.B. Änderungen am Inkrementalgeber im Bereich 5..30ms habe > (Getriebemotor, langsamer dreht er nicht an, schneller wird er nicht). > In welchen Zyklen setze ich die drei Regelschleifen an? Naja, wenn wir mal von 5ms für einen Codeschritt des Incrementalgebers ausgehen, würde ich die Abtastung dessen mit 1kHz machen. Der Stromregler orientiert sich eigentlich immer am Motor und dessen elektrischer Zeitkonstante, darauf wird die PWM und auch die Frequenz der Stromregelung angepaßt. Drehzahl- und Positionsregler können dann deutlich langsamer laufen, vielleicht mit 100Hz.
Framulestigo schrieb: > (Getriebemotor, langsamer dreht er nicht an, schneller wird er nicht) Ein Inkrementalgeber gehört natürlich an die Motorachse, nicht an den Getriebe-Ausgang. Georg
georg schrieb: > Ein Inkrementalgeber gehört natürlich an die Motorachse, nicht an den > Getriebe-Ausgang. > > Georg Sag das mal denn Millionen von Servos, die nur einen Poti am Getriebeausgang haben . . .
Falk B. schrieb: > Naja, wenn wir mal von 5ms für einen Codeschritt des Incrementalgebers > ausgehen, würde ich die Abtastung dessen mit 1kHz machen. Ich muss zugeben, ich habe da ein wenig Verständnisschwierigkeiten mit der Kaskadenregelung, insbesondere mit der Geschwindigkeitsmessung. Mir geht partout nicht in den Kopf, wie die Geschwindigkeit über den Inkrementalgeber zu messen ist und die Kaskade dann noch schnell genug reagiert, um per Positionsregelung auf dem Punkt zu landen? Um mal beim Bespiel zu bleiben: Bei Deinem Vorschlag (1kHz-Taktung) würde ich am Inkrementalgeber als Abtastzyklenanzahl Werte zwischen 5 und 30 für einen Schritt, bei Stillstand gar nix messen. Um die Geschwindigkeitsregelung darauf ansetzen zu können, muss deren Zyklus dann ja eigentlich mindestens 30ms sein? Es macht ja keinen Sinn, erneut zu regeln, bevor ein neuer Geschwindigkeitswert überhaupt eingehen kann. Sehe ich das richtig oder falsch?
Framulestigo schrieb: > Es macht ja keinen Sinn, erneut zu regeln, bevor ein neuer > Geschwindigkeitswert überhaupt eingehen kann. Richtig, schadet aber auch nicht. Wichtig ist allerdings, dass die Regler "nach außen" langsamer werden. Also im Beispiel könnte der Strom/Drehmomentregler mit 1kHz, der Geschwindigkeitsregler mit 100Hz und der Positionsregler mit 10Hz laufen. Die Strommessung erfolgt dann auch mit 1kHz (quasi ad hoc), Geschwindigkeit bzw. Position sollten natürlich unabhängig vom Regler selbst Interruptgesteuert aufgenommen und dem Regler zur Verfügung gestellt werden.
miau schrieb: > Richtig, schadet aber auch nicht. Das frage ich mich nun auch: Der P-Anteil bleibt bei mehrfacher Regelung ohne Refresh auf den Geschwindigkeitswert konstant. Der I-Anteil addiert sich allerdings auf, also müsste man KI entsprechend kleiner wählen? miau schrieb: > ...und der Positionsregler mit 10Hz > laufen. Da habe ich das nächste Verständnisproblem: Wenn über die Positionsregelung der Sollwert der Geschwindigkeit eingestellt wird, der Motor sich aber aufgrund von Getriebereibung bei Geschwindigkeiten <30ms/Step festhängt, wie kriegt man dann noch die letzten Schritte im 100ms-Zyklus sinnig ausgeregelt?
Framulestigo schrieb: > Geschwindigkeiten <30ms/Step Sorry, sollte man vielleicht schreiben: "Geschwindigkeiten < Step/30ms"
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.