Forum: Mikrocontroller und Digitale Elektronik Trajektorien mit Positioniersteuerung


von bastelbube (Gast)


Lesenswert?

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.

von Gustl B. (gustl_b)


Lesenswert?

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.

von Thats.i.t (Gast)


Lesenswert?

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.

von Georg (Gast)


Lesenswert?

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

von Christian (Gast)


Lesenswert?

Kannst Du nur eine Position zu Deinen Steuerungen senden oder auch eine 
Verfahrgeschwindigkeit?

von bastelbube (Gast)


Lesenswert?

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?

von Georg (Gast)


Lesenswert?

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

von Dieter H. (kyblord)


Lesenswert?

lies mal über NC Kernel

von bastelbube (Gast)


Lesenswert?

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!

von Georg (Gast)


Lesenswert?

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

von Dieter H. (kyblord)


Lesenswert?

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
Noch kein Account? Hier anmelden.