Lépésenként megmutatom hogyan kell a Marlin firmware-t konfigurálni egy HyperCube 3D nyomtatóhoz. A Tech2C fájljai között található egy Configuration.h fájl, de ne használjuk ezt kiindulási alapként, csak sorvezetőnek. Egyrészt ez még 1.1.4-es Marlin-hoz készült és ezen cikk írásakor már 1.1.9 az aktuális verzió. Másrészt érdemes egyszer a konfigurációt a nulláról végigcsinálunk, hogy megtapasztaljuk, mennyire egyszerű dolog is ez. Sokkal magabiztosabban javítunk majd bele a jövőben, ha tudjuk, hogy a fájl minden módosításával tisztában vagyunk, kézben tartjuk a firmware-t.
A példaként végigmutogatott fáljt megosztom GitHub-on, de nem abból a célból, hogy egy az egyben használja valaki, hanem azért, hogy egy-egy önálló módosítást egy-egy commit-ként jól olvashatóan meg lehessen nézni.
Minden épített 3D nyomtató valamennyire egyedi, így egyedileg testre szabott firmware-re van szüksége. Például lehet, hogy a stepper motor kábeleket fordítva kötöttem be hozzád képest. Egyébként ez az első, amit ki kell próbálni, hogy a motorok megfelelő irányba forognak-e. Egy „óvatos Home-ot” elindítunk a firmware feltöltése után, és ha rossz irányba mozog valami, akkor gyorsan áramtalanítjuk a nyomtatót, hogy ne kínozza saját magát a tengelyek végein. Javítjuk a firmware-t és újra próbáljuk.
MKS GEN 1.4 board-ot használok, a példában egyrészt ez fog szerepelni, másrészt kitérek arra is, hogy RAMPS esetében mit kell az adott sorba írni. De vigyázat: a RAMPS-os példáimat nem próbáltam ki! A célom nem az, hogy működő kódot adjak a kezedbe, hanem az, hogy megmutassam melyik sorokat kell módosítanod a saját nyomtatód bekonfigurálásához.
K.I.S.S: Keep it simple, stupid
Mindent olyan egyszerűre kell csinálni, amennyire csak lehet, de nem egyszerűbbre.
Nagyon erősen javaslom, hogy kis lépésekben módosítsuk a kódot és egy-egy önállóan tesztelhető beállítás után azonnal próbáljuk is ki a művünket! Ne csináljuk azt, hogy mint valami kérdőívet kitöltjük az elejétől a végégig a konfigurációs fájlt és minden számunkra szimpatikus, jópofa funkciót bekapcsolunk. Ennek egészen biztosan az lesz a következménye, hogy elrejtünk valami kis hibát, amit aztán órákig keresgélhetünk.
A cél az legyen, hogy minden egyes sor módosításának a hatásával tisztában legyünk!
Szerintem nem túlzás valamilyen forráskód kezelő szoftvert, például Git-et vagy SVN-t használnunk a Marlin kódunk karbantartásához. De ha ezt nem is teszed, akkor legalább készíts másolatot minden működő változatáról a Configuration.h fájlnak. Ha valami hibát keresel, akkor például a TotalCommander Összehasonlíás tartalomra… funkciójával azonnal láthatod, hogy miket változtattál meg az utolsó működő változathoz képest.
Na de sok a rizsa, csináljunk végre valamit:
Marlin legfrissebb változatának letöltése
Az aktuális verziót innen tölthetjük el: http://marlinfw.org/meta/download/
A zip-ben lévő Marlin nevű könyvtárra lesz szükségünk, ezt másoljuk ki oda, ahol dolgozni fogunk vele. Első lépésként nevezzük át a mappát valami egyedibbre, például Marlin_1-1-9_HyperCube-ra és a benne lévő Marlin.ino fájlt ugyan így Marlin_1-1-9_HyperCube.ino-ra.
Ez azért lesz jó, mert ha több Marlin változatot is tárolunk a gépünkön, akkor az Arduino IDE fejlécében látni fogjuk, hogy éppen melyik van nyitva. Az Open Recent menüben is segít, ha nem csupa egyforma „Marlin” sorakozik egymás alatt.
Első módosításként a 139. sorban nevezzük el a nyomtatónkat. A sorok számozását konkrétan fogom megjelölni, de természetesen ezek elcsúszkálhatnak a Te verziódhoz képest. Vegyük ki a sor elején lévő komment jelet és írjunk be valami nevet:
#define CUSTOM_MACHINE_NAME "HyperCube"
Fordítsuk el a programot Ctrl+R billentyűkkel! Ha minden rendben, akkor elkezdhetjük az érdemi munkát:
A mechanika működésé beállításai
Az első nagyobb csomagban azokat az alapbeállításokat végezzük el, melyekkel a tengelyek mozgatását, Home-ot, ki lehet próbálni.
CoreXY felépítés
A 494. sorban állítsuk be a CoreXY mechanikát. Vegyük ki a kommentet:
#define COREXY
A későbbiekben ha mást nem írok, akkor „beállítás” alatt a komment jelek törlését fogom érteni!
Végálláskapcsolók
MKS GEN és RAMPS esetén is fordítsuk meg a végállás kapcsolók jelének az értékét. A false-okat írjuk át true-ra:
#define X_MIN_ENDSTOP_INVERTING true #define Y_MIN_ENDSTOP_INVERTING true #define Z_MIN_ENDSTOP_INVERTING true #define X_MAX_ENDSTOP_INVERTING true #define Y_MAX_ENDSTOP_INVERTING true #define Z_MAX_ENDSTOP_INVERTING true #define Z_MIN_PROBE_ENDSTOP_INVERTING true
Lépések száma milliméterenként
Ha 1/16-os lépésközt állítottuk be a motor vezérlőknek a jump-erekkel és MK7-es extrudert használunk, akkor ezeket a lépésszámokat állítsuk be:
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 100 }
Ha azt tapasztaljuk, hogy fele, vagy dupla távolságokat mozognak a tengelyek, mint amit várunk tőlük, akkor itt a megfelelő értéket duplázni, vagy felezni kell. Amikor pedig már minden jó nagyjából, akkor finomhangolhatjuk is ezeket az értékeket.
Motorok iránya
Nekem ezekkel a beállításokkal mozog helyes irányba a nyomtató:
#define INVERT_X_DIR true #define INVERT_Y_DIR true #define INVERT_Z_DIR true
#define INVERT_E0_DIR true
Ezen nem érdemes gondolkodni, mindjárt kipróbáljuk.
Vízszint szenzor
Ha nem használsz vízszint szenzort, akkor ugord át ezt a részt. Az alábbiakban MKS GEN alaplaphoz PNP bekötésű indukciós szenzort állítok be. Más csillagállás esetén lehet, a Z EndStop-ot invertálnod kell például. Bővebben itt írtam erről: Induktív közelítésérzékelők
#define FIX_MOUNTED_PROBE
#define X_PROBE_OFFSET_FROM_EXTRUDER 28 #define Y_PROBE_OFFSET_FROM_EXTRUDER 12 #define Z_PROBE_OFFSET_FROM_EXTRUDER 0
#define AUTO_BED_LEVELING_BILINEAR
Nyomtatási terület mérete
Be kell állítanunk a tengelyek hosszait, mivel csak a kezdő pontokra tettünk végálláskapcsolókat, így a tengelyek másik végeinek elérést szoftverből számolja a firmware. Én így állítottam be, de lehet neked picit nagyobb értékek is megadhatók:
#define X_BED_SIZE 200 #define Y_BED_SIZE 180
#define Z_MAX_POS 130
Minimum oldalak szoftveres vizsgálatát viszont kapcsoljuk ki:
//#define MIN_SOFTWARE_ENDSTOPS
Próbáljuk ki a művünket!
Igaz, még képernyő kezelést sem állítottunk be, de konzol segítségével ki tudjuk próbálni, hogy eddig mindent jól csináltunk-e. A tengelyeket kézzel állítsuk nagyjából középre, hogy legyen időnk felismerni, ha rossz irányba indulnának el.
Fordítsuk le a programot és töltsük fel a vezérlőre, majd nyissuk meg a konzolt Arduino IDE-ben, vagy az OctoPrint-ben. Helyezzük áram alá a nyomtatót!
Végálláskapcsolók ellenőrzése
Az M119-es paranccsal ellenőrizhetjük, hogy mit gondol a vezérlő a kapcsolók aktuális állapotáról. Ha egyik tengely sem ütközik kapcsolónak, akkor mind a háromra open státuszt kell kapnunk:
Send: M119 Recv: Reporting endstop status Recv: x_min: open Recv: y_min: open Recv: z_min: open Recv: ok
Ha nem így van, akkor invertálnunk kell azt az értéket, amit beállítottunk. Ha okés minden, akkor kézzel fogjuk le az egyik kapcsolót és adjuk ki ismét az M119-es utasítást:
Recv: x_min: TRIGGERED Recv: y_min: open Recv: z_min: open
Ha az az irány került TRIGGERED állapotba, amelyikhez tartozó kapcsolót kézzel lefogtunk, akkor próbáljuk tovább a többit. Az indukciós szintezőt is ki tudjuk próbálni, ha valami fém tárgyat teszünk alá, és látjuk, hogy világít a lámpája. Ha valami mégsem úgy van, ahogy várjuk, akkor valószínű a vezetékeket nem kötöttük be megfelelően.
Ha továbbra is minden okés, akkor adjunk ki egy G28 parancsot. Ezzel Home helyzetbe mozgatjuk a nyomtatót. Figyeljünk nagyon, hogy valóban a végállás kapcsolók felé indulnak-e el a motorok. Ha nem, akkor áramtalanítsuk a nyomtatót és javítsuk a vonatkozó INVERT DIR beállítást.
Ha sikerült helyesen a home, akkor megdicsérhetjük magunkat, a konfiguráció nehezén már túl is vagyunk. Folytassuk a munkát, csináljunk 3D nyomtatót ebből a remekül mozgó robotból!
Az eddigi módosítások a GitHub-on: Mechanika működés commit
Elektronikák beállításai
Vezérlő típusa
Ha nem RAMPS-ot használunk, akkor a 134. sorban mondjuk meg, hogy melyik nyomtatóvezérlő pin kiosztását használja a Marlin. MKS GEN esetében:
#define MOTHERBOARD BOARD_MKS_GEN_13
LCD képernyő
MKS GEN alaplaphoz MKS mini LCD képernyőt használok, ezt így kell beállítani:
#define MKS_MINI_12864
Ha RAMPS-ot használunk például 20×4-es LCD kijelzővel, ahogy az eredeti videóban látható, akkor pedig ezt a sort aktiváljuk:
#define REPRAP_DISCOUNT_SMART_CONTROLLER
Ha valami egyéb megoldást választottunk, akkor nézzünk utána, hogyan kell a Marlin-ban azt a konkrét kijelzőt beállítani. Mindegyik esetben kapcsoljuk még be az SD kártya elérhetőségét is:
#define SDSUPPORT
Filament vastagság
Állítsuk be az 1.75mm-et filament vastagságként:
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
Fűthető tálca
A fűthető tálcát a tálcához tartozó termisztor típusának megadásával kapcsoljuk be:
#define TEMP_SENSOR_BED 1
Probáljuk ki ismét a módosításainkat!
A K.I.S.S. jegyében, elégedjünk meg ennyi beállítással és töltsük fel a firmware-t a nyomtatóra. Ugyanis mindazt beállítottuk, ami minimálisan szükséges ahhoz, hogy nyomtatni tudjunk.
Próbáljuk ki a kijelzőt, indítsunk el rajta funkciókat, fűtést, tengelyek mozgatásait. Próbálgassuk kicsit a nyomtatót és ha az eddigi szándékainkkal ellentétesen működik valami, akkor javítsuk a hibát.
Ha mindent rendben találtunk, akkor jöhet a következő rész, a finomhangolás. Előtte persze egy megérdemelt korsó sör. 🙂
Második lépés a GitHub-on: Elektronikák beállítása
A GitHub-ra feltöltött kódot kipróbáltam, nekem jól működik. De ennek ellenére lehet, hogy a fentiekben mégis tapasztalsz valami pontatlanságot. Ha így van, kérlek például kommentben jelezd nekem és pontosítom a leírást.