NEJE "ROSH" 300mW laser engraver with LinuxCNC

I purchased a cheap (sub-$100) laser engraver from dxsoul. I can't in good conscience recommend this device to anyone, but I still wanted to take the time to write about my experience with it.

I've been calling the thing "ROSH" (sic) because of the sticker on the side that is intended to look like a certification sticker but of course isn't. So don't believe for a moment that this device complies with "ROHS" guidelines for the Reduction of Harmful Substances.

This thing is really just a toy. Its features include a puny 36x36mm (1.5x1.5") working area, a supposed 300mW blue laser diode with a completely ineffectual heatsink, and linear motion parts clearly scavenged from floppy drives. Hot glue figures in the assembly (e.g., to hold the laser assembly to the X slide, and to hold the table to the Y slide), and most of the clear plexiglass was crazed somewhere in the assembly and shipping process.

As shipped, it has an AVR microcontroller (Arduino Pro Mini knockoff) with some unknown version of GRBL preinstalled. It also has a Windows installer which includes Inkscape. I don't see any offer of source code, so unsurprsingly it appears that NEJE's obligations under the GNU GPL have not been met.

The controller board consists of 4 main components: two "EasyDrlver" (sic) stepper driver boards, one ULN2003 darlington driver for the laser, and the already-mentioned AVR board. The stepper drivers are of course also knock-offs. The silkscreen which originally read has been altered to read "SchmalzHaus.cpm/EasyDrlver", which is an extra slap in the face for the developer of that fine design.

I had some limited success using the GRBL firmware with self-written gcode (i.e., the thing does move and the laser does turn on and off), but my real interest was running it with LinuxCNC. I started by mapping out the connections from the microcontroller board using a continuity tester.

FunctionArduino pin numbering AVR pin name dip-like pin numbering
X Step2 PORTD2 5
Y Step3 PORTD3 6
X Dir5 PORTD5 8
Y Dir6 PORTD6 9
Stepper Disable8 PORTB0 11
Laser Enable12 PORTB4 16

I also noted the presence of RESET and GND next to pins 11/12.

Of course, the daughterboards are not socketed, so ultimately I will have to desolder the AVR board altogether and replace it with a custom board. But for initial testing, instead soldered wires to the top of it and used a breadboard to connect it to a spare Mesa Electronics 7i92 I had lying around. Importantly, I tied RESET and GND together to keep the microcontroller in a permanent reset state. I also added a 500Ω pull-down resistor on the laser enable line (otherwise, the 7i92's pull-up resistors turned the laser fully on). I did not connect "stepper disable", because the two 10kΩ pull-downs on the easydriver boards (which are intended to enable the amplifiers by default) fight with the 4.7kΩ pull ups on the 7i92 to put the drivers in a mode where they chatter incessantly until LinuxCNC starts and puts the associated pin into output mode. To address this, I'll add a stronger pull-up to my adapter board, or desolder the pull-downs from the stepper drivers.

I configured LinuxCNC so that the laser is connected to a PWM output, though I later discovered that at least on basswood, PWM is not a good way to get greyscale output so this appears to be of limited use. Anyway, in order to switch the laser on and off while keeping up the desired feed rate, I arranged it so that the PWM value for the spindle is controlled by motion's analog-out-00. So the relevant gcodes are

M3S1        ; enable laser
M67 E0 Q100 ; set laser to 100% during motion
M67 E0 Q0   ; set laser to 100% during motion
M68 E0 Q0   ; set laser to 0% at end of motion
M5          ; disable laser
One nice thing about this setup is that merely by commenting out "M3", I can test motion without activating the laser.

My LinuxCNC configuration files will be kept just slightly out of date at

Entry first conceived on 12 October 2015, 14:03 UTC, last modified on 15 October 2015, 15:54 UTC
Website Copyright © 2004-2024 Jeff Epler