GCode simuliatorius GSim

13 07 2012

Šiuo metu esu užsisėdėjęs su mažo CNC gamyba iš gauto davanu Canon iP4600 rašalinio spausdintuvo. Norėdamas prasisukti pigiai kaip kontroleri panaudoti tikiuosi Arduino, tačiau kilo viena bėda: printerio X ir Y ašys valdomos pasitelkus DC servo variklius su enkoderiais, o visi rasti Arduino projektai naudoja stepper tipo variklius. Arduino noriu naudoti kaip G-Code suprantantį ir jo komandas paverčiantį į variklių judesius kontrolerį. Kadangi taip jau atsitiko kad tokio G-Code interpretatoriaus kuris valdo DC variklius su enkoderiais niekas nepagamino, tai as pasigaminisiu savo šioki toki ekspermentinį gaminį. Pradžiai nusprenžiau pasidaryti nedidelę Gcode analizę pasigamindamas PCB schemų braižimo simuliatorių.

G-Code

CNC pasaulyje tai gan populiarus protokolas ašių krypčių valdymui. Kodas aprašo naujas koordinates bei atskirus veiksmus tam tikrai įrangai, kaip aušinimas, gręžtas ir pan., valdyti. Daugiau apie jį galite pasiskaityti Wikipedia puslapyje: http://en.wikipedia.org/wiki/G-code

Kadangi aš pats noriu naudoti savo CNC PCB plokščių frezavimui ar bent jau paišymui su markeriu, tai mano atveju Gcoda’s valdys tris ašis, o X ir Y ašių valdymo judesiai bus keičiami komandomis G00 bei G01 iškarto vienu metu. Tai padaryti nėra lengva.

Linijos sekimas

Turint pradies koordinates X0 Y0 mums reikia tiesiausia linija nukeliauti į tašką X1 Y2. Šiuos du taškums mums nurodo G-Code seka. Įvykdyti šį sprendimą sugalvojau kelis būdus:

  • Apskaičiuojant X ir Y variklių greičius taip, kad sukant šias ašis tam tikrą laiką atsidursime X1 Y1 ašyje. Problematika – mikrokontroleriui vienu metu sunku sekti enkoderio parodymus, tad įmanoma nukrypti nuo X1 ar Y1 gautinio taško nes tuo metu buvo apdrojamas kitas enkoderis. Steperio variklio atveju aplamai šis būdas negalimas, nes vienu metu galime valdyti tik vieną variklį.
  • Pažingsniui atitinkamai keičiant X arba Y pozicijas į reikimą koordinačių pusę kol atsidursime X1 ir Y1 taške. Problema tame, kad taip susiduriame su tam tikra linija tampa laiptuota dėl variklių žingsnelių dydžių. Šia problema teks spręsti pasirenkant gerą algoritmą apsiprendimui kurią kriptimi vis keisime ašis per vieną žingsnį kad atsirastume galiausiai tiklse per kuo mažiau išdarkytą liniją.

800px-Bresenham.svg

The Bresenham Line-Drawing Algorithm

Šį agoritmą ir pasirinkau naudotis apskaišiuoti sekančio variklio judėjimą. Algoritmas gana elementarus ir su juo galite susipažinti vėlgi Wikiperia: http://en.wikipedia.org/wiki/Bresenham’s_line_algorithm.

Nesigilindamas į formules aptarsiu kas vykdoma pažingsniui keliujant nurodyta X1 Y1 kryptimi:

  1. Apsibrėžiama kaip reikia elgtis su X ir Y ašių varikliais – juos reikia didinti ar mažinti;
  2. Apsikaičiuojama koks atstumas nuo gabartinės X Y padėties iki X1 X1 taško dviem atvejais: jei keisime X ašį pirmame žingsnyje nustatyta kryptimi ir jei keisime Y ašį pirmame žinksnyje nustatytą kryptimi.
  3. Vykdome tos ašies valdymą po kurios bus trumpiausias atstumas iki X1 Y1 taško.
  4. Jei dar nėra pasiektas X1 Y1 taškas atsimename dabartinę X Y padėtį ir tęsiama veiksmus nuo 2 žinkgsnio. Kitu atveju linija baigta brėžti.

Simuliuojanti programa 

Taigi pasigaminau programą kuri ekrane imituoja CNC darbą panaudodama Bresenham algoritmu. Visumoje programa nuskaito G-Code instrukcijas iš failo ir atitinkamu greičiu braižo ekrane CNC veiksmus. Mano atveju G00 ir G01 komandos vienodai apdorojamos, tačiau realybėje G00 nėra labai svarbi tad gali būti vykdoma greičiau, nes varikliui pešokus galutinį tašką į jį jis gali grįšti be nuostolių, mat Z ašis tuo metu gręžtą laiko pakelta.

Programos veikima pavaizduoja du filmukai. Pirmame pati pirmoji programos versija, o antroje kiek ištobulinta ir labiau išbaigta:

Programoje braižoma schema buvo pagaminta Eagle CAD programa, o konvertuota į G-Code pasinaudojus PCB-Gcode priedu: http://pcbgcode.org/

Taigi ateityje programos veiksmą atliks Arduino mikrokontroleris Gcode instrukcijas gaudamas paeiliui per rs232 sąsają.

Resursai

Programa pasisiuntimui: https://bitbucket.org/mindogas/gsim/downloads/GSim%201.0.zip

Programos kodas: https://bitbucket.org/mindogas/gsim/get/v1.0.0.zip


Veiksmai

Information

One response

21 07 2012
Mindaugas

Gerą daiktą sugalvojai pasigamint sėkmės 🙂

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: