3D nyomtatás, 3D nyomtatófej építése CNC géphez házilag

Bevezető

Egy házilag készült CNC marógéphez készítettem — ugyancsak házilag — 3D nyomtatásra alkalmas fejet (angolul „3D printer extruder”-nek nevezik) és a hozzá tartozó léptetőmotor vezérlőt, hőmérséklet szabályzót. Így 3D nyomtatóvá alakítottam a meglévő CNC marógépemet. Nem teljes terveket adok közre, hanem az építés közben felgyűlt tapasztalatokat írom le, hátha más is ötleteket merít belőle. A CNC-ből átalakított 3D nyomtatót arra fogom használni, hogy egy „igazi” 3D nyomtató legfontosabb alkatrészeit kinyomtassam.

A kész nyomtatófej (a képeken a műanyag szál sárga színű, 3 mm átmérőjű, ABS műanyag a Herz Hungária Kft.-től):
3D nyomtatófej   3D nyomtatófej 2.   3D nyomtatófej, J-head beszerelve   3D nyomtatófej, J-head beszerelve 2.   3D nyomtatófej 3.
A nyomtatófej tesztelése:

Működési elv

A 3D tárgyat egy CAD programban lehet megtervezni (FreeCAD, OpenSCAD, Blender, Google Sketchup, lásd még itt), de sokat egyszerűen le lehet tölteni az internetről (lásd www.thingiverse.com). Nekem a kedvencem az OpenSCAD: egy programnyelven kell megírni az objektumot. Kockák, gömbök, hengerek, stb. uniójaként, különbségeként minden térbeli objektum leírható. Van OpenSCAD program fogaskerék gyártásra (letölthető itt); meg kell adni a fogak számát, kerék vastagságát, modult és generál egy fogaskereket:
Fogaskerék OpenSCAD-ben
A nyomtatandó térbeli objektumnak zártnak kell lennie és nem lehet nulla vastagságú fala: ezeket a feltételeket a szeletelő programok ellenőrzik és hibát jeleznek, ha nem megfelelő. Ez a 3D objektum egy .STL fájlban van leírva és egy szeletelő (angolul „slicer”) program készít CNC-n, 3D nyomtatón végrehajtható G-kódos programot. Ilyen szeletelő például a Slic3r, de itt van egy nagyobb lista.
A nyomtatófej 3 irányban (XYZ) mozog a térben, közben ABS/PLA/PP műanyag szálat (angolul „filament”) olvaszt meg és keni, tapasztja az ágyra (angolul „bed”) vagy az előző műanyag réteg tetejére. A 4. tengely („A” vagy „E” tengely) a műanyag szál adagolását vezérli. Egyszerre 0,1..0,5 mm vastag műanyag réteget (szeletet) készít és így építi fel a nyomtatott tárgyat.
Nagy erőre nincs szükség, mint mondjuk a marásnál, inkább gyorsnak kell lennie a mozgásoknak az XY tengelyen. A Z tengely lehet lomha, az csak tizedmilimétereket emelkedik, ha elkészült egy-egy réteg. A nyomtatott tárgynak nagyobb sík felületen kell érintkeznie az ággyal, hogy oda ragadhasson. Nagyon fontos, hogy a műanyag jól tapadjon: ezért az ágyat fűteni szokták (ABS-nél 110 °C-ra, PLA-nál 70 °C-ra), másrészt ABS-nél műanyaggal kell bevonni az ágyat vagy speciális ragasztószalagot kell ráragasztani (kapton ragasztószalag/tape). A műanyag bevonathoz műanyag darabkákat kell feloldani acetonban, annyit hogy sűrű cukorszirup viszkozitású oldatot kapjunk. Ezt az oldatot kell a hideg ágyra kenni vékony rétegben. Az alábbi képeken kék és egy nagyon kevés sárga ABS-ből készült oldat látható:
ABS műanyaggal bevont ágy   ABS műanyag acetonban feloldva (műanyag bevonathoz)
Ez az oldat gyakorlatilag egy műanyag ragasztó, ABS műanyagokat is lehet vele egymáshoz ragasztani.
Felvétel a nyomtatásról és egy kész munkadarab (Wade's geared extruder):
3D nyomtatás közben   Kész munkadarab (Wade típusú 3D nyomtatófej alkatrész)
 

Mechanika

Amit nem én készítettem vagy bontottam, hanem újan vettem az a J-Head:
J-Head MK V-B
Ez melegíti és formázza a nyomtatandó műanyag szálat. A fényes fém blokk a képen bronzból, az enyém alumíniumból van és egy huzalellenállással fűtjük, valamint egy termisztorral mérjük a hőmérsékletét. A fekete színű teflon csövön vezetjük be műanyag szálat és az alumínium blokkból jön ki az olvadt anyag. Mivel a teflon rossz hővezető, csak az alu blokk lesz forró. A J-Head-et az eBay-en szereztem be. Ezek a fejek 3 mm vagy 1,75 mm átmérőjű műanyag szál befogadására készülnek és csak az egyikkel működnek. A fejből kipréselt műanyaghernyó átmérője általában 0,3; 0,35; 0,4 és 0,5 mm. A kisebb átmérőjűvel részletesebb tárgyak nyomtathatók, de lassabban. Én 0,5 mm-eset vettem és 3 mm-es műanyag szálhoz valót.
Azután egy HP LaserJet 1100-as lézernyomtató laptovábbító motorját és a hozzá tartozó hajtóművet (fogaskerekeket) használtam fel (RG5-4586-000CN):
HP LaserJet 1100 laptovábbító motor és hajtómű
Ezt én termeltem ki egy rossz nyomtatóból. A legnagyobb fogaskereket tartottam meg, a többit leszereltem. Ezeken kívül egy kis bontott lambéria, 1/2"-os vízcső, M5-ös csavarok és anyák kellettek a mechanikához. A fél colos vízcsőből egy kb. 2 cm-es darabot használtam fel, ezt hosszában berovátkoltam. Majd a nagy fogaskeréken levő kis fogaskerék fogait lereszeltem és a vízcsövet rátoltam.
3D nyomtatófej szétszedve
Összeszerelt állapotban a vízcső mellett egy kis csapágy is van: ez nyomja a műanyag szálat a vízcsőhöz.

Elektronika

Jelenleg az elektronika egy léptetőmotor vezérlésből és egy hőmérséklet szabályzóból áll, ami egy PIC18F6622 mikrokontroller köré épül. UC3770-es IC-t használtam a léptetőmotor vezérléshez, de egyébként a Toshiba TB6560-asat ajánlom (eBay-ről ugyancsak beszerezhető). A léptetőmotor a műanyag szálat tolja be a J-Head-be, amikor a PC erre utasítást ad a párhuzamos portján keresztül ún. STEP/DIR vezérléssel. A hőmérséklet szabályzó egy PID szabályzó, ami a J-head végében az alumínium blokkba szerelt 5,6 Ω/5W-os ellenállást fűtésre használja és a blokk hőmérsékletét méri egy B57560G104F típusú 100 kΩ-os NTC termisztorral. A vezérlő kapcsolási rajza:
3D nyomtatófej vezérlő kapcsolási rajza
A kapcsolási rajzról hiányzik a STEP/DIR (RB1, RB2) bemenet, ami a számítógép párhuzamos portjával van összekötve. Egy külön PCI buszos LPT port kártyát is tettem a gépbe, mert a CNC vezérlés elfoglalja az alaplapon levő LPT portot.
A fej vezérlője (igen, a készülékház is lambériából készült):
3D nyomtatófej vezérlés   3D nyomtatófej vezérlés 2.

Vezérlőprogram

A PC-n LinuxCNC fut, de néhány kiegészítés kell, hogy 3D nyomtatót is tudjon vezérelni. Az ini fájlban az RS274NGC szekcióba fel kell venni a 3D-s parancsokat tartalmazó könyvtárat:

[RS274NGC]
USER_M_PATH = /home/ivanovp/linuxcnc/mcodes

A fenti útvonalon a következő parancsok találhatók (a legtöbb nem is csinál semmit, csak kompatibilitási okokból létezik):

  • M101, Turn extruder 1 on Forward: ezt a Slic3r nem használja, mert az „A” tengellyel vezérelhető a műanyag szál adagolása
  • M102, Turn extruder 1 on Reverse: ezt a Slic3r nem használja, mert az „A” tengellyel vezérelhető a műanyag szál adagolása
  • M103, Turn all extruders off / Extruder Retraction: ezt a Slic3r nem használja
  • M104, Set Extruder Temperature: fej hőmérséklet beállítása
  • M105, Get Extruder Temperature: fej hőmérséklet lekérdezése
  • M106, Fan On: ventilátor bekapcsolása, egyelőre nincs ventilátor
  • M107, Fan Off: ventilátor kikapcsolása, egyelőre nincs ventilátor
  • M108, Set Extruder Speed: ezt a Slic3r nem használja
  • M110, Set Current Line Number: ezt a Slic3r nem használja
  • M140, Set Bed Temperature: ágy fűtésének bekapcsolása, célhőmérséklet beállítása
  • M190, Wait for Bed Temperature: várakozás amíg az ágy hőmérséklete el nem éri a célhőmérsékletet

Ha a G-kódok között egy M104 P220 sort lát a LinuxCNC, akkor lefuttatja az M104-es scriptet P220-as argumentummal. Valójában az M101, M102, stb. szimbolikus linkek ugyanahhoz python scripthez:

ivanovp@cnc mcodes> ls -l
total 24
-rwxr-xr-x 1 ivanovp ivanovp 17161 2014-07-17 19:42 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M101 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M102 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M103 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M104 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M105 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M106 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M107 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M108 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M110 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M140 -> 3dc.py*
lrwxrwxrwx 1 ivanovp ivanovp     6 2014-07-19 05:22 M190 -> 3dc.py*

A 3dc.py soros vonalon egy USB soros átalakító segítségével kapcsolódik a PIC-hez és fordítja le az M1xx parancsokat a PIC belső parancsaira.