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