Genmitsu CNC — Candle Session Notes¶
I worked quite a bit with claude this weekend. It all blurred together, so I asked claude to make a summary for me of all that we talked about over the last two days. I have inserted some notes (NOTE:) here and there where I fond other information outside of claude.
PCB Isolation Milling Session
1. G-code % Error on Load¶
When loading a Mods-generated G-code file, Candle threw:
Error: 1: % < error:1
The % character at the start (and sometimes end) of the file is a program delimiter used by some CAM software. GRBL does not recognize it and throws error:1 (unsupported command).
Fix¶
- Open the G-code file in a text editor (Notepad, VS Code)
- Delete line 1 if it contains only a
%character - Check the very last line — delete if it is also a lone
% - Save and reload in Candle
Note: I also found that i could just delete the % in candle before i hit send
⚠️ Clicking Ignorieren (Ignore) is safe if you just want to proceed — the
%line is not a cutting command.
2. Spindle Not Spinning¶
The machine ran toolpaths but the spindle did not rotate. GRBL settings were checked first.
NOTE: This was all wrong.. the reason it wasnt spinning is becuase the red power lead had become disconnected
GRBL Settings Verified¶
$30 = 10000— max spindle speed correct$31 = 0— min spindle speed correct$32 = 0— laser mode OFF (not the cause)
Root Cause — M03 Position in G-code¶
The original G-code header had S and M03 separated by a move:
S11000
G00Z3.0000
M03
M03 was issued after a Z move, and some GRBL versions do not trigger the spindle reliably in this sequence.
Fix — Corrected G-code Header¶
Note: again not correct
M03 S11000
G04 P3
G00Z3.0000
- Combine
M03andSon the same line - Add
G04 P3— a 3-second dwell to let the spindle reach speed before any movement
⚠️ Always test the spindle manually in Candle console with
M3 S10000, thenM5to stop.
3. Z Limit Switch Alarm — [MSG:Check Limits]¶
The console spammed [MSG:Check Limits] repeatedly, and the machine entered an alarm state. The status line confirmed the Z limit switch was active:
Alarm|MPos:-10.463,22.650,-15.474|Bf:35,254|FS:0,0|Pn:Z>
Causes¶
- Bit was mounted too high in the collet
NOTE HERE: later in the weekend, I found that the mounting needed to be as high as possible to prevent runout.. so this is a difficult balancing act!
- When the job tried to rapid to Z20, the Z carriage hit the top limit switch
- Loose or intermittent limit switch wiring can also cause false triggers
Fix¶
- Clear the alarm: type
$Xin the console - Jog Z down so the carriage is away from the limit switch
- Lower the bit in the collet, or reduce safe height in CAM settings
- Re-home:
$H
⚠️ Before every job, manually jog Z up to 20mm above work zero to confirm no limit switch contact before sending.
4. G92 Offset — What It Is and Why It Causes Problems¶
What G92 Does¶
G92 applies a temporary coordinate shift on top of your G54 work offset. The machine's actual position is calculated as G54 + G92 combined. Unlike G54 (saved to EEPROM), G92 is volatile and can persist unexpectedly across operations.
How G92 Got Set¶
The probe command in Candle Settings contained:
G90G21G38.2Z-50F100 G92 Z12.18 G0Z13
Every time the probe runs, it creates a G92 offset. If a previous G92 is still active when you probe again, the new one stacks on top, causing the machine to think the surface is in the wrong location.
The Danger¶
A stacked G92 caused a plunge — the bit drove into the copper board because the combined offsets put Z zero in the wrong place.
Fix — Always Clear G92 Before Probing¶
G92.1
Run this in the console before every probe cycle. It clears all G92 offsets.
Better Long-Term Fix — Update the Probe Command¶
In Candle Settings > Control > Probe commands, add G92.1 at the start:
G92.1 G90G21G38.2Z-50F100 G92 Z12.18 G0Z13
✅ Even better: switch to
G10L20P1Z12.18instead ofG92 Z12.18to save the offset directly to G54 instead of creating a volatile G92.
5. Z Probing Workflow — Clean Procedure¶
After multiple probe issues during this session, this is the reliable sequence:
- Clear all G92 offsets:
G92.1 - Confirm G92 is clear:
$# ← G92 line should show 0.000, 0.000, 0.000 - Place touch plate flat on the copper board surface
- Attach alligator clip to the bit
- Click the Probe button in Candle — wait for touch and retract
- Remove touch plate and clip
- Verify by jogging Z down slowly until bit just touches copper:
Z DRO should read close to 0.000 at contact - Reload G-code file: File > Open
- Hit Send
Note: I stopped using the probe and started doing a height map as soon as I had a modified Probe. For a PCB, this really was a must. For wood, probably would just use my probe, especially since its not metal. My probes height is 12.18 - have to measure with a caliper.
Touch Plate Settings¶
- Touch plate thickness: 12.18mm
- Configured in Candle Settings > Control > Probe commands
- The probe command lifts to Z13 after probing (1mm clearance above plate)
6. Verifying Z Zero with $¶
After probing, run $# in the console to verify coordinates. A healthy result looks like:
[G54:23.114,27.940,-41.256]
[G92:0.000,0.000,0.000]
[PRB:23.663,28.499,-29.178:1]
What to Check¶
- G54 Z — your saved work offset, should be stable
- G92 X, Y, Z — all should be
0.000after runningG92.1 - PRB — last probe result; the
:1at the end means probe was successful
⚠️ If G92 Z is around -12.18 it means the probe used G92 to set the offset (normal for current probe command). If G92 Z is much larger or doubled, there was a stacking issue — clear with
G92.1and re-probe.
7. Air Cut Procedure¶
An air cut runs the full job with the spindle on but Z zero set in the air — the bit never touches material. Used to verify toolpath before committing to a real cut.
How to Run an Air Cut¶
- After homing, jog to XY origin
- Zero Z in the air at a safe height above the material
- Load and send the G-code normally
- Observe the path in the Candle visualizer
Candle Visualizer¶
The 3D preview window shows toolpaths as colored lines: - Red lines — cutting moves (G01/G02/G03) where the bit is engaged - Black lines — rapid moves (G00) where the bit travels in air
Rotate with left-click drag, zoom with scroll wheel, pan with right-click drag. For an air cut, confirm all red lines appear above the grid/bed in the side view.
Job Info Panel¶
The small info box shows job extents:
X: 0.000 ... 36.791
Y: 0.000 ... 12.248
Z: -0.071 ... 20.000
- Z min (-0.071) = maximum cut depth — should match your G-code
- Z max (20.000) = rapid height — confirm the bit has 20mm+ clearance above zero
8. Height Mapping for PCB Milling¶
Height mapping probes a grid of Z heights across the board surface and compensates for warp during cutting. Essential for PCB isolation milling where cut depth is only 0.071mm.
Modified Probe Setup for Height Mapping¶
The standard touch plate must be modified. Disassemble the touch pad and attach a second alligator clip directly to the exposed wire. Then: - Clip 1 — attach to the milling bit - Clip 2 — attach to the copper board or a conductive clamp
⚠️ The copper board surface must be electrically conductive for height mapping to work.
Running the Height Map in Candle¶
- Load your G-code file first (defines the probe area)
- Open the Heightmap panel in Candle
- Check Use Height Map, click Create
- Click Auto to fit grid to job area
- Set rows/columns: divide job width and height by 10, round to nearest whole number
- Click Probe — spindle will not run during this process
- Click Edit when complete, then Send to run the job
Reference: SainSmart Height Mapping Guide
9. GRBL Settings Reference¶
Full $$ dump — Genmitsu PROVer 3018, GRBL ARM32 V2.2:
| Setting | Value | Description |
|---|---|---|
$0 |
10 | Step pulse (usec) |
$1 |
25 | Step idle delay (msec) |
$5 |
1 | Limit pin invert |
$6 |
1 | Probe pin invert |
$21 |
1 | Hard limits enabled |
$22 |
1 | Homing cycle enabled |
$23 |
3 | Homing dir invert mask |
$24 |
100.000 | Homing feed (mm/min) |
$25 |
500.000 | Homing seek (mm/min) |
$27 |
2.000 | Homing pull-off (mm) |
$30 |
10000 | Max spindle speed (RPM) |
$31 |
0 | Min spindle speed (RPM) |
$32 |
0 | Laser mode — OFF |
$100/$101/$102 |
800.000 | Steps/mm X/Y/Z |
$110/$111 |
2000.000 | X/Y max rate (mm/min) |
$112 |
2000.000 | Z max rate (mm/min) |
$120/$121/$122 |
50.000 | X/Y/Z acceleration (mm/s²) |
$130 |
300.000 | X max travel (mm) |
$131 |
200.000 | Y max travel (mm) |
$132 |
80.000 | Z max travel (mm) |
10. Quick Reference — Console Commands¶
| Command | What it does |
|---|---|
$X |
Clear alarm / unlock machine |
$H |
Run homing cycle |
$$ |
Show all GRBL settings |
$# |
Show work coordinates (G54, G92, PRB) |
G92.1 |
Clear all G92 offsets |
G10L20P1Z0 |
Set G54 Z zero at current bit position |
M3 S10000 |
Turn spindle on at 10000 RPM |
M5 |
Turn spindle off |
G04 P3 |
Dwell/pause for 3 seconds |
$32=0 |
Disable laser mode |
$21=0 |
Disable hard limits (temporary workaround) |
$21=1 |
Re-enable hard limits |
11. Pre-Cut Checklist¶
-
G92.1run to clear old probe offsets -
$#checked — G92 X, Y, Z all0.000 - Touch plate on copper board, clip on bit
- Probe run successfully — PRB shows
:1 - Touch plate and clip removed
- Z DRO reads near
0.000when bit touches copper - Bit has 20mm+ clearance before rapids trigger Z limit
- G-code file reloaded fresh (File > Open)
- Spindle switch physically ON
- Air cut completed and toolpath verified
- Send!
Session completed successfully — PCB isolation milling job ran to completion.