Hi, ich habe mir zwei einfache Positioniersteuerungen gebaut mit DC-Motoren. Und zwar haben die Dinger eine H-Brücke und die Motoren sind mit Gebern ausgerüstet, 300 Impulse pro Umdrehung. Die zwei Steuerungen kann ich über CAN ansprechen und den Motor z.B. an eine bestimmte Position fahren lassen, der Motor wird dann z.B. um 400° gedreht usw. Um Positionen vorzugeben, habe ich extra CAN gewählt, weil ich damit ein Telegramm an beide Steuerungen gleichzeitig senden kann und somit die beiden Motoren theoretisch gleichzeitig positionieren könnte. Ich habe mich jetzt gefragt, wie ich eine einfache xy-Positionierung mit den motoren realisieren könnte - wenn ich die Motoren z.B. an einem Kreuztisch anbaue, sodass ich z.B. eine Kreis- oder Ellipsenform abfahren könnte. Die CAN-Messages kann ich über einen USB2CAN Adapter von meinem PC aus versenden, das ist kein Problem. Aber es würde mich interessieren, wie man solche Trajektorien richtig ansteuert? Soll ich z.B. meinen Kreis, Linie oder Ellipse auf eine Art quantisieren (z.B. Bresenham) und dann die einzelnen Positionen an beide Steuerungen senden, und diese fahren dann die Positionen an? aber eigentlich sollten die ja nicht unabhängig voneinander fahren. Ich verfolge mit diesem Bastelprojekt keinen speziellen Zweck. Ich hatte die Motoren noch, und wollte sie mal benutzen, und jetzt würde es mich interessieren, wie meine Vorgehensweise sein soll, wenn ich eine ganz bestimmte Trajektorie befahren will.
bastelbube schrieb: > Trajektorien Interessant! Wäre cool wenn da dann auch die Trägheit mit beachtet würde. Man also mit so einer Steuerung z. B. einen 2D Plotter baut der sehr schnell ist und seine Bahn so berechnet, dass die ein optimaler Kompromiss ist aus wenig Richtungsänderungen, hoher Geschwindigkeit und Ortsauflösung.
Nette Sache. Am besten bräuchtest du eine echtzeitfähige Kommunikation. Geht soweit ich weiß nur mit bestimmten CAN Implementierungen. Auch dein USB2CAN Adapter ist vermutlich nicht echtzeitfähig. Eine professionelle Umsetzung wäre dann so in etwa: Sinnvolle Zykluszeit wählen, die du mit deiner Kommunikationsbandbreite hin bekommst und Antriebsseitig auch noch nutzen kannst. Pro Zyklus einen Positionssollwert an beide Antriebe senden. Die Regeltakte/Steuertakte beider Antriebe müssen über einen Interrupt, über den beide getriggert werden, synchronisiert werden.
bastelbube schrieb: > und somit die > beiden Motoren theoretisch gleichzeitig positionieren könnte. Es gibt Punkt-zu-Punkt und Bahnsteuerungen, du hast aktuell eine PzP-Steuerung. Das Problem dabei ist dass deine Steuerung den nächsten Punkt ansteuert, aber im Prinzip dort anhält - für eine Bahnsteuerung sehr unerwünscht, die sollte die Bahn mit einer bestimmten Geschwindigkeit abfahren. Probier halt mal aus, was dein System tut, wenn du in kurzen Abständen neue Positionen vorgibst - ob es stottert oder rund läuft. Übrigens musst du auch selbst dafür sorgen, dass deine Punkte den gleichen Abstand haben, egal welche Richtung, damit sich eine gleichbleibende Geschwindigkiet ergibt. Das ist aber nur ein Rechneproblem. Georg
Kannst Du nur eine Position zu Deinen Steuerungen senden oder auch eine Verfahrgeschwindigkeit?
Hallo zusammen also dass der USB-CAN Umsetzer nicht echtzeitfähig ist, ist mir schon klar. Notfalls kann ich den ja dann auch noch durch einen Mikrocontroller ersetzen. Mich würde interessieren, wie ich eine Bahnsteuerung mache? offenbar ist mein Problem in der Tat, dass ich eine Punkt-zu-Punkt Steuerung habe, und das ist natürlich richtig, wenn ich da einen Zielpunkt vorgebe, dann hält die Steuerung den Motor an dem Zielpunkt an. Wenn ich mir dann überlege, dass ich z.B. eine 45° schräge Linie abfahren möchte, dann fährt der Motor ja dann quasi so
1 | __ |
2 | __| |
3 | __| |
4 | __| |
und das ist ja nicht, was ich will. Wie müsste die Bahnsteuerung aussehen?
bastelbube schrieb: > Die zwei Steuerungen kann ich > über CAN ansprechen und den Motor z.B. an eine bestimmte Position fahren > lassen, der Motor wird dann z.B. um 400° gedreht usw. Und der Motor dreht dann mit maximaler Geschwindigkeit, das ist dein erstes Problem. Du müsstest deine Steuerung so ändern, dass du die Geschwindigkeit vorgeben kannst, von 0..100%. Wenn du fast parallel zu einer Achse verfahren willst muss ein Motor z.B. mit 99% und der andere mit 1% Drehzahl laufen (bis ein neuer Befehl dazu kommt). bastelbube schrieb: > dass ich z.B. eine 45° schräge Linie abfahren möchte Dann müssten beide Motoren mit 70% drehen, bezogen auf die Maximalgeschwindigkeit. Wenn die Verfahrgeschwindigkeit langsamer sein soll entsprechend weniger. Da auch eine Bahn irgendwann endet, muss sich die Geschwindigkeit bis auf Null herunterregeln lassen mit einer Rampe, die am Zielpunkt die Geschwindigkeit Null erreicht, das ist dann ein nächstes Problem. Georg
Dieter H. schrieb: > lies mal über NC Kernel in der Tat, so etwas brauche ich wohl. Oder muss man so vorgehen: angenommen, ich will einen Kreis fahren, dann ist
und der Speed
und die Beschleunigung
und ich müsste dann für einige diskrete t-Werte Position, Speed und Beschleunigung als Sollwerte für die Achsregler vorgeben? Wenn ich dann z.B. meinen Kreis mit 10 Punkten approximiere, dann muss die Steuerung wissen, wenn die Position bei Punkt 1 erreicht ist, und dann sofort rechtzeitig eine neue Position vorgeben? oder macht man das besser als Liste von Positionen, die man den Achsreglern vorgibt. Und die Achsregler regeln dann jeder für sich unabhängig die Position, Geschwindigkeit und Beschleunigung? reicht es, wenn ich die Beschleunigung weglasse? das zweimalige Differenzieren ist ja irgendwie nicht so cool. Ich habe an meinen Motoren ja nur simple Geber!
bastelbube schrieb: > Wenn ich dann > z.B. meinen Kreis mit 10 Punkten approximiere Dann bekommst du keinen Kreis sondern ein 10Eck. Es sei denn deine Steuerung kann Kreisbogenbefehle ausführen, dann must du Zielpunkt X und Y und den Radius angeben. Standard: G01 gerade fräsen G02 Kreisbogen fräsen im Uhrzeigersinn G03 Kreisbogen fräsen gegen Uhrzeigersinn Das vereinfacht natürlich die Sache, setzt aber eine komplette Bahnsteuerung voraus. Wenn du das selbst realisierst musst du viel mehr Stützpunkte verwenden, je nach gewünschter Genauigkeit, so 100 .. 1000. Das fordert erhebliche Rechenleistung, da du in Echtzeit nach einem Millimeterbruchteil Weg neue Daten berechnen und senden musst. Georg
oftmals wird noch interpoliert und weil der regler auch etwas überschwingt wird zuvor die strecke gesampled damit dann nur kleine überschwingungen entstehen. dann wird die führungsgröße eventuell noch geglättet, weil die beschleuunigung unerwünschte signalanteile enthält, die die mechanik zum schwingen anregen. dann brauchst du auch ein lookahead das du nicht an jedem punkt komplett zum stopp kommst sondern vorausschauend die geschwindigkeit halten kannst... Ecken können mittels polynomüberschleifen geglättet werden... https://www.youtube.com/watch?v=eM3D6gz3eRs
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.