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.
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.
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?