Pat a Mat staví 3D tiskárnu V: A zkoušeli jste to zapojit do zásuvky?

Kupa hliníku, plastu a spojovacího materiálu už zabírá místo na stole. Zatím je to ale jenom přerostlé těžítko. Přišel čas vyzkoušet, jestli to těžítkem i zůstane :-) Předtím, než se z toho vyhrne hromada plastu (která dost možná nebude ani trochu podobná tomu, jak to mělo vypadat), je potřeba ještě několik věcí poupravit. V zásadě ale už jediné co je třeba montovat, je neustále do zblbnutí otevírat a zavírat krabičku na elektroniku. Směle tedy můžeme zahodit nářadí, zapojit to do zásuvky a začít se hrabat v softwaru :-)

Firmware

Prvním krokem, aby tiskárna měla vůbec nějaké předpoklady pro samostatnou činnost, je nahrání firmwaru. Arduino MEGA, které si aktuálně leží v krabičce s elektronikou je prázdné, nedělá vůbec nic (krom toho, že bude žrát elektriku). Vybereme si tedy vhodný firmware, který chceme používat (já jsem zůstal u Marlinu, popravdě jsem ani jiný nezkoušel - jsem konzerva a tenhle jsem měl vyzkoušený) a následně si stáhneme a nainstalujeme Arduino IDE. V něm si otevřeme projekt s firmwarem. Zde je potřeba pochválit tvůrce Arduino IDE, protože je to snad první IDE (zvlášť pro prťavá divná zařízení), kde se po stlačení tlačítka kompilovat projekt zkompiluje a nevyhodí 150 různých chyb (pokud tedy nejsou přímo ve zdrojáku). A po vybrání nahrát se dokonce i nahraje do zařízení. Připojíme naše Arduino USB kabelem do počítače, v menu IDE nastavíme vývojovou desku na Arduino MEGA, vybereme správný "sériový" port na kterém se nám Arduino objevilo a dáme nahrát. Tím by se mělo naše Arduino začít tvářit jako tiskárna. Můžeme zkusit otevřít ovládací software (například Pronterface) a sériový port v něm otevřít - pokud vše probíhá správně, tak se z výpisu dozvíme na jakém jedeme firmwaru, kdy byl zkompilovaný, atd, atd. Předtím, než nás popadne touhat začít mačkat v Pronterfacu ty roztodivná tlačítka pro hýbání s motory a nastavování teplot, je vhodné dokončit ještě zbytek ladění... předtím než motorky v plamenech vyskáčí z tiskárny ven. Pokud vám ty divné písmenka všude v IDE nic neříkají a máte radost, že to můžete konečně zavřít, tak vás zklamu... Ještě tam budeme dosti věcí upravovat a znovu a znovu to nahrávat do Arduina.

Nastavení proudu krokových motorků

Na driverech pro krokové motorky (ano, teď přichází ten správný čas vzít do ruky šroubovák a zase rozebrat krabičku na elektroniku) bývá takový miniaturní potenciometr (akorát na malý křížový šroubováček). Tímhle bazmekem se reguluje proud, který driver pustí do krokového motoru (nebo motorů v případě osy Z), které jsou na něj napojené. Čím více proudu, tím více má motor sílu. V případě, že sílu nemá, dojde obvykle k přeskočení - motor udělá cvak, tiskárna si myslí, že krok byl proveden, ale ve skutečnosti nebyl - následky na tisk jsou zřejmé - u pohybových motorů tiskneme o kus jinde, u extruderu zase nevytlačujeme plast. Proč tedy nepustit do motoru co ČEZ dá? Trpí stejným neduhem, jakým všechny elektrické zařízení - čím víc žere, tím víc se hřeje. Předtím, než se pustíme do filozofické debaty kolik proudu je správně, tak malá poznámka k tomu, jak se to nastavuje. Na potenciometru není žádná stupnice a malé pootočení dramaticky mění proud, který se do motoru pouští. Je zde ale jiný způsob odečítání hodnot - na hlavě potenciometru se dá naměřit napětí. Napětí se mění spolu s natočením potenciometru - čím větší napětí, tím větší proud. Vezmeme tedy voltmetr, zem si zapíchneme klidně kamkoliv do země našeho zdroje a plus přiložíme na potenciometr a vidíme hodnotu. Jako praktické se ukázalo přiložit šroubovák na potenciometr a měřící kabel od voltmetru na šroubovák - můžeme směle kroutit a hned se dívat, jaký to má efekt. Jo, aby tam nějaké napětí bylo, je potřeba mít tiskárnu v zásuvce :-) Tedy konkrétně mít v zásuvce 12V zdroj (což u předchozího kroku ani nutné nebylo, protože arduino se umí napájet přes USB). Zároveň je dosti vhodné, aby při nastavování nešel do motorů proud. Ten tam standardně po zapnutí nejde - pustím se tam až při prvním pokynu k pohybu. Pokud jste tedy zkoušeli už něčím hýbat, použijte předtím tlačítko Motors off.

A teď tedy ještě k samotnému nastavení velikosti proudu. Příliš málo proudu v motoru způsobí, že motor má moc malou sílu a může kroky vynechávat, když mu síla přestane stačit (při tisku se obvykle může stát, že tryska sem tam do něčeho vrazí... taktéž velká rychlost tisku s velkým zrychlením klade větší nároky na výkon motoru). Příliš moc proudu zase zahřívá motor a driver. Selský rozum tedy praví, že je vhodné nastavit co nejmenší proud tak, aby při tisku se nikde žádný krok nevynechával. Jenže... to že jeden model vyjede v pohodě ještě nezmanená, že při tisku něčeho jiného tiskárna neprovede pohyb, který motor už nezvládne (ostatně mě to na nějakých modelech přeskakuje doteď, ač u nich je asi vhodné to řešit ještě jinak). A vynechané kroky při tisku také typicky znamenají storno a začít nanovo. Druhá otázka je kolik proudu ještě motor/driver zvládne. O tom se vedou nějaké diskuze, nicméně převládá spíše názor, že motor zvládne celkem hodně. Patrně nějaký problém může nastávat nad 80°C, kde (prý) degradují neodymové magnety v motoru. V zásadě tedy lze začít s nějakou rozumnou hodnotou, například tak, aby při pohybu nešlo rukou jednoduše pohyb zastavit. V případě vynechaných kroků při tisku potom přidávat. Motory během tisku můžou být teplé, ale neměly by být vysloveně horké. Osobně jsem u sebe skončil někde na hodnotě napětí na driveru 0,2V (nutno podotknout, že jsem to měřil svým zaručeně certifikovaným čínským multimetrem, takže ta hodnota může znamenat úplně cokoliv). Teplota motorů při tisku byla někde pod 50°C, což se i jeví jako rozumné. Pokud vám tiskárna neustále přeskakuje a teplota na motorech je již vhodná ke smažení vajíček, je pravděpodobně na místě zamyslet se nad tím, jestli není chyba i někde jinde :-)

Po nastavení zmíněného můžeme zkusit z pronterfacu osama pohnout. Jenom o kousek (jak se podíváme o kus dále - není dobré snažit tiskárnu přesvědčit, aby se sama rozebrala pohybem přes vymezený prostor). V této fázi po zapnutí bude fungovat pohyb jen do kladných poloh (a pak zpátky). Mělo by se všechno na pokyn hýbat (možná krom extruderu, kde velice pravděpodobně je zapnutá ochrana, kdy firmware nedovolí tlačit plast, když tryska není zahřátá). Po vykonání pohybu bude slyšet syčení nebo pískání - je to indikace, že do motoru je puštěný proud. Intenzita zvuku je také závislá na hodnotě proudu, nicméně při vhodném nastavení by zvuk rozhodně neměl být nějak extra nápadný. Taktéž v této chvíli si motor drží silou svou pozici - můžeme si povšimnout, že nelze danou částí pohnout ručně (resp. lze, ale s vynaložením značné síly a není vůbec dobrý nápad to dělat). Pokud chceme manuálně částmi pohybovat, použijeme opět tlačítko motors off, které motory vypne.

Endstopy aneb kde domov můj?

Pokud jste v téhle fázi zapnuli tiskárnu a zkoušeli z pronterfacu hýbat některými osami, asi jste si všimli něčeho zvláštního. Všechny osy máte taknějak někde v prostoru, ale tiskárna reaguje pouze na pohyby do kladných souřadnic a pak je ochotná se vrátit na původní místo. Na druhou stranu nechce. Stejně tak pokud jste se posunuli až moc, tak tiskárna tou hýbací částí dojela kam až to šlo a následně jste v lepším případě slyšeli přeskakovat motor, jak se snažil rvát část z tiskárny ven. Proč to? V nastavení firmwaru je zanesena velikost tiskové plochy. Firmware sám o sobě nedovolí vyjet s některou z os mimo tento nastavený prostor - tedy ani do záporných souřadnic, ale ani přes nastavenou velikost (právě, aby se to cvakání nestalo). Problém je ten, že tiskárna nemá žádný mechanismus jak zjistit, na které souřadnici se zrovna která osa nachází. Jak se to tedy chová? Po zapnutí tiskárna předpokládá, že se nachází na souřadnicích 0, 0, 0 - ale neví, kde má co zrovna umístěné - prostě si řekne že tam kde zrovna je bude 0, 0, 0. Proto odmítá se posunout do minusu - do záporných souřadnic přece nepojede. A proto se může snažit i vyjet mimo daný prostor - ve FW je sice nastavena velikost tiskové plochy, ale když se ten začátek ručně posune, tak to tiskárna nemá jak zjistit. Jelikož by patrně nikoho nebavilo před každým zapnutím tiskárnu ručně umístit na začátek, je tiskárna vybavena endstopy - těmi mikrospínači. Mikrospínače jsou umístěny na každé ose na vhodném místě tak, aby tiskárna při pohybu směrem tam, kde má být nulová souřadnice, do mikrospínače vrazila a zmáčknula ho. V pronterfacu potom pro každé osy (a následně i kombinované pro více os zaráz) je tlačítko home. Příkaz pro home pro danou osu způsobí to, že tiskárna jede po dané ose směrem k nule (bez ohledu na to, kde zrovna si teď myslí, že nulu má) a jede tak dlouho, dokud se mikrospínač nesepne. Při sepnutí se zastaví a uvědomí si, že nula je tedy tady (a tím to začne i fungovat - nula je skutečně na začátku a při pohybu na druhou stranu už nelze vyjet z tiskového prostoru). Na to, aby to tedy správně fungovalo, je potřeba samotné mikrospínače posunout tak, aby při zahomování všech os tryska mířila skutečně na začátek tiskového prostoru. Ještě taková poznámka: pokud se vám povedlo při zapojování kontektorů od motoru do RAMPSu je otočit, stane se přesně to, že motor se točí na druhou stranu než má. Homování v tomhle případě způsobí docela závažnou věc - tiskárna pohybuje částí na druhou stranu, než má ten mikrospínač a tudíž ho nikdy ani nedosáhne - a to určitě nechcete zkoušet. Takže při prvním zkoušení si na to dát pozor a pokud se osa rozjede na druhou stranu než má, tak tiskárnu zastavit (stačí zmáčknout ten mikrospínač rukou) a konektor (při vypnutých motorech, lépe celé tiskárně) otočit.

Teď samotné nastavení mikrospínačů - začneme osami X a Y, protože je to celkem snadné (zatímco při nastavování osy Z budete mít pocit, že jste v minulém životě provedli něco hodně špatného). Pokud se díváte na tiskárnu zepředu, 0 v ose X je po vaší levé ruce (ostatně tam byste měli mít ten spínač přidělaný) a 0 v ose Y je ta strana blíže k vám. Posuneme spínače tam, kde by to zhruba mohlo být, necháme obě osy zahomovat a podíváme se, kam míří tryska. Podle toho to poupravíme, znova home, atd. - dokud tryska neskončí na nejlevější přední části tiskové plochy (na heatbed se obvykle dává sklo, na které se teprv tiskne, takže tryska by měla mířit na roh skla, nikoliv heatbedu). Hotovo. S osou Z je to horší, protože zatímco rozdíl pár milimetrů u os X a Y je prakticky šumák, osu Z je potřeba trefit na desetiny milimetru přesně, jinak se budou tisknout zmetky. A ono ikdyž ten mikrospínač trefíme správně, tak než zašroubujeme šroubek na jeho držáku, aby si udržel pozici, tak ho nejspíš zase posuneme o kus vedle. Druhá komplikace je to, že výška v Z by měla být po celé tiskové ploše stejná, což se říká jednodušeji, než realizuje. Pokud se výška Z nápadně odlišuje na začátku a konci osy X, můžete mít nakřivo celou tu část s hlazenkami a extruderem - to se dá upravit ručním pootočením jednou ze Z závitovek. Jinak si pro korekci do roviny musíte vystačit se 4 šroubky, kterými je přidělán heatbed k Y vozítku (ostatně ty plastová kolečka kolem matky a pružinky tam jsou přesně kvůli tomu, že se s tím každou chvíli šmrdlá). Endstop pro Z by se měl nastavit tak, aby tryska skončila lehce nad samotným sklem - neměla by do něj vrážet a mezi sklo a trysku by měl jít vložit list papíru. Cílem je, aby se při tisku první vrstva korektně zažehlila do podkladu. Při tisku by tedy první vrstva měla být viditelně rozpláclá a placatá - ale ne zase tak extrémně, aby model při sundání měl viditelný podstavec z toho, jak první vrstva přetéká ven. Pokud bude Z extrémně nízko, tak tiskárna dokonce nebude tisknout vůbec (tryska se ucpe, jak drhne po podkladu). Pokud bude příliš vysoko a nebude rozmazávat o podklad, tak budou jednak ve výtisku vidět spáry (nebude to jednolitá plocha) a jednak v ještě horším případě se model k podkladu pořádně nepřichytí a následně se posune.

Úspěšnost nastavení se pak projeví až při tisku; obvykle se potom ještě dolaďuje. Nicméně horor nekončí se správným nastavením... Zatímco nastavení os X a Y pravděpodobně zůstane správné na pořád, u osy Z stačí tiskárnu posunout o kus vedle, vyměnit ji sklo nebo udělat něco podobného a můžete začít na novo - taková nikdy nekončící zábava. Pokud se správné nastavení od aktuálního liší jenom o kousek (a podložka je šrouby seštelována do roviny) - například po vyměnění skla, dá se udělat takový malý hack (alespoň u slic3ru). V nastavení sliceru bývá možnost Z offset, která při slicování ovlivňuje to, že se všechny Z souřadnice o nastavený offset posunou. Pokud tedy vidíme, že při homu Z tryska lehce ťuká do skla a pravděpodobně ji teda stačí o pár desetin milimetru zvednout, nastavíme offset na 0,něco mm a při tisku se začne tisknout od této hodnoty. Nevýhodou je samozřejmě to, že se tahle změna projeví až ve vygenerovaném gcodu - nemůžeme tedy vzít předchozí gcode (který jinak fungoval dobře) a poslat ho do tiskárny (což bysme jinak mohli, kdyby jsme endstop přesunuli fyzicky). Kutilové mohou začít hledat informace o bed auto leveling, který řeší jak křivou podložku (ačkoliv řešit to tímhle není nejlepší nápad), tak nastavování výšky celé Z. Ve zkratce jde o to, že ten mikrospínač je někde na extruderu a tiskárna před samotným tiskem si změří výšku v každém rohu tiskové plochy sama (jede dolů tak dlouho, dokud spínač necvakne). Funguje to i na křivách podložkách, ale za cenu toho, že se osa Z hýbe v rámci jedné vrstvy a tím se i zhoršuje kvalita tisku.

Počet kroků pro ujeté vzdálenosti - aby milimetr milimetrem byl

Pokud si začneme hrát s gcode příkazy nebo se podíváme co nám generuje slicer, zjistíme, že tiskárně se dá poslat příkaz pro pohyb. V rámci toho příkazu se specifikuje pozice pro každou osu, kam má tiskárna dojet - v našich končinách se zde bavíme o milimetrech. Ovládací prvky v pronterfacu na sobě také mají čísla, která určují, o kolik milimetrů se část na ose posune. Nicméně tiskárna sama o sobě měřit neumí, jak jsem již psal. Ona jenom točí motorem. Řekne motoru o kolik kroků se má posunout, motor se o to otočí. Je tedy potřeba firmwaru nějak vysvětlit, kolik kroků má dělat pro ujetí určité vzdálenosti. U Marlinu najdeme v Configuration.h klíčovou konstantu DEFAULT_AXIS_STEPS_PER_UNIT (a za ní sadu 4 čísel). Čísla jsou pro každou osu a extruder, tedy postupně X, Y, Z a extruder. A číslo znamená počet kroků, které tiskárna musí udělat, aby se osa posunula o 1 mm. Teď je ještě potřeba sem dostat správné hodnoty. Ve výpočtu figuruje počet kroků (u DRV8825 32), velikost kolečka na motoru, jeho počet zubů, a tak podobně. Matematici zajásají a můžou počítat. U mojí tiskárny s řemeničkou GT2 a 20 zuby se jako správná hodnoty pro X a Y jeví 160, pro osu Z (M5 závitovka přidělaná hadičkou na osičku motoru) 8000. Alternativně (byť ne tak úplně přesně, jako v případě výpočtu) se to dá i změřit. Zahomujeme osu, necháme ji posunout o 100-200mm a změříme o kolik se reálně posunula. Podle toho dopočítáme správný počet kroků a vyzkoušíme to znovu (a tak dlouho, dokud nebudeme mít správný výsledek). Při tomto testování není nutné pokaždé překompilovat firmware a přehrávat jej v Arduinu - existuje gcode příkaz, kterým se tyhle hodnoty dočasně nastaví a lze je rovnou vyzkoušet. Správnost nastavení ve finále zjistíme při tisku - vytiskneme si testovací kostku s danými rozměry a šuplerou změříme, jak moc jsme byli úspěšní.

Počet kroků II - tlačíme materiál

Jak bylo zmíněno výše, počet kroků na 1 mm se zadává i pro extruder. U extruderu se jednotky týkají délky celé struny (tedy na vstupu - nahoře), která se natlačí do trysky (nikoliv délka toho, co z ní dole vyleze). Ti, co se snaží správný počet kroků spočítat, si teď užijí - motor pro extruder totiž otáčí jedním plastovým kolem, které točí druhým větším kolem a na jeho ose je kovové kolečko, které teprve žene materiál dovnitř. Navíc ty blbě se shánějící kovová kolečka nejspíš bude mít každý jiný, takže nepůjde ani použít hodnota, co mají ostatní. Já jsem nakonec skončil u měření a korekci podle měření. Jako vhodný postup se osvědčilo odmontovat j-head (jsou to jenom 2 šrouby, takže to jde celkem lehce), materiál si nahnat akorát k místu, kde jinak j-head přiléhá a potom následně přes firmware vytlačit nějaké větší množství materiálu a změřit. Při tomhle postupu se to dá celkem snadno změřit. Je tu jedna malá překážka - ve firmwaru je standardně zapnutá funkce, která zabraňuje vytlačení materiálu, když není hotend zahřátý. Příkaz na vytlačení materiálu je tedy úplně ignorován. Pro kalibraci extruderu tedy je potřeba buď tuhle funkci dočasně (jinak mi přjide celkem užitečná, může zabránit pár nepříjemným situacím :-) ) vypnout nebo, pro línější, si ten hotend nahřát a potom kalibrovat.

Měříme teplotu

Tiskárna má dvě vytápěné části. Aby vytápění k něčemu bylo a šlo zregulovat na nějakou teplotu, je potřeba na těhlech místech mít i teplotní čidlo, podle kterého se teplota reguluje. Používá se termistor (prvek, kterému se mění odpor podle teploty), který je připojen do RAMPSu. Jeden je umístěn v trysce, druhý obvykle uprostřed heatbedu. Nicméně, není termistor jako termistor - podle typů ten odpor je různý, takže je potřeba vědět co je to za typ a správně jej nastavit, aby zobrazovaná teplota byla správná. U součástek objednaných zejména z Číny se nelze moc spolehnout na to, že by v popisu bylo napsáno, co je to za termistor, takže nezbývá, než to zkoušet. Připojíme se pronterfacem a podíváme se na teploty hotendu a heatbedu, který nám to reportuje (kreslí se to tam i do grafu). V ideálním případě by obě teploty měly být +- stejné a měly zobrazovat pokojovou teplotu (pokud jsme nezkoušeli už něco zahřívat v nedávné době). Pokud stejné nejsou, bude potřeba to poladit. Ve firmwaru v Configuration.h najdeme kontanty TEMP_SENSOR_0 a TEMP_SENSOR_BED s hodnotou s nějakým číslem. Obvykle nad nima bývá i komentář vysvětlující které číslo reprezentuje jaký termistor. Změníme tedy konstantu u senzoru, který nám měří blbě za jinou, kterou si myslíme že by mohla být správná a zkusíme to znovu. Pokud zobrazovaná teplota vypadá reálně, zkusíme zapnout zahřívání na nějakou teplotu (pro začátek klidně něco nižšího) a pozorujeme, jestli se teplota posouvá nějak normálně. Ideálně můžeme nějakým jiným senzorem (třeba takovým tím kusem drátu, co se dává k multimetrům) ověřit, že ty hodnoty se hýbou nějak podobně. Z toho, že na zadanou teplotu se to ohřívá blbě, přešvihne jí to a pak osciluje, si zatím hlavu neděláme, na to se dostaneme za chvíli. Při tomhle pokusu se mi u j-headu stala ještě další divná věc - zhruba při překračování 170°C se z trysky začal linout bílý kouř. Nikdy jsem nepřišel na to, čím to bylo. Čištění izopropylem nefungovalo. Po pár použitích se problém odstranil a kouř už z trysky žádný nejde. Teoreticky se mohl vypalovat nějaký olej, co tam zbyl po obrábění.

Udržujeme teplotu... plus minus

Termistory ukazují správně, můžeme tedy zkusit nahřát heatbed a hotend - konec konců jsou to stěžejní součástky tiskárny a bez jejich nahřátí nic nevytiskneme. Postupně tedy můžeme oboje nahřát na teplotu, na kterou to typicky budeme provozovat (u mě například heatbed na 90°C a hotend na 225°C - obojí pro tisk z ABS). Pravděpodobně se to neobejde bez komplikací a objeví se jeden nebo druhý problém, který typicky v tuhle chvíli nastává).

První problém co se může stát je, že se to na danou teplotu vůbec nevytopí. Bude se nahřívat, pak to půjde pomaleji a pomaleji, až se to zasekne a k cílové teplotě se to nedostane. Obvykle se to stává na heatbedu. Problém může být buď aktivovaný a blbě nastavený PID (a pak tedy můžete pokračovat následujícím odstavcem, protože je to stejný problém) nebo (zvláště u heatbedu) nějakou mechanickou nedokonalostí. Typickým problémem jsou buď příliš slabé vodiče k napájení (u heatbedu teče proud přes 10A, takže poddimenzovaný vodič může působit problém) nebo obligátní polyswitche na RAMPSu. Polyswitch funguje jako pojistka - je to ta žlutá plochá věc, při průchodu většího proudu se polyswitch zahřívá, spolu se zahříváním na něm narůstá odpor a omezuje se proud, který se do (zkratovaného) obvodu pouští. Poddimenzovaný nebo vadný polyswitch způsobí také to, že se do obvodu nedostane potřebný proud a nenahřeje se to. V obou případech to řeší výměna - výměna vodičů nebo výměna polyswitche za adekvátní (nebo za tavnou pojistku. Tu ale, narozdíl od polyswitche, v případě překročení proudu musíte vyměnit).

Druhou situací, která může nastat je, že cílová teplota se přešvihne, někdy (zvláště na hotendu) i o dost (třeba i přes 15°C), následně teplota začne padat, až zase hluboce spadne pod nastavenou teplotu, pak začne zase jít nahoru... a na grafu je potom taková hezká sinusoida. Než to opravíme, tak ještě krátká poznámka k tomu, jak v dnešních firmwarech funguje regulace teploty. Na výběr jsou dva mechanismy - bang bang nebo PID regulace. Bang bang je triviální způsob regulace. Funguje to tak, že se zapne nahřívání, při dosažení cílové teploty se vypne, po tom co zase klesne pod se zapne, atd. Výsledkem bývá oscilace okolo nastavené teploty, ačkoliv obvykle není tak hrozivá, jak jsem ji poslal. Někdy to může fungovat lépe než PID (nebo funguje dostatečně dobře na to, než aby člověk investoval čas do nastavování PIDu). Častěji se asi používá pro vyhřívání heatbedu, který se nahřívá pomalu a ta setrvačnost tam není taková a tedy i ta oscilace je celkem malá. Oproti tomu PID je zkratka, která znamená proporční, integrační a derivační a už to naznačuje, že s tím bude zábava. Výhodou PIDu je taknějak to, co by člověk čekal - proč hřát na plné koule až do dosažení teploty, když vím, že to pak leze ještě o x stupňů nahoru. A naopak proč zapínat vyhřívání při poklesu pod nastavenou teplotu, když to tak rychle zase nedohřeju. Správně nastavený PID tedy vypíná a zapíná dříve. Stejně tak dokáže zacházet s tím, že vyhřívání se dá zapínat s nějakou intenzitou a ne jen na plné koule (u RAMPSu se to řeší přes PWM - nějakou vyšší frekvencí se otevírá/zavírá MOSFET, který přivádí proud pro vyhřívání). V ideálním případě tedy při nahřívání se dosáhne cílové teploty skoro přesně a ta potom drží a zůstává. V praxi to tak ideální také nebývá (nebo alespoň hotendu, kde zapnutí napájení rázem zahřívá velkou rychlostí a tiskárna se každou chvíli nachází v jiné situaci - stačí otevřít okno a rázem se mění podmínky, které ovlivňují schopnost udržet danou teplotu). Běžně ale lze dosáhnout toho, že při nahřívání se cílová teplota překročí lehce (v rámci tolerovatelné meze) a následně už drží na nastavené teplotě - rozkmit teplot okolo nastavené je v řádu desetin stupňů (pokud na to neotevřete v zimě okno :-) ). Pro nastavení PIDu je potřeba do konfigurace zanést 3 konstanty, které právě ovlivňují, jak se PID bude chovat. Na reprap wiki je o tom povídání, které si doporučuji přečíst. My skončíme u skvělé funkce Marlin firmwaru - autokalibrace - kde zasláním gcodu tiskárna bude chvíli nahřívat a zkoušet a pak nazpět vyplivne konstanty, které si myslí, že jsou ideální. V případě že ideální nejsou, lze je ručně doupravovat (na reprap wiki bylo popsáno co s tím jde dělat), ale osobně jsem každou ruční úpravou situaci spíše zhoršil, než zlepšil.

Přesuneme se tedy do našeho oblíbeného Configuration.h. Najdeme zde řádek #define PIDTEMP - pokud je nezakomentovaný, je pro vyhřívání hotendu aktivován PID, v opačném případě se používá bang bang. Stejný řádek pro heatbed se jmenuje PIDTEMPBED a funkce je opět stejná. U obou řádků najdeme kousek pod nimi definovány konstanty s názvy končícími Kp, Ki a Kd - to jsou zmíněné konstanty, které ovlivňují chování PIDu a které budeme upravovat, abychom dosáhli požadovaného výsledku. U PIDTEMP najdeme ještě několik zajímavých proměnných. Do BANG_MAX a PID_MAX se vepisuje číslo 0-255 a určuje maximální proud (255 - vyhřívání naplno), které může bang bang, respektive PID použít. U mně je PID_MAX nastaven na 128, což znamená, že ve chvíli, kdy PID reguluje vyhřívání, může hotend vyhřívat maximálně na 50% výkonu (ačkoliv po mých prvních zkušenostech s tiskem z PLA si nejsem ještě jist, jestli to nezvednu). PID_FUNCTIONAL_RANGE určuje teplotní rozdíl mezi nastavenou a aktuální teplotou, kdy se použije PID. Pokud je rozdíl mezi nastavenou teplotou a aktuální na senzoru větší, než tohle číslo, potom PID nefunguje a vyhřívání je zapnuté naplno. Pokud je menší, vyhřívání už je řízeno PID regulací. Užitečné je to zejména při omezení výkonu pro PID (PID_FUNCTIONAL_RANGE), aby se při nahřívání z pokojové teploty nečekalo zbytečně dlouho, když se začne vyhřívat menším výkonem. U heatbedu nalezneme ještě konstantu MAX_BED_POWER, která podobně jako u PIDu specifikuje maximální proud, který lze použít pro regulaci - hodnota je tentokrát společná jak pro PID, tak pro bang bang. Heatbed je na vyhřívání náročnější, takže patrně s polovičním výkonem také nemusí být schopen teplotu udržet. Já zde mám 255 (maximální výkon).

Zbývá se už jenom dopracovat k těm magickým 3 konstantám pro heatbed a extruder. Já jsem nejlepšího výsledku dosáhl stejně s autokalibrací - pošleme magický gcode příkaz a tiskárna sama začne nahřívat, zkoušet a následně vyhodí parametry, které si myslí, že by mohly dobře fungovat. Připojíme tedy tiskárnu k elektrice, připojíme se k ní ovládacím softem (třeba pronterfacem) a pošleme jí příkaz:

  1. M303 E0 S225 C8

Tím začneme nahřívat první extruder (E0) na 225°C (S225) a na 8 cyklů - tiskárna tedy 8x zkusí dosáhnout dané teploty, než vyhodí finální konstanty. Ve výstupu je průběžně vidět, co se děje a po skončení se zde objeví informace, jak pokračovat (typicky teda rada vzít poslední naměřené konstanty a dát je do Configuration.h). Pro kalibraci PIDu pro heatbed se místo E0 použije E-1 (a logicky nížší teplota, na které ho budeme chtít provozovat). Až budeme obojí mít, můžeme zkusit do Configuration.h dát správné hodnoty, zkompilovat a nahrát firmware a zkusmo na tiskárně nastavit cílovou teplotu a dívat se, jak dobře jí to půjde. Heatbed by měl být snadný - nezahřívá se nějak závratně rychle a ani tak dobře nechladne, takže by se měl vyhřát v zásadě téměř přesně na danou teplotu a držet ji. U extruderu už se nějaké kolísání objevovat může; i tak by ale teplota neměla překročit nebo klesnout výrazně oproti nastavené teplotě a zároveň v klidu (když se netiskne a nevstupuje tedy do toho faktor, že se extruder ochlazuje materiálem, který se do něj tlačí) by měl po chvíli danou teplotu držet stabilně.

Větráme

Pokud jsme tiskárnu osadili ventilátorem pro ochlazování modelu, který se tiskne (to je rozdíl oproti chlazení přímo extruderu, což je u některých extruderů také vyžadováno - v tomhle případě ale ventilátor obvykle běží neustále a nemáme co řídit... a hlavně, můj PEEKový extruder to nepotřebuje :-) ), můžeme si ještě vyzkoušet, zda vůbec funguje. Odesláním gcode příkazu M106 S255 by se ventilátor měl zapnout na plné otáčky (nutno podotknout, že u RAMPS desky se ventilátor zapojuje na jeden ze 3 výstupů - zabírá tedy místo pro případný 2. extruder a zároveň je v Configuration.h nutno firmwaru vysvětlit, že má zapojený větrák a ne 2. extruder). Pokud je vše zapojeno správně, větrák se rozeběhne. Příkazem M107 ho zase můžeme vypnout. Jak je asi lehce patrné - parametr S při zapínání větráku určuje reguluje výkon - 255 je maximum, 0 minimum. Pro zajímavost (jak už někdy dříve bylo zmíněno) můžeme zkusit větrák pustit na menší otáčky - třeba M106 S127. Pokud se větrák roztočí o něco pomaleji, gratuluji, vše funguje. Pokud místo toho začne divně drnčet a stojí na místě, pak máte stejně blbý větrák jako já. Otáčky se regulují pomocí PWM - periodicky se spíná a vypíná napájení pro větrák. Bohužel ne všechny motory jdou tímto způsobem řídit a u těch, co to nejde, se to projeví tím, že se neroztočí ani trochu. V zásadě jsem našel dvě možnosti, jak to vyřešit - buď větrák vyměnit za jiný (nepřišel jsem ale na způsob, jak zaručeně najít ten správný fungující, kromě neustálého vracení do 14 dnů) nebo k větráku do série přiřadit výkonový rezistor o vhodném odporu. To funguje dobře, ale má to jeden háček - přidáním rezistoru se patřičně dle odporu sníží napětí ventilátoru a tedy i jeho maximální otáčky - pořád tím ale nezačne fungovat regulace a větrák se musí stále pouštět na plný výkon. Pro změnu otáček je tedy zase nutno vyjmout rezistor a nahradit za jiný s jiným odporem. Teoreticky by měly fungovat PC větráky se 4 pinovým konektorem (a 4 dráty), kde 4. drát je použit právě na PWM regulaci. Ale ruku do ohně bych za to také nedal. Jinak nějaké snížení otáček vřele doporučuji, praktické zkušenosti naznačují, že 40x40mm ventilátory na plný výkon dokážou krom modelu slušně zchladit i zahřátý extruder.

Jiné fíčury ve firmwaru

Pokud si projdeme konfigurační soubor Configuration.h, můžeme nalézt ještě několik dalších zajímavých nastavení:

  • HEATER_0_MINTEMP, HEATER_0_MAXTEMP, BED_MINTEMP, BED_MAXTEMP určují minimální a maximální teploty, ve kterých má extruder a heatbed fungovat. MINTEMP bývá nastavena na nějakou nízkou teplotu (já tam mám 5°C), u které se nepředpokládá, že by v ní byla tiskárna zapnuta - naopak pokud se termistor vyzkratuje, může ukazovat nesmyslně nízké číslo a tohle v tomto případě zabrání tomu, aby se heatbed/extruder přehřál. Obdobně MAXTEMP nastavuje teplotu při jejímž překročení se vyhřívání vypne, pokud z nějakého důvodu došlo k tomu, že byla překročena. Při experimentech s tavením jiných materiálů, kdy je potřeba vyšší teplota (a samozřejmě když tam není PEEKový hotend nebo jiný, který tu teplotu nevydrží) tohle může být problém, proč to na vysokou teplotu nepůjde vyhřát.
  • PREVENT_DANGEROUS_EXTRUDE a EXTRUDE_MINTEMP zabraňuje tomu, aby se tiskárna snažila vytlačit materiál, když hotend není zahřátý. Pokud je PREVENT_DANGEROUS_EXTRUDE definován, potom tiskárna bude ignorovat příkazy o vytlačení materiálu, když teploty hotendu bude nižší než EXTRUDE_MINTEMP. Proto třeba při kalibraci počtu kroků pro extruder je potřeba tohle buď vypnout nebo extruder nahřát. Funkce je to jinak poměrně dobrá (samozřejmě nutno dát pozor, kdyby někdo chtěl tisknout materiál tavící se při nižší teplotě, než co je nastaveno) - je poměrně lepší, když tiskárna příkaz odignoruje, než když bude rvát materiál někam, kam neprojde. Paradoxně jsem na tuhle funkci při běhu už narazil - jak se ukázalo, tak běžící ventilátor pro ochlazování PLA výtisku dokáže extruder z 200°C podchladit pod 170 :-)
  • DEFAULT_MAX_ACCELERATION nastavuje pro všechny osy a extruder maximální zrychlení pohybu dané osy/extruderu. Při tisku se může stát, že budou motorky os přeskakovat (výtisk se tak bude posouvat, protože tiskárna se tváří, že se posunula, ale fyzicky zůstala na místě). Přeskočení vždycky následuje důsledkem toho, že motor při aktuálním výkonu není schopen daný pohyb provést. Na straně jedné lze do motoru pustit více proudu a tím mu dát více výkonu, na straně druhé lze omezit důvody, proč by měl chtít tolik výkonu. A zde mimo jiné hraje roli i zrychlení, protože čím více chce tiskárna zrychlit, tím větší nárok na proud do motoru. Pokud tedy víme, že problém s přeskakováním je kvůli rychlosti a zrychlení a nechceme už do motorů pouštět více šťávy, můžeme to zde omezit. Podobného nastavení lze dosáhnout i ve sliceru, rozdíl je ten, že maximum nastavené zde bude maximální vždy, ať si slicer plácá co chce, takže tím zabráníme zmršení výtisku i v případě, že máme nevhodně vygenerovaný gcode.

3 ... 2 ... 1

Pokud jsme se prokousali až sem, měli bysme teoreticky mít funkční 3D tiskárnu. Zbývá to poslední - vyzkoušet to a něco vytisknout. Nahřejeme tedy tiskárnu, zavedeme do ní materiál (ti šťastnější se správným hnacím kolečkem to mají hned hotové, ostatní rozebíraj extruder a násilím cpou strunu do správného otvoru... :-) ) a stáhneme si nějaký model - doporučuji začít kalibrační kostkou - to je úplně obyčejná krychle o daných rozměrech. Připravíme podložku pro tisk a můžeme tisknout. Pokud vám vyjelo něco jako kostka, gratuluji. Ale před bujarou oslavou ještě doporučuji vzít do ruky šupleru a kostku přeměřit, jestli má ty rozměry, co mít měla - pokud některý z rozměrů nesedí, na vině bude nejspíše špatně nastavený počet kroků na 1 mm. Pokud vylezlo něco jiného, tak nezbývá než to správně popsat a pátrat. Možná to bude znít hodně překvapivě, ale navzdory tomu, že jsem dokázal i ty jednoduché kroky zkonit, tak při mém prvním tisku z tiskárny doopravdy vylezla krychle a dokonce měla i správné rozměry :-)

Komentáře

Nestačilo by k ventilátoru přidat RC článek? Místo pulzů by na vstupu dostával nižší napětí a regulovalo by se to alespoň trochu samo :)

Otázka jak moc by pořád ještě fungovala ta regulace... A ono spočítat co tam dát za rezistory a kondíky a trefit se asi taky úplně nejsnažší... já jsem nakonec koupil nový větrák; opsal jsem typ z jiné tiskárny, kde regulace fungovala, takže by měl být OK - nicméně od té doby jsem se ještě nedokopal ho vyměnit, takže 100% jistý si nejsem :-D Stejně tak jako už se mi pár měsíců (no, on to skoro bude i rok :-D) válí díly na úpravu na RebeliX2 (asi největší vychytávku na něm považuju to štelovátko na Z endstop - protože to posouvání mikrospínače po hlazence je děsný opich) a taky jsem se k tomu nedostal :-)