Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Oprogramowanie sterownika drukarki i do łączenia komputera z drukarką
Awatar użytkownika
JGFTW
Drukarz
Postów w temacie: 6
Posty: 1348
Rejestracja: 14 sie 2019, 05:19
Lokalizacja: Wrocław
Drukarka: Ender 3 v3 SE
x 714

Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: JGFTW »

Stawiam Marlina 2.0 na SKR mini v1.1 w kolejnym klonie prusy MK2s ze stołem MK42. Ten stół ma to do siebie, że pomimo ścieżek z miedzi na całym stole ma 9 punktów, w których są zwoje miedzi w celu dokładniejsze wykrywania przez czujnik indukcyjny. Empirycznie zauważyłem, że zwoje w tych miejscach wykrywają się o 1cm wyżej niż wiązka w pozostałych miejscach na stole.
mk42.png
Źródło : https://github.com/prusa3d/Original-Pru ... bed%20MK42

Początkowo myślałem, że uda się zwyczajnie wyspecyfikować dokładne położenie każdego z 9 punktów, ale nie mogę znaleźć nigdzie w plikach konfiguracyjnych takiej opcji. Może ktoś wie jak się nazywa funkcja, która coś takiego pozwala zrobić ? Czy to już trzeba kod pisać w probe.h/probe.cpp (zaglądałem do tych plików, ale nie umiem w komputer dobrze, żeby to ogarnąć) ?

Jedyną opcją wydaję się ustawienie siatki punktów 3x3 i ustawienie ograniczenia, tak żeby te punkty były wewnątrz :

Kod: Zaznacz cały

    #define MIN_PROBE_EDGE_LEFT 35
    #define MIN_PROBE_EDGE_RIGHT 238
    #define MIN_PROBE_EDGE_FRONT 7
    #define MIN_PROBE_EDGE_BACK 202.4
Skorzystałem z wartości jakie są tutaj : https://github.com/MarlinFirmware/Marlin/issues/6199
Docelowo chciałem, sprawdzić czy taka opcja w ogóle zadziała, jednak dostaję błąd:

Kod: Zaznacz cały

>>> g29
SENDING:G29
Set Trail 1
? (L,R,F,B) out of bounds.
>>> G29 L35 R238 F7 B202.4
SENDING:G29 L35 R238 F7 B202.4
Set Trail 1
? (L,R,F,B) out of bounds. 
Chyba jakiś bug: https://github.com/MarlinFirmware/Marlin/issues/10538 , więc spróbowałem ustawić UBL.

Zmieniłem więc z Bilinear na UBL. I po zmierzeniu w KiCadzie odpowiednich współrzędnych wrzuciłem do configuration_adv.h :

Kod: Zaznacz cały

#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL)
  // Override the mesh area if the automatic (max) area is too large
  //#define MESH_MIN_X MESH_INSET
  //#define MESH_MIN_Y MESH_INSET
  //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET)
  //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET)
  #define MESH_MIN_X 31.16
  #define MESH_MIN_Y 241.93
  #define MESH_MAX_X 3.2
  #define MESH_MAX_Y 207.2
#endif
Niestety wrzucając komendę G29 - nic się nie dzieję, natomiast jeżeli skorzystam z G29 P1

To dzieję się dokładnie to co jest napisane w dokumentacji Marlina :

When you do a G28 and then a G29 P1 to automatically build your first mesh, you’ll notice that UBL probes increasingly far from the starting location. (The starting location defaults to the center of the bed.) Other grid leveling systems start in the corner and probe in a zigzag. UBL’s pattern is better for Delta machines, allowing for the center of the Mesh to be populated (and edited) more quickly.
Czyli stół jedzie gdzieś w .... i nici z kalibracji :D

Może ktoś już miał przyjemność ustawiania stołu MK42 w Marlinie 2.0?
Lub wie jak zmusić sprzęt do kalibrowania krzywizny stołu w 9 konkretnych punktach?

Moje pliki konfiguracyjne ;
Configuration.h
(79.1 KiB) Pobrany 179 razy
Configuration_adv.h
(112.17 KiB) Pobrany 171 razy
Awatar użytkownika
JGFTW
Drukarz
Postów w temacie: 6
Posty: 1348
Rejestracja: 14 sie 2019, 05:19
Lokalizacja: Wrocław
Drukarka: Ender 3 v3 SE
x 714

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: JGFTW »

W poprzednim poście i w kodzie był błąd.

Otóż powinno być tak :

Kod: Zaznacz cały

 #define MESH_MIN_X 31.16
 #define MESH_MAX_X 241.93
 #define MESH_MIN_Y 3.2
 #define MESH_MAX_Y 207.2
Wrzuciłem poprawiony i nie pomogło za wiele, teraz już stół nie ucieka jak poprzednio poza swój obszar, ponieważ użyłem komendy z innymi argumentami G29 Z C (uses the Current location (instead of bed center or nearest edge) ale wciąż nie jest to tam gdzie powinno - dodatkowo podczas próbkowania dochodzi do gubienia kroków i przez to obszar, który jest oznaczony powyżej jest zniekształcony. Kolejną rzeczą jest tworzenie siatki poprzez UBL z jakiegoś powodu zamiast 9 punktów, zbiera pomiar 100 punktów ...

Nie rokuję to dobrze, więc postanowiłem jeszcze spróbować uruchomić ABL Bilinear w Marlinie 2.0-bugfix.

Jednak w tej wersji również jest bug ? (L,R,F,B) out of bounds., a próbowałem wielu różnych argumentów dla LRFB - bezskutecznie.

Jak narazie rokowania nie wyglądaja za dobrze, wygląda na to, że mam takie opcje:

1. Próbować włączyć mesh bed leveling UBL lub Bilinear tylko w obszarze w jakim są te punkty,
2. Odszukać najstarszą wersję Marlina jaką da się skompilować dla SKR i zrobić wszystko dokładnie jak w tym filmiku od Chris Basement : https://www.youtube.com/watch?v=FEUAC1umFNk
3. Zmienić coś w kodzie, żeby te pomiary poziomowania stoły miały miejsce w 9 punktach (określonych współrzędnymi) ;)
4. Zaimplementować w Marlinie funkcję z Prusy FW :rotfl2:


Jak narazie opcja 1 nie działa. Opcja 2 ma największą szansę powodzenia, ale to dużo roboty. A do 3 i 4 przy moich umiejętnościach ma skrajnie nikłe szansę powodzenia (nawet nie wiem czy taką ilość jeszcze można uznać za możliwą ;) ) - zwyczajnie nie rozumiem jak ta funkcja poziomowania dokładnie działa - jakieś fragmenty są porozsiewane w różnych plikach w Marlinie/PrusaFW. Całość skompartmentalizowana i tajemnicza.

W życiu nie pomyślałbym, że ustawienie pomiaru krzywizny stołu w 9 konkretnych punktach to taki problem, a wręcz jest niemożliwe do zrobienia w Marlinie przez zwykłych śmiertelników :shock:
EG-SPOON
Postów w temacie: 1
Posty: 56
Rejestracja: 03 sie 2017, 06:29
Lokalizacja: xxx
x 7

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: EG-SPOON »

Może w takim przypadku warto rozważyć zamontowanie BlToutch ?
Awatar użytkownika
JGFTW
Drukarz
Postów w temacie: 6
Posty: 1348
Rejestracja: 14 sie 2019, 05:19
Lokalizacja: Wrocław
Drukarka: Ender 3 v3 SE
x 714

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: JGFTW »

To w sumie dobry pomysł, ale niestety nie mam BLToucha.

Jeżeli nie uda mi się ogarnąć tego oprogramowania to jedyna opcja związana ze zmianą sprzętu jaką bym mógł zrobić z tego co mam to przesiadka na coś z ATmegą (Ramps albo Mini-rambo) i wtedy wgranie FW Prusy z niewielkimi zmianami.

Jednak w chwili obecnej cały sprzęt mam już złożony i jedyna rzecz jaka pozostała to automatyczne poziomowanie stołu, więc chciałbym się na tym skupić zanim rzucę się w wir zmian sprzętowych ;)
Awatar użytkownika
Berg
Zasłużony
Postów w temacie: 2
Posty: 7569
Rejestracja: 05 lis 2016, 11:57
Lokalizacja: Kraków
Drukarka: Lume, K8400, HC Evo
x 2675

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: Berg »

czekaj, ale te punkty nie są do poziomowania. Po założeniem blachy przestaje mieć znaczenie ile punktów jest pod spodem. Z resztą oryginalny FW w Prusie nie poziomuje stołu w 9 tylko ... 49 punktach.

O ile pamiętam, bo dawno tego nie robiłem, to te punkty służą do kalibracji XY, tego, dokładnie gdzie jest punkt 0,0 na stole oraz korekty naciągu paska, na podstawie pomiaru odległości między lewym a prawym punktem. Co z resztą jest, w mojej opinii, funkcjonalności tylko dla totalnych newbie.
Awatar użytkownika
Berg
Zasłużony
Postów w temacie: 2
Posty: 7569
Rejestracja: 05 lis 2016, 11:57
Lokalizacja: Kraków
Drukarka: Lume, K8400, HC Evo
x 2675

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: Berg »

aaa. mowa o stole MK42 a nie MK52.

Powinno dać radę znaleźć w kodzie gdzie to się robi o zamienić kalkulację współrzędnych na tablicę ze współrzędnymi.

Co do gubienia kroków, mówisz o gubieniu w Z ? Wydaje mi się, że używa tego samego obniżonego prądu, co przy home a ruch góra dół jest szybszy tak że trzeba podnieść ten prąd i/albo obniżyć prędkość.
Awatar użytkownika
JGFTW
Drukarz
Postów w temacie: 6
Posty: 1348
Rejestracja: 14 sie 2019, 05:19
Lokalizacja: Wrocław
Drukarka: Ender 3 v3 SE
x 714

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: JGFTW »

O ile pamiętam, bo dawno tego nie robiłem, to te punkty służą do kalibracji XY, tego, dokładnie gdzie jest punkt 0,0 na stole oraz korekty naciągu paska, na podstawie pomiaru odległości między lewym a prawym punktem.
Tak w Prusie FW te punkty służą do wielu rzeczy, w tym te ustalenie przekrzywienia osi w osiach X,Y oraz mapowanie siatki płaszczyzny stołu i kompensacja wysokości (wysokie temperatury powodują, że ten stół nie trzyma płaszczyzny)

Ja jednak potrzebowałbym tylko to MBL.
Prusa FW ma 2 komendy, które korzystają z tych punktów; G29 i G80. Z tego co rozumiem G29 tylko robi pomiary w tych punktach , a G80 tworzy siatkę w oparciu o te 9 punktów i kompensuję krzywiznę. G80 mnie interesuję i super byłoby jakby dało się dodać to do Marlina.

Moja jedyna nadzieja to zebranie do kupy wszystkich wzmianek o tej funkcji i przekopiowanie jej do Marlina - co może pójść nie tak ? :crazy:
Powinno dać radę znaleźć w kodzie gdzie to się robi o zamienić kalkulację współrzędnych na tablicę ze współrzędnymi.

Jeżeli to nie byłoby skrzętnie ukrytę i tak trudne do zrozumienia to byłoby super. Szczerze mówiąc liczyłem, że na takiej zasadzie to zrobię - dodam wartości w jakiejś tablicy i tyle...

Znalazłem w ubl.cpp w Marlinie coś takiego, ale nie bardzo rozumiem:

Kod: Zaznacz cały

  const float
  unified_bed_leveling::_mesh_index_to_xpos[GRID_MAX_POINTS_X] PROGMEM = ARRAY_N(GRID_MAX_POINTS_X,
    _GRIDPOS(X,  0), _GRIDPOS(X,  1), _GRIDPOS(X,  2), _GRIDPOS(X,  3),
    _GRIDPOS(X,  4), _GRIDPOS(X,  5), _GRIDPOS(X,  6), _GRIDPOS(X,  7),
    _GRIDPOS(X,  8), _GRIDPOS(X,  9), _GRIDPOS(X, 10), _GRIDPOS(X, 11),
    _GRIDPOS(X, 12), _GRIDPOS(X, 13), _GRIDPOS(X, 14), _GRIDPOS(X, 15)
  ),
  unified_bed_leveling::_mesh_index_to_ypos[GRID_MAX_POINTS_Y] PROGMEM = ARRAY_N(GRID_MAX_POINTS_Y,
    _GRIDPOS(Y,  0), _GRIDPOS(Y,  1), _GRIDPOS(Y,  2), _GRIDPOS(Y,  3),
    _GRIDPOS(Y,  4), _GRIDPOS(Y,  5), _GRIDPOS(Y,  6), _GRIDPOS(Y,  7),
    _GRIDPOS(Y,  8), _GRIDPOS(Y,  9), _GRIDPOS(Y, 10), _GRIDPOS(Y, 11),
    _GRIDPOS(Y, 12), _GRIDPOS(Y, 13), _GRIDPOS(Y, 14), _GRIDPOS(Y, 15)
  );
jak mam z powyższego zrobić to, znalezione w Prusie FW :

Kod: Zaznacz cały

// Positions of the bed reference points in the machine coordinates, referenced to the P.I.N.D.A sensor.
// The points are ordered in a zig-zag fashion to speed up the calibration.
const float bed_ref_points[] PROGMEM = {
    13.f  - BED_ZERO_REF_X,   6.4f - BED_ZERO_REF_Y,
    115.f - BED_ZERO_REF_X,   6.4f - BED_ZERO_REF_Y,
    216.f - BED_ZERO_REF_X,   6.4f - BED_ZERO_REF_Y,

    216.f - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y,
    115.f - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y,
    13.f  - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y,

    13.f  - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y,
    115.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y,
    216.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y
};

// Positions of the bed reference points in the machine coordinates, referenced to the P.I.N.D.A sensor.
// The points are the following: center front, center right, center rear, center left.
const float bed_ref_points_4[] PROGMEM = {
    115.f - BED_ZERO_REF_X,   6.4f - BED_ZERO_REF_Y,
    216.f - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y,
    115.f - BED_ZERO_REF_X, 202.4f - BED_ZERO_REF_Y,
    13.f  - BED_ZERO_REF_X, 104.4f - BED_ZERO_REF_Y
};
Pooglądam różne pliki i coś poprzeklejam może zadziała ;)
Co do gubienia kroków, mówisz o gubieniu w Z ?
Nie, gubi mi kroki przy ruchu w X,Y pomiędzy pomiarami. Odkryłem, że jest taka opcja
#define XY_PROBE_SPEED , która domyślnie ma wartość 8000 [mm/min], być może to już jest za dużo i przeskakuję (zmniejszę na wszelki wypadek do 6000). Specjalnie ruch osi w Z obniżyłem wszędzie o 1/3 bo jednak nie chce perforowanego stołu ;)
Awatar użytkownika
JGFTW
Drukarz
Postów w temacie: 6
Posty: 1348
Rejestracja: 14 sie 2019, 05:19
Lokalizacja: Wrocław
Drukarka: Ender 3 v3 SE
x 714

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: JGFTW »

Kolejny dzień walki. Już pogodziłem się z tym, że UBL na Marlinie 2.0-bugfix nie działa dobrze - tak jak sam obszar chyba jest ok, pomiar dotyczy 9 punktów to wciąż mam problem z ruchem pomiędzy pomiarami:
- Silniki X,Y chodzą bardzo głośno pomimo obniżenia wszystkich prędkości (chyba już nie gubią kroków)
- Silniki w Z nie działają oba (tylko jeden) podczas pomiaru (ale podczas G28 oraz gdy zadaję im daną pozycję lub ruch o daną odległość to działają oba)

Wyleczyłem się całkowicie z ustawiania UBL. Ostatnie podejście do ABL Bilinear wyglądało tak, że nie specyfikowałem żadnego obszaru i G29 robi odpowiednie pomiary (na całym stole, ale nie w punktach) i żadnego dziwnego zachowania silników jak w UBL.

Zaczynam mieć wrażenie, że burak jest w tym kodzie związanym z ograniczeniem obszaru - tylko to nie działa.

Ustawiając te funkcję m.in w filmiku od Chris Basement jak i również w dyskusjach na githubie jest mowa o :

Kod: Zaznacz cały

#define LEFT_PROBE_BED_POSITION xx
#define RIGHT_PROBE_BED_POSITION xx
#define FRONT_PROBE_BED_POSITION xx
#define BACK_PROBE_BED_POSITION xx


Ale teraz te funkcję zostały zamienione :roll: według SanityCheck na
#error "FRONT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_FRONT.
Czyli jest tak :

Kod: Zaznacz cały

#elif defined(LEFT_PROBE_BED_POSITION)
  #error "LEFT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_LEFT. Please update your configuration."
#elif defined(RIGHT_PROBE_BED_POSITION)
  #error "RIGHT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_RIGHT. Please update your configuration."
#elif defined(FRONT_PROBE_BED_POSITION)
  #error "FRONT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_FRONT. Please update your configuration."
#elif defined(BACK_PROBE_BED_POSITION)
  #error "BACK_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_BACK. Please update your configuration." 
Zamieniając wartośc w konfiguracji na jakiekolwiek, wciąż jest ? (L,R,F,B) out of bounds :|

Może to jest kwestia, że wszedzie jest MIN_PROBE_EDGE_*, a brak jest MAX_PROBE_EDGE_* ?


Dodatkowo jest taka informacja dot. tego zakresu:

Kod: Zaznacz cały

* If you are replacing the prior *_PROBE_BED_POSITION options,
 * LEFT and FRONT values in most cases will map directly over
 * RIGHT and REAR would be the inverse such as
 * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION)
Ktoś jest w stanie rozszyfrować ten komentarz, bo kompletnie nie rozumiem ?
Awatar użytkownika
JGFTW
Drukarz
Postów w temacie: 6
Posty: 1348
Rejestracja: 14 sie 2019, 05:19
Lokalizacja: Wrocław
Drukarka: Ender 3 v3 SE
x 714

Re: Ustawianie automatycznego poziomowania w 9 punktach na stole MK42 w Marlinie 2.0.

Post autor: JGFTW »

Udało mi się rozszyfrować powyższy komentarz. Zmieniłem wartości i już nie mam problemu z ? (L,R,F,B) out of bounds

Kod: Zaznacz cały

  
  #define MIN_PROBE_EDGE_LEFT Z_SAFE_HOMING_X_POINT //coordinate for P1 ; X value
  #define MIN_PROBE_EDGE_RIGHT (250-(209.4+27.4)) // probe edge from right bed side  nozzle position X value
  #define MIN_PROBE_EDGE_FRONT Z_SAFE_HOMING_Y_POINT //coordinate for P1 ; Y value
  #define MIN_PROBE_EDGE_BACK (210-(196.8+7)) // probe edge from back to nozzle position Y value
Namieszane jest strasznie; w przypadku UBL wartości są pozycją czujnika, a w przypadku ABL Bilinear wartości są pozycją dyszy, dodatkowo przy ograniczeniu zakresu dla Bilinear w prawym i tylnim zakresie należy odjąć to od wielkości stołu. :crazy2:

Wciąż jednak mam problem związany z działaniem jednego silnika w Z.
Żeby zrozumieć skąd to może się brać to sprawdziłem różne prędkości i przy wartości feedrate powyżej 240 [mm/min] zamiast dwóch silników na osi Z rusza się tylko jeden. Dziwne. Wszędzie, gdzie trzeba było obniżyłem prędkość i tak będę drukował. 4mm/s prędkość posuwu w Z :lol:
ODPOWIEDZ

Wróć do „Firmware'y i hosty”