I'm a member of Hacklab Toronto, which is a sort of hackerspace/nerd clubhouse. We were recently donated a broken ULS-25ps 25-watt co2 laser engraver. This engraver was missing its stepper motor drive board, and had a very old controller which was in unknown condition.
We decided it would be a fun DIY project to get this thing going again, and one of our members suggested enc2. The rest is history!
Our electronics geek built a MOSFET amplifier to drive the stepper motors and a basic PIC circuit which will do the stepper motor control and the PWM control for the laser.
We hooked this system up to EMC2... with just the X and Y axis under computer control for now. We've been able to reliably operate the steppers so far and move the head around the table! We have to tune the scale, velocity, etc, to make everything accurate and reliable, but as a proof-of-concept, things are looking good.
I've been talking to the nice folks on #emc irc channel (I'm Optic, hi!), and gotten some good suggestions there, but I figured I would bring this to the forum as well.
We're looking for the best-practices for using a machine like this under EMC. We've discussed using the Z-axis to control the laser on/off (z < 0, laser on, z >= 0, laser off) to get the best realtime control. I don't think the laser power control maps well to spindle-control commands...
We also need to keep the velocity as constant as possible while the laser is on.
Anyways, this is where we are so far... Next weekend there will probably be another hacking session and I'll post another update on how things are going. I'll leave you with a video we made sunday night of EMC running the steppers.
It doesn't address much about how laser control and gcode go together... I'm brand-new to machining and I'm looking for an idiomatic way to handle this.
The interfacing info and hal setup is very useful!
Just for you information, our company makes a replacement controller package for the older ULS laser systems with an extra benefit of doubling the performance. Here is the datasheet: