Willkommen! Anmelden Ein neues Profil erzeugen

Erweiterte Suche

Beschleunigung und Jerk optimieren, Test-G-Code?

geschrieben von PoWl 
Beschleunigung und Jerk optimieren, Test-G-Code?
06. February 2016 09:39
Hi,

ich würde gerne an meinem Prusa i2 Beschleunigung und Jerk optimieren. Ich nutze derzeit ein Gen7 Board mit der Repetier Firmware. Und habe im Repertier-Host die EEPROM-Settings für Beschleunigung und Jerk angepasst und mit ein paar G0 Befehlen getestet, wann der Drucker aus dem Takt kommt.

Genaugenommen habe ich erst mal nur die X-Achse zu optimieren versucht. Beschleunigung von 2500mm/s², max-jerk von 20..mm/s? nanu, warum mm/s? Sollte Jerk.. also Ruck nicht in etwas wie mm/s³ angegeben werden? [de.wikipedia.org]. Kurz mal in die Manual gelesen.. aha, es handelt sich hier nicht um den Ruck sondern " It is a speed difference between two moves, which can be reached without acceleration" also die maximale Geschwindigkeitsdifferenz zwischen zwei Geschwindigkeiten, ohne zwischen ihnen mit Beschleunigung zu interpolieren. D.h. wenn der Drucker jetzt losfahren soll macht er zunächst mal einen Satz nach vorne und Fängt mit einer Anfangsgeschwindigkeit 10mm/s an zu beschleunigen. Soweit so gut, d.h. Jerk und Acceleration sollten sich unabhängig voneinander einstellen lassen.

Nunja.. dann mal Versuche gefahren
G28 X0
G0 F99999
G91
G0 X80
G0 X-20
G0 X10

Kein Problem offenbar. Ein Problem ergibt sich hingegen wenn ich manuell in der G-Code-Eingabezeile zwei mal hintereinander G0 X80 sende. Da verhaspelt er sich dann beim zweiten mal massiv und brummelt bis zum Ende des Moves nur noch rum... und ich sehe keinen Grund dafür. Das passiert nur, wenn ich den Code das zweite mal sende, während er nach dem ersten schon am Fahren ist.

Gut, dann habe ich mal ein Testobjekt gedruckt. Ging soweit alles gut aber nach einem bestimmten Layer hat er mir reproduzierbar einen Layerversatz von 5mm in den Druck reingebaut. Warum? Habe ich nicht zuvor ausreichend getestet, welche maximalen Beschleunigungen möglich sind?

Mit Settings, die erheblich niedriger sind, also 1500mm/s², geht es dann. Allerdings wüsste ich gerne, warum ich auf die schönen Beschleunigungen verzichten muss, nur damit er mir nicht irgendwo einen Versatz reinmacht. Oder war es doch falsch eingestellter Jerk?

Wie kann ich das besser testen?
Lässt sich ein Test-Code entwickeln, der quasi als zuverlässiger Benchmark für den Drucker funktioniert?

Und warum verhaspelt sich der Drucker beim zweifachen Senden der G-Code Befehle? Fehler in der Firmware oder erklärbares Verhalten?
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
06. February 2016 10:18
Warum änderst Du die Werte nicht beim laufenden Druck am Display?

Wenn Du dann die Passenden gefunden hast, je nach Board entweder direkt abspeichern, oder eine, auf diese Werte angepaßte Firmware aufspielen. So mache ich das ohne großen Aufwand und sehr schnell.

1-mal bearbeitet. Zuletzt am 06.02.16 10:18.
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
06. February 2016 10:23
Weil es keinen Sinn ergibt, einen laufenden Druck zu verhunzen, wenn man die Werte mit einer zuverlässigen Testprozedur auch so ermitteln könnte.
Außerdem bringt es mir nix, wenn der Fehler bei einem Druck nur alle 30 Layer mal auftritt, da warte ich mich ja zu tode, bis die neu gesetzten Werte wieder relevant werden. Desweiteren, wer garantiert mir nach erfolgericher Kalibrierung mit einem bestimmten Objekt, dass bei einem anderen Objekt dann nicht doch wieder Fehler passieren? Hast du meinen Posts überhaupt gelesen? grinning smiley

2-mal bearbeitet. Zuletzt am 06.02.16 10:24.
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
06. February 2016 10:38
Oh doch,....ich habe Deinen Beitrag schon gelesen...grinning smiley

Wenn ich das sowieso mit einem Testeil mache spielt es keine Rolle wenn ich es verhunze. Dafür ist es doch ein Testeil. Du dagegen scheinst aber die Zusammenhänge zwischen Masse, Beschleunigung, max. Geschwndigkeit und eingesetzter Elektronik nicht zu verstehen.

Ich nehme mal ganz frech an, daß bei Deinem Drucker die Schrittverluste vormnehmlich an der Y-Achse auftreten die das schwere Bett bewegen muß. Auch daß diese erst nach 30 Layern auftreten ist logisch wenn die Steppertreiber dieser Achse durch die bewegte Masse heiß werden.

Eine zuverlässige Testprozedur kann man sicherlich erstellen, aber dann nur für einen bestimmten Druckertyp und für eine bestimmte Elektronik.
Auf andere Drucker ist das nicht übertragbar.

1-mal bearbeitet. Zuletzt am 06.02.16 10:42.
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
07. February 2016 06:26
Quote
PoWl
Nunja.. dann mal Versuche gefahren
G28 X0
G0 F99999
G91
G0 X80
G0 X-20
G0 X10

Fährt man nur hin und her, sollte die Jerk-Berechnung kaum Einfluss haben. Jerk ist vor Allem für flache Winkel (20°, weniger). Zum Jerk einstellen habe ich mir einen Kreis gemacht und den in unterschiedlich viele Segmente unterteilt, siehe Anhang.


Generation 7 Electronics Teacup Firmware RepRap DIY
     
Anhänge:
Öffnen | Download - circles.gcode (2.5 KB)
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
07. February 2016 07:20
Jo, Kreise sind gut zum testen. Bei sehr kurzen Segmenten und recht hoher Geschwindigkeit erkennt man dann auch gut die Grenzen vom Prozessor oder der seriellen Verbindung. Ich mach meine Kreise mit Openscad. Da kann man mit $fn die Anzahl der Segmente gut steuern.


Triffid Hunter's Calibration Guide --> X <-- Drill for new Monitor Most important Gcode.
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
08. February 2016 18:15
Ich kenn zwar nicht die Lösung,
habe aber das gleiche, oder ein ähnliches Problem.
Bei mir ist die Y-Achse sehr schwer und Ich habe sporadisch Schrittverluste. Das ist mehr als ärgerlich, besonders bei größeren Druckaufträgen.

Ich habe auch zuerst kleine Testobjekte gedruckt, um die Parameter wie Jerk, Beschleunigung und max Speed einzustellen. Runde Objekte und Würfel sahen gut aus, aber wenn Ich natürliche Objekte drucken wollte, gab es Versatz.

Meine Theorie :
Bei großen Objekten wächst die Geschwindigkeit, je länger der Weg ist und muss wieder abgebremst werden, gibt es viele solcher abrupten Stop and goes in kurzer Zeit, hatte ich Schrittverluste. (Ich habe Nema 17 Stepper) sporadisch. Häufung gab es Schrittverluste bei sehr kurzen Strecken mit vielen Richtungswechseln in kurzer Zeit, oder bei langen Travelstrecken mit abrupten Richtungswechsel.

Als abhilfe habe Ich die Y-Achse auf Nema 23 Umgebaut, das ist ein Brummer. 4 faches Haltemoment und fast das 5 fache Rotationsmoment. Ein erster Druck mit kleinem Würfel sieht gut aus, nun geht es ans Testen mit größeren Druckobjekten. Das dauert.

Ich bin der Meinung, dass zumindestens in meinem Fall das Moment und die Kraft des 'kleinen' Nema 17 zu gering für die dynamischen Kräfte bei großem Druckbett, ist.
Man benötigt schon einiges an Jerk um scharfe Ecken drucken zu können.

Ich stelle mal wieder fest, ordentliche Druckparameter sind schwierig zu ermitteln.
Kleine Testobjekte sind gut für Toleranz und Maßhaltigkeit Tests. Für Speed. muss dynamisch getestet werden
sad smiley
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
09. February 2016 03:59
Genau aus dem Grund und eigener Probleme bei einem Leapfrog habe ich mir mal ein Schrittverlisttestteil kreiert das man in beliebiger Größe scalieren kann. Es beinnhaltet durch seine Form alle relevanten Problemstellungen für Schrittverluste in Microschritten und Vollschritten. Ich hatte beides auf diesem Drucker aus zwei verschiedenen Gründen.



Das habe ich dann in Stufen bis zur maximal vom Hersteller angegebenen Geschwindigkeit gedruckt. So sah das dann aus.





Kreise waren zum Test nicht wirklich anwendbar. Da konnte man Schrittverluste kaum erkennen.



Bei mir waren letztendlich einer der fest auf dem Board installierten Stepperdriver und ein Schrittmotor defekt.
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
09. February 2016 04:52
Möchtest du mir die STL schicken Edwin? smiling smiley


Gruß,
Steffen

Geetech Full-Acrylic Graber Air V3 SteBa Edition, v6 J-HEAD v5 E3D Custom Hotend, 230v Induktionskochfeldheizplatte mit Aceton Beschichtung, Rumpsbaradds 64-Bit AliExpress Edition, Softeisextruder
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
09. February 2016 05:01
So zum Thema Schrittverluste, weil ich es am Wochenende gerade hatte. Als ich bei PETG den Flow zu hoch hatte und viel zu viel gedrückt habe, hatte ich auch dicke Schrittverluste, weil sich die Düse mit dem ziemlich harten abgekühlten Druck in die Wege kam. Muss also nicht immer an den Treiber, Strom, oder so liegen.


Triffid Hunter's Calibration Guide --> X <-- Drill for new Monitor Most important Gcode.
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
09. February 2016 06:48
Hallo Steffen,

wenn Du mir Deine Mailadresse gibst schicke ich sie Dir.

Gruß Edwin
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
12. February 2016 10:53
Quote
Edwin
Ich nehme mal ganz frech an, daß bei Deinem Drucker die Schrittverluste vormnehmlich an der Y-Achse auftreten die das schwere Bett bewegen muß. Auch daß diese erst nach 30 Layern auftreten ist logisch wenn die Steppertreiber dieser Achse durch die bewegte Masse heiß werden.

Also es ist die X-Achse bei meinem Prusa, die Probleme macht. Aber hier sitzt auch der schwere Wade-Extruder mit dem Schrittmotor drauf ;-)
Dass die Steppertreiber heiß werden ist bei mir leider nicht der Fall. Es sind die A4988 Treiber und sie haben einen Kühlkörper. Die werden nicht mal lauwarm und die Kühlkörper sind mit gutem Wärmeleitkleber direkt auf den Chip geklebt. Weiterhin bin ich noch nicht damit einverstanden, dass die Verlustleistung innerhalb der Schrittmotortreiber davon abhängen soll, wie viel Masse der Schrittmotor gerade beschleunigen muss bzw. überhaupt wie viel gerade beschleunigen bzw. abbremsen muss. Der Strom der durch den Schrittmotortreiber fließt ist ja immer konstant, warum sollte hier bei Beschleunigung/Bremsung nun mehr Abwärme entstehen?

Insofern fehlt mir nun jegliche Erklärung, warum die Schrittverluste erst bei unterschiedlichen Layern auftreten. Sogar bei deinem Test-Teil ist das mysteriös, denn hier ist ja jeder Layer absolut gleich.

Quote

Eine zuverlässige Testprozedur kann man sicherlich erstellen, aber dann nur für einen bestimmten Druckertyp und für eine bestimmte Elektronik.
Auf andere Drucker ist das nicht übertragbar.

Die Ergebnisse gelten natürlich nur für einen bestimmten Drucker. Die Testprozedur sollte doch aber so universell sein, dass sie alle kritischen Bewegungen, die der Drucker meistern muss, abdeckt. Dein Testteil ist doch genau eine solche Testprozedur. Wenn du möchtest, kannst du mir das auch mal per eMail schicken, dann schau ich mal, wie mein Drucker damit zurecht kommt und poste die Ergebnisse.

Zum Jerk: Gemäß der Definition von Jerk kann man den offenbar wirklich nicht mit nur einer Achse testen, da er hier unterschiedlich angewandt wird, zumindest so, wie die Repetier Firmware ihn handhabt:

Quote

Jerk is what makes your printer shake. It is a speed difference between two moves, which can be reached without acceleration. So why do you want jerk and what does it influence? The first thing it influences is the starting speed. It is 50% of the allowed jerk. So if you have a jerk of 20, the first move will start with 10mm/s. The other thing jerk controls is the join speed for consecutive segments.

D.h. die Startgeschwindigkeit einer jeden Bewegung beträgt 50% des eingestellten Jerks. Bei mir wie die Werte im Beispiel also 10mm/s. Warum 50%? Warum beträgt beim losfahren in eine Richtung die maximale Geschwindigkeitsänderung ohne Beschleunigungsvorgang nur 10mm/s und nicht 20mm/s wie eingestellt? Generell.. ist das Max-Jerk Setting nicht etwas ungünstig implementiert? Die Firmware betrachtet X und Y als zusammenhängendes System. Tatsächlich aber handelt es sich um zwei verschiedene Achsen mit zwei unterschiedlichen Antrieben. D.h. ich könnte nun für beide Achsen vorgeben, dass sie. Nun ist der Jerk so implementiert, dass er sich geometrisch auf die beiden Achsen aufteilt. Warum?

Beispiel: Max-Jerk Setting auf 20mm/s. Jerk-Control-Verfahren nach Repetier-Firmware-Manier: Siehe Illustration.
Angenommen ich Fahre in X-Richtung mit vx=20mm/s, möchte dann einen Knick machen und in Y-Richtung mit vy=0.001mm/s weiterfahren. Bei derzeitiger Implementierung hält dann die X-Achse nahezu abrupt und ohne Abbremsung an und die Y-Achse beginnt zu fahren. Angenommen ich möchte nun nicht mit 0.001mm/s sondern ebenfalls mit vy=20mm/s in Y-Richtung weiterfahren, dann teilt sich das ganze aber vektoriell auf. Die X-Achse darf sich vor einem abrupten Stop mit maximal 20 / sqrt(2) mm/s bewegen, ebenso die Y-Achse. D.h. die X-Achse erfährt nun erst mal einen Abbremsvorgang auf 20 / sqrt(2) = 14,14mm/s obwohl die Achse mehr könnte! Auch die Y-Achse fährt dann nicht mit 20mm/s los, obwohl sie es könnte, sondern fängt ebenso erst ab 14,14mm/s an zu beschleunigen. Der Jerk-Control Algorithmus wird dann eben versuchen, die Start- bzw. Stop-Geschwindigkeiten der beiden Achsen so einzustellen, dass der vektorielle Jerk nicht >20mm/s gerät.

Hm.. warum? Das ist vielleicht gut dafür, dass der Ruck, den der Drucker beim Richtungswechsel erfährt unabhängig von der Richtung, immer konstant bleibt, allerdings zum einen sind Drucker meistens nicht Kreissymmetrisch gebaut sondern verhalten sich in 45° zu X/Y völlig anders als direkt in X- oder Y-Richtung und zum anderen verschenkt man hier das Potenzial der Schrittantriebe, abhängig davon in welche Richtung der Richtungswechsel stattfindet. Nun gut, es ist immerhin zu erkennen, was man sich hierbei gedacht hat.

Was ich nach wie vor unklar ist: Warum soll die Startgeschwindigkeit einer Achse nur 50% des eingestellten Jerk-Settings betragen?


Anfangs habe ich mit reinem 1-Achsen-Test noch 2200mm/s² Beschleunigung geschafft. Bei realen Druckversuchen musste ich das Setting zuletzt bis auf 800mm/s korrigieren und ich weiß immer noch nicht wirklich, warum. Man muss doch ganz klipp und klar formulieren können, in wie Fern beim Druck realer Teile andere Bedingungen wie beim Test herrschen und ob bzw. wie sich X- und Y-Achse gegenseitig beeinflussen.

Was ich auch nicht verstehe: Wieso habe ich in der Repetier-Firmware verschidene Einstellungsmöglichkeiten für Acceleration und Trave-Acceleration? Wo ist der Unterschied? Wie unterscheidet der G-Code Interpreter Travel-Moves von normalen?

4-mal bearbeitet. Zuletzt am 12.02.16 11:29.
Re: Beschleunigung und Jerk optimieren, Test-G-Code?
12. February 2016 12:28
Update: Ich habe hier ein sehr problematisches Teil bei dem er massiv Schrittverluste produziert.
[www.thingiverse.com]

Rose_Sepal.stl [www.thingiverse.com]

Hier kriege ich nach ein paar Layern einen Versatz. Mittlerweile musste ich die Acceleration-Settings sogar unter den Wert 800mm/s² korrigieren, das kann doch wohl nicht sein, da stimmt doch irgendetwas nicht. Ich erinnere noch mal an das massive verhaspeln der X-Achse wenn ich die Verfahr-Commands in falscher Reihenfolge sende. Eventuell macht hier die Firmware Probleme.

Jerk ist bei 15mm/s, Standard-Setting, damit gings immer gut. Abgesehen davon dürften sich Jerk und Acceleration theoretisch unabhängig voneinander auswirken. Wäre der Jerk zu hoch würde ich IMMER probleme kriegen. Würde ich ihn dann runterstellen wären die Probleme bei unveränderten Acceleration-Settings weg. Ist aber nicht der Fall.

Noch mal zur Spannung: Die sieht ok aus, schwankt zwischen 11,6V und 11,9V.
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen