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, 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:
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):
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:
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:
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 für die Kühlung (ein Eimer Wasser mit Tauchpumpe) etwas abenteuerlich war, habe ich eine Wasserkühlung aus vorhandenen Teilen eingebaut:
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.
... 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:
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:
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:
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:
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