-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Positionsregelung mit DC-Motoren

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.06.2005
    Ort
    Hattenhofen
    Alter
    30
    Beiträge
    55

    Positionsregelung mit DC-Motoren

    Anzeige

    Hallo allerseits,

    ich habe da ein kleines Problem: Ich will eine Position mit einem Motor möglichst genau anfahren. Genau genommen möchte ich meinem µC nur sagen: "Bitte 2 Umdrehungen und 15° nach rechts drehen!" Zunächst dachte ich an Schrittmotoren, jedoch wurde mir hier im Forum davon stark abgeraten. (Eine Steuerung kann die exakte Position nicht festlegen; es kann zu Schrittverlust kommen, der nicht detektiert werden kann.) Deshalb die Idee mit den DC-Motoren.

    Ziel: Übergabe einer gewünscheten relativen Sollpostion und einer Sollgeschwindigkeit an den µC. Dieser verarbeiete die Angaben dann so, dass er zunächst den Motor langsam anlaufen lässt, bis die gewünschte Geschwindigkeit erreicht ist. Rechtzeitig vor dem Überdrehen soll der Motor langsam abgebremst werden und dann an der gewünschten Position zum Stillstand kommen.

    Dazu ist eine Regelunstechnik par excelence nötig. Das hab ich schon kapiert. Ich hab auch schon mal unter http://www.roboternetz.de/wissen/ind...gelungstechnik ein bisschen gelesen. Dort steht, dass eine Motorregelung eine Kaskadenregelung erfordert.

    Was ist das/Wie funktioniert das? Bei der Herleitung der Regelungsschaltung werden einige Blockschaltbilder verwendet, die mir nix sagen (V.a. was wo genau zu finden ist und welche Bedeutung die Formeln in den Boxen haben). Könnte mir das mal bitte einer erklären?

    Wie würde ein solcher Regler genau aussehen? Wie weit kann ich das mit OpAmps etc. realisieren, so dass mein µC frei für andere Aufgaben bleibt?

    MfG
    Christian

    PS: Ganz ehrlich: Ich hab nicht viel Ahnung, was Regelungstechnik angeht. Insbesondere mit der Mathematik dahinter stehe ich noch etwas auf Kriegsfuß. Das Grundprinzip einer Regelung (Sensorik -> Regelung -> Motorik) hab ich aber dennoch - denke ich - gefressen.

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2005
    Beiträge
    231
    Genaugenommen must du nicht unbedingt eine Kaskadenregelung benutzen. Dies ist aber dennoch eine recht gute Möglichkeit dein Problem zu lösen. Bei einer Kaskadenregelung hast du immer mehrere Kreise. Die innern müssen immer schneller sein. Dann sieht der aüßere Kreis den Inneren gar nicht als Regelkreis, sondern als quasi stationären Block.
    Kaskadenregler findest du eigentlich in jedem Fachbuch. Du kannst dir eventuell mal "Elektrische Antriebe - Regelung von Antriebssystemen" von "Dirk Schröder" anschauen. Von dem gibts mehrer Bücher. Wird eigentlich alles von Anfang an beschrieben. Das Buch ist allerdings recht teuer, vielleicht besser doch mal vorerst ausleihen.
    Grüsse
    Thomas

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.04.2005
    Ort
    Minden
    Alter
    32
    Beiträge
    227
    (Eine Steuerung kann die exakte Position nicht festlegen; es kann zu Schrittverlust kommen, der nicht detektiert werden kann.)
    Um eine genaue Position anzufahren würde ich einen Schrittmotor nehmen.
    Um Schrittverlust auszuschließen kannst du einfach mittels Inkrementalgeber "Ist" und "Sollwert" vergleichen. Bei Schrittverlust regelst du einfach nach.

    gruß ceekay

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    18.06.2005
    Ort
    Hattenhofen
    Alter
    30
    Beiträge
    55
    Ich hab das Problem, dass ich zwar ein paar Schrittmotoren besitze (von Pollin), jedoch kenne ich keine technischen Daten, außer denen, die ich direkt Messen kann und der Spannung.

    Ich weiß daher nicht, was der Motor wohl unter Last an max. Schrittfrequenz verträgt. Das war auch ein Grund für die DCs. Ich kann die Stepper natürlich auch mit sagen wir mal 10-50 Hz laufen lassen, aber da sind die ja langsam ohne Ende.
    Das einzige, was ich mir Vorstellen könnte: Die DCs machen mit der Regelung das Grobe, wenn der Abstand zum Ziel einen gewissen Wert unterschreitet, hält der DC an und der Stepper übernimmt eine genaue Positionierung. Scheint mir aber doch recht aufwendig.

    MfG
    Christian

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    10.02.2005
    Beiträge
    231
    Also wenn du DCs benutzt brauchst du Encoder für die Positionsregelung. Damit kannst du sehr genau regeln. Würd da auf keinen Fall noch vorne nen Stepper dran schalten. DC Motoren und Encoder werden eventuell noch durch einen Tacho unterstützt damit man noch schneller und genauer positioniern kann, auch bei sehr kleinen Geschwindigkeiten.
    Fast immer reicht aber schon ein Encoder und ein einfacher PD-Regler.
    Thomas

  6. #6
    Super-Moderator Lebende Robotik Legende Avatar von Manf
    Registriert seit
    30.01.2004
    Ort
    München
    Alter
    64
    Beiträge
    12.367
    Die Aufgabenstellung kann sehr einfach gelöst werden wenn ein ausreichendes Moment zur Verfügung steht, oder wenn Fehler erkannt und korrigiert werden kann. Bei einem unüberwindlichen Hindernis muss dann sicher eine Fehlermeldung ausgegeben werden.

    Je mehr von der Aufgabenstellung unklar bleibt desto aufwändiger wird die Lösung.

    Manfred

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    18.06.2005
    Ort
    Hattenhofen
    Alter
    30
    Beiträge
    55
    Da ich kein Oszi hab, kann ich den Motor nicht messen. Ich will aber eine maximale Geschwindigkeit erreichen. Wenn ich jetzt prüfen will, ob Schritte verloren gehen, muss ich z.T. extrem teure ICs (mit Fets) einsetzen. (vgl. Thread Keine Schritte verlieren)

    Wenn ein zu großes Drehmoment gefordert wird, sollte zumindest dem IC/µC das gemeldet werden/auffallen.

    MfG
    Christian

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    14.01.2006
    Ort
    Hattingen
    Alter
    52
    Beiträge
    984
    Eine Möglichkeit wäre, mittels Lichtschranke, Halllsensor oder anderweitigem "Schaltnocken" 1x pro Umdrehung einen Indeximpuls zu erzeugen. Dann kannst Du zumindest feststellen, dass Schritte verloren wurden (du weiß ja wieviele Schritte der Motor machen soll, und erwartest bei einem bestimmten Zählerstand den Index. Du könntest dann auch 1x pro U feststellen, wieviele Schritte du verloren hast, soviele eben, bis der Index dann doch kommt --> oder eben Abbruch.

    Wenn der Motor immer ähnliche Aufgaben übernimmt, weißt du so wenigstens, dass es passt, und merkst, wenn was nicht passt. Dann könnte man in eine Fehlerbehandlung gehen oder ggf. das Tempo /die Beschleunigung reduzieren..

    Just a thought

    Sigo

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    18.06.2005
    Ort
    Hattenhofen
    Alter
    30
    Beiträge
    55
    Hallo nochmal,

    ich habe jetzt mich mal ein bisschen in die Regelungstechnik/Kybernetik eingelesen. Es reicht zwar noch nicht für ein Studium, aber ich denke, ich habe die Grundlagen verstanden.

    Ich hab mir nun folgendes überlegt/festgelegt:
    Ziel ist es, 3 Motoren synchron zu betreiben. Das soll nicht heißen, dass alle immer in gleicher Rintung und gleicher Geschwindigkeit laufen sollen. Vielmehr geht es, wie in dem oben genannten Artikel angegeben, um die Bewegung eines Kreuztisches/eines Fräs-Kopfes. Zur Aufnahme der "Schritte" möchte ich eine PC-Maus umbauen. (Die enthält schon die ganze Elektronik zum Detektieren und speichert den Wert praktischerweise auch noch ab) Damit muss/kann auch die gesamte Regelung digital ablaufen. Am Ende soll per PWM der Motor entsprechend dem nötigen Moment ein-/ausgeschalten werden.

    Ablaufen soll das in etwa so: Ich setze in meinem µC einen gewissen Wert für die Soll-Position (in Koordinaten) [xs,ys,zs]. Die Ist-Position ist in anderen Variablen abgelegt [xi,yi,zi]. Zusätzlich wird in einer Variable die gewünschte Verfahrgeschwindigkeit angegeben [v]. Dann wird zunächst die Geschwindigkeit proportional in einzelne Komponenten zerlegt [vx,vy,vz]. Das sind also die max. Geschwindigkeiten. Wärend der Bewegung werden xi,yi und zi regelmäßig aktualisiert.

    Soweit zur Vorbereitung. Jetzt müssen die Motoren gestartet werden. Hier hab ich schon das erste Problem. Gehen wir mal davon aus, dass der Kopf um 30 Einheiten nach links (x-Richtung) und 40 nach hinten (y-Richtung) bewegt werden soll. Die max. Geschwindigkeit soll 5 Einheiten / Zeiteinheit sein. Das bedeutet: vx=3 und vy=4, da 3*3 + 4*4 = 5*5 (Satz des Pythagoras). Unter der Voraussetzung (momentan), dass beide Motoren etwa die selbe Masse zu beschleunigen haben, muss ein Motor deutlich stärker beschleunigen (y), er muss aber seine (verzögerte) Geschwindigkeit proportional zur (verzögerten) x-Geschwindigkeit halten. Wie kann man das erreichen? Dass also nicht nach einer gewissen Zeit beide Motoren bei z.B. v = 3 ankommen und dass dann der y-Motor noch um 1 weiter beschleunigt? Gleiches gilt auch für die Änderung der gewünschten Geschwindigkeit o.ä..

    Ein anderes Problem sehe ich im Störverhalten: Wenn ein Motor an ein Hindernis stößt, der andere aber nicht, muss kräftig nachgeregelt werden. Sobald ein Motor baubedingt an seine Grenzen kommt (zu hohes Drehmoment), kann dieser möglicherweise die nötige Geschwindigleit von vy=4 nicht mehr einhalten und wird mit voller Betriebsspannung nur noch 3,5 liefern. Dann muss natürlich auch der x-Motor entsprechend seine Geschwindigkeit drosseln. Wodurch wird das erreicht? Ich weiß, das ist ein ähnliches Problem wie oben. Ggf. lösen sich beide Probleme gleichzeitig.

    Innsbesondere ist davon auszugehen, dass nicht wie im oberen Teil angenommen, alle Motoren die gleiche Masse beschleunigen müssen. Vielmehr sind für jeden Motor andere Massen und Reibungswerte gegeben.

    Gibt's zu den Problemen irgend welche Tipps?

    Noch ein paar (hoffentlich banale) Fragen:
    Ich habe schon gehört, dass ein Motor entweder als T1- oder als T2-Glied aufgefasst werden kann. Bei Berücksichtigung der Induktivität ist es halt T2.
    Inwieweit ist die Betrachtung als T2 sinnvoll? Ist da die Genauigkeit ausreichend mit T1?
    Wenn T2, welche Werte sind dann für T1 und T2 einzusetzen? Ich meine, welche Motorparameter. Für T1 hab ich mir die Sache selber hergeleitet mit den Motorparametern als Variablen, bei Bedarf kann ich es posten (muss es aber mit LaTeX schreiben, sonst ist die Verwirrung komplett und ich hab grad keine Lust).

    Hier noch ein Post von bad-joker:
    Zitat Zitat von bad-joker
    Also wenn du DCs benutzt brauchst du Encoder für die Positionsregelung. Damit kannst du sehr genau regeln. Würd da auf keinen Fall noch vorne nen Stepper dran schalten. DC Motoren und Encoder werden eventuell noch durch einen Tacho unterstützt damit man noch schneller und genauer positioniern kann, auch bei sehr kleinen Geschwindigkeiten.
    Fast immer reicht aber schon ein Encoder und ein einfacher PD-Regler.
    Thomas
    Was meinst du mit Encoder und Tacho? Ich weiß nicht, was das ist. ( Sorry) Sind das sowas wie Inkrementalgeber? Also das was ich mit meiner Maus machen will?

    Ich hoffe, ich überfordere euch hier mal nicht.

    Mfg
    Christian

  10. #10
    Gast
    Hi Christian, ein Encoder ist ein anderes Wort für Inkrementalgeber. Also eine Lochscheibe, wie in der Maus (oder eben feiner) welche von 2 45° versetzten Lichtschranken ausgewertet wird. Es gibt auch noch andere Encoder, sogenannte Resolver, welche mittels Spulen und Magnetfeld 2 Phasenverschobene Sinus-Signale ausgeben. Die sind hier aber nicht gemeint.

    Für harmonische Bewegungen ala CNC muss man wie du schon selbst feststellst, die Achsen auch in der Lage zueinander regeln auch auch abhängig von einander.

    Für einfachere Anwendungen ist es aber auch hinreichend, die Bahnen unabhängig zu regeln und nur im Falle, dass eine Achse nicht nachkommt (sog. Schleppfehler) alle Achsen sofort zu stoppen.

    Für letztere Variante bietet sich z.B. der LM629 Positionsregler an. Dann hat man selbst sehr wenig zu tun.

    Der LM629 hat bereits einen Quadatureingang für Inkrementalgeber und einen PWM Ausgang.
    Man gibt dem Teil nun die Position; Geschwindigkeit und Beschleunigungsrampe ein (trapezförmiges Geschindigkeitsprofil), sowie die vorher die Regelparameter für den PID-Regler. Dann muss man nur noch einen Startbefehl geben und den Rest macht der Coprozessor von allein, und zwar quarzgenau (digitale Regelung). Wenn du 3 Achsen damit ausstattest und alle Achsen die richtigen Parameter bekommen (z.B. sodass die Geschindigkeiten udn Beschleunigungen zueinander passen können sie sehr synchrone Bewegungen ausführen.
    Wenn du nun allen gleichzeitig den Startbefehl gibst, fahren sie alle ihre jeweilige Bewegung ab.

    Wenn sie da sind, geben sie z.B. per Interrupt oder auch Flag bescheid, dass sie da sind. Im Fehlerfall gibts nen Interrupt, mit dem man dann z.B. bei allen 3 Achsen einen Nothalt einleiten kann..

    Man kann auch während der Fahrt die Geschwindigkeit ändern, und so kurven realisieren. Mit Hilfe von Breakpoints (Interrupt bei Erreichen einer Wegmarke) kann man so vektoren realisieren..

    Mit ein paar Tricks, kann man sogar on the fly die Beschleunigung ändern und so Sinus²-Rampen fahren..ist nicht vorgesehen, geht aber.

    Vorteil dieser Lösung ist, dass man auch ohne detaillierte Programmier- und Regelungstechnikkentnisse zu einem recht guten Ergebnis kommt.
    Dazu brauchst Du DC-Motoren mit INkrementalgebern, je nach Genauigkeitsforderung ca. 100-500 Striche. Diese gibts z.B. von HP.

    Übrigens sind in HP Deskjet 5xx Druckern (und wohl auch in den meisten anderen Druckern) recht starke DC-Motoren mit Inkrementalgeber (!!) verbaut..

    Ach ja, das Teil ist von National Semiconductor.
    Ein vergleichbares Teil gibts auch von HP, hier heißt er HCTL-1000.
    Einen Tacho brauchst du bei dieser Lösung nicht, der LM629 regelt bei einem hochauflösenden Encoder auch so sehr gut.

    Haken:
    Einer kostet ca. 25-30EUR
    spart dafür aber viele viele Stunden Software!

    Sigo

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •