Impressum


Lasercutter reloaded geschrieben am 28.03.2015

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

Das Original

Sieht so aus:
CO2 Laser K403 Moshi to GRBL

Zu dem Laser kam eine modifizierte Corel-Draw-Version, diese habe ich nur unter Win98SE zum laufen gebracht. Aktuell habe ich Win7...

Leider war das ganze auch nicht stabil, bei dem Versuch ein Bild zu lasern kam folgendes heraus:
Logo micropython

Leider ist das micropython-Logo nach einer Weile abgedriftet. Hätte ich mal vorher auf einem Blatt Papier ausprobieren sollen :-/

Re-Engineering

Im inneren befindet sich neben einem Netzteil diese Platine:


Der Chip oben links ist ein USB-to-EPP/MEM/I²C/IO Chip (CH341A 202386301). Wie der Name vermutet setzt es in diesem Fall den USB zu einem 8-Bit-Port um. Anzusteuern mit speziellen dll's...

Rechts daneben ist ein Chip mit der Beschriftung LHY73038 zu sehen - vom Layout der Anschlüsse her, ist es vermutlich ein ATMEGA8515 oder ähnliches.

Dann ist eine 4-Pin-Stifteleiste und darunter ein kleiner 74NC14 zu sehen.

Die beiden großen Chips unten sind Schrittmotorentreiber (A3967SLBT) die es auch so zu kaufen gibt.

Hier habe ich alles eingezeichnet was ich durch Verfolgung der Leitungen herausgefunden habe (anklicken für eine größere Version):
reengineering

Die Stärke des Lasers wird durch eine unabhängige Platine unter dem Bedienteil eingestellt.

Gehirnschnecke

Da ich mit dem den LHY keinen Kontakt aufnehmen konnte, habe ich ihn kurzerhand entlötet und die wichtigsten Leitungen an einen Stecker abgeführt. Diese gehen an einen Arduino UNO.

Der Versuchsaufbau sah so aus:
arduino uno, CO2-Laser

Dabei habe ich mit einem Transistor noch eine Inverter gebaut, da der Laser bei low an und bei hi aus ist.

Später habe ich eine Platine zum aufstecken fertig gemacht.
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 der Kühlung etwas abenteuerlich ist (ein Eimer Wasser mit Tauchpumpe), habe ich eine Wasserkühlung aus noch vorhandenen Teilen eingebaut:
EHEIM 1046
Momentan ist der Kreislauf recht klein (Laser-Pumpe-Kühlkörper-Laser) - wenn die Firmware funktioniert kommt dort noch ein Radiator hinzu.
Mittlerweile ist im Kreislauf noch ein Radiator enthalten. Der Radiator ist eine airplex evo 360, auf der zwei Lüfter montiert sind. Bisher reichte dies aus um die Temperatur auf Zimmertemperatur zu halten.

Das Frontpannel hat zur Kontrolle eine Temperaturanzeige bekommen...
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.

Als Firmware benutze ich momentan Grbl und zum übertragen der Daten Grbl Controller 3.0.

Zum erstellen der Grafiken ist Inkscape* 0.48 mit laserengraver im Einsatz. - Das Script arbeitet leider nicht mit einer neueren Version von Inkscape zusammen.

Firmware

Momentan teste ich Grbl V0.9. Eigentlich eine Software für CNC-Selbstbau-Fräsmaschienen aber bei verschiedenen Projekten auch mit Lasercutter verwendet.

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 über die Arduino-IDE habe ich per Serieller-Konsole verbunden und noch folgende Einstellungen gemacht:
$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 durch das Kommando M03 und S1000 eingeschaltet. Mit M05 wird er ausgeschaltet.

S1000 stellt die Spindelfrequenz auf 1000 - damit kann man die "Stärke" steuern.

Im Export aus Inkscape wird der Laser aber zum Anfang ein und erst am Ende ausgeschaltet. So muss ich hier alle M08 durch M03 und M09 durch M05 und umgekehrt tauschen.

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 Script zum Erstellen von gcode aus Bildern abgelegt.
Hier ein Testbild wo ich mit verschiedenen Laserstärken experimentiert habe:
image to Laser Example, imageToGcode
Man sieht dort auch BurnIn's. Wenn die XY-Motoren stoppen ist das Laser noch an und wird von der Software zu spät ausgeschaltet, so sind die Linienenden stärker verbrannt. Diesen Fehler werde ich mit einer NAND-Schaltung noch berichtigen ((steppX || steppY) && laserON).

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

Licht

[27.09.2015]Eine LED-Beleuchtung ist nun auch vorhanden. Die habe ich aus einer alten defekten Lampe recycelt:
LED HS-G9-48SMD-B1
Da immer 6 LED zusammen geschaltet sind und sie je ~4V benötigen, habe ich einen Vorwiederstand von 1200 Ohm (1,2kΩ) bei der zur Verfügung stehenden Betriebsspannung von 24V gewählt.

Die Lampe enthielt einige HS-G9-48SMD-B1-Module, zwei - je einer 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.


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

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