opiszę wam jak skonfigurować Marlina 2.0- bugfix dla płytki 32-bitowej SKR 1.3
Postanowiłem zrobić ten wątek dlatego, że była to dla mnie męką ( a miało być prosto, szybko i przyjemnie jak wiadomo ) i życzę każdemu żeby jej nie przeżywał przy konfiguracji swojego FW oraz fakt, że sam chciałbym znaleźć takie objaśnienie wcześniej - oszczędziłoby mi to sporo zachodu. Odbiorcą jest osoba początkująca\średniozaawansowana, widząca pierwszy raz na oczy program Atom lub VSCode, a konkretniej całe to PlatformIO czyt. ja sprzed 3 dni. A w szczególności chciałem opisać, żeby wiadomo było dokładnie czego się spodziewać.
Bardzo proszę o poprawienie mnie jeżeli sie mylę lub wytknięcię jeżeli gdzieś znajduje się błąd.
Słowem wstępu - była to dla mnie męczarnia tylko dlatego, że myślałem, że to co wiem o wgrywaniu FW na MKS GEN L (ale też inne 8bitowe płytki) ma dokładne przełożenie tutaj.
SKR 1.3 (a także 1.1) i MKS GEN L mają takie same wymiary i otwory montażowe ale NIE MOŻNA ICH TRAKTOWAĆ TAK SAMO ! ( architektura procesora ARM i AVR różnią się pod kątem wgrywania programu ... niemożliwe teraz to sobie tak mogę napisać, bo to błąd pewności wstecznej, ale autentycznie byłem zaskoczony )
Parafrazując klasyk : " Życie jest ciężkie, ale jeszcze cięższe jak jesteś głupi " xD
Filmik zamieszczony przez producenta w starciu z rzeczywistością pokazuje za bardzo uproszczony i niedokładny proces wgrywania tego nieszczęsnego Marlina - oglądałem ten filmik ze 3 razy i muszę z przykrością rzecz, że z mojej perspektywy to mogłoby go nie być - praktycznie nic mi nie pomogło, co innego dostępna dokumentacja, ale w to już trzeba zagłębić się ze skupieniem i przede wszystkim trochę posiedzieć. Nie jest to niestety śledzenie filmiku trwającego 10min i odwzorowywanie tego co przedstawia - nie ma żadnego powodu dlaczego ten filmik nie mógłby być bardziej informatywny.
Chcę, żeby to był prosto wypunktowany proces wgrywania Marlina, na podstawie tego co sam zrobiłem, omijając moje głupie błędy.
-------------------------------------------------------------------------------
Potrzebne jest
1. IDE : Visual Studio Code ( wersja open source programu Visual Studio - bardzo okrojona ) lub Atom - oba dostępne za darmo i na wszystkich systemach operacyjnych.
- na jednym z powyższych należy zainstalować PlatformIO (w obu wygląda to dokłanie tak samo : wejdź w Rozszerzenia "Extensions" -> szukaj "PlatformIO" -> zainstaluj -> restart IDE -> gotowe )
1.a Interpreter Python 2.7 : https://www.python.org/downloads/ ( jeżeli nie był zainstalowany wcześniej )
2. Ściągnięty i rozpakowany plik z Marlinem z oficjalnego konta Githuba BigTreeTech : https://github.com/bigtreetech/BIGTREET ... gfix-2.0.x ( dostęp z dnia 30-04-19)
3. Karta SD ( dołączona do SKR lub własna ) + naturalnie czytnik Kart ( wbudowany w kompa lub zewnętrzny )
3.a Przed wgraniem na karte nowego FW należy podłączyć płytkę do prądu - zasilanie po USB ( ustawiając złączki na USB i +5v ) albo zewnętrzne zasilanie (złączki na +5v i INT)
3.b Zresetować przyciskiem płytkę - jeżeli podłączony jest do niej wyświetlacz, pokaże on kwadraty - zaciemnione pola oraz pisk świadczy o udanym resecie płytki.
3.c Odłącz zasilanie i wyjmij kartę pamięci.
Po instalacji rozszerzenia PlatforimIO sprawdż czy masz zainstalowaną platformę procesora LPC1768, czyli dokładnie tego jaki posiada SKR 1.3, ale również Re-ARM, stąd wgranie tego samego programu na Re-Arm najprawdopodobniej będzie wyglądało identycznie - nie licząc zmiany #135 w samym Marlinie.
Wygląda to tak :
Przechodzimy PlatformIO home -> Platforms -> wyszukuję "NXP LPC" -> jeżeli nie ma to instaluję -> restart
Jeżeli wszystko jest to otwieram projekt, nawigując do miejsca z rozpakowanym Marlinem i wybieram otwarcie "Marlin-bugfix-2.0.x"
--------------------- EDYCJA PLIKU KONFIGURACYJNEGO ----------------------------
Na początek edycja pliku konfiguracyjnego platformio.io pod środowisko procesora SKR 1.3 czyli NXP LPC1768 - zmieniamy wartość zmiennej :
env_default = LPC1768
Przechodzimy niżej do sekcji poświęconej [env:LPC1768]
Wpisujemy adres fizyczny naszego nośnika ( Karty SD ) jako wartość zmiennej :
upload_port = /media/user01/disk/
w moim wypadku jest to powyższy adres Unixowy jednak w Win10 wyglądałoby to np
upload_port = E:
( dopuszczalne jest nawet powoływanie się na porty w zapisie Windowsowym np COM3 )
upload_port = COM[3]
więcej info : http://docs.platformio.org/en/latest/pr ... pload.html
Dla spokoju ducha zapisałem jeszcze poniżej :
upload_protocol = mbed
( ponieważ ściągnąłem 2 platformy na procesory LPC176x i aby upewnić się, że nie będzie zgrzytów )
--------------------- EDYCJA MARLINA ----------------------------
Najważniejsze punkty w FW (#numer linii).
------------ stan FW na dzień 30-04-2019 - nowsze wersje Configuration.h i Configuration_adv.h moga zmienić szyk linii ----------------
Lista zmian w pliku:
Configuration.h
________________________
#76 | Autor zmian w firmware
#107 | Port na płytce
#116 | Port 2 na płytce
#127 | Wartość baudrate
#135 | Wybór płytki
#140 | Nazwa drukarki
#153 | Średnica filamentu
#372 | Termistor ekstruder
#378 | Termistor stół
#414 | Maksymalna temperatura głowicy
#420 | Maksymalna temperatura stołu
#446 - 448 | Wartości PID
#520 | Min temperatura
#606 - 613 | Logika Endstopów
#630 - 642 | Rodzaj sterownika silników
#687 | Liczba kroków na mm
#763 | Czujnik używa ZMIN
#803 | Czujnik zamocowany na stałe
#856 - 858 | Różnica odległości od dyszy - offset czujnika
#875 | Liczba zejść czujnika
#896 | Najniższy punkt zejścia
#947 - 949 | Kierunek silników XYZ
#954 | Kierunek silnika ekstrudera
#979 - 980 | Wymiary stołu
#988 | Wysokość pola roboczego
#1091 | Automatyczne poziomowanie stołu
#1106 | Debugowanie APS
#1123 | Poziomowanie stołu G26
#1136 - 1137 | Liczba punktów siatki
#1140 | Zakres ruchu APS
#1344 | Włączenie komendy M503 (EEPROM)
#1375 | Ustawienia preheat
#1555 | Obsługa karty SD
#1627 | Pozycja w menu indywidualnego zerowania osi
#1658 | LCD2004
*******************************
Configuration_adv.h
________________________
#244 | Automatyczne chłodzenie ekstrudera po przekroczeniu temperatury
#337 - 344 | Włączenie drugiego silnika w Z
#936 | BabyStepping
Wszystkie powyższe zmiany są przeze mnie przetestowane i działają na czas pisania tego posta w mojej konfiguracji.
Specyfikacja klona prusy mk2s.
Pole robocze :
X 250
Y 210
Z 210
Sterowniki silników krokowych : A4988 (x 5)
Silniki : 42BYGHM809
Czujnik indukcyjny NPN NO
Wyświetlacz LCD2004
--------------------------------------------
Ubiegając pytania dlaczego te archaiczne a4988 ?
Prostę, jeszczę się nie dorobiłem TMC2xxx. Liczę, że w niedalekiej przyszłości się to zmieni. W końcu ta płytka idealnie nadaje się, żeby do niej wrzucić tmc2130 w SPI.
--------------------------------------------
Marlin jest świetnie opisany i czytając kod i komentarze w pełni można zrozumieć co oznaczają. Ja chciałem jeszcze raz wypunktować miejsca i czasem opisać powody dlaczego wybrałem tą wartość.
#107
//włączenie portów :
Kod: Zaznacz cały
#define SERIAL_PORT 0
#define SERIAL_PORT_2 -1
// szybkość przesyłu danych warto ustawić 115200 albo 250000
Kod: Zaznacz cały
#define BAUDRATE 115200
Kod: Zaznacz cały
#define MOTHERBOARD BOARD_BIGTREE_SKR_V1_3
#153
// Średnica filamentu
Kod: Zaznacz cały
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
#372
//termistor ekstrudera - NTC 100k 3950
Kod: Zaznacz cały
#define TEMP_SENSOR_0 11
//termistor stółu - Kapton bed termistor beta = 3950
Kod: Zaznacz cały
#define TEMP_SENSOR_BED 60
#414
//Maksymalna tempertura głowicy
Kod: Zaznacz cały
#define HEATER_0_MAXTEMP 300
#428
// Włączenie ustawienia temperatury PID
Kod: Zaznacz cały
#define PIDTEMP
#446 - 448
// wartości PID
Kod: Zaznacz cały
#define PIDTEMP
#define DEFAULT_Kp 22.2
#define DEFAULT_Ki 1.08
#define DEFAULT_Kd 114
#520
//minimalna temperatura jaką musi mieć głowica, aby radełko ekstrudera wykonało ruch.
Kod: Zaznacz cały
#define EXTRUDE_MINTEMP 180
#606 - 613
// Zazwyczaj zwykłe krańcówki są NC (normalnie zamknięte) oznacza to, że układ jest otwarty do momentu aż nie zostanie naciśnięty przycisk, wtedy zamknie się.
Kod: Zaznacz cały
#define X_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING true // set to true to invert the logic of the probe.
//Jeżeli nie jesteś pewny jakie powinieneś dać ustaw domyślne a po wgraniu FW i podłączeniu do komputera i pronterface wyślij komendę m119 która poda Ci status endstopów - wciśnięte powinny dawać status : "TRIGGERED", nieaktywne powinny dawać status : "open"
#630 - 642
// wybór sterowników dla każdego silnika osobno - można zostawić odkomentowane, wtedy domyślnie będzie to A4988
#687
// liczba kroków na milimetr
Kod: Zaznacz cały
#define DEFAULT_AXIS_STEPS_PER_UNIT { 200, 200, 1600, 304.77 }
// warto zaznaczyć, że w przypadku liczby kroków w osi Z, jeżeli ma się 8mm pręt ze skokiem 2mm ale dwoma ścieżkami gwintu (jak ja) wartość ta będzie miała odzwierciedlenie w gear ratio 2:1 - silniki muszą być połączone na sztywno ( oryginalne silniki prusy ze zintegrowanymi prętami posiadają 4 ścieżki przy 8mm i skoku 2mm )
#763
//Odkomentuj jeżeli czujnik indukcyjny jest wpięty w piny Z Min
Kod: Zaznacz cały
#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
//Odkomentuj w celu wybrania nieruchomego czujnika indukcyjnego lub innej na stałe zamontowanej krańcówki czy czujnika IR
Kod: Zaznacz cały
#define FIX_MOUNTED_PROBE
//Różnica odległości w każdej z osi pomiędzy czujnikiem a dyszą.
Kod: Zaznacz cały
#define X_PROBE_OFFSET_FROM_EXTRUDER 25 // X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 15 // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]
//Bezpiecznie nie ustawiam wartości offsetu w Z - będę korzystał później z komendy M851 i BabyStepping
//
//Dodatkowo :
//Trzeba uważać aby nie przesadzić z wartością odległości w Z ponieważ są 3 lub nawet 4 miejsca w samym Marlinie, które mają wpływ na wysokość pierwszej warstwy gdzie można nieroztropnie ustawiając nieodpowiednią wartość zrobić parę dziur w stole albo drukować tylko spaghetti.
//Pierwsza warstwa jest bardzo istotna, stąd należy ograniczyć sobie ilość miejsc odpowiedzialnych za wysokość w Z. Stąd
#875
// liczba
Kod: Zaznacz cały
#define MULTIPLE_PROBING 2
//Wartość należy dobrać, tak by w przypadku wielu pomiarów wysokości przy automatycznym poziomowaniu stołu któraś wartość nie była niżej niż zakres, ponieważ wywali błąd
Kod: Zaznacz cały
#define Z_PROBE_LOW_POINT -3 // Farthest distance below the trigger-point to go before stopping
#947 - 949
//Kierunek silników
Kod: Zaznacz cały
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR true
#954
//dla bowdena = false
Kod: Zaznacz cały
#define INVERT_E0_DIR true
// wymiary stołu
Kod: Zaznacz cały
#define X_BED_SIZE 250
#define Y_BED_SIZE 210
// wysokość w Z :
Kod: Zaznacz cały
#define Z_MAX_POS 210
//automatyczne poziomowanie stołu
Kod: Zaznacz cały
#define AUTO_BED_LEVELING_BILINEAR
//zwraca wartość poziomowania stołu
Kod: Zaznacz cały
#define DEBUG_LEVELING_FEATURE
//Włączenie komendy g26, która pozwala sprawdzić wypoziomowanie stołu za pomocą wzoru ( załącznik )
Kod: Zaznacz cały
#define G26_MESH_VALIDATION
#if ENABLED(G26_MESH_VALIDATION)
#define MESH_TEST_NOZZLE_SIZE 0.4 // (mm) Diameter of primary nozzle.
#define MESH_TEST_LAYER_HEIGHT 0.2 // (mm) Default layer height for the G26 Mesh Validation Tool.
#define MESH_TEST_HOTEND_TEMP 210.0 // (°C) Default nozzle temperature for the G26 Mesh Validation Tool.
#define MESH_TEST_BED_TEMP 60.0 // (°C) Default bed temperature for the G26 Mesh Validation Tool.
#endif
#1136 - 1137
// Liczba punktów siatki dla automatycznego poziomowania stołu :
Kod: Zaznacz cały
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
#1091
//odkomentowanie automatycznego poziomowanie stołu ułatwi kompensacje płaszczyzny pierwszej warstwy wydruku wobec krzywego stołu.
Kod: Zaznacz cały
#define AUTO_BED_LEVELING_BILINEAR
// granice dostępne dla czujnika. Nie polecam wpisywanie wartości zwyczajnie odejmując pole od offsetu czujnika od dyszy, należy dodać z minimum 10/15mm naddatku, aby czujnik indukcyjny wykrył metalową powierzchnie.
Kod: Zaznacz cały
#define LEFT_PROBE_BED_POSITION 35
#define RIGHT_PROBE_BED_POSITION 220
#define FRONT_PROBE_BED_POSITION 35
#define BACK_PROBE_BED_POSITION 185
//Włączenie komendy M503, która pokazuje zapisane w EEPROMIE ustawienia w terminalu drukarki :
Kod: Zaznacz cały
#define EEPROM_SETTINGS // Enable for M500 and M501 commands
#1375
//Ustawianie własnych wartości dla materiału, które później można wywołać z menu :
Kod: Zaznacz cały
// Preheat Constants
#define PREHEAT_1_LABEL "PLA"
#define PREHEAT_1_TEMP_HOTEND 210
#define PREHEAT_1_TEMP_BED 60
#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255
#define PREHEAT_2_LABEL "PETG"
#define PREHEAT_2_TEMP_HOTEND 247
#define PREHEAT_2_TEMP_BED 75
#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
//Włącz obsługę karty SD, odkomentuj :
Kod: Zaznacz cały
#define SDSUPPORT
#1627
//Pozycja w Menu - home dla osi z osobna, odkomentuj :
Kod: Zaznacz cały
#define INDIVIDUAL_AXIS_HOMING_MENU
#1658
//Należy odkomentować poniższe dla LCD2004
Kod: Zaznacz cały
#define REPRAP_DISCOUNT_SMART_CONTROLLER
Zmiany w Configuration_adv.h
#244
//chłodzenie ekstrudera, domyślnie implementuje funkcjonalność włączenia chłodzenia dopiero, gdy głowica prekroczy temperaturę 50 C ( zakres można to zmienić w linii #251 )
Kod: Zaznacz cały
#define E0_AUTO_FAN_PIN P2_04
#337 - 344
//Prusa posiada 2 silniki w Z, stąd w miejsce sterownika E1 wpięty zostaje sterownik dla Z2. Należy odkomentować definicje podwójnego silnika Z :
Kod: Zaznacz cały
define Z_DUAL_STEPPER_DRIVERS
#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
//#define Z_DUAL_ENDSTOPS
#if ENABLED(Z_DUAL_ENDSTOPS)
#define Z2_USE_ENDSTOP _XMAX_
#define Z_DUAL_ENDSTOPS_ADJUSTMENT 0
#endif
#endif
#936
// babystepping - ekwiwalent live z adjust z FW Prusy. Dostosowuje o wysokość kładzionej warstwy o bardzo niskie wartości.
Kod: Zaznacz cały
#define BABYSTEPPING
--------------------- WGRANIE FW NA KARTĘ ---------------------------
Po zapisaniu zmian, należy skompilować Marlina. Należy wybrać
opcję "Build" i poczekać na koniec procesu około parę minut. Po pomyślnej kompilacji ukaże się nam zielony napis "Success", dopiero wtedy można dać "Upload" - wgrywając plik na wyspecyfikowaną wcześniej ścieżkę karty SD.
Plik firmware.bin, który zawiera skompilowany system (ekwiwalent rozszerzenia .hex występującego jako efekt kompilacji systemu w Arduino IDE dla AVR) można również przenieść na kartę SD ( lub zapisać w formie backupu danych ) ręcznie.
Dokładny adres pod jakim się znajduję to ".pioenvs\LPC1768" w katalogu głównym projektu ( tym samym, gdzie plik konfiguracyjny "platformio.ini" ).
--------------------- NAPOTKANE PROBLEMY ----------------------------
////////////////
collect2: error: ld returned 1 exit status
*** [.pioenvs/LPC1768/firmware.elf] Error 1
////////////////
Błąd kompilacji - jest to problem związany z ustawieniem nieodpowiednich parametrów w Marlinie, te problemy dopóki nie zostaną odznaczone/wykomentowane nie pozwolą skompilować się FW
Przyczyną błędu może być np włączenie opcji M100 Memory watcher.
Kompilacja z opcją --verbose może dokładniej opisać miejsce błędu, jeżeli nie jest widoczne zaraz powyżej błędu.
Można również w ustawieniach IDE zmienić, aby automatycznie przeniosło nas do miejsca błędu :
PlatformIO -> Settings -> Build -> zaznaczenie opcji " Automatically scroll on build error "
////////////////
*** [upload] /dev/ttyACM3/firmware.bin: Not a directory
////////////////
Powyższy błąd wyskoczył Ci, ponieważ podłączyłeś płytkę do komputera i chcesz wgrać Marlina bezpośrednio na nią (tak jak we wszystkich płytkach AVR np Atmega2560, poprzez Arduino IDE ) - tutaj jednak jest to niepotrzebne, ponieważ FW wgrywamy na dołączoną kartę SD. . Tamże znajduję się plik firmware.bin
Ten błąd może występować w przypadku, gdy połącznie usb jest zrywane ( np kabel jest uszkodzony )
Więc należy odwołać się do ścieżki karty pamięci.
////////////////
Error: BoardConfig: Board is not defined
////////////////
W przypadku ściągnięcia Marlina 2.0 bezpośrednio z oficjalnego repozytorium Marlina a nie wersję od BigTreeTecha, wyskakiwał mi błąd braku wykrycia pł
////////////////
UnicodeDecodeError : 'ascii' codec can't decode byte 0xbf in position 8: ordinal not in range(128)
////////////////
Powyższy błąd wyskoczył Ci ponieważ w adresie katalogu programu, biblioteki, pliku konfiguracyjnego lub samego marlina posiadasz nazwę ze znakami nie w formacie ASCII - najprawdopodobniej UTF-8 czyli formatowanie typowo polskich znaków jak "ą", "ć" lub "ż". Kompilacja nie uda się, więc musisz postarać się zrobić wszystko, żeby w ścieżce roboczej (WD) nie było tych znaków - jest to problem z kodowaniem w interpreterze Pythona 2.7 nie ma na to innego obejścia ( lub ja nie znam/ nie słyszałem o takim - śmiało napisz w komentarzu jeżeli udało Ci sie obejść ten problem ). Pół biedy jeżeli jest to znak w folderze nadrzędnym lub kolejnym, najgorzej jest mieć katalog główny, w którym zainstalowane są wszyskie programy ( IDE i biblioteki ) - np jak ja ... tyle problemów przez głupie "ż" W tymże przypadku jeżeli nie masz innego komputera lub inne konto administratora z ustawioną hierarchią folderów bez takiej przypadłości polecam zainteresować się wirtualizacja systemu.
-------------------------------------------------------------------------
Na koniec : wybaczcie, że popadłem w lekka grafomanię (być może bardziej niż powinienem), ale robienie notatek to jeden z lepszych sposobów przyswajania wiedzy, więc wrzucam to jako ściągę na przyszłość dla mnie i każdego, komu może sie to przydać.
PZDR!