Hallo, möchte mich erst kurz vorstellen. Bin 25 Jahre alt, komme aus der "schönen" Eifel und momentan Schüler zum Techniker/Automatisierungstechnik. In Sachen Microcontroller würde ich mich als Fortgeschrittener Anfänger bezeichnen... bin zwar schon länger passiv in eurem Forum unterwegs, aber stehe inzwischen vor einem Problem wo ich nicht mehr weiter komme, daher dieser Beitrag. Bei diesem Projekt geht es um die Positionierung von drei DC-Getriebemotoren mit einem ATmega8. Die Ist-Position wird erfasst durch ein Poti, welches nach dem Getriebe direkt auf die Abgangswelle geflanscht ist. Die Sollpositions-Vorgabe erfolgt durch den PC und die Motoren werden mittels PID-Reglern positioniert. Die Motoren werden angetrieben durch drei L6203 (H-Brücke). Das funktioniert soweit auch ganz Prima, Folgendes möchte ich aber gene erweitern: Die Motoren sollen künftig so gereglt werden, das sie unabhängig vom erforderlichen Drehwinkel zur gleichen Zeit ankommen. Beispiel: Motor 1 soll 180° drehen, Motor 2 soll 90° drehen, beide Motoren erreichen die Zielposition zeitgleich. Dazu muss Motor 2 natürlich nur hab so schnell drehen wie Motor 1. (Motor 3 hier mal außer betracht) Jetzt weiss ich leider nicht so richtig wie ich das anpacken soll. Ich habe inzwischen einiges über Kaskadenregelungen gelesen. Die Geschwindigkeit der Motoren könne ich ja durch die Werteveränderung des Potis zur Abtastzeit erfassen. Doch wie müsste man das anschließend verrechnen? Dazu müsste ich ja die Zeit wissen, wann der Motor mit dem längsten Winkel ankommmt und die anderen Motoren müssten ja entsprechend dieser Zeit langsamer drehen. Ich denke hier liegt irgendwo mein Denkfehler. Daher die Fragen, könnte man das so realisieren? Wie würde denn dann der grobe Ablauf von der Regelung aussehen? Die Positionierung erfolgt ja dann weiterhin über den PID-Regler, nur müsste der Übergeordnete Regler diesen Regler ja dann bei den Motoren mit dem kürzeren Weg einbremsen. Hoffe meine Gedanke sind nicht zu verwirrend... Vielen Dank schonmal Johannes Achja, ich halte die Ist-Wert Erfassung durch die Potis nicht für ideal, leider ist das aber die Vorgabe für dieses Projekt.
Du hast schon eine Positionsregelung? Dann Gib doch für die beiden Motoren einfach eine Rampe (d.h. Änderst die Sollposition über die Zeit) und zwar genau so, dass deine Motoren zum Gewünschten Zeitpunkt die Endposition erreichen.
Bei kurzen Fahrten kann man ein gleichzeitiges Drehende der DC-Motoren kaum erreichen, da gerade kurzfristige niedrige Drehzahlen per Poti kaum zu reglen sind. Ein ATmega/Motor dürfte besser sein und Schrittmotore optimal.
Hauke Radtki schrieb: > Du hast schon eine Positionsregelung? Dann Gib doch für die beiden > Motoren einfach eine Rampe (d.h. Änderst die Sollposition über die Zeit) > und zwar genau so, dass deine Motoren zum Gewünschten Zeitpunkt die > Endposition erreichen. Ja, die Positionsregleung für alle drei Motoren läuft. Versteh ich das so richtig Motor1 0 -> 90° Motor2 0 -> 180° Dann fahr ich z.B. Zeit Motor1 Motor2 1 1° 2° 2 2° 4° ... ... 90 90° 180° Das ginge sicherlich, wobei die Schrittweite ja auszutesten wäre, aber ich denke daraus wird sich wohl keine wirklich homogene Bewegung ergeben und zudem müsste ich ja jeden Zwischenpunkt irgendwie überschleifen um nicht jeden Punkt "anzubremsen" Gruß Jo
Hallo, du brauchst die Software einer Bahnsteuerung, die macht genau das - z.B. einen Schlitz in beliebigem Winkel mit gleichbleibender Geschwindigkeit fräsen. Das du keine reale Bahn entlangfährst ist dabei ziemlich egal. Ich will damit keineswegs sagen, dass das einfach ist, aber jede CNC-Steuerung kann das. Gruss Reinhard
Willi schrieb: > da gerade kurzfristige niedrige Drehzahlen per Poti kaum > zu reglen sind. Das Poti hat mit der Drehzahlregelung nichts zu tun. Das ist eine Positionsregelung.
Der Motor der am längsten für Bewegung braucht, also wenn alle Motoren gleich sind und auch gleich belastet sind der mit dem größten Weg, wird der Mastermotor. Den regelst Du ganz normal auf die Endposition. Der andere Motor wird der Slave-Motor. Der bekommt seine Soll-Position in Abhängigkeit vom der Ist-Position des Masters.
Jo M. schrieb: > Ja, die Positionsregleung für alle drei Motoren läuft. > Versteh ich das so richtig > > Motor1 0 -> 90° > Motor2 0 -> 180° > > Dann fahr ich z.B. > > Zeit Motor1 Motor2 > 1 1° 2° > 2 2° 4° > ... > ... > 90 90° 180° Ja genau so, wenn du das hochauflösend genug machst (also Winkel und Zeitauflösung) dann solltest du davon nicht viel merken. Dann wird die Regelung langsam genug sein um eine flüssige Bewegung draus zu machen. Wenn das deinen Anforderungen nicht genügt, musst du dann wohl noch Kaskadierte Regler benutzen und die Geschwindigkeitsregelung entsprechend begrenzen, dass beide Motoren maximal die entsprechende Geschwindigkeit fahren dass sie ca. gleichzeitig ankommen.
Praktiker schrieb: > Der Motor der am längsten für Bewegung braucht, also wenn alle Motoren > gleich sind und auch gleich belastet sind der mit dem größten Weg, wird > der Mastermotor. Den regelst Du ganz normal auf die Endposition. > > Der andere Motor wird der Slave-Motor. Der bekommt seine Soll-Position > in Abhängigkeit vom der Ist-Position des Masters. Ja, so langsam wirds das mir verständlich. Gibts da irgendwelche Algorythmen auch im Bezug auf den Begriff Bahnstuerung der weiter oben gefallen ist, die sowas irgendwie "gleitend" umsetzen? Finde da einiges, bsp. Besenham aber dies ist wohl idealer für Schrittmotoren... Denoch geht dies doch dann auch in Richtung Kaskadenregleung oder bin ich da völlig falsch. Ansonsten müsste ich mal versuchen, die Bewegung des "Mastermotors" in z.B. 10-Teile einzuteilen, die dann die Sollposition des Slavemotoren vorgibt... Gruß Jo
Ähm, nö... Du brauchst keine "Bahnsteuerung" oder sonst irgendwelche Rampen etc. für Deine einfache Anwendung. Du hast doch eine Regelung. Also hast Du für jeden Motor eine Soll-Position und eine Ist-Position. Wenn Du nun eine neue Position anfahren willst, gibst Du dem Master-Motor als Soll-Position ja die Endposition vor. Der Master-Motor wird nun durch Deine PID-Regelung mit maximaler Geschwindigkeit gefahren. Während der Master-Motor zu seiner Endposition fährt, liest Du ja eh ständig seine Ist-Position ein. Also kannst Du die Soll-Position des Slave-Motors ständig nach der Ist-Position des Master-Motors regeln. Du musst natürlich etwas aufpassen mit den Richtungen und den Offsets. Einfaches Beispiel: Motor A steht bei Position 50, Motor B steht bei Position 80. Nun sollen beiden Motoren auf Position 100. Soll_A = 100 # Neue Endpositionen Soll_B = 100 Start_A = Ist_A # Beispiel: 50 Start_B = Ist_B # Beispiel: 80 Weg_A = Soll_A - Start_A # Beispiel: 100 - 50 = 50 Weg_B = Soll_B - Start_B # Beispiel: 100 - 80 = 20 Schleife so lange Ist_A <> Soll_A und Ist_B <> Soll_B Wenn Betrag(Weg_A) >= Betrag(Weg_B) dann PID_A( Soll_A ) PID_B( (Ist_A - Start_A) / Weg_A * Weg_B + Start_B ) sonst PID_B( Soll_B ) PID_A( (Ist_B - Start_B) / Weg_B * Weg_A + Start_A ) Wenn_ende Schleife_ende
Helmut Lenzen schrieb: > Das Poti hat mit der Drehzahlregelung nichts zu tun. Das ist eine > Positionsregelung. Jo M. schrieb: > Die > Geschwindigkeit der Motoren könne ich ja durch die Werteveränderung des > Potis zur Abtastzeit erfassen. So, wie ich das verstehe, ist das Poti der einzige Sensor für die Ist-Position und (indirekt) für die Geschwindigkeit/Drehzahl. Wenn eine Zielfahrt 10s dauert, kann man damit vielleicht etwas regeln. Bei 0,5s kann man bestenfalls etwas 'zusammenruckeln'. @Jo. M. Welchen Motor verwendest Du? Welche Untersetzung hat das Getriebe? Welche Winkel sollen in welcher Zeit angefahren werden?
Willi schrieb: > Helmut Lenzen schrieb: >> Das Poti hat mit der Drehzahlregelung nichts zu tun. Das ist eine >> Positionsregelung. > > Jo M. schrieb: >> Die >> Geschwindigkeit der Motoren könne ich ja durch die Werteveränderung des >> Potis zur Abtastzeit erfassen. > > So, wie ich das verstehe, ist das Poti der einzige Sensor für die > Ist-Position und (indirekt) für die Geschwindigkeit/Drehzahl. Wenn eine > Zielfahrt 10s dauert, kann man damit vielleicht etwas regeln. Bei 0,5s > kann man bestenfalls etwas 'zusammenruckeln'. > > @Jo. M. > Welchen Motor verwendest Du? Welche Untersetzung hat das Getriebe? > Welche Winkel sollen in welcher Zeit angefahren werden? Ja, das Poti ist der einzige Sensor. Das sind DC-Getriebmotoren aus einer Überaschungskiste, bei 12V ca 30 1/min, Getriebe ca 1:80. Der Stellbereich beträgt ca 120°. Zur Zeit, naja, so schnell wie es mir möglich ist, 1-1,5 sek. Die Abtastzeit von den Reglern liegt aktuell bei 5ms. Die Positionierung (jeder Motor für sich) funktioniert so tadellos. Gruß Jo
Hallo, es gibt 2 Ansätze für eine Bahnsteuerung: 1. Ein Mastermotor wie oben vorgeschlagen - aber da ergibt sich das Problem, welcher ist der Master und wie schnell soll er fahren. Je nach Richtung müsste es mal der X-Motor, mal der Y-Motor sein, und bei einem Kreis wird die Sache ziemlich komplex. 2. Die Steuerung berechnet in einem festen Zeitraster die Sollpositionen für X und Y. Die ergeben sich aus Richtung und gewünschter Geschwindigkeit, und das ist bei einem Kreis oder irgendeiner anderen Kurve genauso, bloss aufwendiger zu rechnen. Dem ist eine Positionsregelung für jeden Motor nachgeschaltet, deren Aufgabe es ist, zum nächsten Zeitpunkt die nächste Zielposition der jeweiligen Achse zu erreichen. Das Zeitraster bestimmt die erreichte Genauigkeit, eine Werkzeugmaschine, die mit µ-Genauigkeit fräsen soll, muss im Sub-ms-Bereich rechnen können. Bei perfekter Regelungsauslegung bewegt sich das Werkzeug glatt von Sollposition zu Sollposition, schwingt die Regelung, so ergibt sich eine Schlangenlinie um den gewünschten Weg. Das ist nicht nur ungenau, es schadet auch den Antrieben. Das ist die Kurzform. Es gibt auch dicke Fachbücher dazu. Gruss Reinhard PS mit 3 Achsen geht es natürlich genauso. PS2 bei geraden Wegen muss man bloss zwischen Start und Ziel interpolieren.
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.