Seite 1 von 2

Digit-Flow-Compensation für klipper

Verfasst: Di 7. Dez 2021, 15:36
von nikibalboa
Servus an alle,

Ich habe die Digit-Flow-Compensation M3911 für klipper nachgebaut.
Dieser soll bei überschreiten des minimal Werts im Verhältnis zum maximal Wert der digits den Speed und Flow reduzieren um mögliche Probleme während des Drucks zu minimieren.

Der Befehl für klipper heißt SENSE_PRESSURE mit den Parametern FORCE_MIN das ist der Zeitpunkt wo die Regelung beginnt bis zu
FORCE_MAX, wird dieser Wert überstiegen wird der maximal eingestellte Wert geregelt.

Mit MAX_FLOW_OFFSET und MAX_SPEED_OFFSET wird der maximal Wert angegeben und prozentuel nachgeregelt, das ganze greift aber erst ab dem zweiten Layer ausser das z-offset hat noch einen negativen Wert. Das könnte man aber sicherlich noch anpassen.

Im wiki wird das ganze bei den mod gcodes genau beschrieben.

Der mod muss nach kopieren ins extras Verzeichnis von klipper mit [sense_pressure]
und Eingabe der Default-Parametern in der config aktiviert werden und dann per oben beschrieben Befehl im Start code des slicers aufgerufen werden.
Die Endung .txt ist natürlich auf .py zu ändern.

Da ich ein Freizeit Programmierer bin und der mod erst unter klipper weiter getestet werden muss kann ich für die korrekte Funktion nicht garantieren.

Lg Niki

Re: Digit-Flow-Compensation für klipper

Verfasst: Di 7. Dez 2021, 17:20
von mhier
Erstmal danke für deine Hilfe! Hier zeigt sich die große Stärke von Klipper: man kann mit relativ wenig Aufwand einen Algorithmus dazu basteln, ohne zig Details in der Firmware zu kennnen.

Ich habe aber noch immer so meine Schwierigkeiten mit dem Gedanken, den Flow in Abhängigkeit des Drucks zu verändern. Das soll nicht heißen, dass ich nicht helfe, das Feature in Klipper zu integrieren, aber ich würde gerne die Hintergründe besser verstehen, dann klappt's meist auch mit der Implementierung besser. Ich stelle deshalb hier noch mal in etwa die Fragen, die ich nikibalboa schon gestellt habe, allerdings etwas weitergehend und schon seine Antworten teils berücksichtigend.

Für mich ist der Flow eine feste Kalibrationsgröße, an dem ich nicht drehe. Idealerweise ist der Extruder so eingestellt, dass die geförderte Materialmenge (vom Volumen her) genau so groß ist, wie vom Slicer vorhergesehen. Wenn man jetzt am Flow-Faktor dreht, stimmt das ja nicht mehr. Ist dieser Grundsatz z.B. bei bestimmten Materialien nicht mehr exakt gegeben? Wenn ja, warum?

Sehr gut nachvollziehen kann ich hingegen die Geschwindigkeitsregelung. Da würde ich aber vielleicht versuchen, einen etwas smarteren Algorithmus zu finden, der während des Druckes die maximale (!) Geschwindigkeit reduziert, wenn ein gewisser Druck überschritten wurde. Aus meiner Sicht wäre es nicht nötig, die niedrigeren Geschwindigkeiten ebenfalls zu reduzieren, denn es geht doch nur darum, den Druck nicht zu groß werden zu lassen, und der ist nun mal halbwegs proportional zur Geschwindigkeit. Oder denke ich hier wieder zu einfach?

Re: Digit-Flow-Compensation für klipper

Verfasst: Di 7. Dez 2021, 18:29
von AtlonXP
Hier eine Stellungnahme vom Erfinder von Digital Flow.

Natürlich ist es erstrebenswert immer die gleiche Menge an Material zu fördern.
Was ist aber, wenn sich andere Parameter ändern während des Druckens?

- Bei warping zum Beispiel:
Das Material kommt der Düse näher.
Als Ursache könnt das lösen des Druckteils vom Bett sein.
Auch stellt sich Material mit hoher Schrumpfung gerne auf, wenn man es mit den Überhängen übertreibt.
Oben kühlt das Material mehr ab, wie in dem Bereich wo es fest am unteren Layer anhaftet,
Es gibt hier sozusagen einen Stehkragen.

Ein reduzieren der Geschwindigkeit bringt hier nur einen kleinen Vorteil.
Tatsächlich muss der Flow runter weil der Teile <-> Düsenspalt immer kleiner wird.
Ansonsten Fräst irgendwann das Förderritzel, oder wie bei deinem gering eingestellten Motorstrom (da macht es knack) und die Layerhaftung passt nicht mehr, da auf einmal zu wenig Material vorhanden ist.

- Fehleinstellungen im Slicer (Anfängerfehler) können auch kompensiert werden.

- Nibbels sah seinen Vorteil, bei dem verdrucken von Flex Material.
Wenn sich das Material bei zu hoher Geschwindigkeit sich anfängt zu stauchen und die Digits darum steigen, hilft ein reduzieren der Geschwindigkeit und/oder des Flows.

Für mich ist das einfach eine feine Sache.
Wenn ich den Beitrag über meinen Kaffee Kannen Deckel aus PP veröffentliche wirst du es in der Praxis sehen können.

Wichtig ist, dass man wirklich einen Dynamischen Bereich definieren kann und man dort festlegen kann, was passieren soll.
So wie wir es in unser Community FW haben, ist es genial gelöst!

Mancher Druck kann mit diesem Toll automatisch (wenn richtig konfiguriert) gerettet werden.


LG AtlonXP

Re: Digit-Flow-Compensation für klipper

Verfasst: Di 7. Dez 2021, 19:14
von rf1k_mjh11
Hallo mhier,

Aha! AtlonXP ist mir zuvorgekommen
mhier hat geschrieben:den Flow in Abhängigkeit des Drucks zu verändern
Auch ich habe gewisse Bedenken hier. Aber der Gedanke ist eindeutig nachvollziehbar für mich. Denn der Extrusion Multiplier ist ein launischer Geselle. Der ist Material-, Temperatur-, und Geschwindigkeitsabhängig.
Was der ursprüngliche Grund für einen eigenen Fördermengen-Faktor war, weiß ich nicht, dieser wurde aber schon sehr früh eingeführt (einmal mittels GCode änderbar, andererseits pro Filament schon im Voraus im Slicer wählbar). Dass der Faktor sich nicht 'festnageln' lässt, ist eine Folge des elastischen Systems der Förderung und des sich ändernden Schlupfs. Harte Materialien (z.B. PLA) verlangen häufig Faktoren nahe an 1.0. Etwas weichere Materialien (z.B. ABS) verlangen oft etwas mehr als 1.0 und sehr elastische Materialien (NinjaFlex oder TPUs mit Shore-Härten unter 90) verlangen (bei mir zumindest) deutlich höhere Werte (bei mir z.B. 1.18). Diese Schwankungen, die bereits im Profil des Materials vorgegeben werden, sind eine Folge des Antriebsystems, des Schlupfs und der Elastizität. Ein weicheres Material drückt sich weiter in das Rändelrad hinein und 'erzeugt' dadurch einen geringeren Teilkreisdurchmesser, was die Übersetzung beeinflusst. Dieser Unterschied lässt sich noch recht gut mittels Vorgabe im Profil bekämpfen.
Der Schlupf hingegen ist ein kontinuierliches, leichtes Nachgeben der 'Zähne', die in das Filament gepresst wurden (womit es quasi zu einer Zahnstange wird). Dieses Nachgeben ist Lastabhängig. Steigt die Last, geben die Zähne mehr nach. Hierbei sind flexible Filamente besonders arg, da sich eigentlich keine Zahnstange bildet, da das Material zu sehr nachgibt. Der Schlupf, trotz 'Zahnstangenprinzip' läuft in etwas so ab wie beim Autoreifen. Mehr Last, mehr Schlupf.
Das alles wurde mir sehr bewusst, als ich einmal meinen Extruder kalibrierte. Da kam User R3D3 recht schnell mit dem Argument, dass mein Messverfahren den Förderdruck vernachlässigte. Als ich dann unter 'realistischen Bedingungen' noch mal kalibrierte, war der Unterschied deutlich. Wobei 'realistisch' ein relativer Wert ist, wenn man sich alle eben vorgebrachten Argumente zu Gemüte führt. Drucke ich flotter, steigt der Widerstand, der Schlupf steigt ebenso. Druck ich mit niedrigerer Temperatur: kommt dasselbe heraus. Drucke ich mit einer kleineren Düse: wieder dasselbe.
Gut, Düsendurchmesser und Temperatur hat der User groß teils unter Kontrolle. Die Geschwindigkeit weniger, da der Slicer diesen gewöhnlich ändert (Perimeter statt Infill oder Support, erster Layer statt spätere Layer, und schließlich die Geschwindigkeit als Folge der Layerzeit).

Im Endeffekt lebt man also mit einem Durchschnittswert für den Extrusion Multiplier, der hoffentlich halbwegs passt.

Trotz dieser Tatsache, stimme ich mhier bei und würde nicht unbedingt am Extrusion Multiplier per Firmware-Automatik fummeln. Aber man kann in der Community FW diese Funktionalität ja ausschalten. Viele scheinen jedoch damit zufrieden zu sein (so wie ich mit der Conrad Version, ohne dieser Automatik).
mhier hat geschrieben:Für mich ist der Flow eine feste Kalibrationsgröße, an dem ich nicht drehe. Idealerweise ist der Extruder so eingestellt, dass die geförderte Materialmenge (vom Volumen her) genau so groß ist, wie vom Slicer vorhergesehen.
Richtig, theoretisch (siehe oben).
Ich selbst würde nur die Geschwindigkeit und/oder die Temperatur angreifen. Damit ließe sich derselbe Effekt erreichen. Und damit wird die vorgegebene Materialmenge nicht verändert. Nachteil der Temperaturänderung: diese Wirkung ist zeitlich deutlich verzögert (und: mit schlechten PID-Werten kann es eine Zeitlang ungewollte Überschwinger verursachen).

AtlonXP hat eben einen wichtigen Punkt aufgebracht (auf den ich auch ungefähr jetzt beim Schreiben gekommen wäre): Der Spalt zwischen Düse und Werkstück.
Steigt der Druck (im Schmelzraum), weicht die Düse ein klein wenig nach unten aus. Der Spalt wird dadurch kleiner (was leider auch ein weiteres Ansteigen des Drucks verursacht). Damit kommt man ein wenig in eine selbst-verstärkende Schleife.
Dass der Spalt durch Verzug (warping) sich verkleinern kann, kommt noch hinzu. Bloß, auch eine Reduzierung des Extrusion Multipliers hilft genauso wenig gegen den zu engen Spalt, wie eine Geschwindigkeits- oder Temperaturreduzierung helfen würde.
AtlonXP hat geschrieben:- Fehleinstellungen im Slicer (Anfängerfehler) können auch kompensiert werden.
Gewisse Fehleinstellungen lassen sich auf jeden Fall damit kompensieren.
Leider nicht alle (sonst hätten wir hier im Forum fast nichts zu tun! :woohoo: )

Möge COVID-19 Euch verschonen; Eure Lieben und Freunde ebenso!

mjh11

Re: Digit-Flow-Compensation für klipper

Verfasst: Di 7. Dez 2021, 22:42
von mhier
Danke für die Erklärungen! Ich will das ja auch gar nicht so sehr in Frage stellen, sondern verstehen - da habt ihr mir sehr geholfen :-) Ob ich das am Ende selbst nutzen werde, weiß ich noch nicht. Ich bin bislang immer sehr gut mit einem festen Kalibrations-Wert gefahren, allerdings habe ich sehr weiche Materialien wie TPU noch nicht gedruckt.

Nur ein kleiner Kommentar: Schlupf wird definitiv eine Rolle spielen, der Durchmesser des Ritzels ist aber wohl doch eher ziemlich konstant. Das Ritzel ist ja aus Alu. Die Riefen sind erstens nicht wahnsinnig tief, und zweitens drücken die sich bei mir auch schon bei PLA komplett ein. Mehr kann dann nicht passieren.

Was natürlich ebenfalls sein kann, dass das Material im Extruder gewalzt wird, so dass es sich in der Länge ausdehnt. In dem Fall würde oben z.B. 10mm Material in den Extruder hineingezogen und unten 11mm herauskommen, dafür etwas dünner. Wenn das passiert, wird sich die geförderte Länge wohl auf irgendwas dazwischen beziehen. Vermutlich meinst du das mit Elastizität, wobei das physikalisch eher eben gerade inelastisch ist (elastisch heißt, es geht wieder in die ursprüngliche Form zurück, wenn die Kraft weg ist) ;-)

Was definitiv keine Rolle spielen darf, ist die Stauchung des Materials zwischen Extruder und Hotend durch die Extrusionskraft. Dafür ist Pressure Advance zuständig. Das ließe sich evtl. auch irgendwie über die gemessene Kraft (statt der aus der Extrusionsgeschwindigkeit abgeschätzen Kraft, wie bei Pressure Advance üblich) machen, aber ich glaube nicht, dass das irgendwie genauer würde.

Ich schau mir den Code von nikibalboa demnächst noch mal genauer an, mit meinem Verständnis, was das Ganze jetzt genau soll. Ich werde mir auch noch mal etwas überlegen, wie man das Ganze vernünftig testen kann, und zwar ohne wirklich etwas zu drucken. Wenn man nur mit echten Drucks testet, läuft man immer Gefahr, dass einem andere Effekte unklare Ergebnisse liefern...

Re: Digit-Flow-Compensation für klipper

Verfasst: Mi 8. Dez 2021, 09:13
von nikibalboa
Bezüglich des ersten layers, da dürfte "max_z_height" die falsche Variable sein. Sobald sich die z-achse im positiven Bereich befindet wird nachgeregelt. Da muss ich noch einen anderen Parameter einbauen.

@AtlonXP, erstmal danke für die Erfindung des digital flow.
Sind eigentlich im Original-Code noch mehr Parameter eingeflossen so wie zum Beispiel von mhier genannt der maximal speed? Zur Zeit wird nämlich einfach im Verhältnis geregelt.

Bis auf die Gesichte mit dem ersten Layer dürfte das ganze funktionieren.
Da ich die Zeile für den ersten layer vom "sense-z-offset" von mhier abgeschaut habe :scham: , vermute ich das dort das Problem auch besteht.

Lg

Re: Digit-Flow-Compensation für klipper

Verfasst: Mi 8. Dez 2021, 09:34
von mhier
nikibalboa hat geschrieben:Da ich die Zeile für den ersten layer vom "sense-z-offset" von mhier abgeschaut habe :scham: , vermute ich das dort das Problem auch besteht.
Der sense-z-offset soll aber nur im ersten Layer agieren. Das ist sozusagen das Gegenstück für den ersten Layer. Wenn der Druck zu groß wird, ist der Abstand zwischen Bett und Düse zu gering und der Offset wird erhöht. Das soll die Nachlängung des Hotends kompensieren.

Re: Digit-Flow-Compensation für klipper

Verfasst: Mi 8. Dez 2021, 10:32
von nikibalboa
Ja weiß ich daher hab ich auch ">" max_z_height.
Da mein Druckbett teilweise negativ und positiv im ersten Layer ist gibt es eben Probleme. Wenn alles negativ ist passt alles.

Re: Digit-Flow-Compensation für klipper

Verfasst: Mi 8. Dez 2021, 11:01
von mhier
nikibalboa hat geschrieben:Da mein Druckbett teilweise negativ und positiv im ersten Layer ist gibt es eben Probleme. Wenn alles negativ ist passt alles.
Darauf kann man sich bei Klipper nicht verlassen, die "Konstruktion" ist hier etwas anders. Wenn man meiner Empfehlung aus der Doku folgt (https://github.com/RF1000community/klip ... -practises), ist Z=0 die Kontaktposition, bei der man den Z-Endstop über den Scan kalibriert hat, also z.B. bei X=Y=100mm. Denn im Gegensatz zur Community-Firmware haben wir keinen Z-Offset-Scan, sondern wir kalibrieren die Z-Endstop-Position. Es wäre großer Zufall, wenn das der höchste Punkt des Betts wäre. Deshalb sollte man immer davon ausgehen, dass das Mesh positive und negative Werte hat.

Ich denke, man sollte einfach auf die G-Code-Koordinaten schauen statt auf die Toolhead-Koordinaten. Die sind unabhängig von irgendwelchen Krümmungen im Bett. Die verschiedenen Koordinatensysteme in Klipper sind hier gut erklärt:

https://www.klipper3d.org/Code_Overview ... te-systems

Also einfach statt self.tool.get_position() das hier benutzen: self.gcode_move.last_position

Re: Digit-Flow-Compensation für klipper

Verfasst: Mi 8. Dez 2021, 14:45
von rf1k_mjh11
Hallo mhier,
mhier hat geschrieben:. ... , der Durchmesser des Ritzels ist aber wohl doch eher ziemlich konstant. Das Ritzel ist ja aus Alu.
Ja, der Durchmesser ist konstant. (Das Ritzel ist aus Stahl - und damit sogar 'noch konstanter' - Alu würde relativ rasch verschleißen). Es geht aber nicht um den Durchmesser des Ritzels, sondern um den Teilkreisdurchmesser des Zahnstangenantriebs, dass das Ritzel mit dem Filament bildet. Es handelt sich nicht um eine echte Zahnstange. Und der Teilkreisdurchmesser wird von der Eindringtiefe der Ritzel-'Zähne' beeinflusst. Werden diese tiefer in das Material gedrückt, reduziert sich der Teilkreis.
Gedankenhilfe
Stelle dir vor, das Filament wäre unendlich hart (oder wie aus Diamant). Das Ritzel würde demnach nur mit den Spitzen das Material fördern.
Pro Umdrehung des Ritzels würde 'Zahnspitzenabstand' mal 'Zähnezahl' gefördert werden (quasi entlang eines Polygons am Ritzelumfang). Jetzt denken wird uns eine Zahnstange mit dreieckigen Zähnen:
TriangleRack.jpg
In so einem Fall bewegt sich das Filament (die Zahnstange) 'Zahngrundabstand' mal 'Zähnezahl' pro Umdrehung weiter, was doch etwas weniger ist. Der echte Wert liegt irgendwo dazwischen und hängt eben davon ab, wie weit das Filament in den Zahngrund gedrückt wird.
ABS ist deutlich weicher als PLA und wird tiefer in die Zähne des Ritzels gedrückt. Viel wird es nicht sein, vielleicht nur 0.02-0.03mm mehr als das PLA hinein gedrückt wird. Bei 0.03mm ändert sich der Umfang des Teilkreises bereits mehr als 1%. Die Welt ist es nicht, aber immerhin.
mhier hat geschrieben:Was natürlich ebenfalls sein kann, dass das Material im Extruder gewalzt wird, so dass es sich in der Länge ausdehnt.
Guter Punkt :good: Das habe ich völlig übersehen.

Auch hier wird sich das ABS mehr längen als PLA. TPU hingegen kaum, da es sich primär elastisch verformt und nicht so sehr plastisch wie zum Beispiel ABS.
Die Längung durch das 'Walzen' wird teilweise durch die verminderte Fördermenge (als Folge des tieferen Eindringens in die Ritzel-'Zähne') aufgehoben. Unbekannt ist hier, welcher Wert überwiegt.
mhier hat geschrieben:Dafür ist Pressure Advance zuständig.
Ist das, was hier mit 'Pressure Advance' bezeichnet ist, das, was in RF1000.h mit #define USE_ADVANCE bezeichnet ist? Wenn ja, ist das bei mir aktiviert. Etwas später kommt ENABLE_QUADRATIC_ADVANCE, was nicht aktiv ist. Wenn das der Advance ist, der scheinbar Wunder wirken kann, streikt in dieser Hinsicht mein Drucker. Ich muss weiterhin mit Retract, usw. arbeiten.
RETRACT
mhier hat geschrieben:Retract ist mehr oder minder das Advance des armen Mannes :-P
Damit ist endgültig mein finanzieller Status allen bekannt. :weinen:
.
mhier hat geschrieben:Was definitiv keine Rolle spielen darf, ist die Stauchung des Materials zwischen Extruder und Hotend durch die Extrusionskraft. Dafür ist Pressure Advance zuständig.
Ich glaube trotzdem nicht, dass ein Advance mit einer elastischen Stauchung in der Größenordnung von 1-2mm zurechtkommen kann (wie es bei weichen TPUs vorkommen kann). Ich schaffe es allerdings nicht, ein gutes Beispiel zu ersinnen, um ein triftiges Gegenargument bereit zu stellen. Also muss ich es einmal so stehen lassen. Pressure Advance kann deiner Meinung nach mit einer elastischen Stauchung des Filaments zurecht kommen.
mhier, aus einem anderen Thread, bzgl. Klipper ohne PI, hat geschrieben:Mach mal bitte einen neuen Thread dafür auf. Das interessiert sicher viele und wird hier doch sehr unübersichtlich. Es gibt mehrere Lösungen, da findet sicher jeder seine passende
Ist schon geschehen. Hier der Thread für ein Klipper ohne Raspberry Pi.

Gesundheit!

mjh11