Forum: Mechanik, Gehäuse, Werkzeug CNC-Steuerung / XY-Plotter


von Harstad (Gast)


Lesenswert?

Hi,

ich habe mal eine eher grundsätzliche Verständnisfrage zur Funktion von 
XY-Plottern.

Wenn dort eine Gerade "gezeichnet" wird, so entsteht diese aus 
Bewegungen der beiden Motoren für X und Y. Je nach Winkel der Gerade 
haben die Motoren dabei eine andere Geschwindigkeit - für den Extremfall 
einer horizontalen oder vertikalen Linie steht einer der beiden Motoren 
komplett still. In einem Polygon ändert sich die Geschwindigkeit der 
beiden Motoren an der Stelle, an der sich zwei Linien des Polygons 
treffen, korrekt?

Startet der Plotter eine Bewegung, so wird dieser eine 
Beschleunigungsrampe fahren, um sich nicht zu ruckartig zu bewegen.

Wie sieht das jetzt mit der Beschleunigung an der Stelle aus, an der die 
Achsen innerhalb eines Polygons ihre Geschwindigkeit ändern - fährt so 
ein XY-Plotter an dieser Stelle auch eine Beschleunigung? Oder ist es da 
egal bzw. nicht zulässig, weil sonst während der Beschleunigungsphase 
die Geraden nicht mehr gerade wären?

Danke!

von KU (Gast)


Lesenswert?

Harstad schrieb:
> Wie sieht das jetzt mit der Beschleunigung an der Stelle aus, an der die
> Achsen innerhalb eines Polygons ihre Geschwindigkeit ändern - fährt so
> ein XY-Plotter an dieser Stelle auch eine Beschleunigung? Oder ist es da
> egal bzw. nicht zulässig, weil sonst während der Beschleunigungsphase
> die Geraden nicht mehr gerade wären?

Die Motoren müssen diese Rampen fahren, weil es sonst insbesondere bei 
Schrittmotoren zu Schrittverlusten kommen würde. Man kann einen 
Schrittmotor nicht einfach beliebig beschleunigen, sonst "bleibt er 
hängen" / hat Schrittverluste. Und das ist natürlich das letzte was man 
haben möchte. Aber insbesondere bei Knicken / Übergängen von Kreisbögen 
o.Ä. ist die Steuersoftware gefragt. Da gibt es viele 
Ansatzmöglichkeiten um das Problem zu optimieren. Google mal nach CNC 
plan ahead oder so. Das ist natürlich auch für das Fräsbild (Qualität 
der gefrästen Oberfläche, Kante, Fase) extrem wichtig, dass es nicht zu 
ruckartigen Bewegungen kommt. Das würde man im Fräsbild sofort erkennen.

von Motorenfütterer (Gast)


Lesenswert?

Du schätzt die Sache ziemlich richtig ein.

> Startet der Plotter eine Bewegung, so wird dieser eine
> Beschleunigungsrampe fahren, um sich nicht zu ruckartig zu bewegen.

Die ganze Dimensionierung eines (Stift-)Plotter is so gehalten dass:
A) Stift, Stifthalter und alles was zu bewegen ist möglichst Massenarm 
wird (leicht)
B) Motoren resp. deren Drehmoment eher "überdimensioniert" wird

Im Endeffekt können Plottermechaniken doch ziemlich ruckartig bewegen.

Was übrig bleibt und noch stört muss halt noch rechnerisch kompensiert 
werden (Stichwort: inverse Kinematik) und die Motoren in Servotechnik 
entsprechend angesteuert werden.

von Harstad (Gast)


Lesenswert?

Danke für die umfassenden und schnellen Antworten :-)

Noch eine Frage zu den ganzen Arduinos und Co, die neuerdings zum 
Ansteuern solcher Plotter verwendet werden:

Wenn ich das richtig verstehe, erzeugen diese die Schrittmotorfrequenz 
mit irgend welchen Timern, langsamere Frequenzen entstehen durch ein 
(ganzzahliges) Teilen dieses Timers. Also wenn der Timer z.B. 100 kHz 
kann, so kann ein Schrittmotor mit 100 kHz, 50 kHz, 25 kHz, 12,5 kHz, 
6,25 kHz ... angesteuert werden.

Was mir hier auffällt: um so größer der Teiler/um so kleiner die 
Frequenz, um so feiner sind die Abstufungen, sprich um so genauer ist 
die Geschwindigkeit, mit der gefahren werden kann.

Das heißt doch aber, dass in der nähe der Maximalgeschwindigkeit das 
Ergebnis ziemlich ungenau und unsauber wird, weil die erreichbare 
Istgeschwindigkeit zu weit weg von der möglicherweise benötigten 
Sollgeschwindigkeit ist? D.h. die Ergebnisse sind nur bei langsamen 
Geschwindigkeiten brauchbar?

Oder habe ich hier einen Denkfehler und die Erzeugung der 
Schrittfrequenz wird da anders gemacht?

von Tany (Gast)


Lesenswert?

Harstad schrieb:
> langsamere Frequenzen entstehen durch ein
> (ganzzahliges) Teilen dieses Timers
Nein, die Frequenzen werden nicht (nur) durch Teiler, sondern ähnlich 
wie PWM, durch Comparator generiert.

von Harstad (Gast)


Lesenswert?

OK, aber auch wenn es ein Comparator ist, bleiben doch immer nur die 
ganzzahligen Teiler - schließlich kann man in einem Register ja nicht 
auf einen zählwert 1,25 vergleichen sondern nur auf 1 oder 2!?

von Tany (Gast)


Lesenswert?

Du kannst den Vergleichregisters eine beliebige 16-Bit Zahl bei 16bit 
Timer futtern, erreicht der Zählerstand diese Zahl, wird eine Takt 
generiert.
Die Frequenz wird bei Bedarf um Teilerfaktor vom Timer reduziert und da 
hast du recht, nur um Faktor 1 oder 2!
Bei 16 MHz und Teilerfaktor 1 ist bei z.B Atmel MCU eine "saubere" 
Frequenz von ca. 244 Hz bis 3-stellige kHz  möglich.

von MaWin (Gast)


Lesenswert?

Harstad schrieb:
> Wie sieht das jetzt mit der Beschleunigung an der Stelle aus, an der die
> Achsen innerhalb eines Polygons ihre Geschwindigkeit ändern - fährt so
> ein XY-Plotter an dieser Stelle auch eine Beschleunigung?

Ja, und weil der eine Motor eventuell nicht schnell genug beschleunigen 
kann, muss der andere Mortor eventuell vor der Biegung abgebremst 
werden, genau so als ob du mti dem Auto um die Kurve willst. Das leisten 
gute G-Code Interpreter wie Mach3.

von MaWin (Gast)


Lesenswert?

Harstad schrieb:
> Wenn ich das richtig verstehe, erzeugen diese die Schrittmotorfrequenz
> mit irgend welchen Timern, langsamere Frequenzen entstehen durch ein
> (ganzzahliges) Teilen dieses Timers.

Nein, denn das wäre doof.

Man lässt einen Timer mit hoher Frequenz laufen, z.B. 1MHz, und lässt 
dann per Timer Compare zu einem bestimmten folgenden Zeitpunkt, z.B. in 
107us, einen Step-Impuls (z.B. für X-Achse) erzeugen, der nächte (für 
Y-Achse) kann in 32us und der übernächste (für X-Achse) in 112us sein, 
je nach dem, zu welchen Zeitpunkten die Impulse nötig sind.

Dad die Berechnung, in welchen Zeitabständen die Impulse erfolgen 
sollen, etwas aufwändiger ist, wenn man Beschleunigung mitrechnen will, 
kann man im voraus berechnen und nur noch eine generierte Step-Tabelle 
abarbeiten (die man rechtzeitig weiter füllen muss, FIFO).

von Harstad (Gast)


Lesenswert?

OK, vielleicht stehe ich ja auf der Leitung, aber ich sehe immer noch 
nicht, wo man diese Genauigkeit herbekommt.

Also angenommen, der Timer läuft mit 1MHz. Wenn der Comparator auf 1 
steht, dann schlägt der Timer eine Million mal pro Sekunde zu, ergibt 
500000 Steps pro Sekunde (in der Annahme ein step=1x HIGH und 1x LOW) 
ergibt eine Schrittfrequenz von 500 kHz.

Jetzt stelle ich den Comparator auf 2, dann schlägt der Timer nur noch 
500000x pro Sekunde zu -> ergibt eine Schrittfrequenz von 250 kHz.

Comparator auf 3, Timer schlägt 333333x pro Sekunde zu -> 
Schrittfrequenz 166666 kHz.

Comparator auf 10000, Timer schlägt 100x pro Sekunde zu -> 
Schrittfrequenz 50Hz.

Comparator auf 10001, Timer schlägt 99,99x pro Sekunde zu -> 
Schrittfrequenz 49,99Hz.

Und so weiter ... jedenfalls sind die Unterschiede zwischen den 
möglichen hohen Schrittfrequenzen deutlich größer als bei niedrigen 
Schrittfrequenzen -> ergo ist die Differenz zwischen Soll- und möglicher 
Istgeschwindigkeit bei hohen Geschwindigkeiten höher und damit die 
Genauigkeit geringer!?

von Tany (Gast)


Lesenswert?

Um möglich genauer Takt zu erzeugen, soll der Timer nicht durch Teiler 
"zerhakt" werden. d. h. Der Timer soll möglich mit max. Takt laufen.
Was der Genauigkeit betrifft, was du beschreibst bei hoherer Frequenz 
schlechter als bei niedrigerer Frequenz, ist richtig. Die Frage ist 
aber, ob man diese Genauigkeit braucht.
Ein gängiger Stepper mit 200 Steps benötigt für 1500 rpm eine 
Taktfrequenz von ca 80 kHz bei 1/16 Microsteps. Bei Plotter mit 
typischem Zahnriemenantrieb bedeutet ein Vorschub von paar Meter pro 
Minute! Geschätzt ab 5m pro Minute (von der Konstruktion abhängig).
Reduziert man den Vorschub und microsteps, kann man runter mit der 
Taktfrequenz gehen, dann hat man diese Genaugikeit, was man braucht.
Oder wenn's sein muß, andere MCU oder gar keine MCU zur Bahnberechnung 
verwenden.
Die Genaugigkeit der Frequenz hat nicht so sehr großen Einfluß auf die 
Bahngenaugkeit.

von Georg (Gast)


Lesenswert?

MaWin schrieb:
> Ja, und weil der eine Motor eventuell nicht schnell genug beschleunigen
> kann, muss der andere Mortor eventuell vor der Biegung abgebremst
> werden

Das ergibt sich automatisch daraus, dass es sich bei einem Plotter nicht 
um eine Punkt-zu-Punkt-Steuerung handelt, sondern um eine Bahnsteuerung 
- d.h. die Geschwindigkeitsangaben des Steuerprogramms gelten für die 
resultierende Bewegungsrichtung, was auch für die Rampen gilt, und die 
Steuerung muss das in Echtzeit für die Achsen umrechnen und die Motoren 
entsprechend ansteuern.

Sie tut das auch wenn sie Bahnsteuerung heisst.

Georg

von MaWin (Gast)


Lesenswert?

Harstad schrieb:
> Also angenommen, der Timer läuft mit 1MHz. Wenn der Comparator auf 1
> steht, dann schlägt der Timer eine Million mal pro Sekunde zu, ergibt
> 500000 Steps pro Sekunde (in der Annahme ein step=1x HIGH und 1x LOW)
> ergibt eine Schrittfrequenz von 500 kHz.
>
> Jetzt stelle ich den Comparator auf 2, dann schlägt der Timer nur noch
> 500000x pro Sekunde zu -> ergibt eine Schrittfrequenz von 250 kHz.

Nein.
Der Timer zählt mit 1MHz bis 65535 und dann wieder 0.

Der Comparator setzt nicht zurück.

Der Comparator löste beispielsweise bei 53 einen Interrupt aus und weil 
der nächste Takt in 105 us erzeugt werden soll wird er in der 
Interrupt-Routine auf 158 umprogrammiert.

von Zonggg (Gast)


Lesenswert?

MaWin schrieb:
> Nein.
> Der Timer zählt mit 1MHz bis 65535 und dann wieder 0.
>
> Der Comparator setzt nicht zurück.
>
> Der Comparator löste beispielsweise bei 53 einen Interrupt aus und weil
> der nächste Takt in 105 us erzeugt werden soll wird er in der
> Interrupt-Routine auf 158 umprogrammiert.

Erstens ist das falsch (es gibt SoC's wie dem AM335x, die für den Fall, 
dass der Comparatorwert erreicht wird, diverse Aktionen wie z.B. ein 
Zurücksetzen des Zählers ermöglichen) und zweitens vollkommen egal, weil 
dieses Implementierungsdetail am angesprochenen Problem genau gar nichts 
ändert.

von Tany (Gast)


Lesenswert?

MaWin schrieb:
> Nein.
> Der Timer zählt mit 1MHz bis 65535 und dann wieder 0.

Wenn man den Compare nach Bauernmethode konfiguriert: ja.
Bei Atmel MCU gibt es noch andere Mode, wo der Zähler erst bei 
0x00FF(8-bit), 0x01FF (9-bit), 0x03FF (10-bit), oder frei in OCRx 
definierte Zahl zurücksetzt oder rückwärts auf 0 zählt.
Das letztere erreicht man eine Frequenz:

         fclk_I/O
fOCn =  -------------
        N*(1 + OCRn)       N: ist Teilerfaktor (1, 8, 64, 256, 1024)

siehe Abschnitt 16-bit Timer.

von Walter T. (nicolas)


Lesenswert?

Bei vielen Bahnsteuerungen kann man auch durchaus an der Genauigkeit 
drehen, inwiefern der Bahn exakt gefolgt werden muß oder wieviel 
Abweichung erlaubt ist, um zügiger um die "Ecken" fahren zu können.

von Tany (Gast)


Lesenswert?

Walter T. schrieb:
> Bei vielen Bahnsteuerungen kann man auch durchaus an der Genauigkeit
> drehen, inwiefern der Bahn exakt gefolgt werden muß oder wieviel
> Abweichung erlaubt ist
meinst du G61 und G64?

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Harstad schrieb:
> Und so weiter ... jedenfalls sind die Unterschiede zwischen den
> möglichen hohen Schrittfrequenzen deutlich größer als bei niedrigen
> Schrittfrequenzen -> ergo ist die Differenz zwischen Soll- und möglicher
> Istgeschwindigkeit bei hohen Geschwindigkeiten höher und damit die
> Genauigkeit geringer!?

Ja, das ist so, wenn man den Takt auf diese Art und Weise erzeugt.

Allerdings hast Du ja selbst gemerkt, dass die Genauigkeit zu den 
größeren Teilerverhältnissen hin schnell zunimmt. Üblicherweise liegen 
die Verfahrgeschwindigkeiten deutlich unter Deinen extremen Werten.

Beispiel:
Unser 3D-Drucker läuft unter Ramps/Marlin (Arduino-Software auf MEGA2560 
mit 20 MHz) mit 1/16 Schritt bei 40mm Zahnradumfang, also (bei 200 
Vollschritten) mit 3200 Schritten auf 40mm. Selbst im Eilgang mit 
200mm/s sind das maximal 16000 Schritte pro Sekunde.

Bei angenommenem (man müsste mal in den Quellen nachschauen) 20MHz-Takt 
der Timer ist die Granulierung da schon sehr gut.

Und im Eilgang spielt das eh noch nicht die große Rolle.

Aber: ganz allgemein kannst Du Massen nicht unendlich schnell 
beschleunigen oder abbremsen. Ab gewissen Werten musst Du immer eine 
Rampe fahren, sonst verliert der Motor Schritte oder bewegt sich erst 
gar nicht. Das gilt für jedes Antriebssystem, ob ohne Rückkopplung 
(Stepper) oder mit (Servo-Systeme). Da definiert man dann einen sog. 
Schleppfehler, um den die reale Position von der idealen abweichen darf. 
man nimmt dann einen gewissen Fehler in Kauf, hat aber dann dafür nicht 
die extremen Beschleunigungen/Verzögerungen und kann "weicher" Ecken 
fahren.

Die Physik setzt da immer Grenzen.

von Walter T. (nicolas)


Lesenswert?

Tany schrieb:
> Walter T. schrieb:
>> Bei vielen Bahnsteuerungen kann man auch durchaus an der Genauigkeit
>> drehen, inwiefern der Bahn exakt gefolgt werden muß oder wieviel
>> Abweichung erlaubt ist
> meinst du G61 und G64?

Genau. Wobei sich für den "Normalmodus" G64 ja in vielen Steuerungen 
(z.B. Mach3) auch Toleranzen eingeben lassen, wie weit in den "Ecken" 
gebremst wird.

Ehrlich gesagt haben mich diese Toleranzen allerdings noch nie geschert, 
weil mein CAM-Programm schöne Kreisbögen ausgibt, wenn die Zeichnung 
nicht komplett aus winzigen Geradenstücken besteht.

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.