Seite 1 von 1

Pressure Advance – wirksam oder unnötig?

Verfasst: Do 21. Nov 2024, 19:11
von rf1k_mjh11
Die mich hier kennen, werden richtigerweise annehmen, dass das hier wieder lang wird. Gratulation zum prophetischen Weitblick. Ich mache es so kurz wie möglich. :scham:

Hinweis: Alle Bilder und Zeichnungen wurden so dargestellt, als ob von links nach rechts gedruckt wurde.

Ich stecke den Beitrag hier hinein, unter 'Klipper', obwohl Marlin genauso betroffen ist.

Schade, dass mhier nicht mehr im Forum tätig ist. Dieser Thread hätte ihn interessiert.

Es geht um eine Funktionalität von Klipper, die sich Pressure Advance nennt. Damit sollten gedruckte Ecken genauer werden, bzw. schöner aussehen. Eine anschauliche Beschreibung der Theorie findet sich hier (leider auf Englisch). User mhier hat mehrfach darüber geschrieben, z.B. hier, allerdings in einem Thread, der ein anderes Problem ansprach (was mhier nicht einsehen wollte, leider).
Klipper geht das Problem über den Weg der Firmware an. Marlin (eine Firmware) hat was ähnliches. Es nennt sich dort Linear Advance. Diverse Slicer versuchen das Problem über den GCode zu eliminieren oder reduzieren. PrusaSlicer und SuperSlicer nennen es “Pressure equalizer“.
Aber die Idee/das Prinzip hinter Pressure Advance lässt sich nicht leugnen. Bei einem FDM/FFF 3D Drucker, wie es die RFx000 Drucker nun mal sind, ist das Extrusionssystem elastisch und Hysterese-behaftet (das heißt, es reagiert verzögert/träge). Drucker mit Bowdensystem sind noch elastischer und träger.
Einfach gesagt, das extrudierte Material, dass aus der Düse kommt, passt nicht immer exakt zur (Relativ-) Bewegung der Düse zum Druckobjekt (besonders während Geschwindigkeitsänderungen, wie beim Beschleunigen und Abbremsen). Diese Abweichung (wenn die Extrusion nicht zur augenblicklichen Geschwindigkeit passt) führt zu einer ungewollten Änderung der Raupenbreite – diese wird breiter oder schmäler, je nachdem. Am besten die anschauliche Beschreibung (im Link, oben) ansehen.

Hier eine Darstellung einer extrudierten Raupe von mir:
BeadAcc2PressAdv.jpg
Das Ende der Raupe weicht ein wenig von den im Netz vorhandenen Darstellungen ab, folgt aber der beschriebenen Logik.
Die Raupe wird im Bild von links nach rechts gedruckt. Die blaue Linie oberhalb, stellt die Düsengeschwindigkeit dar (im Verhältnis zum Druckobjekt, bzw. der Raupe!). Am Anfang beschleunigt es bis auf die maximale Druckgeschwindigkeit, bleibt dort bis die Abbremsphase beginnt, worauf die Geschwindigkeit wieder auf null zurückgeht.
Ein weiteres Bild einer Raupe, aus der Marlin Beschreibung von Linear Advance, sieht so aus:
BeadAcc2Marlin_LinearAdvance.jpg
(Bild von: Marlin Dokumentation zu Linear Advance)
Der Unterschied beim ersten Übergang ist jedoch, dass nicht von null weg die Änderung stattfindet, sondern von einer langsamen Geschwindigkeit aus beschleunigt wird.

Die Pressure Advance Leute vertreten die folgende Logik:
Beschleunigt die Düse, ist die Raupe verjüngt (da 'unterversorgt'). Bremst die Düse ab, ist sie verdickt (mit Material 'überversorgt'). Natürlich nur, wenn OHNE Pressure Advance gedruckt wird.

Bei jeder Ecke geschieht das gleiche. Die Geschwindigkeit ist anfangs null, dann eine Beschleunigungsphase, Konstantfahrtphase und Abbremsphase wieder bis auf null.
Somit müsste, dem Pressure Advance Modell nach, eine Ecke so aussehen:
BeadAroundCornerAcc2PressAdv.jpg
So ein ähnliches Bild ist in diesem YouTube-Video bei 2:30 zu sehen. Das Video behandelt hier wieder Marlins ‘Linear Advance‘ Funktion, die aber dasselbe Problem behandelt wie Pressure Advance unter Klipper.
Da (zumindest meiner Meinung nach) den Ecken ein weiteres Problem anhaftet (siehe Thread “Unsaubere Ecken beim Drucken“), scheue ich mich, das Phänomen anhand einer Ecke zu beurteilen.

Da kam mir die Idee, eine Ecke entlang einer Geraden zu simulieren.
Hä?!! Wie denn das? :dash:
Wie sich die Düse bewegt
Der Einfachheit halber sehen wir alles aus der Sicht des Druckobjekts: vom Objekt aus gesehen bewegt sich immer nur die Düse. Das ist wichtig, denn sonst müsste man unterscheiden, ob sich die Düse auf dem X-Schlitten bewegt, oder das Bett (samt Druckobjekt) in Y Richtung. Anders gesagt, wenn ich schreibe, die Düse fährt, könnte sich in Wirklichkeit das Druckobjekt bewegen, weil sich das Bett bewegt. Entscheidend ist einfach, dass sich die Düse aus der Sicht des Druckobjekts/der Raupe bewegt.
Wenn man sich den Bewegungsablauf an einer Ecke überlegt, wird es nicht mehr so schwer, sich vorzustellen, eine Ecke in eine Gerade ‘um zu biegen‘.
Wenn die Düse Richtung Ecke rauscht, muss es davor abbremsen, damit an der Ecke die Geschwindigkeit exakt Null ist. Nach der Ecke (dem Stillstand) beschleunigt die Düse in die neue Richtung (oder beim RFx000 je nach Richtung beschleunigt/verzögert das Bett). Laut der Theorie von Pressure Advance sollen diese Beschleunigungsphasen (Hinweis: auch das Abbremsen ist eine Beschleunigung, allerdings eine negative), bzw. die mangelhafte Synchronisation der Extrusion, die Quelle des Übels sein. Ein Übel, dass Pressure Advance und Linear Advance zu bekämpfen versuchen.
Damit müsste, laut dem Pressure Advance Modell eine ‘geradegebogene‘ Ecke so aussehen:
StraightCornerAcc2PresAdv_2.jpg
 

Jetzt gilt es, dieses Bild der Theorie mit jenes der Praxis zu vergleichen.

Also, um so eine Ecke 'gerade zu biegen', bedarf es einfach einer Korrektur der neuen Richtung, damit diese in die ursprüngliche Richtung weist.

Das ist einfach gedacht, klappt aber nicht ganz so, denn, gibt es keine Richtungsänderung, bremst die Düse bei der Fahrt gar nicht auf null und fährt einfach ungebremst weiter. Dafür sorgt die Firmware.

Wir müssen den Drucker daher dazu bringen, unbedingt mit der Geschwindigkeit auf null zu gehen. OK, erzwingen wir einfach eine Geschwindigkeit von null indem wir dem Drucker eine Pause vorschreiben. Gedacht, getan. :developer:

Ich nahm einfach ein Quader mit Seitenlänge 100mm und erzwang, per editiertem GCode, nach jeweils der halben Strecke eine Pause von 0.004 Sekunden (4 Millisekunden) mittels “G4 P4“. Dann bleibt die Düse tatsächlich kurz stehen. Das ist allerdings noch zu wenig für den vollständigen Test, bzw. einer ordentlichen Raupe. Man muss auch den E-Wert (Extrusionswert) halbieren und jedem Streckenabschnitt getrennt zuordnen.

Hier ein Beispiel des editierten GCodes (entschuldigt die Kommazahlen, da ist der Slicer schuld):

Wichtiger Hinweis: Die Düse steht zu Beginn am Punkt: X109.443 Y129.443

Die ursprüngliche GCodezeile:
G1 X10.557 Y129.443 E17.46247
wird zu insgesamt diese 4 Zeilen:
   G1 X60.000 Y129.443 E15.8868 ; neue, halbierte Strecke, mit halbem E (kommt als erstes)
   M400 ; Warten bis Bewegung abgeschlossen (sicherheitshalber, unbekannt, ob es zwingend nötig ist)
   G4 P4 ; Warte 4 Millisekunden bevor weiter gefahren wird (erzwinge eine Pause)
   G1 X10.557 Y129.443 E17.46247 ; Originalzeile wird zur zweiten, halben Strecke, mit dem Rest von E

Diese Übung machte ich mithilfe eines Tabellenkalkulationsprogramms, da die Koordinaten und auch E-Werte mehrere Nachkommastellen aufweisen (und ich leicht legasthenisch bin). Es wurden alle 4 Seiten eines Layers gemacht, alle drei Perimeter (Umrisse). Danach war es ein Einfaches, diese Zeilen auf die diversen Layer zu kopieren, da die X- und Y-Koordinaten dort alle gleich sind. Wichtig: Auch die E-Werte sind dort alle gleich, da Slic3r, PrusaSlicer und SuperSlicer alle den E-Wert beim Layerwechsel wieder auf Null setzen (zumindest wenn man Absolutwerte für die Extrusion einsetzt).

Die Ausgangslage:
Ich setzte im Slicer den Quader (100x100x11mm) genau auf eine exakte mm-Position (die Mitte des Quaders lag bei X=60, Y=80). Ich editierte das übliche Profil stark ab: kein Brim, keine Schürze, kein Unterschied zwischen erstem und der folgenden Layer, 3 Perimeter (3 Umrisse), kein Boden, keine Füllung und keine Decklage. Dadurch wurde beim Slicen aus dem Quader bloß vier senkrechte Wände mit einer Dicke von 3 Raupenbreiten. So:
SquareSlab_sliced.jpg
Ebenso wurden sonstige Feinheiten wie Elefantenfuß, 'Coast-At-End', Z-Hop, und wie sie sonst alle heißen, deaktiviert damit möglichst einfacher GCode entsteht.

Als Druckgeschwindigkeit wurden 60mm/s vorgegeben. Layerhöhe war 0.2mm, Düse 0.6mm. Raupenbreite für alle Layer und Perimeterarten gleich.

Die Anpassungen am Profil dienten primär dazu, dass ich die entsprechenden GCode Bereiche leichter finden und ändern kann. Nebenbei wird sichergestellt, dass der erste Layer sich nicht von den folgenden Layer unterscheidet (Layerhöhe, Raupenbreite, usw.).
Den erzeugten GCode öffnete ich in einem Editor, errechnete die neuen Koordinaten- und E-Werte mittels Tabellenkalkulation und änderte die Zeilen entsprechend.

Die ersten Versuche machte ich im Trockenlauf-Modus ('Dry Run'), wo kein Material extrudiert wird. Schließlich war ich nicht sicher, ob ich mit dem Editieren des GCodes nicht einen kapitalen Bock geschossen hätte.

Danach wurde mehrmals der Quader gedruckt. Für die ersten Drucke verwendete ich noch eine Pause von 0.033 Sekunden, später wurde das auf 0.004 reduziert. Ebenso wurden unterschiedliche Beschleunigungswerte verwendet, von 100 bis zu 4000mm/s².
Repetier-Host, Dry Run und Beschleunigungswerte
Während dem Testen stieß ich auf eine Unzulänglichkeit vom Trockenlauf-Modus von Repetier-Host. Da der Versuch Änderungen im Druckbild aufzeigen sollte, kümmerte ich mich nie um die Beschleunigungswerte der Leerfahrt-Bewegungen. Diesen Wert ließ ich bei 5000mm/s². Leider verwendet Repetier-Host (oder ist es die Firmware des Druckers?) den Beschleunigungswert für Leerfahrten IMMER im Dry Run (Trockenlauf-)Modus. Wenn ich also den Beschleunigungswert fürs Drucken änderte, bemerkte man im Trockenlauf keine Änderung. Ich musste mich damit behelfen, indem ich das Filament entfernte und eine Temperatur von 110° einstellte, damit der Extrudermotor sich drehte und der Beschleunigungswert fürs Drucken zum Tragen kam (und ich aber kein Filament unnötig vergeudete).
Die Druckergebnisse zeigten, dass die Annahmen von Pressure Advance begründet sind – aber scheinbar nicht alles abdecken, zumindest nicht korrekt. Ich werde nicht die Pressure Advance Geschichte nochmals wiedergeben (verwendet den Link oben).

 *  Jedenfalls zeigt sich ein stetiger Anstieg der Raupenbreite kurz vor dem ‘Pausepunkt‘, ungefähr über die Distanz, die der Verzögerung entspricht. Dieses Verhalten entspricht der 'Pressure Advance' Annahme.
 *  Andererseits ergibt sich eine stetige Abnahme der Raupenbreite über dieselbe Distanz, während der Beschleunigung. Dieses Bild entspricht nicht dem, wie es sich die Pressure Advance und Linear Advance Leute vorstellen (siehe Bild oben, "'geradegebogene Ecke', mit Pause").

Das Bild meiner gedruckten Muster sieht eher so aus (Druckrichtung von links nach rechts):
StraightCornerPrinted.jpg
Zwei deutliche Unterschiede werden offensichtlich. Einmal eine kleine zusätzliche Beule an der Stelle, wo die Düse kurz stehen bleibt. Zweitens gibt es, nach dem neuerlichen 'Losfahren', keine anfangs verjüngte Raupe, die zunehmend breiter wird, sondern eine überbreite Raupe, die sich langsam wieder zur Standardbreite verjüngt. Eine extrem kurze, deutliche Einfallstelle ist unmittelbar nach der Beule sichtbar. Diese Einfallstelle steht, längenmäßig, in keinem Verhältnis zur Beschleunigungsstrecke und hat vermutlich nichts damit zu tun, und darf daher meiner Meinung nach nicht als Bestätigung der 'Pressure Advance' Annahmen gelten.

Zuerst dachte ich, die Beule käme von einer zu langen Pause (die ersten Drucke hatten noch eine Pause von 0.033s). Die Pause reduzierte ich daher auf 0.004s, ohne dass sich an der Beule optisch viel veränderte. Es war also kaum ein Unterschied bemerkbar, obwohl die lange Pause 8x so lang war wie die kürzere.
Hier ein Bild mit zwei Druckobjekten, beide mit 4000mm/s², das untere mit 4ms Pause, das obere mit 33ms. Nur ein minimaler Unterschied.
BulgeComparison_33ms_v_4ms_.jpg
Übrigens, die Pause von 0.033s ist schon sehr kurz und ist sogar kürzer als die Zeit, die ein einzelnes Bild/Frame (bei PAL-Fernsehen) am Bildschirm erscheint (das wären 0.04s). Daher merkt man beim Beobachten das Stehenbleiben nicht wirklich, sondern sieht nur eine Verlangsamung und Beschleunigung der Düse. Das Auge erfasst diesen kurzen Augenblick des Stillstands einfach nicht richtig (zumindest meine Augen tun es nicht).

Ich würde gerne Bilder der Druckproben hier hineinstellen, aber die Zu- und Abnahme der Raupenbreite ist derart subtil, dass es noch viel, viel schwerer einzufangen ist, wie das Wellenmuster durch das Eiern der Kugelgewindespindeln. Der Dippel (die Beule, Pickel, usw.) ist viel deutlicher zu sehen als die Breitenänderung. Da sieht man 2 Beispiele oben. Der Dippel steht auch deutlich hervor. Ebenso bildet sich nach der Beule eine recht deutliche Einfallstelle. Diese Einfallstelle ist aber sehr kurz, nur ungefähr die halbe Dippelbreite. Den genauen Grund der Einfallstelle habe ich mir noch nicht erarbeitet, aber Theorien dazu schon. Jedenfalls hat die Einfallstelle wenig oder nichts mit dem Modell von ‘Pressure Advance‘ zu tun, da sie viel zu kurz ist. Bei 100mm/s² müsste die Einfallstelle über 10mm lang sein. Dabei ist sie beinahe gleich lang/groß wie bei 4000mm/s².
In den folgenden zwei Bildern versuche ich die Einfallstelle optisch ein wenig hervor zu heben indem ich mit einer Lampe ganz flach von der Seite hin leuchte. Die Beule, oder der Dippel, wirft einen Schatten wenn das Licht so flach einstrahlt. Von einer Richtung beleuchtet, sieht man zwei Schatten, eines stammt von der Beule und eines von der Einfallstelle. Kommt das Licht aus der anderen Richtung, sieht man nur einen Schatten – vom Dippel, der dort hinfällt, wo die Einfallstelle ist.
2Shadows.jpg
1Shadow.jpg
Beule sowie Einfallstelle werden deutlicher, je höher die Beschleunigung ist, aber nicht linear (sonst müsste die Beule bei 4000mm/s² 40x so groß sein wie die bei 100mm/s²). Die Dauer der Pause (33ms oder 4ms) hat nur einen geringen Einfluss auf die Beule.
Hier ein Bild, mit einem billigen USB-Mikroskop aufgenommen. Man kann die Beule und die Einfallstelle erkennen. Die allmähliche Verbreiterung der Raupe kaum oder gar nicht.
Closeup.jpg
In der Tabellenkalkulation ließ ich mir auch ausrechnen, wie lange es dauert, bis, mit einer Beschleunigung ‘x‘, die vorgegebene Druckgeschwindigkeit von 60mm/s erreicht wird, ebenso die dazu nötige Distanz.

Bei 4000mm/s² sind diese Werte schon sehr klein: nach nur 0.015s, bzw. 0.45mm ist die Düse 'schon auf 60'.
Bei gemütlichen 100mm/s² dauert es schon 0.6s, bzw. 18mm, bis die Düse ihre Endgeschwindigkeit erreicht hat.

Hoffentlich habe ich mich da nicht verrechnet (wenn ja, dann war gewiss die Tabellenkalkulation schuld :oops: ).

Optisch merkt man bei 4000mm/s² keine allmähliche Verdickung der Raupenbreite – vermutlich, da diese in nur 0.45mm abgeschlossen wäre – bei so wenig Platz nimmt schon die Beule und die Einfallsstelle das meiste davon weg. Bei 300mm/s² bilde ich mir ein, eine zunehmende Verdickung/Verjüngung erkennen zu können, das sich über eine Länge von 4-5mm erstreckt (laut Berechnung wäre die Beschleunigung nach 6mm vorbei – das kommt also hin). Bei 100mm/s² wird es schon sehr schwer, den Anfang der Dickenzunahme, bzw. das Ende der Verjüngung zu erkennen, da diese extrem subtil ist und (laut Berechnung) über eine Länge von jeweils 16mm stattfinden sollte – aber ich bilde mir ein, etwas vage erkennen zu können, so etwa über eine Länge von 10-12mm.

Zusammenfassung:

Das Modell auf das Pressure Advance, bzw. Linear Advance aufbauen, stimmt nicht völlig mit dem beobachteten Druckergebnis überein (zumindest nicht mit meinen Druckergebnissen). Möglicherweise schaffen es beide Methoden daher nicht, das Problem zu beseitigen, auf die sie zielen.

Der Vollständigkeit halber möchte ich auch sagen, dass der Rechenfehler, unter dem fast alle Slicer leiden (siehe wieder hier) mit diesem Phänomen in keinem direkten Zusammenhang steht. In dem verlinkten Thread ging ich davon aus, dass der Rechenfehler dazu beitragen könnte. Inzwischen gehe ich davon aus, dass, falls es einen Beitrag gäbe, dieser verschwindend klein wäre (diese Meinung vertrat mhier schon früher, glaube ich). (Auch konnte ich bisher mit Superslicer keine Verbesserung an den Ecken erkennen, trotz ‘großteils korrigierter Ecken-Berechnung‘ des Slicers.)

Interessant wäre, ob andere auch eine Theorie haben, wieso das Aussehen der Raupe so ist, wie es ist, und nicht, wie das Modell von Pressure Advance es vorhersagt. In ein oder zwei Tagen stelle ich meine Theorie hier hinein.

Zum Schluss noch einen Dank an diejenigen, die bis hierher durchgehalten haben. Alle Achtung. Ihr habt euch ein Bier/Kaffee verdient. :good:

mjh11

Re: Pressure Advance – wirksam oder unnötig?

Verfasst: Do 21. Nov 2024, 22:40
von DennisNochmal
Hallo,

meine Antwort wird sehr einfach sein.
Mit dem RFxxx und Klipper sind die Qualitäten und richtig eingestellten Pressure Advance einfach WAU.

Gruß

Dennis