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!
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.
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.
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?
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.
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!?
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.
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.
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).
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!?
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.
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
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.
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.
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.
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.