poniedziałek, 25 maja 2020

Monoprice Maker Ultimate/Wanhao D6 wymiana kontrolera na SKR 1.4 Turbo


Od jakiegoś czasu posiadam drukarkę 3D, model Monoprice Maker Ultimate. Jest to ta sama konstrukcja co Wanhao D6, ale sprzedawana pod marką innej firmy. Oba te modele są udanym klonem polskiej drukarki Zortrax M200. Drukarka miała swój debiut w okolicach 2016 roku i o ile sama jej konstrukcja może dalej z powodzeniem konkurować z najnowszymi modelami, to kontroler sterujący już się trochę zestarzał. W końcu padła decyzja o jego wymianie na coś nowszego.


Oryginalny kontroler drukarki bazuje na ATmega2560, nie posiada automatycznego poziomowania łóżka, czujnika końca filamentu oraz posiada stare sterowniki silników krokowych A4988 (generujące spory hałas). Co gorsza płytka nie była projektowana z myślą o podłączeniu dodatkowego sprzętu czy wymiany sterowników. Na plus można zaliczyć fakt, że aktualizacja firmware-u do nowszej wersji Marlina jest bezproblemowa.

Zdecydowałem się na zakup kontrolera BTT SKR 1.4 Turbo wraz ze sterownikami TMC-2209. Na początku wszystko wydawało się w miarę proste, dopóki nowy kontroler nie dotarł i okazało się, że nie działa oryginalny wyświetlacz. I tu od razu wyszedł pierwszy problem, ponieważ chciałem zachować estetyczny wygląd drukarki, wolałem nie zmieniać wyświetlacza.

Gdy się porówna pinout złącz EXP1 i EXP2 na płytce SKR z płytką wyświetlacza tzw. Ulticontroller, widać że potrzebujemy na pinie 8 złącza EXP2 podać zasilanie 3.3V. Natomiast piny 4 (SDA) i 6 (SCL) złącza EXP1 (odpowiadające za komunikację z wyświetlaczem po szynie I2C), trzeba podłączyć do oddzielnego złącza I2C na płytce SKR. Czyli pin 4 złącza EXP1 do pinu 0.0, a pin 6 do 0.1. Bardzo pomaga tutaj fakt, że SKR ma na spodniej stronie ładnie opisane wszystkie wyprowadzenia. Na końcu wygląda to tak:



W pliku konfiguracyjnym Marlina Configuration.h, ustawiamy opcje:

 #define ULTI_CONTROLLER 

Dalej pojawia się drugi problem, czyli tasiemka biegnąca do ekstrudera. Na szczęście aby rozeznać się które piny do czego służą, wystarczy prześledzić połączenia na płytce przy głowicy, co nie jest specjalnie trudne i daje mniej więcej taki rezultat:



Pierwszy pin jest zazwyczaj oznaczony na wtyczce trójkącikiem, lub na samej tasiemce wyróżniającym się kolorem (najczęściej czerwonym). Warto tutaj spojrzeć do pliku Marlin\src\pins\lpc1768\pins_BTT_SKR_V1_4.h, gdzie mamy zdefiniowane funkcje wszystkich pinów dla SKR. Na podstawie tej rozpiski zlutowanie prostego adaptera nie jest już specjalnie trudne. W przypadku wentylatorów podłączamy tylko po jednym pinie, czyli do minusa-a w gnieździe FAN0 (PWM) i FAN1.


Konektor został zalany od spodu klejem na gorąco, by uniknąć przypadkowego zwarcia. Zresztą, podobnie jak i wszystkie luźne złączki. Po podłączeniu tego wszystkiego zrobił się lekki bałagan, w skrzynce:




Teraz zostało już tylko dopracować konfigurację Marlina, zaczynamy od zmiany ustawienia typu czujnika temperatury dla hotend-u (Configuration.h), tutaj będzie to termo rezystor PT100:

 #define TEMP_SENSOR_0 147

Gdyby się zdarzyło, że silniki poruszają się w złym kierunku to można w tym samym pliku zmienić ustawienia dla wybranej osi, u mnie wygląda to tak:

 #define INVERT_X_DIR true
 #define INVERT_Y_DIR false
 #define INVERT_Z_DIR true
 #define INVERT_E0_DIR false 

Próbowałem włączyć również sensorless homing (Configuration_adv.h) dla osi Z. W tym wypadu lepiej nie demontować starego wyłącznika krańcowego, a jedynie odpiąć przewody. Wyłącznik będzie pełnił rolę dodatkowej blokady, tak by nie tylko na samej głowicy zatrzymywał się stół. Dodatkowo, aby uniknąć mocnego uderzenia głowicą w stół należy podnieść sensitivity dla osi Z. W moim przypadku ustawienie sensitivity 64, jest już zbyt mocne i silnik zatrzymuje się sam, zanim stół dotrze do pozycji zero. Z drugiej strony przy 60 stół w dalszym ciągu jest zbyt mocno pchany w górę.

    #define Z_STALL_SENSITIVITY  60
    #define Z2_STALL_SENSITIVITY Z_STALL_SENSITIVITY

Być może wraz z czujnikiem BLTouch sprawa wyglądałaby inaczej. Nie pozostało mi więc nic innego jak wrócić się na wyłącznik krańcowy. W tym celu trzeba zakomentować linie powyżej oraz odgiąć jedną nóżkę w sterowniku. Nóżkę najlepiej odgiąć do środka, tak by nie miała szans dotknąć innych wyprowadzeń na płytce.


Dodatkowo odwracamy logikę działania endstop-u (Configuration.h):

 #define Z_MIN_ENDSTOP_INVERTING true

Po więcej ustawień dotyczących sterowników TMC warto spojrzeć do dokumentacji Marlina. Można się zastanowić nad włączeniem np. HYBRID_THRESHOLD lub Z_SAFE_HOMING. Safe homing to opcja która między innymi przesuwa głowicę w zdefiniowane miejsce przed wykonaniem homing-u dla osi Z, czyli domyślnie ustawia ją nad środkiem stołu.

Na koniec kilka słów o oświetleniu.  Oryginalna tasiemka jest na 24V, więc można ją co najwyżej podpiąć do jednego z gniazdek dla wentylatorów. Jeżeli ktoś ma tasiemkę na 5V, to może spróbować konfiguracji poniżej i wpiąć się w gniazdo neopixel. Najprostrzym rozwiązaniem będzie jednak zakup tasiemki z diodami neopixel.

#define CASE_LIGHT_ENABLE
#if ENABLED(CASE_LIGHT_ENABLE)
  #define CASE_LIGHT_PIN P1_24                // Override the default pin if needed
  #define INVERT_CASE_LIGHT false             // Set true if Case Light is ON when pin is LOW
  #define CASE_LIGHT_DEFAULT_ON true          // Set default power-up state on
  #define CASE_LIGHT_DEFAULT_BRIGHTNESS 255   // Set default power-up brightness (0-255, requires PWM pin)
  //#define CASE_LIGHT_MAX_PWM 128            // Limit pwm
  #define CASE_LIGHT_MENU                   // Add Case Light options to the LCD menu
  //#define CASE_LIGHT_NO_BRIGHTNESS          // Disable brightness control. Enable for non-PWM lighting.
  //#define CASE_LIGHT_USE_NEOPIXEL           // Use Neopixel LED as case light, requires NEOPIXEL_LED.
  #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
    #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
  #endif
#endif


W tym wpisie nie opisałem wszystkich ustawień Marlin-a jakie są konieczne do uruchomienia SKR, te znajdziesz w krótkiej instrukcji w firmowym repozytorium github Bigtreetech.

Do zrobienia zostaje jeszcze kalibracja drukarki, ale o tym może w kolejnym wpisie.