Impressum Datenschutzerklärung


Lasercutter reloaded geschrieben am 28.03.2015

Ein neues Projekt. Diesmal geht es darum, einen CO2-Laser (Graviermaschine K403, 40W (K40)) zu modifizieren.

Das Original

Sieht so aus:

CO2 Laser K403 Moshi to GRBL

Zu dem Laser kam eine modifizierte Corel-Draw-Version, die ich nur unter Windows 98 SE zum Laufen gebracht habe. Aktuell nutze ich jedoch Windows 7.

Leider war das Ganze auch nicht stabil. Beim Versuch, ein Bild zu lasern, kam Folgendes heraus:

Logo micropython

Das Micropython-Logo driftete nach einer Weile ab. Hätte ich mal vorher auf einem Blatt Papier getestet! :-/

Re-Engineering

Im Inneren befindet sich neben einem Netzteil folgende Platine:

Der Chip oben links ist ein USB-to-EPP/MEM/I²C/IO-Chip (CH341A 202386301). Wie der Name vermuten lässt, setzt er USB in einen 8-Bit-Port um und wird mit speziellen DLLs angesteuert.

Rechts daneben ist ein Chip mit der Beschriftung "LHY73038" zu sehen. Vom Layout der Anschlüsse her handelt es sich vermutlich um einen ATMEGA8515 oder einen ähnlichen Chip.

Darunter befinden sich eine 4-Pin-Stiftleiste und ein kleiner 74NC14.

Die beiden großen Chips unten sind Schrittmotorentreiber (A3967SLBT), die auch separat erhältlich sind.

Hier habe ich alle Erkenntnisse eingezeichnet, die ich durch das Verfolgen der Leitungen gewonnen habe (anklicken für eine größere Version):

reengineering

Die Laserleistung wird durch eine separate Platine unter dem Bedienteil eingestellt.

Gehirnschnecke

Da ich keine Kommunikation mit dem LHY-Chip herstellen konnte, habe ich ihn kurzerhand ausgelötet und die wichtigsten Leitungen auf einen Stecker geführt, der an einen Arduino UNO angeschlossen ist.

Der Versuchsaufbau sah folgendermaßen aus:

arduino uno, CO2-Laser

Dabei habe ich mit einem Transistor noch einen Inverter gebaut, da der Laser bei LOW eingeschaltet und bei HIGH ausgeschaltet ist.

Später habe ich eine Aufsteck-Platine für den Arduino erstellt:

Arduino UNO Laser Engraver

Pinbelegung für Arduino UNO:

Schwarz =GND Rot =+5V (Laserboard) braun =Enable X+Y (hi=on) Arduino Pin 8 orange =Step Y Arduino Pin 3 gelb =Step X Arduino Pin 2 grün =(4) Endstop Y low=stop hi=auf weg Arduino Pin 10 blau =(Lo) LaserON: ##hi=off Low=on## Arduino Pin 11 lila =Dir Y low=goto 0; hight=goto max Arduino Pin 6 grau =(5) Endstop X low=stop hi=auf weg Arduino Pin 9 weiß =Dir X Arduino Pin 5 Pin11 M03= M05= Spindel PWM (Laser on/off) // S1000 PWM: OK Pin A3 M08= M09= //Laser--> über Inverter, da LaserOFF=hi! Fritzing Schaltbild

Der Arduino wird von der USB-Leitung versorgt. Deshalb sollte erst der Arduino mit USB versorgt und dann das System eingeschaltet werden!

Hardware-Modifikationen

Da die empfohlene Lösung für die Kühlung (ein Eimer Wasser mit Tauchpumpe) etwas abenteuerlich war, habe ich eine Wasserkühlung aus vorhandenen Teilen eingebaut:

EHEIM 1046

Der Kreislauf bestand zunächst aus Laser → Pumpe → Kühlkörper → Laser

Mittlerweile ist ein Radiator (Airplex Evo 360) hinzugekommen, der die Temperatur konstant auf Zimmertemperatur hält.

Das Frontpanel habe ich mit einer Temperaturanzeige und einem Reset-Knopf ergänzt.

Temperatur

... und einen Resetknopf (viereckiger weißer Taster).

Software

Wichtig bei der neuen Ansteuerung war mir Software, die auch in Zukunft noch weiterentwickelt wird oder zumindest im Quellcode zur Verfügung steht.

Für die Steuerung verwende ich Grbl als Firmware und den Grbl Controller 3.0 zum Übertragen der Daten.

Zum Erstellen der Grafiken nutze ich Inkscape* 0.48 mit dem Plugin Laserengraver. Leider ist dieses Plugin nicht mit neueren Versionen von Inkscape kompatibel.

Firmware

Ich teste aktuell Grbl V0.9, ursprünglich für CNC-Fräsen entwickelt, aber auch für Lasercutter geeignet.

Meine Änderungen in der gcode.c:

case 'M': //case 2:

Die Zeile auskommentieren, sonst geht Job nicht zu Ende.

Nachtrag: ich habe die laserengraver.py so angepasst das kein M02 mehr generiert wird. Die o.g. Änderung ist nicht mehr nötig.

Aufgrund der Bauweise habe ich noch die Daten der Y-Achse gespiegelt:
case 'J': word_bit = WORD_J; gc_block.values.ijk[Y_AXIS] = -value; ijk_words |= (1<<Y_AXIS); break; ... case 'Y': word_bit = WORD_Y; gc_block.values.xyz[Y_AXIS] = -value; axis_words |= (1<<Y_AXIS); break;//[ak]y gespiegelt

config.h
#define HOMING_CYCLE_0 ((1<<Y_AXIS)) #define HOMING_CYCLE_1 ((1<<X_AXIS))

Hier die homing-cycle-Definition.

Nach dem Aufspielen der Firmware habe ich über die serielle Konsole folgende Einstellungen vorgenommen:

$0=10 (step pulse, usec) $1=25 (step idle delay, msec) $2=2 (step port invert mask:00000010) //y-invertiert $3=0 (dir port invert mask:00000000) // $4=1 (step enable invert, bool) $5=0 (limit pins invert, bool) $6=0 (probe pin invert, bool) $10=3 (status report mask:00000011) //255=show limit switch when command '?' Lim:000 -> ZYX $11=0.200 (junction deviation, mm) $12=0.002 (arc tolerance, mm) $13=0 (report inches, bool) $20=0 (soft limits, bool) $21=0 (hard limits, bool) $22=1 (homing cycle, bool) $23=1 (homing dir invert mask:00000001) //y=oben x=links $24=10.000 (homing feed, mm/min) //* $25=2400.000 (homing seek, mm/min) //Speed zum 0-Punkfahren $26=5 (homing debounce, msec) $27=10.000 (homing pull-off, mm) //Abstand von Endschalter $100=39.516 (x, step/mm) $101=39.514 (y, step/mm) $102=314.961 (z, step/mm) $110=10000.000 (x max rate, mm/min) $111=10000.000 (y max rate, mm/min) $112=635.000 (z max rate, mm/min) $120=50.000 (x accel, mm/sec^2) $121=50.000 (y accel, mm/sec^2) $122=50.000 (z accel, mm/sec^2) $130=100.000 (x max travel, mm) //max 34cm $131=100.000 (y max travel, mm) //max 20cm $132=0.000 (z max travel, mm)

Laserbereich

Leider stimmen das Koordinatensystem von Inkscape und dem Laser nicht überein.
Im Dokument ist y=0 gleich unten. Bei mir ist oben links: x=-90 und y=0 und unten rechts x=200 y=-200.
Deshalb habe ich das Dokument verkleinert (grauer Kasten) und mit Hilfslinien den Laserbereich eingezeichnet.

gCode-Modifikation

Der Laser -hängt an Port 11- wird mit M03 (EIN) und M05 (AUS) gesteuert. Die Intensität lässt sich mit S1000 regeln.

Ich habe das Skript laserengraver.py so angepasst, dass M08 und M09 durch die korrekten Kommandos ersetzt werden.

M08/M09 ist an sich für die Kühlung zuständig (Port A3). Evtl. sollte ich den Laser dort anhängen...

Ich habe jetzt die Datei laserengraver.py entsprechend angepasst.

Das erste gelaserte Testbild sieht so aus:

micropython

gravieren

[26.09.2015/26.09.2016]Auf github habe ich ein Skript zum Erstellen von G-Code aus Bildern abgelegt.
Hier ein Testbild, bei dem ich mit verschiedenen Laserstärken experimentiert habe:

image to Laser Example, imageToGcode

Man erkennt dort auch Burn-ins. Wenn die XY-Motoren stoppen, bleibt der Laser noch an und wird von der Software zu spät ausgeschaltet. Dadurch sind die Linienenden stärker verbrannt. Diesen Fehler werde ich mit einer NAND-Schaltung beheben: ((steppX || steppY) && laserON).

update[26.09.2016]: pictolaser Script verbessert, aktuelle Version siehe auf github

Licht

[27.09.2015]Eine LED-Beleuchtung ist jetzt ebenfalls vorhanden. Diese habe ich aus einer alten, defekten Lampe recycelt:

LED HS-G9-48SMD-B1

Da immer sechs LEDs in Reihe geschaltet sind und sie jeweils etwa 4 V benötigen, habe ich bei der zur Verfügung stehenden Betriebsspannung von 24 V einen Vorwiderstand von 1200 Ohm (1,2 kΩ) gewählt.

Die Lampe enthielt mehrere HS-G9-48SMD-B1-Module. Zwei davon – jeweils eines in der vorderen Ecke – beleuchten nun das Arbeitsfeld:

LED HS-G9-48SMD-B1 Lasercutter

Grundplattenverstellung

[04.10.2015] Im Bild ist auch die neue Arbeitsfläche zu sehen. Die Höhenverstellung erfolgt über Muttern am Gewinde - ist aber noch ausbaufähig.

Teileliste

  • Lasercutter K403 588,76€ (+71,18€ Zoll)
  • Eheim 1046 für Wasserkühlung (aus Bestand)
  • Breitkanalumlegestück (Abluft) 12,95€
  • Schlauchklemme (Abluft) 2x 3,98€
  • Schlauchverbinder (Abluft) 3,99€
  • AIR-Rohreinschublüfter (Abluft) 34,50€
  • PVC-Schlauch (Abluft) 2m 18,49€
  • Activkohlefilter (Abluft) 7,49€
  • Laserschutzbrille 190 NM-540 NM und 800 NM - 2000 NM 47,80€

TODO

  • Luftabfuhr verbessern
  • Radiator
  • Grundplattenverstellung
  • Licht
  • LaserON mit Stepper koppeln um BurnINs zu vermeiden (Laser nur an wenn sich die Motoren bewegen) BurnINs immer noch sichtbar

Links


Kommentare:


#1 Andree schrieb am 08.10.2015 um 06:22
...sehr interessant zu sehen, dass gerade noch Jemand seinen K40 auf GRBL umrüstet. :-)

Gruß aus Bremen
Andree



Inhalt zur freien Verwendung gibs es beim Thema Downloads.
nach oben springen
mehr auf: Instagram, github, thingiverse