Rajzoltam egy spirált az InkScape-ben, elmentettem DXF-ként és a DXF2GCODE programmal átkonvertáltam
https://sourceforge.net/projects/dxf2gcode/
Kipróbáltam néhány gcode küldőt, de végülis a Raspberry Pi/Ubuntu/Octoprint kombónál maradtam, amivel eléggé tisztában vagyok a 3D nyomtató miatt.
A fenti munkamenetnek van néhány baja:
- Képtelen megfelelő skálázást produkálni. Azt nem tudom, hogy csak az én bénaságom, vagy a szoftverek baja.
- A DXF2GCODE inkább hasonlít egy CAM szoftverre mint egy plug and play konverziós megoldásra. A plotternek sokkal egyszerűbb G code-ra van szüksége mint egy CNC marónak. Az a lehetőség, hogy marófejekkel, zsebekkel, stb. dolgozzunk itt teljesen felesleges.
- Van egy vonal a plotter kezdőpontja és az ábra kezdőpontja között aminek nem kéne ott lennie. Ezt nem a munkamenet okozza, de erre majd visszatérek később.
Elkezdtem keresni egy programot ami a HPGL-t G code-á alakítja. Találtam néhány konvertert. Egy sem felelt meg a céljaimnak. A nagyja képtelen volt a HPGL AA íveit G2, G3 ívekké alakítani. Ez a konverzió feltételez némi trigonometriai tudást. Úgy látszik ezt néhány programozó nem tudta megugrani. Néhány próbálkozás után feladtam, hogy valami kész megoldást használjak.
Tehát írtam egy konveretert. Megtalálható a plotter github reojában:
https://github.com/sufzoli/suf-3D-Plotter/tree/master/SW/Hpgl2Gcode
Még vannak hiányosságai mint a hiányos hibakezelés vagy az útvonal optimalizáció hiánya, de teszi a dolgát.
Most nézzük meg, hogy működik a munkamenet.
Az eredeti rajz:
Először is a rajz objektumait útvonalakká (path) kell alakítani, másképp nem jelennek meg a HPGL fájlban:
Ha ez kész van elmenthetjük HPGL-ként:
Most jön a trükkös része:
Az InkScape HPGL mentés ablaka kivágó plotterhez tartalmaz alapbeállítáűsokat ami itt nekünk nem jó. Ezért a nagyját meg kell változtatni az alábbiak szerint:
Most átkonvertálhatjuk G code-á.
Két különböző beállítást használtam. Az ok, hogy a plotter M280 P0 S50 parancsot használ a fej felemeléséhez és M280 P0 S0 parancsot a letevéséhez.
A szokásos CNC marók G1 parancsot használnak a Z irány mozgatásához. Az elterjedt G code szimulátor a CAMotics nem tudja értelmezni az én toll magasság vezérlő parancsaimat így a szimulációra lecseréltem ezeket G1 Z5 F50-re és G1 Z-2 F50-re:
Az eredmény a szimulátorban:
Jól néz ki, csináljuk meg a plotterhez is:
Mint látható a PenUp és PenDown paraméterek hiányoznak. Az oka, hogy ezek az application config-ban kerültek elhelyezésre.
Ezek után feltöltöttem a fájlt az Octoprintre és kiküldtem a plotternek. Az eredmény katasztrófális. Rajzolt egy két centis szaggatott vonalat a plotter kezdöpontjából kiindulva az ábra kedőpontja felé, majd lerajzolta az egész ábrát a levegőbe (toll felemelve).
Az első pillanattól kezdve tudtam az okot. Ez azonos a korábban említett problémával (vonal a plotter kezdőpontjától a spirál kezdőpontjáig). A G code-ok nem sorrendben hajtódnak végre.
Tudom a Marlin firmware-ről, hogy bizonyos parancsok sorban, más parancsok viszont soron kívül hajtódnak végre. Néhány órán keresztül olvasgattam a Marlin forráskódját, hogy megtaláljam, hogyan lehet ezt a viselkedést megváltoztatni. Sikertelenül. Feladtam ezen a ponton és megkérdeztem a Marlin fórumon.
A válasz sokkal egyszerűbb mint gondoltam. Ha kiteszünk egy M400-as parancsot (vár a korábbi parancsok befejezésére) a soron kívüli parancsok elé az megoldja a problémát. Még a kódon sem kellett változtatnom, a toll vezérlő parancsaim a konfigurációs fájlban vannak.
Az egyetlen szükséges trükk a töbsoros szöveg kezelése a .Net konfigurációs fájlban. Tehát a paraméter most valahogy így néz ki:
M400 M280 P0 S0
És végül az eredmény:
A monverter amit írtam a KiCAD HPGL kimenetét is kezeli. Egyenlőre csak rajzolásra használható és nem nyák marásra. Ez majd később jön.