Kategorie
Druk 3D

Marlin 2.0.x & Platform.io – kompilacja i wgrywanie własnego firmware-u

Niniejszy wpis będzie dotyczył skonfigurowania, skompilowania i wgrania Marlina 2.0.x do własnej drukarki przy użyciu Atom.io IDE i paczki Platform.io.

1. Atom.io

Pierwszą rzeczą w tym poradniku będzie pobranie i zainstalowanie odpowiedniego IDE (przyjazny użytkownikowi) Atom.io z strony https://atom.io/

2. Git SCM

Oprogramowanie Git jest wymagane przez Atom.io/Platfom.io do automatycznego pobierania bibliotek (zależności). W tym celu wchodzimy i pobieramy git-a z strony: https://git-scm.com/downloads

Następnie postępujemy jak na poniższym obrazku:

3. Platform.io

Kolejnym krokiem jest zainstalowanie dodatkowych paczek do Atom.io, aby to uczynić należy po uruchomieniu programu kliknąć w Install a Package

Alternatywnie można to uczynić wchodząc w menu File -> Settings -> Install

Następnie wyszukujemy potrzebne dodatki 1) :
– process-palette
– platformio-ide

Opcjonalnie:
– split-diff
– git-plus

W tym celu wpisujemy powyższe nazwy dodatków w pole 1 a następnie klikamy 2, aby rozpocząć proces instalacji.

UWAGA! Podczas instalacji paczek może pokazać się okno odnośnie braku programu Clang, jeśli go nie macie już zainstalowaneg. Należy zainstalować zgodnie z instrukcją pod tym linkiem: https://docs.platformio.org/en/latest/ide/atom.html#ii-clang-for-intelligent-code-completion

Instalacja może zająć trochę czasu i wymagać restartu programu jak na poniższej notyfikacji.

4. Marlin Firmware 2.0

Pobieramy oprogramowanie Marlina z oficjalnego repozytorium na github.com pod tym adresem: https://github.com/MarlinFirmware/Marlin

Na ten moment marlin 2.0 jeszcze nie wyszedł oficjalnie, ale można już go instalować na własną odpowiedzialność, jak każde oprogramowanie tego typu.

W tym celu na w/w stronie wybieramy gałąź bugfix-2.0.x oprogramowania jak poniżej na obrazku:

Pobieramy spakowane archiwum klikając w Clone or download -> Download ZIP.

Pobrane archiwum rozpakowujemy np. do naszych dokumentów.

5. Platform.io i projekt Marlin

Otwieramy/przechodzimy do programu Atom.io.

W interfejsie programu powinniśmy na starcie widzieć zakładkę z Platform.io. Szukamy w niej przycisku Open Project.

Szukamy naszego projektu w Dokumentach tak, aby widzieć pliczek platformio.ini i klikamy Open jak poniżej:

Po otwarciu projektu możemy zamknąć wszystkie zbędne zakładki.

Konfiguracja platformio.ini

Otwieram w plik platformio.ini w tryb edycji (klikając 2x LPM).

W tym pliku musimy się upewnić, że jest wybrana odpowiednia płyta główna oraz biblioteki np. do sterowników silników krokowych dla TMC2208 itp.

Punkt 1 na obrazku wybieramy (tzn. wpisujemy/wklejamy nazwę) na podstawie dalszej części tego samego pliku, a mowa o zawartości w drugiej części, gdzie nazwy znajdują się zaraz po frazie [env: tak jak zaznaczone na obrazku:

Przykładowo:

– Dla MKS Gen L itp. (opartych o atmega2560) wybieramy megaatmega2560

– Dla Anet board z oryginalnym bootloader-em wybieramy: melzi
– Dla Anet board z optibootloader wybieramy: melzi_optiboot lub
sanguino_atmega1284p

Jeśli ktoś ma pytania z tym związane to nie wahajcie się pisać tutaj: https://github.com/MarlinFirmware/Marlin/issues/12337

Punkt 2 na obrazku, w sekcji lib_deps, możemy dopisywać potrzebne biblioteki, na ten moment (domyślnie) są wszystkie, które potrzebujemy do skompilowania firmware-u.

6. Marlin – Configuration.h

Configuration.h jest plikiem gdzie znajdują się podstawowe informacje o naszej drukarce, począwszy od rodzaju płyty głównej a skończywszy na fizycznych wymiarach drukarki.

Można oczywiście skorzystać z gotowych przykładów znajdujących się w katalogu Marlin/src/config/examples/<fimra_naszej_drukarki>/<model> i skopiować je do głównego katalogu, tym samym nadpisując domyślną.

UWAGA! Przykładowe konfiguracje mogą odbiegać od rzeczywistości, choć by ze względu na modyfikacje własne drukarki.

Poniżej postaram się przedstawić istotne fragmenty, które wypadało by sprawdzić przed wgraniem do drukarki. Na przykładzie Marlin/src/config/examples/Anet/A6/Configuration.h

#define BAUDRATE 115200 – Szybkość komunikacji szeregowej drukarki powinna być tak szybka, jak to specyfikacja pozwala. Przykładowo dla Anet A6 jest to 115200, a dla MKS Gen L (układy oparte o ATMega2560) jest to 250000.

#define MOTHERBOARD BOARD_ANET_10 – Rodzaj użytej płyty głównej i związanej z tym konfiguracja PIN-ów etc. Przykładowo dla MKS Gen L jest to wartość BOARD_MKS_GEN_L. Aby wyszukać odpowiednią nazwę dla swojej płytki można zajrzeć do pliku Marlin/src/core/boards.h

#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75 – rozmiar filamentu przystosowanego do głowicy drukarki

#define TEMP_SENSOR_0 11 – rodzaj termistora umieszczonego w bloku grzejnym. Pełna lista termistorów i przypisanych im numerów znajduje się nad definicją w/w zmiennej lub w pliku Marlin/src/module/thermistor/thermistors.h
#define TEMP_SENSOR_BED 11 – analogicznie jak poprzednia zmienna tylko dla stołu podgrzewanego.

#define PIDTEMP – po włączeniu tej opcji (zalecam) odnosi się do regulacji parametrów algorytmu proporcjonalno-całkowo-różniczkowego stosowanego w większości głowic grzejnych i podgrzewanych stołów. W skrócie: optymalizuje szybkość nagrzewania się w/w elementów do zadanej temperatury i minimalizuje jej wahania. Do uzyskania poniższych wartości, potrzebny jest program, którym będziemy mogli wysłać komendę G-Code np.: Repetier-Host, Prontface, OctoPrint itp. Więcej informacji
https://reprap.org/wiki/PID_Tuning .

Dla głowicy wykonujemy komendę: M303 E0 S200 C8, gdzie S200 oznacza że kalibrujemy dla temperatury 200 stopni. Zalecam skalibrowanie dla 230 stopni.

Komenda, która będzie optymalizowała na samym końcu pokażę nam poniższy tekst:

bias: 92 d: 92 min: 196.56 max: 203.75
Ku: 32.59 Tu: 54.92
Clasic PID 
Kp: 16.83 
Ki: 1.02 
Kd: 69.29
PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h

Odpowiednio modyfikujemy nasze zmienne z tym co nam zwróciła komenda:

#define DEFAULT_Kp 16.83
#define DEFAULT_Ki 1.02
#define DEFAULT_Kd 69.29

#define PIDTEMPBED – optymalizacja nagrzewania stołu. W analogiczny sposób postępujemy z stołem grzanym jak z głowicą, uruchamiamy komędę: M303 E-1 S60 C8, gdzie S60 to oznacza 60 stopni, zalecam skalibrować na 70 stopni, chyba że drukujemy tylko z PLA to wystarczy 60. Rezultat otrzymamy jak poprzednio, tylko z innymi wartościami. Uaktualniamy nasze zmienne poniżej:

#define DEFAULT_bedKp 295.00
#define DEFAULT_bedKi 35.65
#define DEFAULT_bedKd 610.21

Typ sterowników silników krokowych, można zdefiniować w poniżej prezentowanych zmiennych. Domyślnie są A4988 i takie w drukarkach Anet A6 też są. Lista dostępnych/wspieranych przez Marlin-a sterowników, można znaleźć w komentarzach nad prezentowanymi linijkami (w pliku Configurations.h).

#define X_DRIVER_TYPE A4988
#define Y_DRIVER_TYPE A4988
#define Z_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE A4988

#define DEFAULT_AXIS_STEPS_PER_UNIT {100, 100, 400, 95} – ilość kroków na jednostkę miary (np. mm). Te wartości są ściśle zależne od ustawionych mikrokroków dla sterowników silników krokowych (czarne zworki na płycie głównej), zastosowanych śrub (ich skoków), przekładni itp. – Anet A6 nie ma możliwości sterowania mikrokrokami i domyślnie ma 1/16. Jednak gdy ktoś ma taką możliwość, dla przykładu MKS Gen L i sterowniki TMC2208 z ustawionym mikrokrokiem na 1/256 z założeniem, że nic w konstrukcji Anet A6 nie zmienialiśmy, to wartości prezentują się następująco:
#define DEFAULT_AXIS_STEPS_PER_UNIT {1600.00, 1600.00, 6400.00, 1600.00}
Pomocny kalkulator do liczenia https://www.prusaprinters.org/calculator/

#define DEFAULT_MAX_FEEDRATE { 400, 400, 4, 25 } – prędkości maksymalne z jakimi może poruszać się drukarka w mm/s. Osobiście mam ustawione: { 100, 100, 4, 25 }

#define DEFAULT_MAX_ACCELERATION { 9000, 5000, 50, 10000 } – maksymalne przyspieszenie, aby osiągnąć zadaną prędkość w mm/s2. Osobiście mam ustawione: { 500, 500, 50, 10000 }.

#define DEFAULT_ACCELERATION 1000 – przyspieszenie dla ruchy osi X, Y, Z and E. Osobiście mam ustawione: 500.
#define DEFAULT_RETRACT_ACCELERATION 1000 -przyspieszenie dla retrakcji filamentu w głowicy. Osobiście mam ustawione: 900.
#define DEFAULT_TRAVEL_ACCELERATION 1000 – przyspieszenie dla ruchów nie będących częścią drukowania obiektu – przejścia jałowe / podróżowanie. Osobiście mam ustawione: 800.

Powyżej podałem swoje wartości, ze względu na poprawę wydruku, głównie tyczy się to przyspieszenia. Mniej trzęsie całą konstrukcją i mniejsze prawdopodobieństwo na zgubienie kroków.

Kierunek obrotów silników, krokowych. Jeśli chcemy, aby dany silnik krokowy obracał się w przeciwną stronę to zmieniamy odpowiednio wartość zmiennej false -> true lub true -> false. Na kierunek obrotów mogą mieć też różne wpływy, mianowicie zastosowane przejściówki typu 2 in 1(o czym napiszę w osobnym artykule). Poniżej domyślnie wartości dla Anet A6.

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

Wymiary fizyczne powierzchni wydruku i pozycji startowej głowicy a dokładniej dyszy. Zmienne przyjmują wartości dziesiętne (separatorem jest “.”).

#define X_BED_SIZE 222 – rozmiar stołu grzewczego w osi X w [mm].
#define Y_BED_SIZE 222 – rozmiar stołu grzewczego w osi Y w [mm] .
#define X_MIN_POS -3 – pozycja dyszy względem punktu [0, 0] stołu (lewy-dolny róg) w [mm] na osi X. -3 oznacza, że dysza jest 3 mm po za stołem w osi X.
#define Y_MIN_POS -5 – pozycja dyszy względem punktu [0, 0] stołu (lewy-dolny róg) w [mm] na osi Y. -5 oznacza, że dysza jest 5 mm po za stołem w osi Y.
#define Z_MIN_POS 0 – minimalna wysokość osi Z.
#define Z_MAX_POS 230 – maksymalna wysokość osi Z, tak aby cały wózek z kablami mógł się swobodnie poruszać, bez przeszkód, w lewo i w prawo! I nie zawadzał np. o pokrętło LCD 🙂 .

#define Z_SAFE_HOMING – opcja domyślna w konfiguracji Anet A6, gdy jest włączona to funkcja AutoHome pozostawia dysze na środku stołu. Polecam za komentować tą linijkę w sposób //#define Z_SAFE_HOMINGjeśli chcecie, aby AutoHome działał domyślnie.

#define EEPROM_SETTINGS – włączenie tej opcji pozwala na zapis w pamięci EEPROM, ustawień drukarki z poziomu wyświetlacza LCD lub komend G-Code.

#define LCD_LANGUAGE en – jeśli ktoś potrzebuje język Polski to zmienia wartość z en -> pl

#define SDSUPPORT – włączenie obsługi karty SD

#define SLIM_LCD_MENUS – włączenie tej opcji powoduje ukrycie niektórych elementów (typu kontrola PID w zakładce Controls) na wyświetlaczu LCD. Bardzo przydatne bo zwalnia dużo pamięci, dzięki czemu dla Anet board można się cieszyć kartą SD i innymi funkcjami.

W sekcji: //======================= LCD / Controller Selection, szukamy wyświetlacza, którego używamy z naszą płytą główną, dla Anet A6 jest to:
#define ANET_FULL_GRAPHICS_LCD – domyślny wyświetlacz Anet A6

7. Marlin – Configuration_adv.h

Configuration_adv.h jest plikiem gdzie znajdują się zaawansowane informacje/konfiguracje o naszej drukarce. Oczywiście nie należy się tego bać :), najlepiej przeglądnąć cały i poczytać/popytać.

#define BABYSTEPPING – Babystepping umożliwia z poziomu LCD przesuwanie osi Z za pomocą niewielkich przyrostów bez zmiany aktualnych wartości pozycji w projekcie. Ta funkcja służy głównie do regulacji osi Z w pierwszej warstwie wydruku w czasie rzeczywistym.

#define ARC_SUPPORT – opcja nie przydatna dla drukarek typu Anet, należy za-komentować, aby zwolnić dodatkową pamięć.

8. Kompilacja kodu

Aby skompilować kod i zbudować plik z firmware-m, naciskamy przycisk jak poniżej i czekamy na rezultat.

Alternatywnie z paska skrótów. Przycisk 1.

Na obrazku przy numerze 2, mamy podaną ścieżkę do firmwaru, znajduje się w katalogu projektu (może być jako ukryty folder).

Zbudowany firmware możemy wgrać po przez Arduino IDE, Octoprint, avrdude lub po przez Platform.io jak w kolejnym rozdziale.

9. Wgrywanie firmware-u

Wgrywanie firmware po przez Platform.io też można uruchomić na dwa (i więcej) sposoby jak poniżej.
Platform.io sam skanuje porty USB i wyszukuje podpięte urządzenie.

Alternatywnie:

Klikamy w przycisk 1 i czekamy na rezultat taki jak w obrysie 2.

Gratulacje! Właśnie jesteś posiadaczem Marlina 2.0.x (z branch-a bugfix-2.0.x) i bogatszy o wiedzę personalizowania swojego firmware-u.

FAQ

Q: Czy można zrobić to samo dla starszej wersji Marlina 1.1.9?
A: Tak
Q: Czy można zepsuć sobie drukarkę?
A: Tak, można zepsuć mechanicznie, bo źle się poda wymiary lub uszkodzić płytę główną i szereg innych problemów.
Q: Czy to samo mogę zrobić używając Arduino IDE w odniesieniu do drukarki 3D?
A: Oczywiście, że można! Ale:
– W Arduino IDE trzeba samemu pamiętać o dodawaniu bibliotek kompatybilnych z płytą główną (układem), wersją Marlina oraz innymi modułami np. stepstick-i TMC, czy nawet bibliotek do obsługi tejże płyty głównej np. dla Anet.
– Jak wiemy Arduino IDE ma różne wersje jak i Marlin i niestety są jakieś zależności, którymi da się skompilować, a którymi nie (sprawdzone doświadczalnie).
– Platform.io sam nas powiadamia czy jest nowa wersja biblioteki i można ją uaktualnić 1-2 kliknięciami.

  – W Arduino IDE trzeba zawsze ręcznie wybrać, port, rodzaj płyty i prędkość, w Platform.io specyfikujemy tylko rodzaj płyty raz.
  – Jeśli potrzebujemy uzyskać firmware do pliku z rozszerzeniem .hex to w Platform.io zawsze znajduje się w katalogu .pioenvs/<nasza_układ>/firmware.hex , w Arduino IDE trzeba sobie skonfigurować ścieżkę budowania.
  – Integracja z Git-em i innymi dodatkami np. porównywanie plików. Dla osób, które wersjonują, programują jest to istotne.
  – W Atom.io widać strukturę katalogów/plików co ułatwia sprawę przechodzenia między nimi, czego nie można powiedzieć o Arduino IDE.
  – Platform.io umożiwia zdalne wgrywanie firmware.
– Atom.io ma ciemny motyw :D.

Przydatne linki

Bibliografia:

1) http://marlinfw.org/docs/basics/install_platformio.html

Podziękowania dla:

  • Jakub Łuczak – przetestowanie procesu instalacji i kompilowania/wgrywania dla RAMPS 1.4
  • Sylwester Foit – kompilowanie i wgrywanie dla Anet board z oryginalnym bootloader-em

Disclaimer

Wszystkie informacje w tym artykule są publikowane w dobrej wierze i wyłącznie w celach informacyjnych. Wszelkie działania podejmowane w odniesieniu do informacji znajdujących się na tej stronie, odbywa się wyłącznie na własne ryzyko. Autor nie będzie ponosić odpowiedzialności za jakiekolwiek straty i / lub szkody związane z korzystaniem z niniejszego poradnika.


10.01.2021 – Artykuł został przeniesiony z strony http://aneta6pl.garage-makezone.eu/marlin-2-0-x-platform-io-kompilacja-i-wgrywanie-wlasnego-firmware-u/ i zmodyfikowany.