Skip to content

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 M03 and S on 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, then M5 to 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

  1. Clear the alarm: type $X in the console
  2. Jog Z down so the carriage is away from the limit switch
  3. Lower the bit in the collet, or reduce safe height in CAM settings
  4. 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.18 instead of G92 Z12.18 to 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:

  1. Clear all G92 offsets: G92.1
  2. Confirm G92 is clear: $# ← G92 line should show 0.000, 0.000, 0.000
  3. Place touch plate flat on the copper board surface
  4. Attach alligator clip to the bit
  5. Click the Probe button in Candle — wait for touch and retract
  6. Remove touch plate and clip
  7. Verify by jogging Z down slowly until bit just touches copper: Z DRO should read close to 0.000 at contact
  8. Reload G-code file: File > Open
  9. 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.000 after running G92.1
  • PRB — last probe result; the :1 at 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.1 and 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

  1. Load your G-code file first (defines the probe area)
  2. Open the Heightmap panel in Candle
  3. Check Use Height Map, click Create
  4. Click Auto to fit grid to job area
  5. Set rows/columns: divide job width and height by 10, round to nearest whole number
  6. Click Probe — spindle will not run during this process
  7. 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.1 run to clear old probe offsets
  • $# checked — G92 X, Y, Z all 0.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.000 when 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.