A recurring misunderstanding in the laser community: users compare different controllers while those controllers are actually using completely different architectures. It's like comparing a forklift to an excavator — both move things, but each was designed for a different problem.
The most important difference between laser controllers isn't the manufacturer's name, the laser's power, or the price. The decisive question is what form the controller receives the job in, and how it executes it.
Today's laser systems fall into three fundamentally different operating models:
These three models are three different engineering answers to three different physical problems. They don't substitute for one another.
The split isn't arbitrary. Three different motion technologies stand behind the three models — and each requires a different communication solution between the computer and the controller.
Laser Controllers
│
┌──────────────┼──────────────┐
│ │ │
G-code stream Job-based List-based
(stream) (job) (command list)
│ │ │
GRBL Ruida JCZ
grblHAL Trocen BJJCZ
FluidNC EZCAD
Includes: GRBL · grblHAL · FluidNC
The computer continuously sends motion commands to the controller. The controller processes them in sequence, and moves the motors accordingly. The communication link stays up for the entire duration of the job — if the connection breaks, the job stops.
G0 X0 Y0 G1 X50 Y0 F3000 G1 X50 Y50 M3 S1000
Typical use: Diode lasers · CNC routers · Hobby and semi-industrial machines
Diode lasers and CNC routers move on mechanical axes — stepper motors drive the head in the X and Y directions. These motors move relatively slowly (typically 100–600 mm/s), and position accuracy depends on stepping frequency.
G-code is optimized for a system like this: every command describes one move, the controller executes it, then waits for the next one. This sequential model works perfectly at low speed.
G-code is fundamentally a vector protocol. It was adapted for raster-image engraving — but wasn't designed for it. G-code-based systems use a motion planner, which has a pre-loaded buffer layer (plan buffer) between the software and the firmware. If the firmware consumes commands faster than the PC can refill them, the buffer empties out — this causes motion stalls.
This limit, however, is strongly platform-dependent:
| Platform | Firmware | Raster situation |
|---|---|---|
| Arduino Nano / UNO | GRBL 1.1 | Planner buffer is a serious limit — stalls above ~7,000 mm/min |
| ESP32 | GRBL 1.1 | Similar limit — the firmware, not the hardware, is the bottleneck |
| ESP32 | grblHAL | Better, but the 5–20 kHz PWM limit remains |
| Teensy 4.1 / STM32 | grblHAL | Platform ceiling: ~40,000–70,000 mm/min (with tuning and cluster mode) — the real limit is the laser module's rise/fall time |
Important distinction: a platform's capability and a specific configuration's validated ceiling are two different numbers. According to the grblHAL developer's own measurements, the Teensy 4.1 driver can be pushed above 70,000 mm/min, and community measurements report a stable 50,000 mm/min achievable with BLOCK_BUFFER tuning. LaserBase's validated configuration (Teensy 4.1 + grblHAL + LaserTree 10W TTL, 50×70 cm dither engraving) is more conservative than that: 254 DPI, 32,000 mm/min is the stably reproducible ceiling — where the bottleneck is the laser module's rise/fall time, not the firmware or the planner buffer.
The LightBurn developer worked out a solution to G-code's raster limits: cluster mode. This compresses the G-code format: multiple pixels' S values are sent at once on a single line, separated by colons — for example G1 Y-0.1S0.875:0:0:0.5:0:0.875. A single command thus describes several pixels at once, which drastically reduces planner load and communication traffic.
Cluster mode, available since LightBurn 1.2.02, enables roughly a 4× speed improvement on raster — and makes grayscale engraving above 20,000 mm/min possible even on platforms where the traditional G-code stream would have been a bottleneck. grblHAL supports cluster mode.
So the claim "G-code stream isn't suitable for high-speed raster" is now fully true only for GRBL 1.1-based systems. With grblHAL + cluster mode + suitable hardware, the limit can be largely lifted — the real ceiling is set by the physical hardware (the laser module's rise/fall time).
The best-known open-source G-code-based firmware. Originally built for the Arduino platform. Its job is to interpret G-code and generate STEP/DIR signals for the motor drivers. Its maximum PWM frequency is roughly ~1 kHz — enough for low-speed, low-DPI jobs.
A modern evolution of GRBL with a hardware abstraction layer (HAL). It uses the platform's native timer peripherals — the result is 5–50 kHz stable PWM, depending on platform. Supports multiple axes, Ethernet connectivity, and numerous industrial features.
An ESP32-based control system. A G-code stream-based operating model, with WiFi connectivity, a web UI, and SD card execution. Operationally, a G-code stream-based controller.
Includes: Ruida · Trocen
The computer doesn't send continuous motion commands. It prepares the entire job in advance — in its own binary format — and uploads it to the controller's memory. The controller then executes the job on its own, without the computer's involvement.
Typical use: CO₂ lasers · Manufacturing systems · Mass production
CO₂ lasers typically have a large work area — from 600×400 mm up to 1300×900 mm. Engraving time on a job like this can be as much as 30–60 minutes. If the controller needed a continuous PC connection, a single network dropout or USB glitch could ruin the entire job.
Pre-uploading eliminates this risk. The job sits in the controller's memory — execution is deterministic and independent of interruptions.
Another reason: a CO₂ laser's motion system is mechanically more complex and heavier than a diode laser's. Precisely handling acceleration and deceleration — especially at corners and direction changes — requires a pre-computed trajectory. The controller can handle this better if it can see the whole job in advance, not just the current command.
The most widespread family of CO₂ laser controllers. It receives the entire job in advance and executes it locally. The controller works autonomously during the run. Its hardware basis is a DSP + FPGA architecture — this provides the standalone, deterministic job execution and precise trajectory computation.
Note: Ruida also manufactures its own galvo controller card (RDM4024G-PCI series), which is likewise DSP + FPGA based, and can be combined with an industrial camera. This material mainly covers the CO₂ line's (RDC series) architecture.
Its operating principle is very similar to Ruida's system. Also a job-based controller — the entire job is uploaded to the controller in advance.
Includes: JCZ · BJJCZ · EZCAD-based systems
Most fiber lasers don't move mechanical axes. The beam is steered by galvanometer mirrors — two low-mass, high-precision mirrors that are electromagnetically controlled. By changing the mirrors' angle, the laser beam scans the work surface extremely fast.
This motion technology requires a completely different control model.
The software pre-assembles a command list:
SetSpeed 500 mm/s SetFrequency 20 kHz SetPower 70% Jump X=0, Y=0 Mark X=50, Y=0 Mark X=50, Y=50 Mark X=0, Y=50 Mark X=0, Y=0
Typical use: Fiber lasers · UV lasers · MOPA systems · High-speed galvo systems
This is the most common misunderstanding on the topic — worth examining with numbers.
A typical fiber galvo system's working speed is 2,000 mm/s. If we wanted to control this speed over a G-code stream, the computer would have to continuously send position commands:
Speed: 2,000 mm/s Resolution: 100 µm (0.1 mm step) Commands/second: 20,000
20,000 G-code commands per second — no single PC + USB connection can reliably deliver that. G-code parsing, queueing, and USB protocol latency are orders of magnitude slower than what the galvo system requires.
The real reason goes deeper: a standardized, dedicated hardware protocol runs between the galvo mirror system and the controller — called XY2-100. This is a serial interface that sends 20-bit position data at 2 Mbit/s (100,000 words/second), continuously and without interruption. This link between the controller and the mirror system runs in hardware — it's not suited to being driven by a command stream arriving from the PC side that needs interpreting.
The list-based model solves this problem in a fundamentally different way: the software pre-compiles the entire job into an optimized command list, and loads it into the controller in a single transfer. Execution is then real-time and PC-independent — the controller drives positioning in hardware over the XY2-100 channel, in sync with the laser's timing.
This isn't a simplification or a compromise — it's the only workable approach for galvo systems.
The manufacturer doesn't publicly document the JCZ/EZCAD protocol, but the communication isn't encrypted. It has been reverse-engineered: the commands are 2-byte, 16-bit little-endian numbers, where the first bit distinguishes command-list commands from single (one-shot) commands. This means the protocol is in principle integrable — but relying exclusively on community reverse-engineering, unofficial sources.
A secondary development API (SDK) is available for the EZCAD3 software, and it can also be controlled over TCP/IP — this opens up the possibility of integration for system integrators. EZCAD2 development has stopped; the active platform is EZCAD3.
| Property | G-code stream | Job-based | List-based |
|---|---|---|---|
| Examples | GRBL · grblHAL · FluidNC | Ruida · Trocen | JCZ · BJJCZ · EZCAD |
| Communication | Continuous stream while running | Full job uploaded in advance | Command list uploaded in advance |
| PC needed while running | Yes | No | No |
| Motion system | Stepper motor / servo | Stepper motor / servo | Galvanometer |
| Typical speed | 100–600 mm/s | 100–800 mm/s | 1,000–10,000 mm/s |
| Typical laser | Diode | CO₂ | Fiber · UV · MOPA |
| Format | Open (G-code standard) | Closed binary (.rd) | Closed binary |
| Standalone control panel | Usually not | Yes | Usually not |
| Ease of development | Easy — open source | Medium | Hard — closed protocol |
| Typical setting | Hobby · semi-industrial | Industrial · mass production | Industrial · precision marking |
The three operating models aren't different by accident. Each is an engineering answer to a specific physical problem — and the physical constraint determines the control architecture, not the other way around.
Mechanical axes, low speed — diode lasers
The head moves in the X and Y directions, driven by stepper motors. Speed is 100–600 mm/s. At this speed, the G-code stream is workable — the computer can send commands fast enough, and the controller can process them fast enough.
Mechanical axes, large work area — CO₂ lasers
The principle is the same, but the work area and runtime are orders of magnitude larger. On a 60-minute engraving job, a continuous PC connection is unreliable. The solution: upload the entire job in advance, and let the controller handle execution.
Galvanometer mirrors, extreme speed — fiber lasers
Here the motion technology is fundamentally different. It's not the head that moves — the laser beam moves, via the angle changes of two low-mass mirrors. This enables speeds of 1,000–10,000 mm/s. But at this speed, the G-code stream is physically unworkable. The solution: a pre-compiled, optimized command list, which the controller executes in hardware.
This chain explains why the systems can't be swapped for one another — and why one isn't "better" or "worse" than another. All three are optimal solutions within their own physical constraints.
| Motion technology | Speed | Control model | Example |
|---|---|---|---|
| Mechanical axis | 100–600 mm/s | G-code stream | GRBL |
| Mechanical axis, large work area | 100–800 mm/s | Job upload | Ruida |
| Galvanometer | 1,000–10,000 mm/s | Command list | JCZ |
This is the most widespread misunderstanding. In reality, there's no interoperability between the three operating models — GRBL firmware can't be uploaded to a Ruida controller, and a JCZ controller doesn't interpret G-code. The difference isn't behind the manufacturer's name, but in the architecture: a different communication model, different motion technology, a system optimized for a different job.
Ruida and GRBL seemingly do something similar — both control stepper motors. But the operating model differs fundamentally. GRBL expects a continuous command stream from the computer, and proceeds command by command. Ruida, by contrast, receives the entire job in advance and executes it independently — with its own memory, its own display, no PC. This isn't a difference of degree, but an architectural difference.
In theory, G-code commands could describe the galvo mirrors' target positions. In practice this is unworkable — not because of software, but because of physics. A typical fiber galvo system works at 2,000 mm/s, with a 0.1 mm step. That's 20,000 position commands per second — no single USB connection, with G-code interpretation, can deliver that reliably.
The list-based model doesn't "work around" this problem — it solves it in a fundamentally different way: the entire job is pre-compiled and loaded into the controller in a single transfer, where it executes in hardware, in real time.
LightBurn can communicate with all three controller types — but over completely different protocols. For GRBL, it sends a G-code stream. For Ruida, it uploads its own binary job file. For JCZ/EZCAD, communication uses a different layer, and LightBurn's support is also more limited.
Behind the shared user interface, three different communication and execution models are at work. LightBurn hides this from the user — which is convenient, but can create the false impression that the controllers are uniform.
LaserBase is currently optimized for diode lasers and GRBL-based systems — meaning the G-code stream-based architecture is the primary supported model.
This decision isn't accidental. Diode lasers and GRBL systems work on an open, documented protocol — this is what lets LaserBase integrate deeply into the control process, rather than just being a file-sending tool.
Raster alignment
LaserBase doesn't treat the user-specified DPI as final. The system calculates, from the machine's step/mm value, which line positions can be achieved physically cleanly, and fits the raster to that. This is only possible if the controller's stepping characteristics are known and accessible — which is the case for GRBL systems.
PWM control
LaserBase takes into account the firmware's PWM capacity and the laser module's rise/fall time. The image modulation frequency (f_img) required for a given speed and DPI combination is checked — the system doesn't allow a parameter combination that exceeds the hardware's physical limits.
Future directions
Supporting Ruida- and JCZ-based systems requires a different integration approach — because of the closed protocols, deep integration is limited. This is an active area of research and development.
One of the most common misunderstandings in the laser world is that users call GRBL, Ruida, or JCZ systems "laser controllers."
This is partly true, but technically imprecise.
Users usually see the laser as the machine's most important element. For the controller, however, motion is what matters.
Setting the laser's power is, by itself, a simple task. Generating a PWM or analog signal is trivial from an electronics standpoint.
The hard task is making the right power show up at the right moment, in the right position.
That's why the most important part of a controller is always motion control.
This is even more visible for the JCZ system. The controller's primary job isn't regulating the laser's power, but precisely positioning the galvanometer mirrors.
It may sound strange at first, but from a control-engineering standpoint, the laser can often be viewed as a peripheral. The controller's real job, in every case, is ensuring these four things:
Turning the laser on is, by comparison, a single output operation.
The question often comes up: if every laser ultimately does the same thing — cuts, engraves, or marks material — then why isn't there a single universal controller that handles every machine type the same way?
The answer is simple: because the different laser systems aren't solving the same physical problem.
GRBL-based systems expect a continuous G-code command stream. The computer and the controller work together: the PC sends commands, and the controller processes and executes them in real time.
This model is simple, open, and works well for diode lasers, where the head moves on mechanical axes.
Ruida- and Trocen-type CO₂ controllers don't expect a continuous G-code stream. They receive the entire job in advance, load it into their own memory, then execute it without a PC.
Here the controller is no longer a simple command-receiving device, but a standalone job-execution system. It has its own display, memory, control panel, and internal workflow.
JCZ-based fiber systems differ even further. These don't move mechanical axes, but control galvanometer mirrors. The controller receives a pre-assembled command list, in which motion, mirror position, laser timing, and process parameters all appear together.
This isn't simply a faster version of G-code control. It's a completely different execution model, because the galvanometer system's timing requirement is orders of magnitude stricter.
A universal firmware would simultaneously have to:
This might seem possible in theory, but in practice it wouldn't be a single controller — it would be three different control architectures crammed into one box.
| System | What it receives | What it executes | Why isn't it interchangeable? |
|---|---|---|---|
| GRBL | G-code stream | Mechanical axis motion | Requires a continuous PC connection and a serial command stream |
| Ruida / Trocen | Full job file | Standalone job execution | Uses its own binary job format and internal job handling |
| JCZ | Command list | Galvo position and laser timing | The galvo system's timing doesn't fit the G-code stream model |
It's not worth looking for unity between the three systems at the controller level, but in the higher layers of the software.
A well-built laser software package can be capable of translating the same user-facing logic — material, technique, speed, power, layers, raster or vector operations — into different control models.
But the output layer always has to adapt to the controller's architecture:
Today's laser controllers didn't appear all at once, and weren't built as each other's direct competitors.
Each one was born to solve a given era's specific technical problem.
The story starts with CNC machines. The G-code language was created to describe the motion of milling machines, lathes, and other numerically controlled machines — its first standardized version, RS-274, appeared in 1963, published by the Electronic Industries Alliance. This protocol was born nearly 60 years ago, exclusively for controlling mechanical machine tools.
CNC machines
↓
G-code (RS-274, 1963)
↓
Motion control
G-code's goal was simple:
This model worked excellently with mechanical axes, where the machine head or the workpiece moves. It wasn't designed for raster image processing — where the laser's power has to switch pixel by pixel.
When hobby and semi-industrial diode lasers became widespread, the simplest solution was to reuse the existing CNC world.
CNC world
↓
GRBL
↓
Diode lasers
Here, from a control-engineering standpoint, the laser is practically a new tool.
Mill spindle or Laser
For the controller, both are one output. The difference is that with milling, the spindle spins, while with a laser, power is regulated by a PWM signal.
With CO₂ machines, the work area and runtime grew significantly. Larger, industrial-type machines appeared:
On a machine like this, an engraving or cutting job can take hours. If the controller needed a continuous PC connection, a single network dropout or USB glitch could ruin the entire job.
This led to job-based control:
Drawing
↓
Full job
↓
Controller memory
↓
Standalone execution
This is how Ruida- and Trocen-type controllers came about. Ruida Technology was founded in 2008, and specialized in DSP-based motion control and laser applications. These controllers are no longer simple command-receiving units, but standalone job-execution systems with their own memory, display, and control panel.
Fiber and UV galvo systems brought a completely new problem. Here, it's no longer the head that moves over the work area.
The laser beam moves.
Mechanical head
↓
Galvo mirror
Galvanometer mirrors are low-mass, high-speed optical elements. The laser beam's position is set by changing mirror angle, not by moving mechanical axes.
This raises speed by orders of magnitude:
At this speed, the G-code stream model becomes physically and timing-wise unsuitable. List-based control appeared:
Drawing
↓
Command list
↓
Galvo controller
↓
Real-time execution
This is how the JCZ architecture and the control world built around EZCAD came to be.
This developmental arc helps explain why the different controllers aren't flawed or improved versions of each other. Each is a logical, justified solution within its own technological environment.
The next misunderstanding usually forms around the software. Many people think a laser software package is itself the controller.
This isn't accurate. LightBurn, LaserGRBL, RDWorks, EZCAD, or any other laser software isn't the same layer as the hardware controller itself.
LightBurn is a good example of how several completely different output models can work behind the same user interface.
LightBurn
│
┌───────────┼───────────┐
│ │ │
G-code RDJob JCZ API
│ │ │
GRBL Ruida JCZ
The user sees the same drawing, works with the same layers, speed and power fields. In the background, however, the software produces completely different output depending on which controller is selected.
For the controller, these aren't interchangeable. A Ruida controller doesn't accept a GRBL G-code stream, GRBL firmware doesn't interpret a Ruida job file, and a JCZ galvo controller doesn't work off G-code written for classic mechanical axes.
The difference in brief:
| Layer | Job | Example |
|---|---|---|
| Software | Drawing, layers, parameters, image processing, output generation | LightBurn, LaserBase, RDWorks, EZCAD |
| Controller | Executing the received output on the machine | GRBL, Ruida, Trocen, JCZ |
| Machine | Physical motion, optics, laser source, mechanics | Diode, CO₂, fiber, UV |
That's why it's misleading to say a piece of software "handles" the different controllers "the same way." The interface can be unified for the user, but the output layer is completely different per controller.
Most laser software starts from controller-centric thinking.
The user selects:
This is an understandable approach, because most laser software's primary job is to communicate with a given controller.
LaserBase's outlook is different. It doesn't start from the controller, but from the technology.
The process doesn't start like this:
GRBL
↓
What can the machine do?
But like this:
Material
↓
Technology
↓
Image processing
↓
Optimal parameters
↓
Controller-specific output
In this model, the controller isn't the system's center, but one possible target of the execution layer.
LaserBase
↓
Material database
Process knowledge
Image processing
↓
Execution layer
↓
GRBL
Ruida
JCZ
LaserBase isn't firmware, isn't a controller, and isn't a simple file-sending program. It can be understood as a higher abstraction layer: it translates user intent and process knowledge into a form the given controller can execute.
Ideally, the user doesn't start from what command needs to be sent to the controller.
But from what they want to achieve:
The system's job is then to:
If software is exclusively controller-centric, the user has to adapt to the controller's way of thinking.
If, instead, it's technology-centric, the software takes on the translation between the user's goal and the controller-specific execution.
The evolution of laser controllers isn't random. The different architectures were born to solve different physical problems.
These aren't better or worse versions of each other. They're systems optimized for different goals.
The job of modern laser software isn't to handle every controller with the same method. That would be technically misleading. The real job is to be able to translate the same process knowledge into different control models.
This is the outlook that makes it possible for the same knowledge to be applicable on diode, CO₂, and fiber systems — while, in the background, every controller gets output matching its own operating model.
A laser system isn't a single unit — it's a chain of layers built on top of each other. The user touches the topmost layer, physical execution happens at the bottom.
Most misunderstandings come from these layers blurring together — for example, treating the software as the controller, or the controller as the laser itself.
Modern laser controllers' hardware architecture isn't uniform — different processing units perform different tasks:
| Unit | Job | Typical use |
|---|---|---|
| CPU | General control logic, communication, user interface | Arduino (GRBL), ESP32 (FluidNC) |
| DSP | High-speed signal processing, motion computation, trajectories | Ruida RDC series, JCZ controllers |
| FPGA | Deterministic, hardware timing — µs precision | Ruida DSP+FPGA combination, galvo controllers |
GRBL-based systems run on a CPU — enough for mechanical axis control at low-medium speed. Ruida's DSP+FPGA combination enables standalone, PC-independent job execution and precise path following. For galvo systems, the FPGA or dedicated hardware provides the sub-µs timing precision that galvo positioning requires.
The JCZ controller doesn't move the galvo mirrors directly — it sends position data to the galvo unit over a standard industrial communication protocol, XY2-100.
JCZ controller → XY2-100 → Galvo unit → Mirror angle → Beam position
XY2-100 is a serial interface that sends 20-bit position data at 2 Mbit/s — that's 100,000 position updates per second. This continuous, hardware data stream is why the galvo system can't be driven over a G-code stream arriving from the PC side that needs interpreting — the latency required there is orders of magnitude larger than what the XY2-100 channel requires.
The list-based command-list model solves exactly this: the entire job is pre-compiled and loaded into the controller, which then drives the XY2-100 channel in hardware, without a PC.
GRBL / grblHAL raster performance
grblHAL core — Slow raster performance (Discussion #189) · github.com/grblHAL/core/discussions/189
grblHAL core — Cluster mode for lasers (Discussion #195) · github.com/grblHAL/core/discussions/195
phil-barrett/grblHAL-teensy-4.x — Laser raster speed (Issue #2) · github.com/phil-barrett
LaserGRBL — Development of a new raster protocol (Discussion #1818) · github.com/arkypita/LaserGRBL
LightBurn Forum — grbl-HAL testing · forum.lightburnsoftware.com
JCZ / EZCAD protocol
EduTech Wiki — LMCV4-FIBER-M reverse engineering · edutechwiki.unige.ch
JCZ Technology — EZCAD3 product page · ezcad.com
BJJCZ — Understanding Laser Control Boards · ezcad.com
XY2-100 protocol
Interface XY2-100 specification (PDF) · ilphotonics.com
ResearchGate — XY2-100 sequence diagram · researchgate.net
Ruida architecture
RuiDa Technology — official product page · rdacs.com
ruidacontroller.com — What is Ruida Controller? · ruidacontroller.com
G-code history
Wikipedia — G-code · en.wikipedia.org/wiki/G-code
Lincoln Tech — What is G-code? · lincolntech.edu
LaserBase validated measurements
LaserBase PWM Frequency Guide · laserbase.app/guides/pwm-frekvencia
LaserBase DPI Raster Alignment Guide · laserbase.app/guides/dpi-raszter
G1 Y-0.1S0.875:0:0:0.5:0.875). Drastically reduces planner load and communication traffic — enables roughly a 4× speed improvement. Available since LightBurn 1.2.02, supported by grblHAL.One of the most common misunderstandings in the fiber laser community is mixing up the concepts of "JCZ" and "EZCAD." The two actually represent completely different layers: one is hardware, the other is software — and this separation is the basis for understanding the system.
BJJCZ (Beijing JCZ Technology Co., Ltd.) is one of the most significant manufacturers of galvo controller cards. The card family's evolution reflects the evolution of galvo control well — from early PCI-based cards to standalone USB- and Ethernet-based systems:
| Model | Interface | Connector | Characteristics |
|---|---|---|---|
| LMC1 | USB 2.0 | PCI slot (external card) | Base model, the foundation of the EZCAD2 platform |
| LMC2 | USB 2.0 | PCI-E | More advanced version, wider I/O portfolio |
| LMC4 / LMCV4 | USB 3.0 | Standalone PCB | Current mainstream; FIBER-M variant for fiber sources |
| LMCV4-FIBER-M | USB 3.0 | Standalone PCB | Fiber-specific: MOPA parameter control, JPT / Raycus / IPG interface |
| LMC-Ethernet | Ethernet + USB | Standalone PCB | Network control, EZCAD3 support, for automated production lines |
EZCAD is the PC-side software built for JCZ hardware cards. The two main versions target different card generations, and their architecture differs fundamentally:
There are two possible integration points between the JCZ hardware and the EZCAD software, with different reliability and complexity:
EZCAD3's TCP/IP API is the most reliable integration route: documented, maintained by the manufacturer, and lets external applications — including LightBurn 1.4+'s galvo mode — control EZCAD3 directly. This requires EZCAD3 to be installed and running on the host computer.
The second route is the direct USB protocol — this is based on community reverse-engineering (the EduTech Wiki LMCV4-FIBER-M RE project). This enables native control without EZCAD, but is riskier from a legal and stability standpoint, and protocol changes have to be tracked.
In the JCZ ecosystem, the hardware-software split is a deliberate business decision. The card by itself can't do anything without software — assembling the command list, uploading it, and initializing the card are software's job. For JCZ, this represents a stable business model: the card is sold, and the EZCAD software is tied to it with a license.
For system integrators, though, the EZCAD3 TCP/IP API opened up the ability to build their own applications around the JCZ hardware. A production line's control software, for instance, can control EZCAD3 directly without the user ever having to see EZCAD's user interface.
For LaserBase, this means fiber galvo integration doesn't necessarily require reverse-engineering the closed USB protocol — it's enough to communicate over the EZCAD3 TCP/IP API, whose documentation is available. This isn't just simpler, it's also a more sustainable solution long-term.
Understanding controllers' internal architecture is essential to clearly seeing why GRBL, Ruida, and JCZ differ in performance and capability. The three fundamental processing elements — CPU, DSP, and FPGA — are each optimized for different tasks, and appear in different combinations in different controller classes.
A traditional, general-purpose processor is flexible and easy to program — but not optimized for real-time, µs-precision I/O tasks. The operating system's scheduler, interrupt handling, and cache misses introduce latency into the system, which is a problem for applications that need deterministic timing.
| Platform | CPU | Speed | Firmware | Step generation method |
|---|---|---|---|---|
| Arduino Uno / Nano | ATmega328P | 16 MHz, 8-bit | GRBL 1.1 | Timer interrupt, ~30 kHz maximum |
| ESP32 | Xtensa LX6 dual-core | 240 MHz, 32-bit | GRBL 1.1 / FluidNC | Timer + RMT peripheral, ~100 kHz range |
| Teensy 4.1 | ARM Cortex-M7 | 600 MHz, 32-bit | grblHAL | Hardware timer, ~500 kHz range achievable |
| STM32F4xx | ARM Cortex-M4 | 168 MHz, 32-bit | grblHAL | Advanced timer peripheral, ~200 kHz range |
CPU-based systems' advantage is flexibility, low cost, and an open-source software environment — their drawback is that stepping frequency and real-time performance are limited. GRBL is the most mature CPU-based firmware, but its design limits (linear ring buffer, 8-bit Arduino origin) have been unchanged for nearly two decades, and are only partially exploitable on modern platforms.
A DSP (Digital Signal Processor) is a processor specifically optimized for high-speed execution of mathematical operations — multiplication, addition, filtering. It has a hardware multiply-accumulate unit (MAC unit), a dedicated data bus, and circular-buffer memory handling. These make it suitable for real-time computation of motion trajectories and laser power curves.
Ruida's RDC-series controllers use Texas Instruments DSP chips — likely from the C2000 real-time control family. The DSP's jobs in the Ruida system:
The DSP alone — however fast — isn't capable of sub-µs, deterministic I/O generation. That requires the FPGA.
An FPGA (Field-Programmable Gate Array) isn't a processor in the traditional sense — it's programmable hardware. Inside the FPGA, logic gates and flip-flops are wired together, executing hardware functions in parallel and in real time, with no software overhead whatsoever.
The FPGA's role in different laser controllers:
| Controller type | FPGA's job | Timing requirement |
|---|---|---|
| Ruida RDC series | STEP/DIR generation, encoder reading, PWM generation | ~1 µs precision for step pulses |
| JCZ / BJJCZ card | XY2-100 data stream generation, laser sync timing | ~10 ns precision (2 MHz clock requirement) |
| Industrial galvo controllers | Position interpolation, galvo feedback processing, I/O latching | ~100 ns range |
Ruida and JCZ systems both use both units — and this isn't an accident. The two perform complementary, mutually completing tasks:
DSP FPGA ───────────────────────────── ───────────────────────────── Job interpretation STEP/DIR pulse generation Trajectory computation XY2-100 data stream generation Laser power curve PWM modulation Communication handling Encoder processing User interface I/O latching ───────────────────────────── ───────────────────────────── Flexible, programmable Deterministic, hardware-based µs latency ns latency
The DSP determines what needs to happen. The FPGA executes it exactly when needed — with nanosecond precision and a determinism software can never reach.
This architecture is what lets Ruida run even an hour-long engraving job standalone, without a PC, stably and reproducibly — and lets the JCZ controller send 100,000 position updates per second to the galvo unit, without interruption.
The XY2-100 protocol is the standard industrial communication interface for digital galvanometer scanner systems. It was first developed by Cambridge Technology (now Novanta), and has since become the industry's de facto standard — every major galvo manufacturer (Scanlab, Cambridge, II-VI, Sino-Galvo) implements it. Earlier chapters briefly touched on the protocol — this chapter provides the full technical detail.
Electrically, XY2-100 follows the RS-422 differential signaling standard. This physical layer provides noise immunity and reliable communication even over longer cable runs in an industrial environment:
XY2-100 builds every communication frame from 20 bits, in sync with the 2 MHz clock:
20 bit × (1 / 2 MHz) = 10 µs / frame → 1 s / 10 µs = 100,000 position updates per second
The structure of a single frame's bits:
| Bit position | Content | Description |
|---|---|---|
| Bit 19 (MSB) | Sync bit | Always 1 — marks frame start, synchronization |
| Bit 18 | Status / Control | Indicates command type (position vs. control command) |
| Bit 17–2 | 16-bit position data | 0x0000–0xFFFF → maps the full scan field |
| Bit 1–0 | Checksum (2 bit) | XOR-based parity check for error detection |
The 16-bit position data covers 65,536 steps across the entire scan field. For a typical 110 mm × 110 mm scan field, this gives a step density of:
110 mm / 65,536 steps ≈ 1.68 µm / step
This resolution is far finer than the laser's focal spot size (typically 20–50 µm at 1064 nm, with a 163 mm F-Theta lens) — so the XY2-100 protocol isn't the resolution bottleneck; the optics and focal spot size are.
Some premium galvo systems use the extended version of XY2-100, the XY2-100E protocol. This provides 20-bit position data (1,048,576 steps), which increases resolution roughly 16-fold compared to the base protocol. This is especially important for large-work-area, high-precision applications — for example on a 300 × 300 mm work field, where the base 16 bits is no longer precise enough.
The galvo servo system continuously tracks the incoming position data in real time — it doesn't wait for a "position reached" feedback signal. This means the controller has to precisely schedule the sending of position data, so the galvo mirror moves at the desired speed and along the desired path.
XY2-100 itself doesn't carry a laser control signal — the laser is controlled by a separate channel (typically a TTL or analog signal to the laser's modulator). The JCZ controller's job is to synchronize the laser on/off signal with the position data at nanosecond precision — the FPGA implements this at the hardware level.
The synchronization delay parameters can be set in the EZCAD software:
With incorrect synchronization, blurring, breaks, or spurious marking appear at the start and end of contours. These parameters are individually calibrated on every machine during service setup.
To understand the galvanometer mirror control system, it's worth going back to the underlying physics. The galvo actuator isn't a motor in the usual sense — it's a precisely controlled electromagnetic actuator that changes the mirror angle in proportion to the applied current. This principle is what enables the extraordinary speed and repeatability.
The galvanometer's basic principle is the Lorentz force: a current-carrying coil in a magnetic field experiences a rotational torque. For a galvo:
The relationship between angle and current is ideally linear — the closed-loop servo system ensures this in reality, compensating for nonlinearities and mechanical disturbances.
A galvo system's speed is directly tied to the mirror's size and mass. A smaller mirror = a smaller moment of inertia = faster motion and a shorter settling time. This relationship is key in system design:
| Mirror diameter | Max. beam diameter | Typical use | Speed characteristic |
|---|---|---|---|
| 7 mm | ~5 mm | Small work area, high speed | Fastest — hobby machines, small-area precision marking |
| 10 mm | ~7 mm | General-purpose fiber and CO₂ galvo | Medium speed — the most widespread industrial size |
| 14 mm | ~10 mm | Larger beam, UV systems | Slower — but can handle higher beam power |
| 20 mm+ | ~14 mm+ | High-power industrial systems | Slowest — but needed for the highest-power lasers |
The galvo servo system operates in a closed loop: a position sensor (capacitive or optical encoder) measures the mirror angle, and the servo amplifier sets the current in proportion to the difference between the measured and the desired angle. This PID control typically achieves 1–3 kHz mechanical bandwidth — meaning the galvo can no longer follow changes faster than 1–3 kHz.
"Settling time" is the critical parameter: this is the minimum time needed for the galvo to move to the desired position and stabilize there within the specified accuracy tolerance — before marking begins.
The galvo mirror pair (X and Y axis) provides two mutually perpendicular angular degrees of freedom. The two mirrors, however, aren't located at exactly the same point — there's a few millimeters of axis offset between them. This causes optical distortion (so-called pincushion or barrel distortion), especially at the corners and edges of the work field.
The amount of distortion increases with:
Correction tables are used to handle this — covered in detail in the next chapter.
A galvo mirror's coating has to be matched to the laser's wavelength — the wrong coating causes reflection loss, heating, and coating damage at high power:
| Wavelength | Laser type | Mirror coating | Note |
|---|---|---|---|
| 1064 nm (IR) | Fiber, Nd:YAG | Gold or dielectric IR HR coating | The most widespread fiber galvo configuration |
| 532 nm (green) | Green DPSS | Dielectric green HR coating | Surface marking of aluminum and other materials |
| 355 nm (UV) | UV DPSS | UV dielectric HR coating | For UV-sensitive coatings, PCB |
| 10,600 nm (IR) | CO₂ | ZnSe substrate + gold coating | For CO₂ galvo systems (rarer, but an existing configuration) |
In high-power systems (50 W, 100 W fiber), mirror coating quality and cleanliness are critical. A dirty or damaged mirror coating can locally absorb the laser, leading to thermal damage, loss of accuracy, and complete mirror failure. Regular cleaning and condition monitoring are mandatory.
One of the most important and most commonly misunderstood elements of a galvo system's optical design is the F-Theta objective. To understand it, it's worth comparing it to a traditional focusing lens — and understanding why the two aren't interchangeable in a galvo application.
A simple converging lens (plano-convex, aspheric) focuses the incoming parallel beam to a focal point — this point sits on the lens's optical axis, at the focal length f. If the galvo mirror deflects the beam, the lens still focuses, but the focal point moves on a spherical surface, not a flat one.
Mathematically: if the galvo angle is θ, the position projected onto the work surface for a standard lens is:
y = f · tan(θ)
This isn't linear at large angles — at the corners of the work field the spot "falls" out of focus, blurs, and deviates from the nominal position. This degrades both marking quality and geometric accuracy.
The F-Theta lens is a specially designed, compound optical system with two simultaneous goals:
y = f · θ (F-Theta relationship)
"Linear mapping" is especially important: JCZ/EZCAD software assumes a directly proportional relationship between the galvo angle and the work-area coordinate. If this condition isn't met — because unsuitable optics are used — the marked shapes distort, and the correction table can't fully compensate for the error either.
| Focal length | Typical work area | Focal spot (1064 nm) | Typical use |
|---|---|---|---|
| 100 mm | ~70 × 70 mm | ~25–40 µm | Fine marking, PCB, electronics, QR codes |
| 163 mm | ~110 × 110 mm | ~35–55 µm | General industrial marking — the most widespread size |
| 254 mm | ~175 × 175 mm | ~50–80 µm | Larger work area, moderate resolution |
| 330 mm | ~230 × 230 mm | ~70–100 µm | Large work area, packaging, object marking |
| 420 mm | ~300 × 300 mm | ~90–130 µm | Large-surface industrial marking, mass production |
With a standard F-Theta lens, the beam arrives at the work surface at a slightly oblique angle near the edges of the work area. In most applications this is negligible — but in certain cases (deep engraving, precise side-wall shaping, accuracy-critical drilling, processes requiring a parallel beam) the beam needs to stay exactly perpendicular to the work surface at all times.
This is what the telecentric F-Theta lens is for, where additional optical elements ensure the outgoing beam stays parallel to the optical axis across the entire work field — regardless of the galvo angle. This is more expensive and optically more complex, but indispensable in some critical applications.
The focal spot diameter (d) can be estimated with the diffraction-limit approximation:
d_min ≈ (4 · λ · f) / (π · D)
where λ is the laser's wavelength, f is the F-Theta lens's focal length, and D is the incoming beam's diameter. It follows that: a smaller spot needs either a shorter focal length or a larger beam — but a shorter focal length means a smaller work area. This basic law is a tradeoff every galvo system designer faces between spot size and work area.
Even with the best F-Theta optics and the most precise galvo system, perfect geometric fidelity can't be achieved without calibration. Distortions arising from mechanical assembly, optical deviations, and galvo nonlinearity can be compensated for with correction tables.
Together, these errors typically cause a few tenths of a mm to 1 mm of distortion at the edges of the work field, which is unacceptable in precision applications.
The correction file (.cor extension) used by EZCAD software contains a two-dimensional grid with correction vectors. The grid is typically 65 × 65 or 128 × 128 points, and evenly covers the whole work field.
Every grid point has a (Δx, Δy) correction vector attached — this says by how much the galvo has to "shift" the given nominal coordinate to reach the actual target position. Between two grid points, the software computes the correction for any intermediate position by bilinear interpolation.
1. Marking a reference grid: Using EZCAD, the machine marks a grid pattern of known geometry (e.g. a 10 × 10 mm grid at 10 × 10 points across the whole work field). This is the "raw" geometry, without a correction table — it shows the system's current distortion.
2. Measurement: The marked points are measured with a precision instrument. Possible methods: a coordinate measuring machine (CMM), a calibrated camera + vision software, digital projector measurement software, or, in a simpler case, a calibrated loupe and ruler.
3. Computing the correction: For every point, the difference between the measured and the nominal position gives the correction vector. EZCAD's "Correction" dialog can do this automatically, if we provide the measured positions.
4. Saving and applying the COR file: The finished correction table is saved as a .cor file. EZCAD applies it in real time on every marking job — the outgoing galvo commands' coordinates are automatically corrected, in a way that's completely transparent to the user.
Handling the COR file is entirely a software-side task — the JCZ card knows nothing about the correction. EZCAD applies the correction to the coordinates before sending them to the card. This also means that if an external piece of software (LightBurn, LaserBase, or a custom application) controls the JCZ card directly, bypassing EZCAD, it has to implement and apply the correction-table logic itself — this is one of the most serious technical challenges of direct JCZ integration.
LightBurn is one of the most widespread software packages in the laser community — and a good illustration of how the same user interface can be built over several completely different control models.
The GRBL driver in LightBurn is the simplest and most transparent — the G-code standard is public:
M3 S{value} formatG1 Y-0.1S0.875:0:0:0.5:0.875 format, where multiple pixels' S values are sent at onceThe Ruida driver is more complex — Ruida's .rd format isn't public, and is based on community reverse-engineering:
LightBurn's galvo and fiber laser support appeared in version 1.4, and has been actively developing since:
LightBurn's device layer provides strong abstraction — but the price of that abstraction is that some controller-specific capabilities can't be fully exploited through the unified user interface:
This is why the claim "LightBurn handles everything the same way" is true at the user level — but in some professional applications, the native software (EZCAD3, RDWorks) provides deeper access.
One of the defining goals of LaserBase's architecture is realizing a technology-first, multi-controller model. This means user intent — material, technique, desired outcome — isn't tied to the controller type. The same process knowledge is translated into controller-specific output, depending on what hardware is connected.
In traditional laser software, the user organizes their work around the machine and the controller — the software primarily communicates with the controller, and the user adapts their parameters to that. In the LaserBase model, the order is reversed:
Identifying the material (material library)
↓
Selecting the technology (engraving / cutting / marking)
↓
Image processing and optimization
↓
Checking hardware limits (step/mm, PWM, rise/fall time)
↓
Generating controller-specific output
In this model, "generating controller-specific output" is the last step — not the first. The system starts from user intent, and adapts the final output to the given controller's architecture.
In LaserBase's internal architecture, the output-adapter layer is responsible for translating the same processing result into different controller formats:
| Adapter | Target controller | Output format | Maturity level |
|---|---|---|---|
| GRBL adapter | GRBL 1.1 / grblHAL | G-code stream, with cluster mode support | Active, primary, validated |
| Ruida adapter | Ruida RDC series | .rd binary job-file generation | Active research and development |
| JCZ adapter | BJJCZ / LMCV4 + EZCAD3 | EZCAD3 TCP/IP API control | Active research and development |
In LaserBase's current GRBL integration, a number of controller-specific optimizations are applied, based solely on knowledge of the GRBL and stepper-motor systems' architecture:
Step/mm-based raster alignment: LaserBase calculates the physically achievable DPI values from the machine's step/mm value — resolutions that fall on a whole number of stepping units. It fits the raster to these, avoiding the sub-pixel positioning error that arises from step/mm and DPI incompatibility.
f_img frequency check: Before every speed–DPI combination, LaserBase computes the required image modulation frequency (f_img = v × DPI / 1524), and compares it against the firmware's and the laser module's physical limits. If the combination falls outside the hardware's limits, the system warns — preventing buffer starvation and image quality degradation.
Cluster mode output: For raster engraving, LaserBase generates cluster-mode G-code — sending multiple pixels' S values in one command, drastically reducing planner load, which is critical especially at high speed and high DPI.
Ruida integration is based on the community-reverse-engineered .rd format — LightBurn has proven this is achievable and can be run stably. LaserBase's goal is to make the technology knowledge base (material database, parameter optimization, image processing) accessible on CO₂ Ruida systems too.
For JCZ / BJJCZ integration, the EZCAD3 TCP/IP API is the most promising route. This is documented, manufacturer-supported, and lets LaserBase communicate with EZCAD3 over TCP/IP instead of directly over USB with the JCZ card. This requires EZCAD3 to be running on the host computer — which is typically the case on fiber galvo machines.
The controller type doesn't affect the workflow visible to the user. The same technology profile — "3 mm maple, 254 DPI engraving" — gets translated into GRBL cluster G-code, a Ruida job file, or a JCZ / EZCAD3 command list, depending on which controller is connected. The user doesn't need to know what's happening in the background — the process knowledge is uniform, the execution layer is controller-specific.
MOPA (Master Oscillator Power Amplifier) is a two-stage fiber laser architecture that differs fundamentally from a traditional Q-switched fiber laser. The difference isn't merely about power — the free adjustability of pulse parameters is what makes MOPA suitable for applications that can't be achieved with the same flexibility using a Q-switched source.
| Property | Q-switched fiber | MOPA fiber |
|---|---|---|
| Pulse width | Fixed — determined by cavity geometry | Adjustable: typically 2–500 ns |
| Repetition rate | Fixed range, tied to peak power | Independent of peak power: 1–4000 kHz |
| Peak power | Higher at lower frequency — no free adjustment | Depends on pulse width and frequency, wider range |
| Price | Lower | Higher (roughly 2–5× a Q-switched unit at the same power) |
| Application flexibility | Limited — fixed pulse character | Wide — can be optimized per material |
| Control complexity | Simple: power + frequency | More complex: PW + PRF + power + first pulse |
The MOPA architecture is built from two main components:
This two-stage architecture lets the pulse parameters (width, frequency) and the output power vary in relatively independent ranges — unlike a Q-switched system, where the cavity's physics fixes the possible pulse width.
MOPA's biggest advantage is pulse-width control, which fundamentally determines the nature and depth of the material-laser interaction:
| Pulse width | Peak power | Nature of material effect | Typical use |
|---|---|---|---|
| 2–10 ns | Very high | Ablative — material removal, deep engraving | Deep metal engraving, black marking on steel |
| 20–60 ns | High | Surface alteration, strong oxidation induction | Data matrix code, barcode, industrial marking |
| 60–120 ns | Medium | Combination of heat effect + oxidation | General-purpose metal marking, QR code |
| 120–250 ns | Moderate | Thermal — heat conduction dominates, slow oxidation | Anodized aluminum blackening |
| 200–500 ns | Low peak | Slow heat input — controlling a thin oxide layer | Colored marking on stainless steel |
One of MOPA's most spectacular and significant applications is colored marking of stainless steel. The mechanism is based on the oxide layer's thickness: differently thick mixed Cr₂O₃ / Fe₂O₃ oxide layers reflect different wavelengths — this is thin-film interference, the same physics behind the iridescent colors of soap bubbles and thin oil films.
MOPA can precisely set the oxide layer's thickness by combining pulse width and repetition rate. Typical parameter-to-color mappings:
This process is extremely parameter-sensitive — speed, power, PW, and frequency together determine the result, and even a small change gives a different color. A reproducible result requires a material library, a precisely calibrated machine, and careful parameter documentation. A well-built MOPA material-profile system (like LaserBase's material library) is exactly what enables this reproducibility.
The JCZ LMCV4-FIBER-M card and the EZCAD software specifically support MOPA sources too. In the command list, MOPA-specific parameters appear as separate control entries, which the card sends to the source's modulator via the FPGA, at nanosecond precision:
| Manufacturer | Country | Known MOPA models | Market positioning |
|---|---|---|---|
| JPT (Jiepu Trend) | China | MOPA M7, M6, E series | Market leader in the Chinese MOPA segment — very widespread |
| Raycus | China | RFL-P MOPA series | Both Q-switched and MOPA, industrial applications |
| Max Photonics | China | MFPT series | Lower price range, hobby and entry-level industrial segment |
| IPG Photonics | USA | YLP-RA series | Premium — most reliable, but the most expensive category |
| Coherent / nLight | USA | Various MOPA series | Premium industrial segment, critical applications |
The sources below provide deeper theoretical and practical grounding for the topics covered in this document.
XY2-100 protocol — detailed specification
Cambridge Technology / Novanta — XY2-100 Digital Interface Specification (PDF) · ilphotonics.com (PDF)
ResearchGate — XY2-100 sequence timing diagram · researchgate.net
Scanlab — Application Note: XY2-100 Protocol Overview · scanlab.de/resources
JCZ / BJJCZ hardware and protocol reverse engineering
EduTech Wiki — LMCV4-FIBER-M reverse engineering project · edutechwiki.unige.ch/en/LMCV4-FIBER-M
BJJCZ / JCZ Technology — product family overview · bjjcz.com
EZCAD3 software and API documentation · ezcad.com/products/ezcad3-software/
EZCAD — Understanding Laser Control Boards · ezcad.com/understanding-laser-control-boards
GRBL / grblHAL raster and cluster mode
grblHAL core — Slow raster performance (Discussion #189) · github.com/grblHAL/core/discussions/189
grblHAL core — Cluster mode for lasers (Discussion #195) · github.com/grblHAL/core/discussions/195
phil-barrett/grblHAL-teensy-4.x — Laser raster speed (Issue #2) · github.com/phil-barrett/grblHAL-teensy-4.x/issues/2
LaserGRBL — Development of new raster protocol (Discussion #1818) · github.com/arkypita/LaserGRBL/discussions/1818
LightBurn Forum — grbl-HAL testing thread · forum.lightburnsoftware.com/t/grbl-hal-testing/29578
Ruida controller architecture
RuiDa Technology — official product pages · rdacs.com/en
ruidacontroller.com — What is Ruida Controller? · ruidacontroller.com/what-is-ruida-controller/
LightBurn Forum — Ruida Protocol Documentation threads · forum.lightburnsoftware.com
MOPA fiber laser technology
JPT Laser — MOPA M6/M7/E series datasheets · jptlaser.com
Raycus — RFL-P MOPA series product description · raycuslaser.com
IPG Photonics — YLP-RA pulsed fiber laser series · ipgphotonics.com
Richardson, D.J. et al. — High power fiber lasers: current status and future perspectives, JOSA B, 2010
Zervas, M.N. & Codemard, C.A. — High Power Fiber Lasers: A Review, IEEE JSTQE, 2014
Galvanometer and optics
Novanta / Cambridge Technology — galvo scanner product family and specifications · novanta.com/products/scanning/
Scanlab — intelliSCAN, humiSCAN, varioSCAN series and application materials · scanlab.de
II-VI / Coherent — F-Theta lens portfolio and focal-spot calculators · coherent.com
Marshall, G.F. & Stutz, G.E. — Handbook of Optical and Laser Scanning, CRC Press, 2004
G-code and CNC history
Wikipedia — G-code (RS-274) · en.wikipedia.org/wiki/G-code
EIA RS-274-D standard (1979) — the original G-code specification, the basis of today's laser implementations
Lincoln Tech — What is G-code? · lincolntech.edu
LaserBase internal measurements and validated configurations
LaserBase PWM Frequency Guide · laserbase.app/guides/pwm-frekvencia
LaserBase DPI Raster Alignment Guide · laserbase.app/guides/dpi-raszter
LaserBase Fiber protocol analysis and LCS2 pcap studies — internal development documentation, 2025–2026
Correction tables and calibration methods
EZCAD2 / EZCAD3 User Manual — Correction section · ezcad.com documentation
Novanta Application Note — Field Distortion Correction in Galvo Scanning Systems · novanta.com/resources
Laser World of Photonics — Galvo scanner calibration methods (conference talks and technical articles)
Alongside the three architectural categories (G-code stream, job-based, list-based), there's a fourth dimension that cuts across them: the open vs. closed ecosystem axis. This isn't a control architecture — it's a dimension characterizing the system's integrability and openness.
Some manufacturers — for example AlgoLaser, xTool, and Twotrees — don't just supply hardware, they build their own integrated software-hardware ecosystem. Based on the communication model, these are generally G-code stream-based or job-based systems, but this is hidden from the user.
Important: even within these manufacturers, there's model-level variation. The xTool D1 line, for example, uses a G-code-based controller — it also works with LightBurn. The xTool P2/P2S and P3 models, by contrast, form their own closed ecosystem, where LightBurn support is limited or unavailable. So the manufacturer's name alone isn't enough to determine the architecture — model-level examination is needed.
| Manufacturer / Model | Firmware basis | LightBurn compatible | Note |
|---|---|---|---|
| AlgoLaser Delta/Alpha | Custom / modified G-code | Partially | Own app, camera, material recognition, SD card firmware update |
| xTool D1 / D1 Pro | G-code (GRBL-based) | Yes | Open communication, LightBurn fully supported |
| xTool P2 / P2S / P3 | Own closed firmware | Limited / no | Closed ecosystem, xTool Creative Space required |
| Twotrees (model-dependent) | Custom / GRBL-based | Model-dependent | Partially open, LightBurn support varies |
These systems are more convenient for beginners — the manufacturer takes care of optimization, software-hardware matching, camera-based positioning. The downside is that the user can't swap out the software, can't integrate deeply, and is dependent on the manufacturer's future decisions — for example, if a software version is discontinued, or the cloud server shuts down.
Architecturally this isn't a new category — but it's a separate dimension in terms of openness. That's why, in a comparison table, it's worth distinguishing between open (GRBL) and closed (xTool P series) systems within the same communication model.
The world of laser control isn't static. Over the past few years, several platforms have appeared or matured that don't fit cleanly into the traditional three categories — or that cut across them.
Klipper firmware deserves attention as a special case. It doesn't fit cleanly into either traditional category — it's G-code-based, but computation and real-time execution are split apart:
| Characteristic | Klipper |
|---|---|
| Protocol | G-code |
| Run platform | Linux host (Raspberry Pi, Android TV box, mini PC) + MCU |
| Hardware split | The Linux host does the computation — the MCU (STM32, RP2040) does real-time step generation |
| Processing power | Significantly higher than ESP32 — input shaping, pressure advance available |
| Laser support | Mainline since December 2023: fast PWM update, pwm_tool configuration, M3/M4/M5 G-code |
| Safety note | Diode lasers are usually inverted — on an MCU restart, the laser can briefly be at full power. A safety timeout is mandatory. |
Klipper's core idea is that the heavy computation is done by the Linux host, while the microcontroller only does real-time step generation. This enables very precise motion planning, resonance compensation (input shaping), and other advanced features that aren't available on an ESP32-based system.
A cheap Linux host option: an Android TV box (~15–20 EUR, 64 GB storage) is more powerful than a Raspberry Pi 3, and can run Armbian — this is the cheapest option for a Klipper host. A proper motherboard (mini ITX, 6–8 GB RAM) is a significantly more powerful platform, but at a higher price. The TV box is clearly a higher tier than the ESP32 level, but it's the best-value cheap option.
A LaserBase-validated Klipper configuration isn't currently available — a monitored, actively developing area.
FluidNC is G-code stream-based firmware, but in terms of standalone running it's closer to Ruida-type systems than to traditional GRBL. SD card support has to be configured in the config.yaml file (the sdcard and spi sections, with the right GPIO pins) — once successfully configured, a file can be run directly from the SD card, without a PC, using the $SD/Run=/file.nc command.
The FluidDial and FluidTouch accessories add a physical control interface — jog-wheel-style control, a menu system, an SD card browser. With these, the FluidNC experience gets closer to standalone, Ruida-type controllers, while the communication model stays G-code-based.
Standalone SD card running isn't FluidNC-specific. GRBL 1.1- and grblHAL-based systems are capable of it too, if the hardware includes an SD card reader. The Arduino Nano/UNO is the only widely used platform where this isn't available in hardware.
The MKS DLC32 is an ESP32-based controller board specifically developed for offline engraving — with a built-in SD card reader and an optional 3.5-inch touchscreen. It ships with GRBL-based firmware by default, but can also be flashed with grblHAL.
Important warning: the MKS DLC32 Max contains an ESP32-S3 processor, unlike the base DLC32's ESP32 processor. The two variants need different firmware — swapping them can brick the board. The MKS ESP32 Download Tool doesn't validate the chip ID, so the processor type has to be checked every time before uploading firmware.
In the comparison table (Chapter 5), the "PC needed while running" row gives a simplified picture. The reality is platform-dependent — the ability to run standalone isn't an architectural property, but a matter of hardware and firmware capability.
The communication architecture (stream / job upload) and the ability to run standalone are two different dimensions:
| Platform | Firmware | SD card | Standalone running | Note |
|---|---|---|---|---|
| Arduino Nano / UNO | GRBL 1.1 | None | No | A PC connection is mandatory for the entire job |
| Arduino Mega + shield | GRBL 1.1 | Possible | Yes, if there's SD | An SD shield is needed, not every configuration supports it |
| ESP32 | GRBL 1.1 | Possible | Yes, if there's SD | Hardware-dependent — not every ESP32 board includes an SD reader |
| MKS DLC32 | GRBL / grblHAL | Yes, built in | Yes, natively | Designed for offline engraving, with a touchscreen |
| ESP32 | FluidNC | Needs configuring | Yes, with the $SD/Run command | Needs an sdcard + spi section in config.yaml |
| Teensy 4.1 / STM32 | grblHAL | Yes | Yes | High-performance platform — for 32,000+ mm/min raster |
| Ruida RDC series | Own DSP firmware | Yes (USB / internal) | Yes, natively | Own binary format (.rd), control panel, display |
| JCZ / BJJCZ | Own firmware | Not relevant | Yes | The command list is loaded once, then runs without a PC |
This chapter collects the corrections identified during online validation and community audit — fixes to claims that appeared inaccurate or oversimplified in earlier versions of this material.
Earlier versions of this material may have implied that FluidNC runs from an SD card by default. The reality: the SD card isn't a default — the sdcard and spi sections have to be configured separately in the config.yaml file, with the right GPIO pins. FAT-32 format is mandatory; ExFAT isn't supported. Cards larger than 64 GB only work if reformatted to FAT-32.
The MKS DLC32 and the MKS DLC32 Max contain different processors (ESP32 vs. ESP32-S3). The two variants need different firmware. The MKS ESP32 Download Tool doesn't validate the chip ID — so the processor type has to be checked every time before uploading firmware. Uploading the wrong firmware can brick the board.
The claim "xTool is a closed ecosystem" can't be generalized to the entire product line. The xTool D1 and D1 Pro are G-code-based, fully compatible with LightBurn. The closed ecosystem mainly applies to the xTool P2/P2S and P3 models, where LightBurn support is limited.
As of December 2023, Klipper's fast PWM update landed in mainline. With the pwm_tool configuration, M3/M4/M5 G-code commands work. Laser support therefore isn't experimental — but it's primarily a system built for 3D printing, into which laser support was added later. Important safety note: diode lasers are usually inverted, and on an MCU restart the laser can briefly stay at full power — configuring a safety timeout is mandatory.
In the comparison table, Ruida's speed appeared as "100–800 mm/s." The reality: some Ruida systems work in the 1,000–1,500 mm/s range for engraving too. The more accurate figure: typical: 100–1,500 mm/s, depending on model and configuration.
This claim is a useful simplification for teaching purposes, but the technically more precise version is: G-code was originally built to describe vector tool paths (RS-274, 1963). Raster engraving was layered on top later — as an adaptation, not an original design goal. Cluster mode (LightBurn 1.2.02+) made this adaptation significantly more efficient.
This claim, as stated, is too strong. The more precise phrasing: a fiber galvo system could in theory be controlled with paths described by G-code — but the classic G-code stream architecture isn't suited to meeting the required timing and speed requirements. The limit isn't in the G-code language, but in the stream communication model and the USB/PC-side latency.