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:

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:

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):

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:

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.

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!

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:

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...

... 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:

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:

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:

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:

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
- wiki.fablab-muenchen.de/display/WIKI/Lasercutter+Wissen
- domestichacks.info/videocat/laserplotter
- der-frickler.net/technik/lasergravierer
- wiki.ctdo.de/doku/lasercutter
- redmine.laoslaser.org/projects/laos/wiki/K40-III
- 3dprintzothar.blogspot.ca/2014/08/40-watt-chinese-co2-laser-upgrade-with.html
- schmiben.wordpress.com/2014/06/17/tutorial-bilder-gravieren-mit-co2-laser/
#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