pinguinpfleger / ASWX1-FW-MOD

Artillery Sidewinder X1 Firmware Mod based on Marlin 2.0.x
GNU General Public License v3.0
119 stars 20 forks source link

Junction Deviation #9

Open thierryzoller opened 4 years ago

thierryzoller commented 4 years ago

I see that JD is set to 0.013 - how did you get to this value knowing that 0.466 / 800 = 0.018 ? Is this working better ?

define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge

thierryzoller commented 4 years ago

Nachdem ich M503 an den Drucker geschickt habe bermerke ich dass JD so oder so dann auf 0.01 steht da die dritte nachkomma stelle gar nicht in betrach gezogen wird?

Bodengriller commented 4 years ago

Die 0.013 wurden ohne großes Überlegen einfach übernommen, weil es in allen anderen SWX1-Firmwares, die wir so finden konnten, schlicht und einfach auch so war und wir keine Probleme damit hatten. Ehrlicherweise habe ich persönlich mit der JD aber auch noch nicht großartig rum gespielt. Ändern ließe sich diese problemlos per M205 J0.018 Falls du da andere Werte nutzen möchtest. Anschließend M500 zum Speichern in den EEPROM

https://marlinfw.org/docs/gcode/M205.html

Die fehlende dritte Nachkommastelle ist nur eine Kürzung/Rundung in der Ausgabe (klingt nach Octoprint) - Bei den Steps z.B. werden auch die dritten Nachkommastellen nicht in Octoprint angezeigt, sehr wohl aber in den EEPROM geschrieben. Intern rechnet Marlin sehr wohl mit der dritten Stelle.

Woher kommt deine Formel? Möchtest du näheres zu deinen Erfahrungen bezüglich JD mitteilen?

thierryzoller commented 4 years ago

In Marlin selber unter der def. für Junction Deviation steht ein link [1] - wenn man diesen nimmt und rechnet käme mann auf 0.466 / 800 = 0.018 und nicht 0.013.

Pronterface gibt mir 0.01 zurück - sicher dass es dies nur abrundet ?

Ich musste JD komplette deaktivieren, es kommt zu massiven Problemen mit CURA und teilweise auch mit Slic3r. Die Marlin Issue liste ist voll davon. Ein rundes Rohr zu drucken dann ziter der kopf hin und her.

[1] /**

Bodengriller commented 4 years ago

Mir ist nicht ganz klar, woher du den Jerk = 6 beziehst

Nach der Formel im zweiten Link wäre d = 0,4 * Jerk² / Acceleration

#define DEFAULT_ACCELERATION          800    // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION  10000    // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION   2000    // X, Y, Z acceleration for travel (non printing) moves
//#define CLASSIC_JERK
#if ENABLED(CLASSIC_JERK)
  #define DEFAULT_XJERK 8.0
  #define DEFAULT_YJERK 8.0
  #define DEFAULT_ZJERK  0.3

0,4 8 8 / 800 = 25,6 / 800 = 0,032

Das wäre der Fall, wenn CLASSIC_JERK aktiviert wäre - ist er aber ja nicht. (stattdessen JD)

#if DISABLED(CLASSIC_JERK)
  #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge
#endif

Rückwärts gerechnet hieße das d = 0,4 * Jerk² / Acceleration

Jerk = sqrt((d Acceleration) / 0,4) Jerk = sqrt((0,013 800) / 0,4 = sqrt(26) = 5,099

Was m.E. letztendlich bedeutet, dass JD in diesem Fall mit einem Jerk (Ruck) von 5,1 rechnet. Sinn von JD ist es aber ja die Beschleunigung (Acceleration) und den Ruck (Jerk) an die aktuellen Winkel anzupassen, was über einen Grund-Faktor (JunctionDeviation) passieren muss.

Je kleiner die JD eingestellt ist, desto langsamer werden scharfe Winkel angefahren. Das kann Vor- aber auch Nachteile haben. Zum Beispiel: Zu schnell = Das Filament wird in die Kurve "geschmissen" -> Ecken werden rund Zu langsam = die Nozzle steht zu lang auf einem Punkt, das darunter liegende Filament wird wieder geschmolzen, alles verläuft.

Es verhält sich also wie mit dem Jerk - man muss spielen um sein optimales Ergebnis zu finden - da gibt es keinen 100%igen Wert, der bei jedem Drucker gleich wäre.

Ändern kann man, wie oben erwähnt, den JD-Wert recht simpel über die Konsole mit M205 J0.013

Willst du JD komplett deaktivieren, musst du die Firmware neu kompilieren und in der configuration.h die Zeile //#define CLASSIC_JERK auskommentieren bzw. aktivieren. Danach logischerweise neu flashen. Anschließend würdest du wieder mit klassischem Acc/Jerk-Verfahren drucken.

In der "original-Artillery-Marlin" (V1.1.9) wurde noch classic-jerk genutzt. Bei Marlin selbst ist CLASSIC_JERK seit V2.0.0 (12/19) deaktiviert und somit JD aktiv (übrigens auch per default mit 0.013). Implementiert ist JD seit V1.1.9 (07/18) - damals noch default deaktiviert.

Es schien sich durchgesetzt zu haben, somit wurde es default. Das haben wir hier letzten Endes einfach übernommen.

Ich habe dir hier mal die aktuelle Version aus dieser Repo kompiliert und nichts anderes daran geändert als den CLASSIC_JERK zu aktivieren und damit die JUNCTION_DEVIATION auszuhebeln.

ASWX1-FW-MOD_V1.2_classic_jerk.zip

Wenn du möchtest kannst du diese FW einfach mal flashen und berichten, ob sich das Verhalten verbessert.

Die Acceleration- und Jerk-Werte dieser Version hier stimmen mit der ausgelieferten "original-Artillery-Marlin-FW" überein:

#define DEFAULT_ACCELERATION          800    // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION  10000    // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION   2000    // X, Y, Z acceleration for travel (non printing) moves

#define DEFAULT_XJERK                 8.0
#define DEFAULT_YJERK                 8.0
#define DEFAULT_ZJERK                 0.3
#define DEFAULT_EJERK                 5.0

Bezüglich der Nachkommastellen bin ich mir sicher, dass ich das schon mal gesucht und gefunden habe, weil mich die Ausgabe der M503 auch in manchen Werten wunderte - auf die Schnelle finde ich es aber nicht mehr wieder.

thierryzoller commented 4 years ago

Vielen Lieben Dank für die Informationen und erklärungen. Das Problem ist ohne JD verschwunden. Die Jerk values von 0.6 ist ein überbleibsel von der Waggster Mod, d.h. auch die "falsche" Rechnung.

Hier einer der Bug Reports zu dem Thema - es scheint gewisse parameter zu geben die zu problemen führen welche wissen wir nicht: https://github.com/MarlinFirmware/Marlin/issues/17342#issuecomment-612029989

Interessant ist auch die 5,1 die du errechnet hast wegen:

define DEFAULT_EJERK 5.0 // May be used by Linear Advance

Bodengriller commented 4 years ago

Kannst du mal ein paar Bilder von Vergleichen mit/ohne JD liefern?

Vielleicht wäre es ja tatsächlich eine Idee in diesem Mod die JD wieder komplett zu deaktivieren, wenn es nachweislich Probleme damit gibt. Ich habe selber momentan leider keine Zeit und Muße es selbst durch zu probieren - Mein Drucker muss erstmal pausieren.

thierryzoller commented 4 years ago

Fehler scheint gefunden zu sein: https://github.com/XDA-Bam/Marlin/commit/c673b8b0d6a22ce1721a1be2d43ae8d3d2ce13b8

Armageddit commented 4 years ago

hast du es damit mal getestet?

thierryzoller commented 4 years ago

Naja es geht weiter "Add a warning on LA + S-Curve" https://github.com/MarlinFirmware/Marlin/commit/c3946dd0174b63136f9c8437ca159a17ddc68512?fbclid=IwAR0Mdk3qglZT9gv9CTdc7e--DY5fr3z-QA211ujVDd0DYSA4tA_GY1y7JEI Siehe https://github.com/MarlinFirmware/Marlin/issues/14728

Ich habe mittlerweile S-Curve und JD deaktiviert und die besten Ergebnisse erzielt. Bilder folgen vielleicht. Mittlerweil kämpft ich mit ZBanding, anderes Thema.

dartrax commented 4 years ago

Ich hatte die gleichen Probleme und habe es auch deaktiviert.

Vielleicht wäre es ja tatsächlich eine Idee in diesem Mod die JD wieder komplett zu deaktivieren, wenn es nachweislich Probleme damit gibt.

Dafür 👍 Edit: Ich verwende Simplify3D, ist m.M.n. aber unabhängig vom Slicer.

thierryzoller commented 4 years ago

Das problem wurde in marlin behoben (anscheinend)