Wägezellen/DMS Unterstützung verbessern

mhier
Prof. Dr. des 3D-Drucks
Prof. Dr. des 3D-Drucks
Beiträge: 1672
Registriert: Fr 11. Sep 2015, 11:37
Has thanked: 279 times
Been thanked: 246 times

Wägezellen/DMS Unterstützung verbessern

Beitrag von mhier »

So, nun hat es auf Github einiges an Diskussion zum Thema Unterstützung der Wägezellen/DMS bei Klipper mit dem Maintainer gegeben. Wer das im Detail nachlesen will, findet es (auf Englisch) hier: https://github.com/Klipper3d/klipper/pull/4738

Kurz zusammengefasst gibt es einige Änderungswünsche/Verbesserungsvorschläge. Die machen auch wirklich Sinn, vor allem, wenn man bedenkt, dass das Modul nicht nur von RFx000-Nutzern benutzt werden kann. Zunächst mal sollte ich das Ganze in kleinere Häppchen unterteilen, also für jeden Teilaspekt einen eigenen Pull Request. Das ist kein Problem und werde ich demnächst mal angehen.

Wichtiger ist aber, dass die Zahl der Parameter, die der Benutzer im Config-File einstellen kann (bzw. muss), zu hoch ist, und dass die Parameter teilweise nicht leicht zu verstehen sind. Die Idee ist, einige der Parameter in feste Konstanten im Python-Code umzuwandeln, sowie einige Parameter möglichst aus anderen Parametern abzuleiten. Das macht zwar die Nutzung etwas weniger flexibel, dafür ist es am Ende leichter zu verstehen (was ansonsten womöglich ein Hinderungsgrund ist, das überhaupt einzusetzen).

Es hat sich am Ende folgende Idee herauskristallisiert (teilweise auch noch in meinem Kopf nach der Diskussion ;-)), die ich gerne mit euch besprechen würde. Das Ganze geht einher damit, dass es eine klare Beschreibung geben wird, wie die Parameter bei einem unbekannten Drucker-Modell einzustellen sind:

1. Kraftmessung in physikalische Einheit konvertieren.
2. Festlegen der größten Kraft, die man für sicher befindet.
3. Bestimmung der "Federkonstante" bzw. "Steifheit" der DMS (bzw. des Gesamtsystems), also Kraft in Abhängigkeit des Weges
4. Daraus wird automatisch die Schrittweite für die schnelle Annäherung bestimmt.
5. Ebenfalls automatisch wird die Schrittweite für die genaue Messung mit der linearen Regression bestimmt.
6. Alle weiteren Parameter werden als Konstanten in Python festgelegt.

Im Detail bedeutet das:

1. Kraftmessung: Man legt ein bekanntes Gewicht von wenigen 100g auf den/die DMS und liest die Änderung des Messwertes ab. Vielleicht kann man der Bequemlichkeit halber sogar beide Werte (tatsächliches Gewicht und Änderung des Messwertes) als Parameter angeben, dann muss der Nutzer das nicht selbst dividieren. Anschließend bekommt man die Kraft in Gramm angezeigt (für spitzfindige Leute: nicht Gramm sondern Zentinewton). Wer mag, kann sich auch eine andere Gewichtseinheit aussuchen - es kommt im Grunde gar nicht auf die Kalibration an. Wichtig ist sie nur, dass man alle Messwerte und Parameter besser verstehen kann.

2. Maximale Kraft: Eine solche Angabe haben wir bereits (nur halt in Digits). Sie wird z.Z. lediglich als Sicherheits-Limit benutzt, so dass bei Überschreitung sofort abgebrochen wird. Ich würde dies noch zusätzlich durch eine Python-Konstante teilen (z.B. 5), um einen Sicherheitsabstand zu realisieren. Dieses reduzierte Limit kann dann als Richtwert im Folgenden genutzt werden. Nennen wir diese Kraft mal F0.

3. "Federkonstante": Ich würde zur Bestimmung einen G-Code-Befehl anbieten. Der Nutzer muss zunächst die Düse in z-Richtung so positionieren, dass sie das Bett gerade eben berührt (d.h. Änderung der Kraft ist bereits messbar). Der G-Code-Befehl fährt dann in kleinen Schritten (ich würde Vollschritte der Z-Achse benutzen), bis F0 erreicht ist. Das kann eine Weile dauern, macht man aber nur einmal. Vielleicht sollte das anschließend noch ein paar mal wiederholt werden, dann aber mit größeren Schritten, z.B. so dass F0 in 4 Schritten erreicht wird. Schließlich wird dann der Mittelwert gebildet aus dem Verhältnis Kraft pro Strecke. Nennen wir dieses mal D (in Anlehnung an die Federkonstante aus der Physik, das ist ja im Grunde genau das gleiche). Ich würde noch empfehlen, diese Messung möglichst ohne Druckbettauflagen/Tape etc. durchzuführen, oder eine großflächige, biege-steife und harte Platte unterzulegen. Dadurch wird sichergestellt, dass wirklich die Federkonstante der DMS gemessen wird und nicht womöglich die einer schlecht aufliegenden Dauerdruckplatte (was dann an jedem Ort ein anderes Ergebnis geben würde). Es kommt am Ende hier aber auch nicht wirklich auf einen Faktor 2 an...

4. Schrittweite für schnelle Annäherung: Jetzt können wir ausrechnen, mit welcher Schrittweite der Drucker fahren kann, ohne dass F0 überschritten wird. Das ist nämlich einfach F0/D. In der Praxis würde ich natürlich nicht meine Hand dafür ins Feuer legen, dass so nie F0 überschritten wird, aber deshalb haben wir ja F0 deutlich kleiner als die maximale Kraft gewählt.

5. Schrittweite für Regression: Für die Regression ist es wichtig, eine recht geringe Schrittweite zu wählen. Wenn nämlich die Druckbettoberfläche nicht perfekt aufliegt und selbst nachgeben kann (siehe oben), wollen wir idealerweise die Auflage nicht ganz bis auf das eigentliche Bett hinunterdrücken (denn dann ändert sich die tatsächliche Federkonstante während der Messung und die Beziehung ist nicht mehr linear). Umgekehrt darf die Schrittweite auch nicht zu klein sein, denn wir wollen eine messbare Kraftänderung zwischen den Schritten, außerdem wollen wir nicht unter einen Vollschritt der Z-Achse gehen, da Teilschritte nicht so exakt sind. Ich denke, das kann man ebenfalls automatisch bestimmen. Evtl. kann der in Punkt 3 genannte G-Code-Befehl gleich noch das "Rauschen" der Messwerte mitbestimmen (-> signifikante Kraftänderung muss größer sein). Die Vollschrittgröße sollte sich ebenfalls herausfinden lassen aus der Konfiguration.

6. Weiter Parameter: Alle weitere muss vermutlich tatsächlich gar nicht geändert werden, wenn man einen anderen Drucker hat. Sollte sich später herausstellen, dass andere Hardware da doch mehr Flexibilität braucht, kann man Python-Konstanten immer noch in Konfigurations-Parameter umwandeln. Einzig bei den ADC-Mittelungen bin ich mir aktuell unsicher. Ich spiele mit dem Gedanken, die komplett herauszuwerfen. Mein Gefühl ist, dass man die eher gar nicht mehr braucht. Sie sind eigentlich nur noch wichtig, um instabile Messwerte zu erkennen - das passiert aber eigentlich nur, wenn man den Drucker anfasst. Und selbst wenn das mal schief geht, würde der Drucker immer noch die Messung erst verifizieren mit einer neuen Offset-Kompensation. Ich werde deshalb demnächst mal testen, in wie weit man darauf verzichten kann.

Was haltet ihr von der Idee? Habt ihr noch weitere Verbesserungsideen? Oder denke ich irgendwo in die falsche Richtung?
Gruß, Martin

Klipper Firmware für den RFx000: Klipper für RFx000 | Original-Dokumentation | Diskussion | Wiki mit Installations-Anleitung

(Ich bin in diesem Forum nicht mehr aktiv)
Benutzeravatar
af0815
Donator
Donator
Beiträge: 809
Registriert: Di 2. Jun 2020, 14:45
Wohnort: Burgenland
Has thanked: 34 times
Been thanked: 120 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von af0815 »

Was mir irgendwie fehlt, ist die Temperatur. Wie wir wissen ist die DMS nicht konstant, sondern Temperaturabhängig. Wie sieht es mit der Drift aus. Das habe ich in deinen Ausführungen nicht gefunden, oder wird bei Entlastung neu auf Null gestellt ?!
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von rf1k_mjh11 »

Hallo Martin/mhier,

Hier geht es nur darum, die DMS erst- und einmalig zu 'kalibrieren', nehme ich an. Und zwar an einem x-beliebigen Drucker. So interpretiere ich es zumindest.

Sorge macht mir zunächst nur Punkt 3, die Federkonstante.

Die RFx000-Klasse hat eine recht steife Z-Achse. Zwar gibt es das Taumeln und Eiern, aber in Z ist der Aufbau recht steif. Das Druckbett ist hingegen recht elastisch aufgehängt, da es (normalerweise) nur an einer Linearführung befestigt ist. Belastet man das Bett außermittig, kippt dieses nach rechts, links, vorne oder hinten, je nachdem. Aber auch bei meinem Bett, mit zwei Linearführungen, spüre ich eine gewisse Elastizität unter Last (ich vermute, der Untertisch federt nach). Eine Losung wäre, das Bett zu entfernen (zumindest die Keramik-, Ceran-, oder Aluplatte) und einen kleinen Hilfsblock auf die Y-Platte (=offizielle Bezeichnung) zu stellen, um möglichst viele federnden Komponenten zu 'umgehen'. Der Block müsste dabei durch eines der Löcher im Untertisch (=offizielle Bezeichnung) platziert werden, falls dieser nicht demontiert wird. Unter Umständen würde es reichen, den Block auf den Untertisch, genau über dem Führungswagen, zu platzieren.
Damit hätten wir die Situation bei der RFx000-Klasse recht optimal gelöst.

Aber was machen Besitzer die einen Drucker nach der Art von RF100, RF500, Renkforce Pro und -Basic, Anycubic und die zig Modelle, wo das Bett kragend montiert ist, also nur einseitig befestigt?. Es gibt auch Modelle, wo der Extruder kragend montiert ist (Snapmaker 3-in-1). Bei diesen unterschiedlichen Konstruktionen wird es schwierig werden, einen einheitlichen Prozess zu definieren.
Es ist eine Frage der aufzuwendenden Kraft, klar. Man sollte dem User klarmachen, dass dieser oder diese eine möglichst steife Konstellation verwenden soll, also einen Punkt für den Kalibrierungsvorgang auswählt, der so knapp wie möglich neben den Befestigungspunkten liegt. Beim RF500 wäre das vermutlich ein Punkt möglichst weit hinten, eher in der Nähe der Z-Spindel, eventuell ein wenig in Richtung der Z-Linearführung. Jeder Drucker wird wenige optimale Punkte, und leider eine Menge schlechter Punkte bieten (was die Elastizität betrifft).

Ich hoffe ich habe das verständlich erklärt.

Hoch die Maske!

mjh11
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
AtlonXP
3D-Drucker Erfinder
3D-Drucker Erfinder
Beiträge: 3374
Registriert: So 15. Nov 2015, 20:55
Has thanked: 742 times
Been thanked: 588 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von AtlonXP »

Hallo Martin,
schön das sich was tut. :-)

Unsere Firmware macht es bereits vor.
Zuerst wird der Tatsächlich Düsen <-> Bettabstand gemessen.
Anschließend wird um einen definierten Wert frei gefahren.
Es wäre gut, wenn man den irgendwie selber definieren könnte.
In meiner Configeration.h stehen dort 0,3 mm.
Sollte das Bett schräger oder sehr uneben sein, sollte man den Wert vergrößern können.
Ansonsten könnte es bei der Fahrbewegung zum nächsten Messpunkt, zu einem ungewollten Bettkontakt kommen.

Die nächsten Messpunkte werden dann nur noch über den frei gefahren Wert gemessen.
Sollten die Digits davonlaufen, wird nochmals über den frei gefahrenen Punkt gemessen.
Zu vor jedoch werden die Digits nochmals geholt, oder auch genullt.
Also, so wie deine Programmierte Z- Offset Messung.

Zur Genauigkeit:
Die meisten Chinakracher haben eine T8 Spindel (8mm Steigung) verbaut.
8mm / 200 Schritte = 0,04 mm.
Meinst du nicht, das wäre zu ungenau?

Ich glaube, selbst wenn es bei 16 Mikrostepps Ungenauigkeiten geben sollte,
dann ist das immer noch genauer wie bei Vollstepps.

Ich möchte anmerken, die neuere Stepper Technik arbeitet nicht so schlecht,
wie die der RFX000 Klasse.

Schön wäre es, wenn wir weiterhin 9 Matrizen Speichern könnten.
Auch eine variable Anzahl der Messpunkte würden mir Freude machen.

LG AtlonXP
zero K
Donator
Donator
Beiträge: 1106
Registriert: Mi 6. Dez 2017, 13:17
Has thanked: 44 times
Been thanked: 236 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von zero K »

Guten Abend

Das Ding so einfach wie möglich halten - ich glaube, die bei Klipper finden die Anwendung der DMS nicht so attraktiv.
Im Grunde finde ich das System von Conrad nicht schlecht - es ist einfach und wirkungsvoll.
Für die moderne Firmware und auch modernere Sensor- Wandler- und Druckerhardware kann man das weiter entwickeln, aber ohne sich den Ballast eines DKD-kalibrierbaren Systems auf zu bürden. Das würde wohl einen großen Teil der Anwender irritieren.
Die Temperatur ist auch schon genannt worden.
Der Normalsterbliche weiß mit der Einheit N nix anzufangen, geschweige denn mit cN - dann kann man auch gleich g nehmen und diese nullkommanullzwei, die da noch ´drauf kommen sollten einfach unter den Teppich kehren.


Beim Düse-Bettkontakt reagiert die "Kraftmesseinrichtung" unserer Drucker auf die Änderung um nur sehr wenige Digits.
Diese wenigen Digits repräsentieren Kräfte, die ich für unproblematisch halte, selbst an ungünstigen Stellen unserer RFs, wie die Bereiche um Y-min und Y-max. An meinem Drucker entsprechen 1000 Digits so Pi mal Daumen 630g. Ich bilde mir ein, irgendwo etwas von 30 bis 50 Digits für die Erkennung eines Kontakts gelesen zu haben.
Daher würde es mir reichen, wenn z. B. für eine "Kraftmessung" von 10 bis 20 Digits die XY-Koordinate und die Abweichung von Z = 0 erfasst und zur weiteren Verarbeitung abgelegt wird - bin mir nicht sicher, ob die Kraft aktuell auf eine Anzeige muss - allenfalls, bis zur nächsten Koordinate, die vorher ermittelte Abweichung zu Z = 0.
Wie AtlonXP schon sagt - mehrere Profile wäre richtig schick.

Was bringt mir ein kalibriertes System bei der Extrusion?
Ich habe aber auch keine Vorstellung, mit welcher Kraft das frisch extrudierte Würstchen über das Werkstück das Druckbett belastet.
Unsere zum Teil exotisch anmutenden aus vielen Teilen und vielen Werkstoffen gefügten Druckköpfe machen eine qualifizierte und auch eine gewisse Zeit haltbare Bestimmung der Maschinensteifigkeit oder Federkonstanten schwierig.
Eigentlich reichen mir die Digits zur Beurteilung der aktuellen Lage einen schnellen Eindruck zu erhalten ob es irgendwo klemmt.
Etwas hübscher wäre vielleicht ein lastabhängig wachsender %-Balken, aber das Mainboard muss die Werte auch herausgeben können.

(... und ein sekündlich aktualisierter Schleppzeiger) Sorry, ich würde noch nicht einmal eine Ziffer auf irgendein Display bringen. :oops:

Gute Nacht, zero K
mhier
Prof. Dr. des 3D-Drucks
Prof. Dr. des 3D-Drucks
Beiträge: 1672
Registriert: Fr 11. Sep 2015, 11:37
Has thanked: 279 times
Been thanked: 246 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von mhier »

Sorry, ich bin wohl etwas zu sehr mit der Tür ins Haus gefallen und hab den wesentlichen Grundgedanken weggelassen :-D Es geht darum, die aktuelle DMS-Unterstützung in Klipper so zu verbessern, dass sie einfacher verständlich und leichter nutzbar wird, auch mit anderen Druckermodellen (ggf. auch Eigenkonstruktionen bzw. Umbauten). Das Ziel ist, das Klipper-Modul in die offizielle Klipper-Version zu integrieren. Ich beziehe mich hier auf den Status Quo bei der aktuellen Klipper-Implementierung und spreche über Änderungen davon. Die Implementierung in Klipper ist schon jetzt nicht genau so, wie in der Repetier-basierten Firmware. Es geht auch nicht darum, alles komplett über den Haufen zu werfen. Die Änderungen sind am Ende minimal - eigentlich geht es nur darum, die Einrichtung für den jeweiligen Drucker zu vereinfachen. Die Nutzung am Ende, wenn die Einrichtung einmalig vorgenommen wurde, wird weitestgehend gleich bleiben (einzige Ausnahme: Die Anzeige ist nicht mehr in Digits sondern in Gramm o.ä. - was übrigens gar nicht so weit voneinander entfernt ist). Das betrifft also eigentlich alle RFx000-Nutzer eher nur am Rande, denn für unsere Druckerklasse haben wir ja eine funktionierende Konfiguration.

Ich möchte das trotzdem gerne mit euch durchsprechen, weil hier in der Community so ziemlich die einzigen sind, die signifikant Erfahrung mit dem System haben. Der Maintainer von Klipper hat selbst mehrfach geschrieben, dass er vieles nicht beurteilen kann (und trotzdem sehr wertvolle Anregungen gegeben, vermutlich auch gerade deswegen). Ebenfalls gibt es einige andere Diskussionen im Klipper-Forum zu diesem Thema, das sind aber meist Leite, die sich erst noch ein System aufbauen wollen (und teilweise ganz bestimmte Vorstellungen haben, wie sie es umsetzen möchten, wo ich mir z.T. nicht sicher bin, ob das je funktionieren kann, aber das ist ein anderes Thema).

Deshalb erst mal danke soweit für eure schnelle Antworten, ich gehe da jetzt noch im einzelnen drauf ein:

----
af0815 hat geschrieben:Was mir irgendwie fehlt, ist die Temperatur. Wie wir wissen ist die DMS nicht konstant, sondern Temperaturabhängig. Wie sieht es mit der Drift aus. Das habe ich in deinen Ausführungen nicht gefunden, oder wird bei Entlastung neu auf Null gestellt ?!
In dem Punkt ändert sich erstmal nichts: wir müssen regelmäßig Null-Messungen vornehmen. Für den linearen Fit ist es bereits so implementiert, dass für jeden Messpunkt eine Null-Messung gemacht wird, d.h. der Drucker "hüpft" in Z-Richtung auf und ab, um die DMS zu ent- bzw. belasten (die Belastung ist jeweils dann einen kleinen Schritt tiefer "im" Heizbett). Darüber hinaus habe ich jetzt erstmal nichts geplant und bin da auch eher ideenlos. Wenn dir was gutes Einfällt, her damit - aber bitte in einem eigenen Thread, denn das würde ich erstmal getrennt behandeln wollen.

----
rf1k_mjh11 hat geschrieben:Hier geht es nur darum, die DMS erst- und einmalig zu 'kalibrieren', nehme ich an. Und zwar an einem x-beliebigen Drucker. So interpretiere ich es zumindest.
Ja ganz genau.
Sorge macht mir zunächst nur Punkt 3, die Federkonstante.
Das entscheidende Element hier sind die DMS selbst. Diese geben in Abhängigkeit der Kraft etwas nach. Ich gehe eigentlich davon aus, dass dies der einzige signifikante Beitrag ist, wenn denn die Oberfläche des Heizbetts hart ist und nicht nachgibt. Vielleicht spielt ein Verkippen des Betts auch eine gewisse Rolle, das ist ein guter Hinweis den ich noch nicht so ganz auf dem Plan hatte (ich habe zwei Linearführungen, ich kenne den Effekt aber bei extremen Y-Positionen).

Die Lösung dafür könnte einfach sein, dass die Messung der Federkonstante an der Stelle auf dem Bett vorgenommen wird, wo dieser Effekt möglichst klein ist (bei uns Druck direkt oberhalb des Führungswagens). Es geht im Grunde darum, die größtmögliche Federkonstante zu bestimmen, denn primär geht es darum, die Schrittweite so zu bestimmen, dass die Kraft nicht zu groß wird. Deine Idee mit dem Demontieren des Betts funktioniert natürlich ebenfalls, das würde ich bei Druckern empfehlen, wo die o.g. einfachere Lösung aus irgendwelchen Gründen nicht möglich ist.

Man muss es hier mit der Genauigkeit aber nicht übertreiben. Wir haben ja bewusst eine große Sicherheitsmarge gewählt, um die maximale Kraft selbst wirklich nicht zu erreichen. Deshalb ist am Ende ein Faktor 2 oder 3 im Grunde schon fast egal. Es geht nur darum, ein Verfahren zur Bestimmung der Parameter zu definieren, wenn man so gar keine Ahnung von der Größenordnung hat (und den Algorithmus im Detail vielleicht gar nicht verstanden hat).
Aber was machen Besitzer die einen Drucker nach der Art von RF100, RF500, Renkforce Pro und -Basic, Anycubic und die zig Modelle, wo das Bett kragend montiert ist, also nur einseitig befestigt?. Es gibt auch Modelle, wo der Extruder kragend montiert ist (Snapmaker 3-in-1). Bei diesen unterschiedlichen Konstruktionen wird es schwierig werden, einen einheitlichen Prozess zu definieren.
Ich würde da einfach möglichst dicht an der Aufhängung messen, genau wie du schreibst. Im Grunde spielt es eigentlich auch keine Rolle. Wir müssen nicht die Federkonstante der DMS selbst bestimmen. Wir müssen nur einen Parameter haben, mit dem wir aus einer gefahrenen Distanz in z berechnen können, wie groß maximal dadurch die Kraft werden kann. Jede zusätzliche Komponente, die ebenfalls nachgibt, wird die Kraft verkleinern. Wenn wir also dicht bei der Aufhängung die Federkonstante bestimmt haben und daraus die Schrittweite ableiten, wird die selbe Schrittweite weiter weg von der Aufhängung kleinere Kräfte bewirken. Es bleibt also alles im sicheren Bereich.

----
AtlonXP hat geschrieben:Zuerst wird der Tatsächlich Düsen <-> Bettabstand gemessen.
Anschließend wird um einen definierten Wert frei gefahren.
Das ist auch ein wichtiger Punkt, allerdings muss ich mich um den hier nicht kümmern ;-) Denn dies ist Teil des Bed Mesh Leveling (= Heat Bed Scan) Algorithmus, den ich gar nicht anfassen muss. Ich stelle lediglich den Code bereit, der einen einzelnen Messpunkt (Düse-Bett-Abstand) durchführt. Das wird dann vom Bed Mesh Leveling Code benutzt. Dieser Wert ist tatsächlich einfach ein Konfigurations-Parameter davon, kann also problemlos frei definiert werden (ohne irgendwas neu zu kompilieren).
Sollten die Digits davonlaufen, wird nochmals über den frei gefahrenen Punkt gemessen.
Zu vor jedoch werden die Digits nochmals geholt, oder auch genullt.
Der Teil ist m.M.n. in der Klipper-Version bereits deutlich besser gelöst. Der von mir verwendete Algorithmus funktioniert auch in X und Y zum Kantentasten. Das zeigt, wie robust der Algorithmus ist ;-)
Zur Genauigkeit:
Die meisten Chinakracher haben eine T8 Spindel (8mm Steigung) verbaut.
8mm / 200 Schritte = 0,04 mm.
Meinst du nicht, das wäre zu ungenau?
Die Schrittweite bestimmt nicht die Genauigkeit. Wir messen 5 Messpunkte in diesem Abstand (also z.B. 0.04mm), jeder von diesen Messpunkten wird einzeln genullt. Anschließend wird eine Gerade an die Messwerte angefittet (Kraft über z-Distanz). Der Schnittpunkt mit der z-Achse (also Kraft = 0) ist dann der gesuchte Berührungspunkt.

Vielleicht kann man auch die Schrittweite etwas kleiner wählen, z.B. Faktor 2 oder 4 unter dem Vollschritt - in dem Bereich sind Stepper eigentlich immer noch sehr linear. Aktuell benutzen wir 5 Micrometer, das ist ebenfalls ca. einen Faktor 2 unter dem Vollschritt (und unsere Stepper sind ziemlich grottig in der Hinsicht).

Ich glaube, selbst wenn es bei 16 Mikrostepps Ungenauigkeiten geben sollte,
dann ist das immer noch genauer wie bei Vollstepps.
Da der Fit ein lineares Verhalten voraussetzt, würden Nichtlinearitäten die Genauigkeit sicherlich herabsetzen.
Ich möchte anmerken, die neuere Stepper Technik arbeitet nicht so schlecht,
wie die der RFX000 Klasse.
Die Linearität ist quasi ausschließlich durch die Stepper selbst definiert. Ich glaube, da gab es schon lange bessere als unsere, keine Ahnung, was die sich bei der Wahl dieses Steppers gedacht haben... ;-)
Schön wäre es, wenn wir weiterhin 9 Matrizen Speichern könnten.
Auch eine variable Anzahl der Messpunkte würden mir Freude machen.
Auch das ist alles wieder teil des Bed Mesh Leveling Moduls und dort problemlos möglich. Du kannst auch 900 Matrizen speichern, da gibt es keine Begrenzung :-) Auch die Zahl der Messpunkte ist variabel. Ich benutze tatsächlich i.d.R. weniger als beim Conrad-Original, was die Genauigkeit nicht reduziert, denn die Interpolation zwischen den Messpunkten ist deutlich besser (Original kann nur bilinear, bei Klipper kann man verschiedene Algorithmen auswählen, mit denen Krümmungen deutlich besser abgebildet werden können). Das spart dann Zeit bei der Messung (dafür ist die Zeit für den einzelnen Messpunkt bei Klipper länger wegen der Latenzzeit zwischen dem Host-System auf dem Raspberry Pi und dem Microcontroller auf dem Mainboard).

---
zero K hat geschrieben:ich glaube, die bei Klipper finden die Anwendung der DMS nicht so attraktiv.
Naja, der Maintainer hat selbst wohl keine Anwendung dafür, da sein Drucker das halt nicht hat. Trotzdem hat sich inzwischen eine recht rege Diskussion um verschiedene Umsetzungen gebildet. Ich denke, das hier ist nur der erste Schritt zu einer breiteren Nutzung der Technologie. Sowas braucht Zeit, denn man kann bestehende Drucker ja nicht mal eben kurz umrüsten. Außerdem müssen die Leute erstmal überhaupt verstehen, was daran besser ist als an einem klassischen Bed-Leveling-Sensor.

Im Grunde finde ich das System von Conrad nicht schlecht - es ist einfach und wirkungsvoll.
Das Original-System leidet zum einen unter einem kleinen, (halbwegs) konstanten Offset der Ergebnisse, und ist zum anderen sehr stark an die konkrete Hardware und Firmware gebunden.
Für die moderne Firmware und auch modernere Sensor- Wandler- und Druckerhardware kann man das weiter entwickeln, aber ohne sich den Ballast eines DKD-kalibrierbaren Systems auf zu bürden. Das würde wohl einen großen Teil der Anwender irritieren.
Das irritiert mich jetzt auch ;-)
Der Normalsterbliche weiß mit der Einheit N nix anzufangen, geschweige denn mit cN - dann kann man auch gleich g nehmen und diese nullkommanullzwei, die da noch ´drauf kommen sollten einfach unter den Teppich kehren.
Ich würde ohnehin die Einheit nur in der Dokumentation erwähnen. Im Grunde kann man sein System auch wieder auf Digits "kalibrieren", wenn man unbedingt will. Gramm ist eben die Einheit, die man auf einer typischen Küchenwage ablesen kann, und jeder kann sich was darunter vorstellen. Naja, oder halt die entsprechenden Imperialen Einheiten - die konkrete Einheit ist dem System wie gesagt egal. Ideal sind wohl Einheiten, bei denen ein typischer Kraftunterschied zwischen Null-Messung und Bett-Kontakt irgendwo zwischen 10 und 100 liegt, denn das kann man platzsparend auf dem Display anzeigen.

Was bringt mir ein kalibriertes System bei der Extrusion?
Genauso wenig wie sonst. Es bringt nur dann was, wenn man sich dann unter den Zahlen mehr vorstellen kann. Wir haben uns an die Einheit "Digits" gewöhnt, die praktischerweise eben auch ganz grob im Gramm-Bereich liegt. Ich hatte mal testweise ein HX711 statt unseres AD-Wandlers benutzt, der hat 24 statt 16 Bits, d.h. die Digits sind um den Faktor 256 größer (wenn ich die Verstärkung ähnlich einstelle). Da ist es gleich deutlich schwieriger, die Zahl auf dem Display intuitiv zu erfassen - das sind einfach zu viele Stellen. Deshalb macht ein Kalibrationsfaktor definitiv Sinn. Außerdem ist es bei Klipper üblich, dass ADC-Messungen nicht in Digits sondern normiert auf den Wertebereich 0 bis 1 dargestellt werden. An diese Konvention möchte ich mich ebenfalls halten, denn das Interface für unseren ADC sollte dem Standard-ADC-Interface in Klipper entsprechen.
Ich habe aber auch keine Vorstellung, mit welcher Kraft das frisch extrudierte Würstchen über das Werkstück das Druckbett belastet.
Die ist ohnehin nicht messbar, wir messen die Kraft, die der Extrudermotor auf das Hotend ausübt. Da liegen wir ja üblicherweise im Bereich von wenigen 1000 Digits, also im unteren Kilogramm-Bereich. Ich finde, es hilft schon, sich das mal konkreter vorzustellen :-) Zumal man ja auch bei 5 bis 10 kg aufpassen muss, nicht die DMS kaputt zu machen...
Unsere zum Teil exotisch anmutenden aus vielen Teilen und vielen Werkstoffen gefügten Druckköpfe machen eine qualifizierte und auch eine gewisse Zeit haltbare Bestimmung der Maschinensteifigkeit oder Federkonstanten schwierig.[/quiote]
Wieso? Wir messen die doch einfach. Die Zahl interessiert den Nutzer ja auch nicht, die steht dann einfach nur in der Konfigurations-Datei, um daraus automatisch weitere Werte abzuleiten.
Etwas hübscher wäre vielleicht ein lastabhängig wachsender %-Balken, aber das Mainboard muss die Werte auch herausgeben können.
Das ist keine blöde Idee (mal abgesehen vom begrenzten Platz auf unserem Display, aber es gibt ja auch andere Displays ;-)). Allerdings taugt das weniger während des Bed Leveling natürlich, denn da sind die Kräfte eher klein (hoffentlich). Während des Druckvorgangs könnte das aber natürlich recht hilfreich sein. Auf unserem engen 16x4 Display sehe ich das aber nicht so richtig ;-)
Gruß, Martin

Klipper Firmware für den RFx000: Klipper für RFx000 | Original-Dokumentation | Diskussion | Wiki mit Installations-Anleitung

(Ich bin in diesem Forum nicht mehr aktiv)
Benutzeravatar
AtlonXP
3D-Drucker Erfinder
3D-Drucker Erfinder
Beiträge: 3374
Registriert: So 15. Nov 2015, 20:55
Has thanked: 742 times
Been thanked: 588 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von AtlonXP »

Unseren Schrittmotoren möchte ich wegen der Ungenauigkeit keine Schuld zu sprechen.
Es fällt an diesen halt stärker auf, weil diese einen geringeren Spulenwiderstand haben
und somit berechtigter weise mehr Strom ab können.
Da fällt das Problem mit den Stepper Treibern stärker auf.

Unsere Stepper Treiber Stufe, hat hinten Angeschaltet, eine H- Schaltung aus einzelnen MOSFET!

Genau dort sehe ich ein Problem des Spulen Fieben und der Ungenauigkeit.
Man bedenke, es gibt in der H Schaltung auch Exemplarstreuungen der einzelnen MOSFET.

Ich weiß jetzt nicht genau, wie du während dem Messvorgang, das Messen in Bezug der Hundertstel Millimeter anfahren möchtest.

Ich vermute jedoch du musst es mit Mikrostepps tun, um eine ordentliche Genauigkeit zu erreichen.

In der RFX000 Klasse haben wir nicht nur eine 5 mm Steigung, sondern auch unterschiedliche Antriebspulli am Z- Spindeltrieb.
Auch hier haben wir zusätzlich nochmals ein Untersetzungsverhältnis.
Die Zähne Zahl ist mir unbekannt.

Bei den Chinakrachern ist der Motor direkt mit der Z- Spindel verbunden…

Im Übrigen denke ich, du wirst es sicherlich gut machen und wollte es nur nochmals angesprochen haben.

Die Intelligenteste Frage ist wie immer Die?
Die nach der Bedienungsanleitung. :coolbubble:
Diese sollte auch für andere Benutzer und Drucker, ausführlich und überzeugend sein.

Doch leider kommt dieser Abschnitt immer zum Schluss,
erst wenn man es genau selber weiß, wie es funzt.


LG AtlonXP
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2051
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 263 times
Been thanked: 542 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von rf1k_mjh11 »

Hallo Martin/mhier,

AtlonXPs Ausflug in die Schrittmotor- bzw. Treiberthematik hat nur sehr indirekt mit deinem Problem zu tun.

Falls ich deinem Gedankengang folgen kann, versuchst du eine Kraft (die auf die DMS wirkt) einer Länge gleichzusetzen. Sehe ich das richtig?
Irgendwann später wirst du diese Länge wieder in Schritte umwandeln müssen (zur Z-Kompensation).
Meine Gedanke dazu: Wieso überhaupt eine Kraft einer Länge gleichsetzen? Bleib einfach bei den (Mikro-)Schritten. Man beginnt bei "0", tastet den ersten Punkt am Bett ab, zählt die (Mikro-)Schritte mit und sowie sich der DMS Ruhewert ändert ergibt sich eine Schrittdifferenz zu "0". Taste ich diesen ersten Punkt mehrmals, wird vermutlich eine gewisse Streuung erfasst werden. Dieser Streuung verpasst man einen Sicherheitspuffer, sagen wir +/- 50%, und haben ein Gültigkeitsfenster für alle weiteren Abtastungen.
Nach dieser Methode spare ich mir ein Kalibrieren der DMS. Ich weiß zwar nicht viel die DMS (oder auch das Bett) nachgegeben hat, habe aber eine Differenz der abgetasteten Punkte in Motorschritten (was sich natürlich wieder in Millimeter umrechnen ließe, falls Bedarf besteht).
Da ist es egal, ob der User DMS einsetzt mit 10N, 50N oder gar 200N, und ob 2 oder gar nur 1 montiert ist. Da ist gar keine Kalibrierung nötig. Die Federkonstante der DMS, bzw. des Gesamtsystems ist egal, glaube ich. Der User muss nicht wissen, was die Maximalkraft der DMS ist. Er/sie muss nicht wissen, wo der optimale Platz zwecks der Vermeidung des Durchfederns ist, usw.
Die dabei erhaltene Distanz (=Unebenheitswert) würde natürlich das Nachgeben aller involvierter Komponenten enthalten - das ließe sich mit einer komplexen Kalibriermethode vielleicht vermeiden. OK - aber beim eigentlichen Abtasten des Betts kommt die penibel vermiedene Durchfederung erst wieder ins Spiel, oder? Oder habe ich gerade einen Gedanken-Kurzschluss? :S Wichtig ist einfach, eine möglichst geringe Durchfederung, durch eine möglichst geringe Kraft, hervorzurufen.
DMS-Empfindlichkeit
Um das System für Klipper möglichst universell zu machen, müsste man entweder wirklich, wie Martin hier angestoßen hat, die DMS aufwändig zu kalibrieren. Oder darauf großteils oder völlig zu verzichten. Damit ändert sich für den User aber nichts.
Nehmen wir einen Extremfall:
* Einer hat die billigsten DMS besorgt, die in China zu haben sind (eigentlich B- oder gar C-Ware). Die Dinger sind sehr 'steif', d.h. eine große Kraft wäre nötig, um ein anständiges Signal zu erhalten.
* Die DMS werden kalibriert - erfolgreich.
* Beim Abtasten eines 'weichen' Betts (kragend montiert, wie beim RF100 zum Beispiel) würde das Bett trotz Kalibrierung deutlich heruntergedrückt werden, oder? (Es wird einfach eine zu große Kraft ausgeübt. Oder wird die Kalibrierung auch die ausgeübte Kraft ermitteln und notfalls abbrechen?)
* Nach dem Abtasten wird eine Matrix erstellt (die schief/schräg im Raum steht).
* Die Z-Kompensation wird vermutlich nicht optimal funktionieren.
* Der User flucht, schaltet die Z-Kompensation aus und freut sich, dass sein/ihr Drucker funzt.
Mit etwas Glück kommt er/sie darauf, dass bei den DMS zu sehr gespart wurde. Werden bessere gekauft, klappt es vielleicht besser.
DMS nutzen, ohne Kalibrierung - das wäre einfach, oder? In den RFx000-Druckern werden die DMS auch nicht kalibriert (auch nicht von jenen, die die DMS schon tauschen mussten!).

Wie gesagt:
zero k hat geschrieben:Das Ding so einfach wie möglich halten - ....
Wenn ein User unbedingt die letzten 1/1000-stel Millimeter herausholen will, kann er/sie gerne die Firmware nach Herzenslust modden.

Übrigens:
zero k hat geschrieben:Im Grunde finde ich das System von Conrad nicht schlecht - es ist einfach und wirkungsvoll.
Das kommt daher, weil sich jemand (der große "C") um die Hardware gekümmert hat (DMS samt zugehöriger Schaltung) sowie die Firmware dafür erstellt hat (vermutlich unser vermisstes Forumsmitglied RF1000, selbst). Da schon beides vorhanden war/ist, wird das Ganze für uns als User praktisch Plug&Play.

Ob dann die Anzeige des DMS-Werts in Digits, Newton, µm, analog oder sonst wie dargestellt wird, hat mit dem Funktionsprinzip wenig oder nichts zu tun. Dass nennt man dann 'Fluff'. Aber auslesbar sollte sie sein, da stimme ich dem zero K zu. Schließlich handelt es sich dabei um eine Information, die der User bei Bedarf nutzbringend einsetzen kann. So wie ich auch die Anzeige immer wieder prüfe, um Druckfehler zu vermeiden.
AtlonXP hat geschrieben:Bei den Chinakrachern ist der Motor direkt mit der Z- Spindel verbunden…
Was machen wir mit einem Delta Drucker? Da sind für 'Z' gleich 3 Motore am Werkeln!

Gesundheit! (Es geht gerade wieder etwas bergauf, zum Glück.)

mjh11
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
zero K
Donator
Donator
Beiträge: 1106
Registriert: Mi 6. Dez 2017, 13:17
Has thanked: 44 times
Been thanked: 236 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von zero K »

Wie macht man das denn mit der "versteckten" [+DMS-Empfindlichkeit] in dem weißen Feld?
Benutzeravatar
AtlonXP
3D-Drucker Erfinder
3D-Drucker Erfinder
Beiträge: 3374
Registriert: So 15. Nov 2015, 20:55
Has thanked: 742 times
Been thanked: 588 times

Re: Wägezellen/DMS Unterstützung verbessern

Beitrag von AtlonXP »

Jetzt kommst du noch mit dem sch… Delta Drucker… (Sorry)
Ich weiß schon wie ein Hund aussieht, nur machen kann ich keinen. :coolbubble:

Der Deltadrucker wird wohl unter 32 Mikrostepps nicht sauber arbeiten können.
Außer seine Arme haben ein höheres Untersetzungsverhältnis.

Auf was ich genau hinaus wollte, ich glaube ohne eine feine Mikrostepp Unterteilung wird auch das Messen nicht funzen.
Es werden ja wenige Digits in ein Wege Verhältnis verrechnet.
Oder bin ich hier auf dem Holzweg?

Wenn ich nur mit Vollstepps fahre und genau dazwischen mein Trigger Punkt ist, oder auch Ausschlag habe,
was gilt dann nun -0,02 mm oder +0,02 mm, bei einem Vollstepp Stepp1 zu Stepp2 =0,04 mm?
zero K hat geschrieben:Wie macht man das denn mit der "versteckten" [+DMS-Empfindlichkeit] in dem weißen Feld?
Ich kann mit dieser Frage / Formulierung nichts anfangen?

LG AtlonXP
Antworten

Zurück zu „RF1000-Klipper“