MKS GEN L i czujnik poziomowania 3d touch (bltouch)

Artykuł opisuje instalację oraz integrację czujnika 3D TOUCH od Trianglelabs, będącego klonem BLTOUCH. Płyta główna to MKS GEN L. Marlin w wersji 2.0.x. Całość zainstalowana na moim Enderze 3, choć tutaj, nie ma to większego znaczenia. 

Podłączenie

Czujnik podpinamy za pomocą 5 przewodów. Jedną parę (biały i czarny) wpinamy w miejsce endstopu Z. 

Pozostałe 3 przewody, wpinamy w następujący sposób

Kolor strzałek, odpowiada kolorom przewodów czujnika

 Konfiguracja Marlina

Do edycji i wgrania Marlina, używamy Arduino IDE. Będziemy edytować zawartość dwóch plików. Zaczynamy od configuration.h

#1 Zamień:

//#define ENDSTOPPULLUP_ZMIN_PROBE

na:

#define ENDSTOPPULLUP_ZMIN_PROBE

#2 Zamień:

#define Z_MIN_PROBE_ENDSTOP_INVERTING false

na:

#define Z_MIN_PROBE_ENDSTOP_INVERTING true

#3 Zamień:

//#define BLTOUCH
#if ENABLED(BLTOUCH) 
//#define BLTOUCH_DELAY 375 // (ms) Enable and increase if needed

na:

#define BLTOUCH
#if ENABLED(BLTOUCH)
#define BLTOUCH_DELAY 375 // (ms) Enable and increase if needed

#4 Dostosuj do swojej drukarki:

#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]

Jak mierzymy PORBE_OFFSET:

  • X_PROBE_OFFSET_FROM_EXTRUDER Odległość w osi X pomiędzy dyszą a igłą czujnika. Jeżeli (patrząc od przodu drukarki) czujnik jest po lewej stronie dyszy, wartość będzie ujemna (po prawej-dodatnia). Na przykładzie z rysunku poniżej, była by to wartość -44
  • Y_PROBE_OFFSET_FROM_EXTRUDER Odległość w osi Y pomiędzy dyszą a igłą czujnika. Ponownie, jeżeli czujnik jest przed dyszą, to wartość będzie ujemna, a jeżeli za dyszą, to dodatnia. Na przykładzie poniżej należało by ustawić -4 (zaokrąglając, bez ułamków).
  • Z_PROBE_OFFSET_FROM_EXTRUDER Ta odległość wg dokumentacji, powinna wynosić 4mm. Czyli musimy zadbać, żeby igła czujnika, znajdowała się 4mm ponad dyszą.

#5 Zamień:

#define MIN_SOFTWARE_ENDSTOP_Z

na:

//#define MIN_SOFTWARE_ENDSTOP_Z

#6 Zamień:

//#define AUTO_BED_LEVELING_BILINEAR

na:

#define AUTO_BED_LEVELING_BILINEAR

#7 Zamień:

//#define Z_SAFE_HOMING

na:

#define Z_SAFE_HOMING

#8 Zamień:

//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command

na:

#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command

#9 Zamień:

#define SERVO_DELAY { 300 }

na:

#define SERVO_DELAY { 300,300,300 }

#10 Zamień:

// Set the boundaries for probing (where the probe can reach).
//#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE
//#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE))
//#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE
//#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE))

na:

// Set the boundaries for probing (where the probe can reach).
#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE
#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE))
#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE
#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE))

Rozmiar roboczy stołu, musi się dzielić na 2 bez reszty. Dlatego dla Ender3 musiałem zmienić z 235 na 234

#11 Zamień:

// The size of the print bed
#define X_BED_SIZE 235
#define Y_BED_SIZE 235

na:

// The size of the print bed
#define X_BED_SIZE 234
#define Y_BED_SIZE 234

#12 Zamień:

#define MIN_PROBE_EDGE 10

na:

#define MIN_PROBE_EDGE (max(abs(X_PROBE_OFFSET_FROM_EXTRUDER),abs(Y_PROBE_OFFSET_FROM_EXTRUDER))+10)

#13 Zamień:

#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow

na:

#define Z_CLEARANCE_DEPLOY_PROBE 15 // Z Clearance for Deploy/Stow

#14 Zamień:

#define Z_CLEARANCE_BETWEEN_PROBES 5

na:

#define Z_CLEARANCE_BETWEEN_PROBES 10

 

Jeszcze dwie zmiany w pliku configuration_adv.h

#15 Zamień:

#define BABYSTEP_MULTIPLICATOR 1

na:

#define BABYSTEP_MULTIPLICATOR 10

#16 Zamień:

//#define BABYSTEP_ZPROBE_OFFSET

na:

#define BABYSTEP_ZPROBE_OFFSET

 

Kompilujemy

Czas na wgranie naszych zmian. Ctrl+U i wysyłamy Marlina do płyty głównej.

Pierwszy test – przy odpiętym kablu USB, włącz zasilanie drukarki. Prawidłowym zachowaniem czujnika jest dwukrotne wysunięcie (i schowanie) igły. Jeżeli tak się nie stało, sprawdź dokładnie podłączenie czujnika do płyty głównej.

Drugi test – Warto w tym miejscu być przygotowanym na wyłączenie zasilania całej drukarki, jeżeli czujnik nie zadziała tak, jak powinien. Z karetką uniesioną do połowy wysokości drukarki, uruchamiamy Auto Home z menu drukarki. Po wyzerowaniu osi X i Y, karetka zacznie się obniżać w kierunku stołu z wysuniętą igłą. Podkładamy palec pod igłę czujnika. Jeżeli czujnik nie zadziała i karetka będzie się w dalszym ciągu obniżać, wyłączamy zasilanie drukarki, żeby zapobiec uderzeniu hotendu w stół. Jeżeli czujnik zadziałał poprawnie, karetka powinna się unieść i ponownie zacząć opadać. Ponownie zatrzymujemy ją, blokując igłę czujnika palcem. Karetka powinna się unieść i zatrzymać. 

Regulacja

Ostatni krok, to regulacja offsetu czujnika. Tutaj posłużę się darmowym programem Pronterface. Pamiętamy żeby wcześniej zamknąć Arduino IDE, ponieważ program blokuje port COM.

Aby się połączyć z drukarką za pomocą kabla USB wybieramy [1]port, [2]prędkość i klikamy w [3]Connect. W prawym oknie oczekujemy komunikatu PRINTER ONLINE. 

Teraz w okienku poniżej, wpisujemy i zatwierdzamy każdorazowo klikając w [SEND], komendy z listy poniżej. Należy zawsze czekać na zakończenie się poprzedniej komendy. 

  • M851 Z0; usunięcie poprzedniego offsetu z eeprom
  • M500; zapisanie eeprom
  • M501; ustaw aktywne
  • M503; odczytaj aktywne
  • G28; zerowanie osi
  • G1 F60 Z0; opuszczenie karetki do pozycji 0
  • M211 S0; opcjonalnie, wyłączenie softendstopu jeżeli ten ficzer nie był wyłączony w Marlinie

Teraz za pomocą manipulatora w programie Pronterface regulujemy opuszczamy STOPNIOWO karetkę, tak żeby między stołem a dyszą mieściła się kartka papieru. Warto na początku używać niskich wartość 1 lub 0.1 żeby nie wjechać za mocno w stół.

Moja wypracowana metoda jest taka, że lepiej ustawić zbyt duży offset (luźna kartka) niż za mały. Potem, podczas drukowania “first layer test”, za pomocą manipulatora (baby stepping w menu Tune) reguluję offset finalnie.   

 

Podczas przesuwania osi Z, na wyświetlaczu zmienia się wartość Z -X.X  Ta wartość to nasz offset. Jeżeli nie dysponujemy wyświetlaczem, to wartość Z możemy odczytać komendą M114. Kiedy już jesteśmy zadowoleni z położenia dyszy, zapisujemy offset za pomocą komendy: 

  • M851 Z-X.X; gdzie -X.X to odczytana z wyświetlacza wartość Z
  • M211 S1; jeżeli dwie komendy wcześniej wyłączyliśmy softendstop, teraz włączamy go ponownie
  • M500
  • M501
  • M503  

Żeby uruchomić autoleveling przed każdym wydrukiem, w naszym slicerze w sekcji Start G-code, w nowej linii po komedzie G28; dodajemy G29;

//Dodatek. Poniżej zdjęcie obrazujące w jaki sposób użyłem sprężynek z zestawu. Taka konfiguracja sprawdza się gdy igła zahaczy o przeszkodę.

Działa? Zostaw komentarz.

 
Subscribe
Notify of
guest
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
pap
pap
2 years ago

bardzo fajny opis jeden z niewielu co pokazuje wszystko, chociaz tez troche lakonicznie i sa braki. mi przy kompilacji wyswietlalo ze musze dodatkowo odkomentowac: #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN warto wspomniec ze czesto przy projekcie chlodzenia jakie drukujemy do drukarki mamy napisane jaki jest ofset x i y dla czujnika bltouch fajnie by bylo tez jakos rzeczowo opisac jak montowac sam czujnik, nigdzie tak naprawde nie ma napisane na jakiej wysokosci mozna/trzeba go montowac, czy koniecznie uzywac sprezynek i po co sa ale mam tez kilka pytan: – //#define BABYSTEPPING powinno byc chyba odkomentowane w configuration_adv zeby to wszystko od babystepping zadzialalo co… Read more »