Marlin 2.1.2 Input Shaping
Das Thema Input Shaping schlägt spätestens seit dem MK-4 von Prusa große Wellen hier im Forum und ich bekomm hier immer wieder an den Kopf geknallt, selbst der Uwe kann das nicht oder so ähnlich. Sorry! Ich bin nicht der Experte für Marlin und wenn es nicht funktioniert, dann ist es meist nicht Marlin sondern die Firmware der Displays. Die ist verrammelt und verriegelt… Es gibt zwar positive Beispiele wie die Pro-Firmware für Ender-3 V2/S1 aber ich beginne mal mit dem Sovol SV05. Der hat ein CR-10 Display und das braucht keine eigene Firmware.
Also. Wenn ich das jetzt hinbekomme, dann kann das jeder andere auch aber dennoch die Warnung vorweg. Mit defekter Firmware kann man sich den Drucker in die ewigen Jagdgründe schicken. Wer es dennoch wagt, sollte sich zuvor den Plan B zurechtlegen und die originale Firmware griffbereit haben. Wie man am Ende die Firmware mit der bin- oder hex-Datei auf den Drucker spielt hab ich bereits mehrfach im Blog gezeigt. Zur Not dort nachlesen.
Marlin
Zur Erstellung von Marlin gibt es auch bereits einen Gastbeitrag im Blog. Wer das etwas genauer wissen möchte als ich das hier im Schnelldurchlauf abhandle kann das dort nachlesen. Kurz und knackig aber leider in Englisch genuschelt dient mir das Video von 3DJake als Vorlage.
Benötigt wird VisualStudio mit PlatformIO und Auto Build Marlin. VS findet Ihr im Filebase und der Rest wird im Programm selber nachinstalliert. Dann holen wir uns das aktuelle Marlin und die Example Configurations. Findet Ihr auch als Link im Filebase. Wichtig dabei, die müssen für die gleiche Version sein. Besonders die bugfix Version wechselt mitunter täglich. Entpackt das Marlin und die Configs. Jetzt öffnet das Verzeichnis der Configs und sucht Euch die passende Config zum Drucker und dem verbauten Board. Wie gesagt, ich zeig es jetzt am SV05 von Sovol und da findet Ihr erstmal nichts. Oder besser gesagt, es liegt eine Config für den Ender-5 Pro mit 4.2.2 Board im Creality Unterverzeichnis und das paßt zu 95% auch zum SV05. Also kopieren wir die Dateien in das Marlin Unterverzeichnis. Ja. Die vorhandenen Dateien werden überschrieben. Als nächstes holen wir uns noch den SourceCode des SV05 von der Github-Seite von Sovol. Der soll uns einfach nur helfen, die Unterschiede richtig einzutragen und die Optik wieder herzustellen. Rein für die Kosmetik des Bildschirms kopieren wir die _Bootscreen.h und die _Statusscreen.h von Sovol in das Marlinverzeichnis. Wer sich die Dateien ansieht wird gleich schmunzeln. Sovol versucht es garnicht erst zu verheimlichen. Da sind neben den Sovol auch die Creality Logos enthalten. Damit nun Marlin die richtigen Logos nimmt und die Besonderheiten des SV05 richtig anspricht muß nun die Config für den SV05 angepaßt werden.
Zunächst ist es sinnvoll mal die Unterschiede aufzuschreiben und später abzuhaken um sicher zu gehen, daß wir nichts übersehen haben. Wenn Ihr wie ich zusätzliche Änderungen vorgenommen habt, dann schreibt diese auch unbedingt dazu. Meine Liste sieht dann so aus:
– Sovol SV05
– Extruder 415 Steps
– CR-Touch X 40, Y 5 rechts hinten
– Mesh 4×4
– Bett 230×225
– Filamentsensor
– Deutsch
Ihr seht schon, so umfangreich ist die Liste nicht und Marlin wird es uns gleich noch um einiges einfacher machen. Wir starten VisualStudio und wenn das dann irgendwann mal nach einigen Minuten all seine Updates nachinstalliert hat öffnen wir den Marlin Ordner im VS. Der fängt dann wieder an da einiges nachzuladen. Geduld. Jetzt öffne ich parallel den Ordner von Sovol im Dateiexplorer und als erstes die platformio.ini aus dem Hauptverzeichnis mit einem Editor. Ist bei der Datei noch nicht so wild aber für die config später deutlich am besten geeignet verwende ich hier notepad++. In der platformio.ini kopiere ich mir den Wert hinter „default_envs“. Fragt mich nicht, warum es Marlin nicht schafft diese Info irgendwo in den Configs zu hinterlegen. Im VS klickt Ihr nun links auf die platformio.ini und die wird Euch nun im Fenster angezeigt. Bei „default_envs“ steht mega2560 und den Eintrag überschreibt Ihr mit dem Eintrag von Sovol. platformio.ini schließen und speichern. Nun kommt die eigentliche Fleißarbeit. Die beiden configuration.h im VS und notepad++ öffnen. Ich hoffe Ihr habt einen großen Bildschirm und könnt beide nebeneinander legen. Leider ist die Reihenfolge der Punkte nicht ganz identisch und Marlin 2.1.2 ist auch etwas umfangreicher. Die Punkte, die uns hier interessieren haben sich aber nicht geändert. Also in Ruhe von oben nach unten durchgehen und auf der Liste abstreichen. Als erstes den Drucker-Namen… und immer mit der config von Sovol vergleichen. Der CR-Touch wird gleich am Anfang aktiviert und die beiden „//“ vor „#define ENDER5_USE_BLTOUCH“ entfernt. Die Position des CR-Touch muß später noch angepaßt werden. Einzelne Abschnitte sind zur Orientierung deutlich gekennzeichnet und helfen den richtigen Bereich für eigene Anpassungen oder falls Ihr etwas übersehen habt zu finden.
//===========================================================================
//============================= Abschnitt =============================
//===========================================================================
Wichtig wie gesagt die Position des CR-Touch: #define NOZZLE_TO_PROBE_OFFSET { 40, 5, 0 } Bei mir zusätzlich noch der Druckbereich // The size of the printable area Zum aktivieren des Filamentsensors: #define FILAMENT_RUNOUT_SENSOR aktivieren. Dazu hab ich noch #ifdef FILAMENT_RUNOUT_DISTANCE_MM 500 50cm Abstand von Filamentsensor und Extruder eingetragen. Da das Extruder-Kabel beim SV05 wohl gedreht wurde, ändert sich an der Drehrichtung nichts. Das Mesh wird mit #define GRID_MAX_POINTS_X 4 auf 4×4 gesetzt. Die Sprache im Menu wird mit #define LCD_LANGUAGE de auf Deutsch geändert. Das war schon alles. Wer nun etwas nicht gefunden hat verwendet Strg-F für die Suche. Bekommt jeder hin. Also configuration.h schließen und speichern.
Für das Input Shaping müssen wir noch kurz in die Configuration_adv.h um dieses für X und Y zu aktivieren.
// @section motion
/**
* Input Shaping — EXPERIMENTAL
*
* Zero Vibration (ZV) Input Shaping for X and/or Y movements.
*
* This option uses a lot of SRAM for the step buffer. The buffer size is
* calculated automatically from SHAPING_FREQ_[XY], DEFAULT_AXIS_STEPS_PER_UNIT,
* DEFAULT_MAX_FEEDRATE and ADAPTIVE_STEP_SMOOTHING. The default calculation can
* be overridden by setting SHAPING_MIN_FREQ and/or SHAPING_MAX_FEEDRATE.
* The higher the frequency and the lower the feedrate, the smaller the buffer.
* If the buffer is too small at runtime, input shaping will have reduced
* effectiveness during high speed movements.
*
* Tune with M593 D<factor> F<frequency>:
*
* D<factor> Set the zeta/damping factor. If axes (X, Y, etc.) are not specified, set for all axes.
* F<frequency> Set the frequency. If axes (X, Y, etc.) are not specified, set for all axes.
* T[map] Input Shaping type, 0:ZV, 1:EI, 2:2H EI (not implemented yet)
* X<1> Set the given parameters only for the X axis.
* Y<1> Set the given parameters only for the Y axis.
*/
//#define INPUT_SHAPING_X
//#define INPUT_SHAPING_Y
#if EITHER(INPUT_SHAPING_X, INPUT_SHAPING_Y)
#if ENABLED(INPUT_SHAPING_X)
#define SHAPING_FREQ_X 40 // (Hz) The default dominant resonant frequency on the X axis.
#define SHAPING_ZETA_X 0.15f // Damping ratio of the X axis (range: 0.0 = no damping to 1.0 = critical damping).
#endif
#if ENABLED(INPUT_SHAPING_Y)
#define SHAPING_FREQ_Y 40 // (Hz) The default dominant resonant frequency on the Y axis.
#define SHAPING_ZETA_Y 0.15f // Damping ratio of the Y axis (range: 0.0 = no damping to 1.0 = critical damping).
#endif
//#define SHAPING_MIN_FREQ 20 // By default the minimum of the shaping frequencies. Override to affect SRAM usage.
//#define SHAPING_MAX_STEPRATE 10000 // By default the maximum total step rate of the shaped axes. Override to affect SRAM usage.
//#define SHAPING_MENU // Add a menu to the LCD to set shaping parameters.
#endif
Also wieder [//] entfernen um es zu aktivieren und schließen und speichern. An den Werten ändern wir nichts. Zum Schluß rechts oben oder links unten im VS das Häkchen anklicken und die Firmware wird erzeugt. Diese verbirgt sich anschließend im …\.pio\build\STM32F103RC_creality Unterverzeichnis. OK. Ich hab da schon mal was vorbereitet und alles hier in eine zip-Datei gepackt. Die bin-Datei im Anschluß auf die SD-Karte schieben und damit den Drucker füttern.
Nun ist also Marlin 2.1.2 auf dem Drucker und wir wollen sehen, was wir nun mit dem Input Shaping auf dem Drucker anstellen können. Der Blick in die Erklärung von Marlin zum Thema ist nicht unbedingt sehr ausführlich. Ich kopiere das einfach nur mal hier rein.
M593 – Input Shaping2.1.2 Bewegung Abrufen oder Festlegen von Eingabe-Shaping-Parametern INPUT_SHAPING_[XY] Verwandte Codes: BeschreibungDieser G-Code bezieht sich auf den integrierten ZV Input Shaper von Marlin. Für den Fixed-Time Motion Planner Input Shaper siehe Stellen Sie den Dämpfungsfaktor und/oder die Frequenz (in Hertz) für Achsen ein, die dies unterstützen. Verwenden Sie diese Option ohne Parameter, um die aktuellen Einstellungen zu melden. Input Shaper TuningEs ist nicht immer einfach, einen Beschleunigungsmesser an die meisten Druckerplatinen anzuschließen, daher bietet Marlin keine beschleunigerbasierte Abstimmung. Wenn Sie diese Informationen haben, können Sie sie verwenden. Der einfachste Weg, die Eingabeformung zu optimieren, besteht jedoch darin, einen Klingelturm zu drucken, der einen Frequenzbereich durchläuft, und dann das Aussehen des Klingelturms zu untersuchen, um die besten Frequenzen für jede Achse auszuwählen. Abrufen des TestmodellsLaden Sie die Ringing Tower STL herunter, die Sie schneiden und für den Drucktest verwenden. Bei einem CoreXY-Drucker sollten Sie das Modell um 45 Grad drehen, wodurch die A- und B-Komponenten des Bewegungssystems isoliert werden. Vorbereiten des DatenschnittsVerwenden Sie einen Datenschnitt, der benutzerdefinierte G-Code-Makros für den Ebenenwechsel bereitstellt. Zum Beispiel können Sie Kiri:Moto öffnen oder Prusa Slicer herunterladen. Wenn Sie Cura verwenden, müssen Sie das Post-Processing-Plugin aus dem Cura Marketplace installieren und ein benutzerdefiniertes Skript verwenden.
Schneiden und DruckenSchneiden und drucken Sie den Tower mit einer Schichthöhe von 0,2 mm und der höchsten angemessenen Geschwindigkeit. Wenn Sie die Ergebnisse untersuchen, sollte es offensichtlich sein, wo das Klingeln auf jeder Achse am stärksten reduziert wird. Um den Hz-Wert für eine bestimmte Z-Höhe zu erhalten, verwenden Sie die Formel . Analysieren Sie das ErgebnisMessen Sie die Höhe der am besten aussehenden Ebene, dividieren Sie durch die Ebenenhöhe und ziehen Sie zwei Ebenen ab. Zum Beispiel:
Weitere RessourcenTH3D Studio hat einen Input-Shaper-Rechner erstellt, mit dem Sie den benötigten Slicer-G-Code abrufen und den Hz-Wert basierend auf den am besten aussehenden Ebenen berechnen können. Verwendung
Parameter
|
Alles verstanden? OK. Etwas langsamer bitte. Worum geht es hier? Bewegungen oder besser die Beschleunigungen in der Bewegung verursachen Schwingungen. Diese Schwingung überträgt sich auf das System und am Ende auf unseren Druck. Im 3D-Druck Ringing genannt. Was kann ich dagegen unternehmen? Schwingungen vermeiden durch langsamen Druck, steifen Drucker oder ausgeklügelte Beschleunigung. Aber bevor wir überhaupt über Input Shaping nachdenken, muß der Drucker perfekt ausgerichtet und eingestellt werden. Zu glauben, Input Shaping könne zaubern und aus einem schlecht ausgerichteten und eingestellten Drucker plötzlich einen Wunderdrucker zaubern, weit gefehlt. Eine Aussage zu den störenden Schwingungen ist nur bei perfekter Einstellung möglich. Der Testkörper muß mit entsprechend hoher Geschwindigkeit gedruckt werden, um überhaupt eine Aussage über diese Schwingungen zu erhalten und dann soll dieser Testkörper nicht beim Druck vom Druckbett fliegen. Wir benötigen dazu den Ringing Tower als stl-Modell und einen Slicer. Da jeder hier Internet haben sollte nehmen wir mal Kiri:Moto. Ist für diesen Zweck auch deutlich besser geeignet als Cura. |
Ender-5 ist in den Druckereistellungen enthalten und kann auch schnell angepaßt werden. Zudem wird unter GCode Macros > Ebene [M593 F{(layer < 2 ? 0 : 15 + 45.0 * (layer – 2) / 297)} ; Hz Input Shaping Test] eingefügt.
Schichthöhe sollte 0,2mm betragen. Als Typ für die Füllung wird vase aktiviert. Die Geschwindigkeit sollte so hoch wie möglich gewählt werden, um auch einen Effekt zu erkennen. |
Im Anschluß wird gesliced, der gCode gespeichert und ausgedruckt. Wenn Ihr dabei kein klares Ergebnis bekommt, dann bitte nicht weinen! Es sagt eher das Gegenteil von schlecht aus. Dann ist die Geschwindigkeit nicht hoch genug, das System in Schwingungen zu versetzen. Geht mir ausgerechnet mit diesem Drucker gerade so. Ich werde die Maximalwerte in der Firmware weiter hoch setzen und erneut testen, in der Hoffnung Euch dann hier einen aussagekräftigen Druck präsentieren zu können. Die Höhe mit dem besten Ergebnis geht dann in die Berechnung ein. Die Zuordnung für X und Y seht Ihr am Testkörper. Also nicht den Körper beim slicen verdrehen! Die Formel findet Ihr oben im Spoiler. Die Höhe Z wird dazu in diese Formel [0.15 + 45 * (z / 0.2 - 2) / 297
] eingesetzt. Oder tragt es in das Formular auf der Seite von th3dstudio ein. Zum Abschluß wird der Wert mit M593 X F[Wert in Herz] und M593 Y F[Wert in Herz] eingegeben und mit M500 abgespeichert.
Letzte Anmerkung. Im Moment ist das Input Shaping von Marlin noch als experimentell gekennzeichnet. Also wenn da mal was nicht so ganz funktioniert wie erwartet… Das Ende der Fahnenstange ist damit noch nicht erreicht. Wie bereits in der Erklärung von Marlin zu lesen, spielt das Input Shaping sehr eng mit Linear Advance Factor zusammen. Teilt gerne Eure Erfahrungen mit uns im Forum. FF beim Ausprobieren!
Moin Uwe, erstmal vielen dank für deine großartige Arbeit.
Ich wollte dich fragen ob du die Einstellungen in Marlin für Sovol SV05 für mich anpassen würdest, ich bekomme das mit Visual Studio Code irgendwie nicht hin?
Ich würde gerne mal die Hotend Temperatur auf 300 Grad (Ich habe Vollmetall Extruder) erhöhen und wenn der Drucke Code G29 ausführt nicht soweit jedes mal nach unten fährt 5mm würde vollkommen reichen. Der Rest passt sehr gut.
Gruß Dennis
Ich sag es mal wie es ist. Den Source von Sovol hab ich nur minimal geändert. Ich hab das im Beitrag zum SV05 ja geschrieben. Da wurde etwas der Druckbereich erhöht und der Filamentsensor aktiviert. Die Hauptarbeit war die Anpassung an die aktuelle Marlin-Version um das IS aktivieren zu können. Dort hab ich auch den geänderten Source zum Download abgelegt. Nun sind da wieder einige Monate ins Land gezogen und Marlin wird fast täglich weiterentwickelt. Das Problem sind nicht die kleinen Änderungen aus Deiner Aufzählung. Es sind die ständigen Änderungen im Marlin, die da einen irren Aufwand erzeugen. Da geht schon locker ein Nachmittag und ein Abend für drauf und ich kann das mit meinem Drucker dann nicht testen. Darum kann ich Dir hier nochmal den Source verlinken aber dann mußt Du leider selber damit klarkommen. Zumal ich da an den 5 oder 10mm beim Leveln ohnehin nicht rum machen würde. Der Drucker wird einmal im halben Jahr gelevelt. Da kommt es nun auf 1-2 min mehr nicht an. Für Fragen verwende unser Forum. Da lesen noch paar Leute mehr und können helfen.
Ein angepaßtes Marlin 2.1.2 mit IS für den Sovol SV01-Pro findet Ihr hier.
Ich hab es bereits im Forum mitgeteilt. Das Experiment am SV05 ist beendet. Mit 250mm/s und max Acceleration von 10000 ist es mir an dem Drucker nicht gelungen, den Drucker in Schwingungen zu versetzen. Nichts da zum messen und berechnen mit der Formel. Um es mal so zu sagen, mit dem Hotend ist ein schnellerer Druck nicht sinnvoll. Das Hotend bekommt auch keinen geschlossenen Boden mit 250 mm/s mehr hin. Ob nun mit oder ohne InputShaping hat keinen Einfluß auf das Druckbild. Spricht für den Drucker aber ich hab leider nichts zum Vorzeigen. Vielleicht wiederhole ich das noch mit einem Bettschubser.
Hallo Uwe, ich kann es inhaltlich noch nicht beurteilen, sehe aber, dass Du einen Haufen Arbeit hattest. Danke dafür! 🙂
Danke Euch! Mir geht es damit wie Dir Fritz! Wenn ich das nicht aufschreibe, dann weiß ich das schon bald nicht mehr. Also auch viel Eigennutz. Was es bringt, sehe ich auch erst, wenn der Testdruck nicht mehr einfach nur glatt und sauber ist. Aber damit hatte 3DJake wohl auch ein Problem und hat nen ganzen Sack voll gedruckt. Das kann beim SV05 und Ender-5 noch deutlich schlimmer werden. Das Bett bewegt sich ja nur in Z-Richtung. Vielleicht gibt mir aber Thilo noch nen Tipp, ab welchen Werten ich da mit einer Änderung rechnen darf.
Hut ab Uwe. Sehr gut erklärt.
Jetzt weiß ich auch was das ist.