Cześć,
jak wiecie, od ponad miesiąca stoi u mnie kolejna drukarka – oryginalna Prusa i3 MK2S, którą przysłał mi do testów patron naszego działu Druk 3D – sklep Blackfrog.pl. Samą drukarkę dostałem w wersji DIY (kit do złożenia), ale jej odpalenie nie sprawiło mi większych problemów (o czym wspominałem już w poście Prusa i3 MK2S – składanie i kalibracja drukarki). Na pierwsze problemy natrafiłem dopiero kilka dni temu…
Prusa i3 MK2S – problem z kalibrowaniem stołu
Prusa posiada bardzo sprytny system kalibrowania. Przed każdym wydrukiem drukarka dokonuje dziewięciu pomiarów stołu za pomocą wbudowanego czujnika indukcyjnego. Dzięki temu firmware drukarki jest w stanie w locie korygować ewentualną krzywiznę (pochyłość) stołu, czy nawet błędną geometrię drukarki (gdy np. zrobi się nam lekki romb). System sprawdza się perfekcyjnie i można dzięki niemu raz na zawsze zapomnieć o ręcznym ustawianiu stołu za pomocą śrubek.
Niestety wykorzystanie czujnika indukcyjnego ma też jedną wadę, którą odkryłem dopiero kilka dni temu – jego odczyty zmieniają się wraz z temperaturą pracy. Co to oznacza? Jeżeli cały czas drukujemy z jednego materiału (np. PLA), to w zasadzie w niczym to nie przeszkadza. Raz dostrajamy wysokość osi Z i wszystko będzie hulało. Problem pojawia się dopiero wtedy, gdy postanowimy zmienić PLA na inny materiał, który wymaga wyższych temperatur (zarówno głowicy, jak i stołu). Wtedy odczyty z czujnika zaczynają się przekłamywać.
Przykładowo – cały czas drukowałem z PLA rozgrzewając głowicę do 205°C, a stół do 55°C. Wysokość osi Z ustawiłem tak, żeby między dyszą a stołem był prześwit 0,2mm. I wszystko ładnie hulało…, dopóki nie miałem potrzeby załadowania do drukarki ABS…
Przy wydruku z ABS głowicę rozgrzałem do 255°C, a stół do 100°C. Puściłem wydruk i… zobaczcie sami:
Po sprawdzeniu szczelinomierzem okazało się, że po automatycznej kalibracji tak rozgrzanej drukarki dysza ustawiła się aż 0,7mm od stołu. Pół milimetra różnicy!
Jak się okazało, jest to przypadłość samego czujnika indukcyjnego i nie tylko Prusa boryka się z tym problemem.
Oczywiście mogłem za każdym razem bawić się w ręczne ustawianie offsetu dla osi Z, ale to trochę nie tędy droga. Na szczęście na facebookowej grupie Druk 3D Polska kolega Karol podrzucił pewien trop – w najnowszym firmware (w tej chwili dostępnym jedynie na githubie) zostały prowadzone jakieś poprawki w tym temacie. Nie tracąc czasu zabrałem się za aktualizację swojej Prusy do wersji 3.0.10-11.
Po aktualizacji w menu Kalibracja pojawiła mi się możliwość cieplnego skalibrowania czujnika PINDA (oraz kalibracja PID, ale to inny temat;)
Po uruchomieniu kalibracji drukarka dokona pomiaru wysokości na zimnym stole. Następnie stół rozgrzeje się do 50°C i zostanie wykonany drugi pomiar. Kolejne pomiary będą wykonywane co 10°C (czyli 60, 70, 80, …). Po skalibrowaniu cieplnym czujnika PINDA pomiary wysokości powinny być już wykonywane prawidłowo – niezależnie od tego, czy drukujemy z PLA, czy z ABS, TPU, PET-G, czy jakiegokolwiek innego materiału :)
A jak to działa w praktyce? Przed rozpoczęciem druku (jeszcze przed kalibrowaniem stołu) drukarka rozgrzewa stół i umieszcza nam nim czujnik PINDA, żeby go ogrzać. Rozgrzewanie czujnika trwa 120 sekund i jest wykonywane przed każdym wydrukiem (oczywiście można to wyłączyć w opcjach):
Pierwszy testowy wydruk puściłem z PLA (205°C / 55°C):
Chwilę później ten sam model puściłem z ABS (255°C / 100°C):
Jest perfekcyjnie! Niezależnie od temperatury głowicy i stołu drukarka poziomuje się na dokładnie tej samej wysokości. Po prostu petarda!
Powiem szczerze, że odczułem wielką ulgę, bo dosyć często zdarza mi się drukować z najróżniejszych materiałów i ten problem z ustawianiem wysokości osi Z był, delikatnie mówiąc, upierdliwy ;)
Jak zaktualizować firmware drukarki Prusa i3 MK2 / MK2S?
Ramową instrukcję aktualizowania znajdziecie bezpośrednio na githubie: https://github.com/prusa3d/Prusa-Firmware
Podczas aktualizacji bardzo ważne jest prawidłowe zidentyfikowanie płyty głównej, która siedzi w drukarce. Wszystkie drukarki MK2S mają płyty RAMBo 1.3, ale w wersjach MK2 były wsadzane zarówni RAMBo 1.3, jak i 1.0. Poniżej mała ściągawka ułatwiająca identyfikację płyty:
Znając wersję płyty można już śmiało lecieć z aktualizacją wg instrukcji na githubie.
Dla leniwych udostępniam całego gotowe Arduino IDE (w wersji portable) z firmware 3.0.10-11 przygotowanym do wgrania do drukarki Prusa i3 MK2S z płytą RAMBo 1.3.
UWAGA! Możecie skorzystać z mojego gotowca, ale pamiętajcie o tym, że robicie to na własną odpowiedzialność! U mnie aktualizacja przebiegła bez najmniejszych problemów, ale nie mogę zagwarantować, że tak samo będzie u Was!
Aby zrobić aktualizację z mojego gotowca wystarczy zrobić:
- Jeżeli wcześniej tego nie robiłeś, to ściągnij i zainstaluj sterowniki USB do Prusy
- Pobierz i rozpakuj archiwum arduino-prusa-i3-mk2s-majsterkowo.pl.zip
- Uruchom Arduino IDE
- Z menu Plik / Szkicownik wybierz pozycję Firmware
- Z menu Narzędzia / Płytka wybierz RAMBo
- Podłącz drukarkę i z menu Narzędzia / Port wybierz port, do którego jest podłączona
- Wciśnij CTRL+U, aby rozpocząć aktualizację
Po kilku chwilach (u mnie to trwało jakieś pół minuty) drukarka będzie już zaktualizowana.
Dobra informacja jest taka, że po aktualizacji cała konfiguracja drukarki zostanie zachowana, więc nie trzeba jej od nowa kalibrować, czy robić pomiarów PID (chociaż teraz to jest dużo prostsze, bo kalibrację PID można wyklikać z menu;)
Mam nadzieję, że po aktualizacji poziom Waszej frustracji opadnie równie mocno, co u mnie :)
Gdybyście mieli jakieś pytania, piszcie śmiało w komentarzach!
AKTUALIZACJA
Jak się okazało w praniu, wygrzewanie PINDY przed wydrukiem działa tylko wtedy, gdy drukujemy z karty SD. Jeżeli natomiast puszczamy wydruk z komputera, lub jak ja – za pośrednictwem Octoprint, to drukarka jak gdyby nigdy nic nagrzeje stół i przejdzie od razu do jego kalibracji (pomijając to dwuminutowe wygrzewanie czujnika). Na szczęście można temu prosto zaradzić :)
Przed wgraniem nowego firmware wystarczy edytować plik Marlin_main.cpp i znaleźć w nim następujący fragment kodu:
1 2 3 4 5 6 7 |
if (run == false && card.sdprinting == true && temp_cal_active == true && calibration_status() < CALIBRATION_STATUS_PINDA) { temp_compensation_start(); run = true; repeatcommand_front(); // repeat G80 with all its parameters enquecommand_front_P((PSTR("G28 W0"))); break; } |
i zmienić go na:
1 2 3 4 5 6 7 |
if (run == false && temp_cal_active == true && calibration_status() < CALIBRATION_STATUS_PINDA) { temp_compensation_start(); run = true; repeatcommand_front(); // repeat G80 with all its parameters enquecommand_front_P((PSTR("G28 W0"))); break; } |
czyli usuwamy po prostu z pierwszej linii następujący ciąg:
1 |
card.sdprinting == true && |
I tyle! Teraz wystarczy wgrać zmodyfikowane firmware i cieszyć się poprawnym ustawianiem dyszy niezależnie od tego, z czego puszczamy wydruk.
Pozdrawiam! I życzę udanych wydruków :)
Łukasz