Seite 7 von 19

Re: Klipper auf dem RF2000V2

Verfasst: So 29. Nov 2020, 22:24
von mhier
Ich hab gerade noch mal von deinem Log-Auszug die Daten geplottet, die für den Fit benutzt werden (siehe Anhang). Du hast da einen merkwürdigen Hubbel drin. Der wird ggf. zu leicht erhöhten Ergebnissen führen, aber 1/10mm lässt sich so bei weitem nicht erklären.

Was mir auch noch auffällt: dein Fit-Scan startet recht weit vom Kontaktpunkt entfernt "im" Bett "drin" (also bei zu kleinen z). Da gibt es ggf. auch noch Optimierungspotential, in dem Sinne, dass wir vielleicht etwas robustere Parameter brauchen, die bei verschiedenen Materialien etc. gut funktionieren. (Der entscheidente Parameter wäre: fit_start_offset - der muss evtl. etwas größer, was aber den Scan verlangsamt, wenn er zu groß ist...)

Aber: Das kann ebenfalls keinen großen Unterschied erklären. Interessant ist auch, dass beide benutzen Verfahren "iterative scan" und "fit" zu mehr oder weniger dem gleichen Ergebnis kommen: der "split point" (Ergebnis des iterativen Scans) und das Fit-Ergebnis liegen ca. 0.5 Mikrometer auseinander. Ich bin mir sehr sicher, dass das Ergebnis "richtig" ist - wobei "richtig" hier eben heißt, dass es den Kontaktpunkt bei einer Kraft von 0 bedeutet. Negativere Z sollten zu (betragsmäßig) größeren Digits führen (bei korrektem Offset - sehr schwer händisch nachzuprüfen!), bei positiveren Z ist dann kein Kontakt mehr vorhanden.

Das Ergebnis müsste sich dann wie beschrieben optisch bestätigen lassen (zumindest bei einer glatten Oberfläche - bei Tape ist das evtl. schwieriger, wenn es nicht perfekt sauber geklebt ist). Durch schauen übt man ja definitiv keine Kräfte aus ;-)

Die Frage ist dann evtl, ob das überhaupt die richtige Definition ist. Das lässt sich aber eher nicht mit einer Blattlehre klären, sondern durch Drucken. Dazu muss natürlich aber auch der Extruder korrekt kalibriert sein - wenn weniger Material als vorgesehen gefördert wird, braucht man natürlich einen engeren Abstand zwischen Bett und Düse als gedacht.

Ich bin mir übrigens ziemlich sicher, dass die Repetier-Firmware immer zu kleine Offsets geliefert hat. Das ist in geringem Maße recht verzeilich, führt erstmal höchstens zu dem Elefantenfuß-Problem (was ich im Grunde immer hatte, war mir aber egal, weil ich eh mit Brim drucke sicherheitshalber). Das Ergebnis ist also nicht unbedingt direkt vergleichbar mit der alten Firmware - das wäre dann aber insofern Absicht, weil ich es besser finde, solche Offsets ggf. bewusst einzustellen (wenn man sie denn braucht). So gefühlt kann das durchaus im Bereich von 0.1mm gewesen sein...

Re: Klipper auf dem RF2000V2

Verfasst: So 29. Nov 2020, 22:51
von AtlonXP
Hallo zusammen,
ich lese hier natürlich gerne mit.

Um den genauen Düsen -> Bett Abstand zu ermitteln, mache ich manchmal folgendes:

Im Startcode habe ich eine Start Made definiert.
Wenn die Z Kompensation vorher gestartet ist, messe ich einfach die Höhe der Start Made aus.
Ich habe in der Regel für die Startmade eine Höhe von 0,2 mm eingestellt.
Material wird hierfür eher etwas fett verdruckt.
Somit lässt sich der Kunststoffstreifen einfach messen mit dem Messschieber.

LG AtlonXP

Re: Klipper auf dem RF2000V2

Verfasst: Mo 30. Nov 2020, 18:39
von af0815
Naktes ALU
Send:18:28:48.282: #BED_MESH_OUTPUT
Recv:18:28:48.283: // Mesh Leveling Probed Z positions:
Recv:18:28:48.284: // -0.910585 -0.799025 -0.727312 -0.674518 -0.634801
Recv:18:28:48.284: // -0.851154 -0.724968 -0.644436 -0.588129 -0.550799
Recv:18:28:48.284: // -0.812020 -0.679725 -0.592633 -0.528740 -0.488853
Recv:18:28:48.284: // -0.814020 -0.684378 -0.595213 -0.538157 -0.504731
Recv:18:28:48.284: // -0.812101 -0.687791 -0.613822 -0.565122 -0.552258
Recv:18:28:48.285: Mesh X,Y: 13,13
Recv:18:28:48.286: Search Height: 2
Recv:18:28:48.286: Mesh Average: -0.65
Recv:18:28:48.286: Mesh Range: min=-0.2606 max=0.1643
Recv:18:28:48.286: Interpolation Algorithm: lagrange
Recv:18:28:48.286: Measured points:
Recv:18:28:48.287: -0.812101 -0.762057 -0.721369 -0.687791 -0.659513 -0.635166 -0.613822 -0.594992 -0.578629 -0.565122 -0.555304 -0.550445 -0.552258
Recv:18:28:48.287: -0.818669 -0.770959 -0.729261 -0.692920 -0.661365 -0.634108 -0.610743 -0.590947 -0.574478 -0.561178 -0.550971 -0.543863 -0.539945
Recv:18:28:48.287: -0.817939 -0.770550 -0.728040 -0.690259 -0.657025 -0.628123 -0.603305 -0.582294 -0.564776 -0.550408 -0.538813 -0.529582 -0.522274
Recv:18:28:48.288: -0.814020 -0.765797 -0.722685 -0.684378 -0.650570 -0.620951 -0.595213 -0.573043 -0.554129 -0.538157 -0.524811 -0.513775 -0.504731
Recv:18:28:48.288: -0.810208 -0.760697 -0.717203 -0.678954 -0.645273 -0.615585 -0.589409 -0.566363 -0.546163 -0.528622 -0.513650 -0.501255 -0.491544
Recv:18:28:48.288: -0.808985 -0.758280 -0.714637 -0.676771 -0.643604 -0.614262 -0.588076 -0.564583 -0.543525 -0.524850 -0.508712 -0.495467 -0.485681
Recv:18:28:48.288: -0.812020 -0.760602 -0.717057 -0.679725 -0.647228 -0.618469 -0.592633 -0.569187 -0.547880 -0.528740 -0.512080 -0.498493 -0.488853
Recv:18:28:48.289: -0.820167 -0.768751 -0.725568 -0.688817 -0.657005 -0.628941 -0.603740 -0.580823 -0.559913 -0.541041 -0.524539 -0.511048 -0.501511
Recv:18:28:48.289: -0.833469 -0.782845 -0.740304 -0.704158 -0.672992 -0.645662 -0.621296 -0.599295 -0.579333 -0.561353 -0.545574 -0.532485 -0.522848
Recv:18:28:48.289: -0.851154 -0.802031 -0.760433 -0.724968 -0.694442 -0.667863 -0.644436 -0.623567 -0.604863 -0.588129 -0.573370 -0.560792 -0.550799
Recv:18:28:48.289: -0.871636 -0.824485 -0.784153 -0.749574 -0.719804 -0.694025 -0.671536 -0.651763 -0.634251 -0.618671 -0.604812 -0.592590 -0.582040
Recv:18:28:48.289: -0.892517 -0.847415 -0.808693 -0.775411 -0.746723 -0.721875 -0.700211 -0.681164 -0.664263 -0.649132 -0.635487 -0.623137 -0.611987
Recv:18:28:48.290: -0.910585 -0.867058 -0.830316 -0.799025 -0.772037 -0.748391 -0.727312 -0.708211 -0.690685 -0.674518 -0.659680 -0.646327 -0.634801
Recv:18:28:48.290: ok
an x50, y50 dann den z_offset_scan gemacht
Recv:18:32:08.756: // FINISHED z = -0.824431
Recv:18:32:08.758: // New z_offset: -0.010584

Natürlich, save_config gemacht und Restart.

Dann home und auf x50,y20 z0.5 gestellt. Die 0.75 Lehre geht streng, die 0.70 Lehre komplett locker durch.

Da kann es jetzt keine Blase unten Material oder Tape sein. Blankes fast originales ALU.
G1 Z0 gemacht, da sieht man unter der Düse durch.

Das es ALU ist, sieht man auch beim PROBE_ACCURACY
Recv:18:45:31.734: // Commencing fast approach.
Recv:18:45:32.555: // z = 1.148069, force = 0
Recv:18:45:32.744: // z = 1.098069, force = 0
Recv:18:45:32.935: // z = 1.048069, force = 0
Recv:18:45:33.124: // z = 0.998069, force = 0
Recv:18:45:33.314: // z = 0.948069, force = 0
Recv:18:45:33.504: // z = 0.898069, force = 0
Recv:18:45:33.693: // z = 0.848069, force = 0
Recv:18:45:33.883: // z = 0.798069, force = 0
Recv:18:45:34.072: // z = 0.748069, force = 0
Recv:18:45:34.261: // z = 0.698069, force = 0
Recv:18:45:34.452: // z = 0.648069, force = 1
Recv:18:45:34.642: // z = 0.598069, force = 0
Recv:18:45:34.832: // z = 0.548069, force = 0
Recv:18:45:35.022: // z = 0.498069, force = 0
Recv:18:45:35.211: // z = 0.448069, force = 0
Recv:18:45:35.400: // z = 0.398069, force = 0
Recv:18:45:35.589: // z = 0.348069, force = 0
Recv:18:45:35.780: // z = 0.298069, force = 0
Recv:18:45:35.970: // z = 0.248069, force = 0
Recv:18:45:36.160: // z = 0.198069, force = 0
Recv:18:45:36.349: // z = 0.148069, force = -1
Recv:18:45:36.539: // z = 0.098069, force = -1
Recv:18:45:36.729: // z = 0.048069, force = 0
Recv:18:45:36.918: // z = -0.001931, force = -1
Recv:18:45:37.109: // z = -0.051931, force = 0
Recv:18:45:37.298: // z = -0.101931, force = 0
Recv:18:45:37.488: // z = -0.151931, force = 0
Recv:18:45:37.679: // z = -0.201931, force = 0
Recv:18:45:37.869: // z = -0.251931, force = 0
Recv:18:45:38.059: // z = -0.301931, force = 0
Recv:18:45:38.249: // z = -0.351931, force = 0
Recv:18:45:38.438: // z = -0.401931, force = 0
Recv:18:45:38.627: // z = -0.451931, force = -1
Recv:18:45:38.818: // z = -0.501931, force = -1
Recv:18:45:39.008: // z = -0.551931, force = 0
Recv:18:45:39.197: // z = -0.601931, force = 0
Recv:18:45:39.387: // z = -0.651931, force = -1
Recv:18:45:39.577: // z = -0.701931, force = 0
Recv:18:45:39.768: // z = -0.751931, force = 0
Recv:18:45:39.958: // z = -0.801931, force = 0
Recv:18:45:40.147: // z = -0.851931, force = 0
Recv:18:45:40.337: // z = -0.901931, force = 0
Recv:18:45:40.526: // z = -0.951931, force = 0
Recv:18:45:40.716: // z = -1.001931, force = 0
Recv:18:45:40.907: // z = -1.051931, force = 0
Recv:18:45:41.097: // z = -1.101931, force = -6
Recv:18:45:41.287: // z = -1.151931, force = -242
Recv:18:45:42.550: // Fast approach found contact.
Recv:18:45:42.550: // Commencing iterative search.
Recv:18:45:43.812: // z = -0.801931, step size 0.050000, force = -942
Recv:18:45:45.073: // z = -0.751931, step size 0.050000, force = 0
Recv:18:45:46.335: // z = -0.776931, step size -0.025000, force = 0
Recv:18:45:47.593: // z = -0.801931, step size -0.025000, force = 1
Recv:18:45:48.856: // z = -0.826931, step size -0.025000, force = 1
Recv:18:45:50.117: // z = -0.876931, step size -0.050000, force = 94
Recv:18:45:51.378: // z = -0.851931, step size 0.025000, force = 7
Recv:18:45:52.642: // z = -0.864431, step size -0.012500, force = 35
Recv:18:45:52.643: // Search completed.
Recv:18:45:52.644: // PERFORM FIT split_point = -0.864431
Recv:18:45:53.903: // z = -0.881431, step size 0.006250, force = 120
Recv:18:45:55.165: // z = -0.883431, step size 0.006250, force = 129
Recv:18:45:56.427: // z = -0.885431, step size 0.006250, force = 132
Recv:18:45:57.694: // z = -0.887431, step size 0.006250, force = 141
Recv:18:45:58.955: // z = -0.889431, step size 0.006250, force = 154
Recv:18:46:00.214: // z = -0.891431, step size 0.006250, force = 168
Recv:18:46:01.475: // z = -0.893431, step size 0.006250, force = 185
Recv:18:46:02.737: // z = -0.895431, step size 0.006250, force = 197
Recv:18:46:04.001: // z = -0.897431, step size 0.006250, force = 204
Recv:18:46:05.261: // z = -0.899431, step size 0.006250, force = 221
Recv:18:46:05.262: // FINISHED z = -0.861252
Recv:18:46:05.263: // probe accuracy results: maximum -0.856023, minimum -0.864069, range 0.008047, average -0.860207, median -0.860099, standard deviation 0.002375
Recv:18:46:05.263: ok
Irgendwo passt für mich da was nicht zusammen. Ich habe beim Z_offset_scan nicht den Korrekturwert den ich erwarten würde.

Nochmals den z_offset_scan gemacht an x10 y50 weil dort fängt auch der HBS an.
Recv:18:51:25.439: // FINISHED z = -0.929879
Recv:18:51:25.440: // New z_offset: -0.019294
das sind 0.02 mm Korrektur.
Fahre ich auf der Position auf z0.5 geht wieder der 0.70 Spion durch. Mit G1 Z0 sieht man durch.

Re: Klipper auf dem RF2000V2

Verfasst: Mo 30. Nov 2020, 21:36
von mhier
Nein da passt was definitiv nicht. Kann das sein, dass du noch irgendwelche zusätzlichen Offsets irgendwie eingestellt hast? Evtl. werden die vom Scan nicht korrekt berücksichtigt (was ich als Bug ansehen würde).

Poste mal bitte das Log vom Start von Klipper, wo er die komplette Config ausprintet (da ist man sicher, dass man nicht irgendwelche Overrides übersieht).

Der Scan an sich funktioniert tadellos. In sich ist das Ergebnis schlüssig. Es kann im Grunde nur so sein, dass irgendwo dann noch wieder ein Offset drauf kommt, den man da jetzt nicht sieht.

Kannst du auch noch mal bitte prüfen, ob du wirklich auf dem aktuellen Stand von meinem Fork bist? Ich hatte da ja genau solche Bugs drin...

Re: Klipper auf dem RF2000V2

Verfasst: Di 1. Dez 2020, 06:50
von af0815
Das Log sieht identisch zu den geladenen Teilen der Konfig aus.

Ich spiel den git am RasPi nochmals neu ein. Der GIT ist bei mir ident
This branch is even with RF1000community:master.
Trotzdem werde ich das am RasPi sicherheitshalber auch nochmals neu laden.

Re: Klipper auf dem RF2000V2

Verfasst: Di 1. Dez 2020, 12:18
von mhier
Hm da ist nichts zu sehen...

Kannst du mal auf Z=0 fahren und GET_POSITION ausführen? Da sieht man die Position in den verschiedenen Koordinaten-Systemen...

Re: Klipper auf dem RF2000V2

Verfasst: Di 1. Dez 2020, 16:30
von af0815
Alles neu gemacht am RasPi.

klipper gelöscht und alles neu eingespielt, auch neu geflashed. Kein z_offset, keine HBS Matrix.
Recv:16:25:47.813: // Commencing fast approach.
Recv:16:25:48.636: // z = 2.000000, force = 0
Recv:16:25:48.826: // z = 1.950000, force = 1
Recv:16:25:49.015: // z = 1.900000, force = 0
Recv:16:25:49.204: // z = 1.850000, force = 0
Recv:16:25:49.393: // z = 1.800000, force = 0
Recv:16:25:49.583: // z = 1.750000, force = 0
Recv:16:25:49.772: // z = 1.700000, force = 0
Recv:16:25:49.962: // z = 1.650000, force = 0
Recv:16:25:50.152: // z = 1.600000, force = 1
Recv:16:25:50.342: // z = 1.550000, force = 0
Recv:16:25:50.532: // z = 1.500000, force = 0
Recv:16:25:50.722: // z = 1.450000, force = 1
Recv:16:25:50.911: // z = 1.400000, force = 1
Recv:16:25:51.100: // z = 1.350000, force = 2
Recv:16:25:51.290: // z = 1.300000, force = 1
Recv:16:25:51.480: // z = 1.250000, force = 2
Recv:16:25:51.668: // z = 1.200000, force = 1
Recv:16:25:51.857: // z = 1.150000, force = 0
Recv:16:25:52.047: // z = 1.100000, force = 0
Recv:16:25:52.236: // z = 1.050000, force = 2
Recv:16:25:52.425: // z = 1.000000, force = 1
Recv:16:25:52.615: // z = 0.950000, force = 1
Recv:16:25:52.805: // z = 0.900000, force = 1
Recv:16:25:52.994: // z = 0.850000, force = 1
Recv:16:25:53.182: // z = 0.800000, force = 0
Recv:16:25:53.371: // z = 0.750000, force = 1
Recv:16:25:53.561: // z = 0.700000, force = 2
Recv:16:25:53.750: // z = 0.650000, force = 2
Recv:16:25:53.940: // z = 0.600000, force = 1
Recv:16:25:54.129: // z = 0.550000, force = 2
Recv:16:25:54.320: // z = 0.500000, force = 0
Recv:16:25:54.508: // z = 0.450000, force = 1
Recv:16:25:54.697: // z = 0.400000, force = 1
Recv:16:25:54.888: // z = 0.350000, force = 1
Recv:16:25:55.077: // z = 0.300000, force = 1
Recv:16:25:55.266: // z = 0.250000, force = 2
Recv:16:25:55.455: // z = 0.200000, force = 2
Recv:16:25:55.645: // z = 0.150000, force = 1
Recv:16:25:55.834: // z = 0.100000, force = 1
Recv:16:25:56.025: // z = 0.050000, force = 2
Recv:16:25:56.214: // z = -0.000000, force = 1
Recv:16:25:56.404: // z = -0.050000, force = 2
Recv:16:25:56.594: // z = -0.100000, force = 2
Recv:16:25:56.785: // z = -0.150000, force = 2
Recv:16:25:56.974: // z = -0.200000, force = 2
Recv:16:25:57.164: // z = -0.250000, force = 2
Recv:16:25:57.353: // z = -0.300000, force = 1
Recv:16:25:57.544: // z = -0.350000, force = 2
Recv:16:25:57.734: // z = -0.400000, force = 1
Recv:16:25:57.923: // z = -0.450000, force = 2
Recv:16:25:58.111: // z = -0.500000, force = 2
Recv:16:25:58.300: // z = -0.550000, force = 2
Recv:16:25:58.488: // z = -0.600000, force = 2
Recv:16:25:58.678: // z = -0.650000, force = 2
Recv:16:25:58.869: // z = -0.700000, force = 1
Recv:16:25:59.059: // z = -0.750000, force = 2
Recv:16:25:59.248: // z = -0.800000, force = 1
Recv:16:25:59.437: // z = -0.850000, force = 2
Recv:16:25:59.626: // z = -0.900000, force = 0
Recv:16:25:59.815: // z = -0.950000, force = 2
Recv:16:26:00.005: // z = -1.000000, force = 2
Recv:16:26:00.195: // z = -1.050000, force = 1
Recv:16:26:00.384: // z = -1.100000, force = 2
Recv:16:26:00.574: // z = -1.150000, force = 1
Recv:16:26:00.763: // z = -1.200000, force = -87
Recv:16:26:02.024: // Fast approach found contact.
Recv:16:26:02.025: // Commencing iterative search.
Recv:16:26:03.287: // z = -1.000000, step size 0.050000, force = -707
Recv:16:26:04.545: // z = -0.950000, step size 0.050000, force = 0
Recv:16:26:05.814: // z = -0.975000, step size -0.025000, force = 1
Recv:16:26:07.074: // z = -1.000000, step size -0.025000, force = 0
Recv:16:26:08.335: // z = -1.025000, step size -0.025000, force = 0
Recv:16:26:09.595: // z = -1.075000, step size -0.050000, force = 6
Recv:16:26:10.856: // z = -1.125000, step size -0.050000, force = 220
Recv:16:26:12.118: // z = -1.100000, step size 0.025000, force = 82
Recv:16:26:13.381: // z = -1.075000, step size 0.025000, force = 5
Recv:16:26:14.642: // z = -1.087500, step size -0.012500, force = 26
Recv:16:26:14.643: // Search completed.
Recv:16:26:14.643: // PERFORM FIT split_point = -1.090625
Recv:16:26:15.905: // z = -1.075625, step size 0.006250, force = 8
Recv:16:26:17.172: // z = -1.077625, step size 0.006250, force = 9
Recv:16:26:18.432: // z = -1.079625, step size 0.006250, force = 10
Recv:16:26:19.690: // z = -1.081625, step size 0.006250, force = 13
Recv:16:26:20.950: // z = -1.083625, step size 0.006250, force = 23
Recv:16:26:22.209: // z = -1.085625, step size 0.006250, force = 28
Recv:16:26:23.467: // z = -1.087625, step size 0.006250, force = 29
Recv:16:26:24.725: // z = -1.089625, step size 0.006250, force = 35
Recv:16:26:25.986: // z = -1.091625, step size 0.006250, force = 47
Recv:16:26:27.246: // z = -1.093625, step size 0.006250, force = 54
Recv:16:26:28.506: // z = -1.095625, step size 0.006250, force = 71
Recv:16:26:29.767: // z = -1.097625, step size 0.006250, force = 72
Recv:16:26:31.029: // z = -1.099625, step size 0.006250, force = 80
Recv:16:26:31.030: // Fit result: m = -0.000256, b = -1.078974, r = -0.984820
Recv:16:26:31.031: // FINISHED z = -1.078974
Recv:16:26:33.453: // Commencing fast approach.
Recv:16:26:34.276: // z = 2.000000, force = 0
Recv:16:26:34.466: // z = 1.950000, force = 0
Recv:16:26:34.655: // z = 1.900000, force = 1
Recv:16:26:34.845: // z = 1.850000, force = 1
Recv:16:26:35.034: // z = 1.800000, force = 2
Recv:16:26:35.223: // z = 1.750000, force = 2
Recv:16:26:35.412: // z = 1.700000, force = 2
Recv:16:26:35.602: // z = 1.650000, force = 2
Recv:16:26:35.792: // z = 1.600000, force = 2
Recv:16:26:35.982: // z = 1.550000, force = 2
Recv:16:26:36.172: // z = 1.500000, force = 4
Recv:16:26:36.362: // z = 1.450000, force = 2
Recv:16:26:36.550: // z = 1.400000, force = 2
Recv:16:26:36.739: // z = 1.350000, force = 2
Recv:16:26:36.929: // z = 1.300000, force = 3
Recv:16:26:37.119: // z = 1.250000, force = 4
Recv:16:26:37.309: // z = 1.200000, force = 3
Recv:16:26:37.499: // z = 1.150000, force = 3
Recv:16:26:37.688: // z = 1.100000, force = 3
Recv:16:26:37.877: // z = 1.050000, force = 4
Recv:16:26:38.067: // z = 1.000000, force = 4
Recv:16:26:38.256: // z = 0.950000, force = 3
Recv:16:26:38.444: // z = 0.900000, force = 4
Recv:16:26:38.635: // z = 0.850000, force = 4
Recv:16:26:38.824: // z = 0.800000, force = 4
Recv:16:26:39.013: // z = 0.750000, force = 3
Recv:16:26:39.202: // z = 0.700000, force = 5
Recv:16:26:39.392: // z = 0.650000, force = 5
Recv:16:26:39.581: // z = 0.600000, force = 4
Recv:16:26:39.770: // z = 0.550000, force = 4
Recv:16:26:39.960: // z = 0.500000, force = 4
Recv:16:26:40.150: // z = 0.450000, force = 4
Recv:16:26:40.339: // z = 0.400000, force = 6
Recv:16:26:40.531: // z = 0.350000, force = 5
Recv:16:26:40.720: // z = 0.300000, force = 4
Recv:16:26:40.909: // z = 0.250000, force = 4
Recv:16:26:41.098: // z = 0.200000, force = 4
Recv:16:26:41.287: // z = 0.150000, force = 5
Recv:16:26:41.478: // z = 0.100000, force = 5
Recv:16:26:41.667: // z = 0.050000, force = 5
Recv:16:26:41.856: // z = -0.000000, force = 5
Recv:16:26:42.046: // z = -0.050000, force = 5
Recv:16:26:42.236: // z = -0.100000, force = 5
Recv:16:26:42.426: // z = -0.150000, force = 4
Recv:16:26:42.615: // z = -0.200000, force = 5
Recv:16:26:42.804: // z = -0.250000, force = 5
Recv:16:26:42.993: // z = -0.300000, force = 5
Recv:16:26:43.183: // z = -0.350000, force = 4
Recv:16:26:43.372: // z = -0.400000, force = 5
Recv:16:26:43.561: // z = -0.450000, force = 5
Recv:16:26:43.750: // z = -0.500000, force = 5
Recv:16:26:43.939: // z = -0.550000, force = 6
Recv:16:26:44.129: // z = -0.600000, force = 5
Recv:16:26:44.319: // z = -0.650000, force = 6
Recv:16:26:44.508: // z = -0.700000, force = 5
Recv:16:26:44.697: // z = -0.750000, force = 6
Recv:16:26:44.887: // z = -0.800000, force = 5
Recv:16:26:45.076: // z = -0.850000, force = 5
Recv:16:26:45.265: // z = -0.900000, force = 6
Recv:16:26:45.455: // z = -0.950000, force = 5
Recv:16:26:45.645: // z = -1.000000, force = 5
Recv:16:26:45.834: // z = -1.050000, force = 3
Recv:16:26:46.677: // z = -1.100000, force = -1136
Recv:16:26:47.936: // Fast approach found contact.
Recv:16:26:47.936: // Commencing iterative search.
Recv:16:26:49.199: // z = -0.900000, step size 0.050000, force = -1141
Recv:16:26:50.460: // z = -0.850000, step size 0.050000, force = 0
Recv:16:26:51.722: // z = -0.875000, step size -0.025000, force = 0
Recv:16:26:52.990: // z = -0.900000, step size -0.025000, force = 0
Recv:16:26:54.249: // z = -0.925000, step size -0.025000, force = 0
Recv:16:26:55.509: // z = -0.975000, step size -0.050000, force = 75
Recv:16:26:56.768: // z = -0.950000, step size 0.025000, force = 3
Recv:16:26:58.025: // z = -0.962500, step size -0.012500, force = 18
Recv:16:26:58.025: // Search completed.
Recv:16:26:58.025: // PERFORM FIT split_point = -0.965625
Recv:16:26:59.286: // z = -0.950625, step size 0.006250, force = 3
Recv:16:27:00.547: // z = -0.952625, step size 0.006250, force = 6
Recv:16:27:01.807: // z = -0.954625, step size 0.006250, force = 7
Recv:16:27:03.067: // z = -0.956625, step size 0.006250, force = 9
Recv:16:27:04.322: // z = -0.958625, step size 0.006250, force = 15
Recv:16:27:05.582: // z = -0.960625, step size 0.006250, force = 18
Recv:16:27:06.842: // z = -0.962625, step size 0.006250, force = 18
Recv:16:27:08.102: // z = -0.964625, step size 0.006250, force = 23
Recv:16:27:09.361: // z = -0.966625, step size 0.006250, force = 33
Recv:16:27:10.618: // z = -0.968625, step size 0.006250, force = 43
Recv:16:27:11.878: // z = -0.970625, step size 0.006250, force = 62
Recv:16:27:13.137: // z = -0.972625, step size 0.006250, force = 63
Recv:16:27:14.396: // z = -0.974625, step size 0.006250, force = 73
Recv:16:27:15.656: // z = -0.976625, step size 0.006250, force = 84
Recv:16:27:15.657: // Fit result: m = -0.000230, b = -0.957679, r = -0.975123
Recv:16:27:15.658: !! Fit failed, r too small: 0.975123 < 0.980000 (2)
Recv:16:27:15.658: ok
Diesmal läuft der HBS nicht durch. Was ist r ?

Edit:
Send:16:30:07.315: #GET_POSITION
Recv:16:30:07.315: // mcu: stepper_x:2 stepper_y:-50 stepper_z:-6
Recv:16:30:07.315: // stepper: stepper_x:57.500625 stepper_y:49.999688 stepper_z:-0.978516
Recv:16:30:07.315: // kinematic: X:57.500625 Y:49.999688 Z:-0.978516
Recv:16:30:07.316: // toolhead: X:57.500000 Y:50.000000 Z:-0.978625 E:0.000000
Recv:16:30:07.316: // gcode: X:57.500000 Y:50.000000 Z:-0.978625 E:0.000000
Recv:16:30:07.316: // gcode base: X:0.000000 Y:0.000000 Z:0.000000 E:0.000000
Recv:16:30:07.316: // gcode homing: X:0.000000 Y:0.000000 Z:0.000000
Recv:16:30:07.316: ok
Nach G1 Z5 und G1 Z0
Send:16:32:28.975: #GET_POSITION
Recv:16:32:28.976: // mcu: stepper_x:2 stepper_y:-50 stepper_z:2499
Recv:16:32:28.976: // stepper: stepper_x:57.500625 stepper_y:49.999688 stepper_z:-0.000000
Recv:16:32:28.976: // kinematic: X:57.500625 Y:49.999688 Z:-0.000000
Recv:16:32:28.976: // toolhead: X:57.500000 Y:50.000000 Z:0.000000 E:0.000000
Recv:16:32:28.976: // gcode: X:57.500000 Y:50.000000 Z:0.000000 E:0.000000
Recv:16:32:28.976: // gcode base: X:0.000000 Y:0.000000 Z:0.000000 E:0.000000
Recv:16:32:28.976: // gcode homing: X:0.000000 Y:0.000000 Z:0.000000
Recv:16:32:28.976: ok

Re: Klipper auf dem RF2000V2

Verfasst: Di 1. Dez 2020, 18:22
von mhier
Deine Platte liegt nicht perfekt auf dem Bett auf, oder du hast Kunststoffreste an der Düse. Das sieht man hier jetzt ganz eindeutig in dem angehängten Plot (X-Achse ist z-Position in mm, y-Achse ist Kraft in Digits). Wenn man zu negativen Z hin fährt, gibt es zunächst einen flachen Anstieg der gemessenen Kraft. Dann bei ca. -0.965 gibt es einen Knick, weil entweder die Platte auf dem Bett angekommen ist, oder weil die Kuststoffreste sich vollständig eingedrückt haben.

Vielleicht liegt auch noch ein anderes mechanisches Problem dahinter. Vielleicht gibt irgendwas bei deiner Befestigung des Hotends nach - wir reden hier um 1/100 Millimeter.

Im Prinzip wäre das eigentlich kein Problem (weil eben nur 1/100mm Unterschied). Anscheinend ist aber das Qualitätskriterum im Moment zu streng eingestellt und bricht dann den Scan ab. R ist der Korrelationskoeffizient, durch den Knick ist der natürlich nicht mehr so gut. Du kannst erstmal die Anforderung an diesen herabsetzen mit dem Parameter "fit_min_quality" im Config File. Im Moment ist 0.98 der Standard-Wert. Setz ihn mal auf 0.95 oder gar 0.90 herab, dann sollte der Scan durchlaufen. Ein zu geringer Wert erlaubt aber natürlich, dass der Scan durchläuft, obwohl der Fit zu ungenau ist.

Mein Plan ist, das in diesem Punkt noch mal so zu überarbeiten, dass der Algorithmus beim Messen diesen Knick erkennt und dort entweder abbricht, oder falls nötig mehr Messpunkte oberhalb des Knicks nimmt, um die angestrebte Genauigkeit zu erreichen.

Vielleicht ist das alles für den HBS eher übertrieben, da braucht man wohl eher keine Genauigkeit im Mikrometerbereich. Ich möchte das aber trotzdem möglichst optimieren, da ich immer Probleme mit der Genauigkeit beim Fräsen hatte (PCBs fräsen, da möchte ich 35 Mikrometer Kupfer entfernen aber möglichst wenig Trägermaterial). Und Schaden kann die Genauigkeit zum Drucken sicher auch nicht ;-)

Der GET_POSITION Befehl macht Sinn, nachdem der Scan durchgelaufen ist. Stelle den Drucker dann auf Z=0 (G1 Z0) und führe GET_POSITION aus. Dann sollte man die Z-Koordinaten zwischen toolhead und kinematic vergleichen können. Der Unterschied sollte genau die Korrektur aus dem Mesh-Leveling an dem Punkt plus der Z-Offset durch den Z_OFFSET_SCAN sein. Andernfalls ist da irgendwo noch ein anderer Offset im Spiel.

Re: Klipper auf dem RF2000V2

Verfasst: Di 1. Dez 2020, 20:41
von af0815
Es ist interessant, da gegenüber dem letzten Versuch nichts an der Anordnung geändert wurde. Die Düse ist vorgestern gereinigt worden, besonders an der Planseite. Alles Tape vom Bett entfernt worden. Dann habe ich die Versuche am blanken ALU gemacht. Da hat der HBS ohne Probleme funktioniert. Es ist nur die Software komplett entfernt (bis auf die printer.cfg) und neu aufgespielt worden. Zusätzlich alle automatischen Werte aus der config entfernt. Anschliessend habe ich die Firmware neu kompiliert und übertragen. Dann wieder den HBS gemacht.

Dazwischen ist der Hotend niemals auch nur erwärmt worden und sieht mit dem Inspektionsspiegel betrachtet, auch absolut gleich aus. So das von dort keine Änderung am System gemacht wurde.

Die Aufhängung des Hotends ist bei mir komplett in Metall, wie original. Das ist absolut steif wie Bock.

BTW wenn du einen Parameter schreibst, dann ist es schön zu wissen wohin der kommen soll. Ich habe bed_mesh angenommen (damit war klippy wiedermal tot), nur gehört der in load_cell_probe, das vom Bed mesh verwendet wird.

Diesmal mit der Änderung durchgelaufen. Ausser Parameter auf 0.90 geändert
Recv:20:21:41.591: // z = -0.714125, step size 0.006250, force = 88
Recv:20:21:41.592: // Fit result: m = -0.000232, b = -0.694587, r = -0.988768
Recv:20:21:41.592: // FINISHED z = -0.694587
Recv:20:21:41.606: // Mesh Bed Leveling Complete
Recv:20:26:12.228: // z = -1.024874, step size 0.006250, force = 65
Recv:20:26:13.496: // z = -1.026874, step size 0.006250, force = 74
Recv:20:26:13.497: // Fit result: m = -0.000268, b = -1.007499, r = -0.989338
Recv:20:26:13.497: // FINISHED z = -1.007499
Recv:20:26:13.499: // New z_offset: -0.040751
Send:20:26:54.281: N38 G1 x50 y10
Recv:20:26:54.283: ok
Send:20:27:00.789: N45 g1 z0.5
Recv:20:27:00.790: ok
Send:20:27:56.808: N102 g1 z0
Recv:20:27:56.810: ok
Send:20:28:07.671: #get_position
Recv:20:28:07.673: // mcu: stepper_x:-1178 stepper_y:-6155 stepper_z:-2612
Recv:20:28:07.673: // stepper: stepper_x:49.999688 stepper_y:10.001250 stepper_z:-1.007422
Recv:20:28:07.674: // kinematic: X:49.999688 Y:10.001250 Z:-1.007422
Recv:20:28:07.674: // toolhead: X:50.000000 Y:10.000000 Z:-1.007499 E:0.000000
Recv:20:28:07.674: // gcode: X:50.000000 Y:10.000000 Z:0.000000 E:0.000000
Recv:20:28:07.674: // gcode base: X:0.000000 Y:0.000000 Z:0.000000 E:0.000000
Recv:20:28:07.675: // gcode homing: X:0.000000 Y:0.000000 Z:0.000000
Recv:20:28:07.675: ok
So wie es aussieht passt die Höhe jetzt genau. Das aber nur deswegen, weil ich das nicht genauer messen kann. Bei einer Höhe von 0.10 komme ich mit dem 0.10 Spion durch, kratzt aber ganz leicht an (lockerer Schiebesitz). Mit 0.15 komm ich nicht durch ohne das System zu beeinflussen.

Wie gesagt, erst jetzt bin ich mir sicher wirklich alle alten Softwarebestandteile entfernt zu haben.

Das nächste wird sein, wieder alles bespannen und einmal mit Filament wieder zu testen.

Re: Klipper auf dem RF2000V2

Verfasst: Di 1. Dez 2020, 21:40
von mhier
Was mir gerade auffällt: Deine vorher geposteten Logs (z.B. Beitrag #63 - also vor deiner Aufräumaktion) hatten nicht die Zeile im Output:

Code: Alles auswählen

Recv:16:27:15.657: // Fit result: m = -0.000230, b = -0.957679, r = -0.975123
Das bedeutet wohl, dass dort nicht die aktuellste Version der Firmware lief, in der ich die Fehler beseitigt hatte. Ich hatte dort in Berechnungen statt compensation_z_lift nur fit_step_size abgezogen. Das gibt einen konstanten Offset von knapp 0.2mm bei Default-Einstellungen. Das würde ja passen... ;-)

Wie gesagt kann man eine Höhe von 0 optisch ziemlich gut "messen". Wenn man die Z-Position findet, bei der man gerade eben nicht unter der Düse durchsehen kann (von hinten mit möglichst kleiner Lichtquelle beleuchten!), dann ist das die tatsächliche Z=0 Position. Das geht auf wenige 1/100mm genau. Aber es ist natürlich gut, das mit möglichst vielen verschiedenen Messmethoden zu verifizieren.

Ich habe gerade ncoh mal etwas robustere Default-Parameter gepusht. Außerdem arbeite ich gerade daran, den Fit generell noch zu verbessern für den Fall, dass es eben jenen Knick in der Kraft-Kurve gibt. Das dauert aber sicher noch den ein oder anderen Tag... Nebenbei druckt mein Drucker gerade eh, daher erstmal nur "Trockenübungen" ;-)