eMCon — Application manual

Version: v1.0.0
By Nortec @ 2026

1. Overview

eMCon is a CNC control system for milling machines / routers, with a C++ GUI and Ethernet (UDP) communication with a controller based on a 32-bit 240 MHz microprocessor. It drives the X, Y and Z axes plus an A axis (gantry slave on dual-motor tables, or 4th rotary axis), the spindle (via VFD) and auxiliary outputs.

Part I — First commissioning

If this is the first time you set up the machine, follow these steps in order: each one depends on the previous.

2. Connectivity: physical layer first

  1. Power and cable. With the controller powered, connect the Ethernet cable. If you connect the PC directly to the controller (no router or switch), use a crossover cable: the controller does not auto-cross the pairs. Through a switch or router a normal cable is fine.
  2. Watch the RJ45 LEDs. Solid link LED = physical layer OK (cable and power fine). Blinking LED = traffic. No lights = do not continue: check the cable (crossover?), connectors and power before touching anything in the application.
  3. USB cable driver (Windows 7 only). Windows 10 and 11 recognise the controller on their own and need nothing installed. On Windows 7, with the USB cable plugged in, open the drivers folder that ships next to the program and run CH341SER.EXE → INSTALL button. When it finishes, a new port appears in Device Manager under Ports (COM & LPT), something like USB-SERIAL CH340 (COM5); the number does not matter, the program tries them all. If one or two yellow-marked entries called USB JTAG/serial debug unit stay under Other devices, that is normal and needs no fixing: they are the chip's debug side, which the program never uses. The same steps are written down in drivers\LEEME.txt.
  4. Set the PC IP on the same subnet. The controller ships at 192.168.157.112, port 2055. With that address, the PC needs a fixed IP 192.168.157.x other than that one (for example 192.168.157.2), with mask 255.255.255.0. How: Control Panel → Network and Internet → Network and Sharing Center → Change adapter settings; right-click the network connection the controller is on → Properties → select Internet Protocol Version 4 (TCP/IPv4) → Properties → Use the following IP address, and type the IP and the mask. Gateway and DNS can be left blank.
  5. Press Connect — even if you do not know the controller's IP. When the controller does not answer at the address it has, the program looks for it on the network by itself —no USB and no drivers needed, and it works the same on Windows 7 as on 10 or 11— and, if it finds one, asks whether you want to use that address. If nothing answers on the network, it offers to ask over the USB cable (that is where the driver from the first step is needed). It never changes the IP without asking, and it saves it as soon as it connects. In Settings → connectivity you only type IP and port and press Apply, which also warns you if that IP is not on the subnet of any PC adapter.
  6. If it still does not connect with the lights fine, it is almost always the PC IP (wrong subnet) or a firewall blocking UDP.

The rest of the board connections

This is the controller terminal map, with the board as it sits in its enclosure. Along the top are the outputs block and the spindle terminals; along the bottom, left to right, the power, the encoder, the inputs and the axes block. It is the same board across the whole family — eMCon, ePCon and eTCon — so you will see the odd terminal a milling machine does not use, such as the RS485. The drawing is of the eMCon V3.0 board: if yours is older the layout differs — check it before wiring.

Controller terminal map (eMCon V3.0 board) View of the controller board as it comes out at the edges of its enclosure. Along the top edge, left to right: the orange P2 terminal block for the RS485 link to the VD board, the green U7 output block with Out1 torch, Out2 THC, Out3 auxiliary and the 10V, PWM and ACM terminals for the VFD, the last one in black because it is their ground, and on the right the RJ45 network connector and the service USB. Along the bottom edge, left to right: the red P8 power block with Vout 5V, Gnd2 in black and Vin; the white P5 encoder block with A, B and Z; the blue P1 for Input1 and P3 for the emergency stop; the white P6 probe block with Gnd2, Vout and signal; the blue P4 for the limit switches, and the green U4 axes block with Xd, Xs, Gnd in black, Yd, Ys, Zd, Zs, Gnd in black, Ad and As. The black terminals are always the grounds. Controller connections what goes on each terminal, in the colours of the block eMCon V3.0 board B A P2 Out1 Out1 Out2 Out2 Out3 Out3 10V PWM ACM U7 5V Gnd2 Vin P8 A B Z P5 Input1 P1 E-Stop P3 Gnd2 Vout Signal P6 Limits P4 Xd Xs Gnd Yd Ys Zd Zs Gnd Ad As U4 RJ45 USB RS485 OUTPUTS Spindle Network USB Power Input1 Probe AXES (motors) Encoder E-Stop Limits The BLACK terminals are the grounds.

2.1 — How each terminal is wired

The drawing above says where each block is; this is what goes on it. Except for the emergency stop and the limit switches, every input and output is isolated from the controller electronics.

Three rules for all the wiring. Keep signal cables away from power cables and do not run them in the same conduit. Use shielded twisted pair where you can, with the screen grounded at one end only, never both. And bear in mind that on this machine the noise comes from the VFD: its cables to the spindle motor are the dirtiest thing in the cabinet, so route them as far from the signals as you can.

3. Calibrating the axes (steps/mm)

The theoretical steps per millimetre come from motor, driver and transmission, but the real check is done by measuring. The practical rule, axis by axis:

  1. Zero the axis with its DRO button and mark the physical position (or set up a dial indicator/ruler).
  2. From the MDI command a 100 mm move, e.g. G1 X100 F500.
  3. Measure the real displacement with a ruler or caliper; call it d.
  4. Correct: new steps/mm = current steps/mm × 100 / d. Apply the value in Settings → Axes.
  5. Repeat with 1000 mm (G1 X1000 F1000): the longer the travel, the smaller the measuring error weighs, and the tuning gets fine. Same formula with 1000 instead of 100.
Mind the units: these tests count in millimetres. If the app is set to inches, G1 X100 means 100 inches (about 2.5 m) and the axis will run into its limit switch. Calibrate with Settings in mm, or put the unit on the line: G21 G1 X100 F500.
Start with conservative speeds and accelerations; raise them once the mechanics are proven. If an axis loses steps in the test, lower acceleration before speed.

4. Testing the probe signal

The probe sets the tool height (the Probe Z button): a plate or sensor that closes contact when the tool tip touches it. Before trusting the automatic probing:

  1. With the machine stopped, watch the Probe LED in the Inputs group: at rest it must be off.
  2. Close the contact by hand (touch the plate with the tool or bridge the sensor): the LED must light up. If it works backwards, invert the polarity in Settings → Inputs.
  3. Dynamic test: jog the Z axis slowly down towards the plate and watch the LED at the moment of contact. Keep your hand on the button to stop: in this test nothing stops Z automatically.

5. Testing the E-Stop and limit switches (alarms and re-arming)

  1. E-Stop. With the machine stopped, press the mushroom button: the E-Stop LED must light and the outputs (spindle included) must switch off. With the E-Stop pressed the application blocks Run and jog.
  2. Limit switches. Press them by hand and check their LED. If any works backwards, invert its polarity in Settings → Inputs.
  3. How an alarm is re-armed. First remove the physical cause: release the E-Stop (turn to unlatch) or jog off the limit switch (jog IS allowed with a limit pressed, precisely to free it). Then press Reset. While the cause is still present, Reset does not clear the alarm.

6. Configuring the spindle (VFD)

How it is wired

The spindle is driven by one thing only: a 0 to 10 V voltage that leaves the controller and tells the drive how fast to turn. Three wires, and they go exactly where the drive potentiometer was.

Spindle wiring: the controller acts as the drive potentiometer Spindle wiring diagram. On the left the eMCon V2.0 controller U7 terminal block with its first three terminals: 10V, PWM and ACM. In the middle the variable frequency drive with its three potentiometer terminals: plus ten volts, VI and ACM. On the right the spindle, fed by the U, V and W phases from the drive. The Out1 output on the same block is not wired here. Spindle wiring (VFD) the controller acts as the drive potentiometer: three wires and nothing else M3 S12000 pwm = 5.00 V 12000 rpm M5 pwm = 0 V stopped with Max RPM = 24000 eMCon V2.0 CONTROLLER U7 terminal block (9 way) 10V PWM ACM Out1 not wired here DRIVE (VFD) potentiometer terminals +10V VI ACM U V W the potentiometer the drive came with SPINDLE three phases the reference comes from the drive the command: 0-10 V common ground power 1. The controller replaces the drive potentiometer. The +10 V comes from the drive itself and enters on the 10V terminal; the controller returns between 0 and 10 V on PWM, with ACM as common ground. The same three potentiometer wires. 2. The two signals always go together: M3 closes Out1 and raises the command; M5 opens it and drops it to 0 V. So do the Head button (F5) and the safety stops. Here Out1 is not wired, so the spindle obeys the command alone, and the drive must be left permanently enabled. 3. Spindle with no drive, just start and stop? Then the other way round: wire Out1 (same U7 block) to the motor contactor and forget the 0-10 V. The controller drives that output anyway; what you lose is the G-code S word, as the motor fixes the speed. 4. With this wiring M5 does not cut power: it only asks for zero RPM. The emergency stop must cut the drive supply or its enable input — never trust the command line to stop it. 5. Ground goes to ACM, the drive analogue ground: not to the digital input ground (DCM / COM) and not to earth. Mix them and the speed wanders. 6. On the drive, FREQUENCY source = analogue input (usually one parameter). Terminal names vary by model: +10V / VI / ACM are the common ones. 7. Max RPM in Settings → Spindle has to be the real RPM at 10 V. If it does not match, the G-code S word lies: you ask for S12000 and something else comes out. 8. Run the three wires screened and away from the U/V/W power leads: the drive is electrically noisy and it gets into the command.

The G-code S word sets the spindle RPM through the VFD. In Settings → Spindle:

  1. Max RPM: the spindle RPM at VFD full scale (command signal at 100%). Check the spindle nameplate or the VFD configuration.
  2. Spin-up (ms): the time the spindle takes to reach speed after an M3. Execution waits this long before cutting, so the material is not attacked with the spindle still accelerating.
  3. Check with the MDI: M3 S12000 should start the spindle at half speed (if Max RPM is 24000); M5 stops it.

If your spindle has no drive (plain start and stop), you need none of the above: wire the Out1 output (U7 block) to the motor contactor and forget the 0-10 V. The controller drives that output always, together with the speed command — M3 closes it and raises the voltage, M5 opens it and drops it to 0 V, and so do the Head (F5) button and the safety stops. The only thing you lose is the G-code S word: the motor fixes the speed, so M3 S12000 and M3 S6000 run the same.

7. Configuring the pendant keys

In Settings → Remotes, start by choosing the pendant type: XHC WHB02, numeric keypad or CNC remote. Choosing it does two things: the screen draws that pendant — every button appears where it actually sits on the device, inside its outline — and its factory map is loaded, ready to use.

The numeric keypad mirrors the on-screen jog panel and is used with Num Lock off:

Num LockRun/Pause (/)Spindle (*)←
A+ (7)Y+ (8)Z+ (9)J- (-)
X- (4)Step (5)X+ (6)J+ (+)
A- (1)Y- (2)Z- (3)Ok (Enter)
Go to zero (0)Stop (.)

J+ / J- change the jog speed, Step cycles the jog mode (continuous, x1, x10, x100) and Ok captures the point in Trace mode. While tracing, 0 undoes the last point instead of going to zero (point 14). A+ / A- only move the A axis when it is a rotary (not a gantry slave).

On the CNC remote (the «Mach3 CNC manual remote controller»): Start = Run/Pause, Spindle (SPINDLE ON/OFF) = spindle, F+ / F- = Feed Override ±5 %, J+ / J- = jog speed, Step = step mode, Origin = Go to zero, and Trace+ / Trace- (SPINDLE SPEED UP / SLOW DOWN) = capture / undo point in Trace mode. RE DO is not used. F+ and F- have no factory key: assign them once.

To go back to the factory map, choose another pendant type and then yours again.

To change an assignment, click that function's button and press the key or pendant button you want: it is captured. It makes no difference whether the pendant is a keyboard or an XHC unit; both arrive through the same path.

The pendant type and every assignment are saved: they belong to the machine, not to today's job.

A note on keyboards: the pendant is listened to globally, so the keyboard map deliberately avoids bare letters (a "T" for the head would fire while typing in the MDI). Use navigation, the numeric keypad and function keys. Escape cannot be assigned: it is always the software emergency stop.

Part II — Daily use

8. Preparing a job: work zero and dry run

Referencing here is manual: the Ref All Home of Mach3 does not exist. You find the zero by hand, on the part itself, with the jog. The limit switches protect the travel, they are no good for referencing: they all go in series into the same terminal, so the machine knows one has been hit but not which one.

9. Basic workflow

10. Main tabs

11. Main controls

Find corner: outside XY corner

Preparation: Probe Z first, then Find corner

Always run Probe Z before Find corner. Stop the spindle, check the Probe input and use the correct plate thickness to reference Z. Run Probe Z over a solid part of the plate, not over the hole.

XYZ touch plate with a corner hole and a cutter positioned above it

Example XYZ touch plate. After Probe Z, position the cutter approximately above the centre of the hole, clear of the plate and without contact.

With a tool sensor like the one illustrated:

In Settings > Probe, enter your sensor offsets and press Save settings. For the 10 mm X/Y and 5 mm Z model, enter X=10.00, Y=10.00, Z=5.00 mm. X/Y are the distances from the probed outside faces to the stock edges; Z is the height of the sensor top face above the stock. They are entered in the app's units (mm or inches); the example is in mm. Attach the clip to the metal shank of the cutter itself, as illustrated.

  1. Fit the sensor over the corner: its recessed underside rests on the top surface and the inner faces of its lower locating rim register against both stock edges. Do not simply place it on top, away from the edges. Secure it with its faces parallel to X and Y and connect the probing contact. The underside view illustrates this rim; it is a schematic, not a dimensioned drawing.
  2. Run Probe Z on the solid part of the plate, then raise the cutter clear before repositioning.
  3. Manually position the cutter axis approximately above the centre of the hole. Keep the tip above the sensor; do not insert it into the hole.
  4. Enter the effective cutter diameter in mm in D, not the hole diameter. For a 3 mm cutter enter 3.00. Check this value whenever you change cutters: the cycle compensates the radius, D/2.
  5. Check the heights and outward travel described below, then press Find corner.

The hole is only an initial positioning reference: this cycle probes outside faces; it does not centre a hole. Find corner adds radius D/2 and each axis offset to obtain the stock corner. For example, contact X=-11.5, D=3 and X offset=10 give X=0. Probe Z assigns Z=5 at contact with the top of a 5 mm sensor, so Z=0 corresponds to the stock surface. Do not apply these compensations again manually.

Without that sensor:

If offsets are not supplied as parameters, the macro uses zero (0 mm) for each missing value. An empty field also means 0 mm; 10/10/5 are this sensor's values, not automatic defaults. For direct XY probing enter X=0 and Y=0. For Probe Z with another plate, enter its thickness in Z; without a plate, Z=0.

  1. Run Probe Z first using a suitable plate, then remove the plate from the travel path.
  2. Position the cutter axis above the stock, approximately 5 mm inward from each edge of the lower-left corner: an initial position of (5 mm, 5 mm) relative to that corner. This does not mean entering X=5 and Y=5 in the controller's current coordinates.
  3. Enter the effective cutter diameter in D, check heights and clearance, then press Find corner. Direct probing requires working electrical contact on both stock faces; insulating stock requires a suitable conductive fixture.

Probe Z and Find corner are on the right below Spindle. They are independent: Probe Z measures height; Find corner measures only the X and Y faces of the lower-left outside corner of solid stock aligned with the axes. It does not search for unknown stock from machine zero.

With the spindle stopped and the Probe input checked, manually position the probe above the stock near the corner, without contact. Before moving XY, the macro raises Z by SAFE_Z above the height where you left the cutter. Keep all paths clear of clamps and check machine travel limits. Supervise the first physical test with emergency stop accessible.

Enter the cutter's effective diameter, in the app's units, in the D field beside Find corner. The app saves this value and the macro automatically compensates its radius. Configure these two mandatory heights in Settings > Probe, beside the offset illustration (initial values: SAFE_Z=10 mm, PROBE_Z=-5 mm); the macro will not move if either one is unset:

Heights use the controller's current coordinates, not distances from the surface. Probe Z does not automatically calculate them. Review both heights after changing Z zero. The displayed X/Y value, including a negative value, does not constrain the cycle: lateral travel is calculated from the starting position and each contact. PREP_DISTANCE is calculated automatically per axis as axis offset + cutter diameter D + 5 mm. Settings > Probe displays both results, updated when offsets or D change. With X=Y=10 and D=3, each outward distance is 18 mm. This is the outward travel from the starting point: it must exceed the distance to each edge plus tip radius and clearance. Adjust feeds, retraction and clearance for the probe and stock.

  1. Move to SAFE_Z, travel outward in Y−, then descend outside the stock to PROBE_Z.
  2. Probe in Y+ with a search touch and a fine touch, then retract.
  3. Raise to SAFE_Z, return to the initial Y and move outward in X− before descending to PROBE_Z.
  4. Probe in X+ with two touches, then retract.
  5. Raise to SAFE_Z and position above the measured corner with radius compensation and no diagonal moves.

No Z surface measurement or Z zeroing takes place. Every raise, outward move, retraction and positioning move is a G0 rapid; only the two touches on each face are probe moves. The fine touch travels the retraction distance plus the clearance margin so it cannot finish exactly at the sensor edge. If a touch reaches maximum travel without contact, the machine remains at the reached point and displays Retry and Cancel: Retry continues probing from that same point and Cancel ends the macro after raising Z to SAFE_Z. A probe remaining active after retraction also aborts the cycle. Inspect the position and cause before retrying.

On successful completion, the cutter reaches the measured corner at SAFE_Z and sets X=0 and Y=0 there. If you left the cutter at Z=5 with SAFE_Z=10, the DROs show X=0, Y=0 and Z=15. Z zero is unchanged. Cancellation or failed probing does not zero X/Y. This redefines the current origin; it does not create a separate work offset. Trace remains a separate digitizing operation.

12. Graphic view

13. MDI and Run from line

The MDI tab sends quick manual commands (machine stopped only): G0 / G1 with X, Y, Z coordinates and F for the feed. Coordinates and feed are in the Settings units; to force the other unit, write it on the line: G21 G0 X10 (mm) or G20 G0 X1 (inches).

Run from line: starts execution from a specific program line. Check the tool position before using it.

14. Trace mode (digitize)

Digitize a contour point by point on the graphic view (moving the machine by hand and capturing points with the pendant) and export it as DXF, to reuse real shapes. Only available while the machine is idle.

  1. Prepare the origin. Jog the tool to the corner you want to start from and set X and Y to zero with the DRO buttons. That point becomes vertex 0 of the trace.
  2. Enter the mode with the Trace button. The button blinks while you digitize.
  3. Capture the vertices. Move the tool to the next point of the contour and press the capture point key: a vertex is added with the DRO's X/Y, and the line is drawn on the graphic view as you go.
    Numeric keypadXHCCNC remote
    Capture pointEnter (Ok)YESTrace+
    Undo the last one0NOTrace-
  4. Finish by pressing the Trace button again. A dialog with three buttons appears:
After exporting, the shape stays on the graph so you can see it. The next press of the Trace button only erases it, and the one after that starts a new trace. If you leave without capturing any vertex, it asks nothing and the graph is left clean.

The DXF is written as an AutoCAD R12 POLYLINE, the format that Vectric Aspire/VCarve and the other usual CAM programs import without trouble. Coordinates are in millimetres and the R12 format does not store the unit: when your CAM asks on import, choose mm (choosing inches makes the part 25.4 times larger).

15. Keyboard navigation

16. FAQ

17. Safety recommendations

18. Saving the configuration (and how to recover it)

19. Updating the controller firmware

The board firmware can be updated over the network, with nothing to dismantle and no USB cable. In Settings → Connectivity you have the controller serial number, the firmware version currently running and the Update firmware button: pick the file and in about ten seconds the board restarts on the new version. The application accepts .bin images and encrypted .epk packages.

Boards with plain OTA closed only accept an .epk prepared for their serial number and signed with the original manufacturer key. A normal .bin is rejected; do not generate a new key.

Each controller also has its own identity, generated inside the board the first time it boots and never leaving it. It lets the manufacturer prepare updates that are encrypted and signed for that specific machine: such a package cannot be opened on another board, and the board will not accept firmware without the manufacturer's seal.

From version 1.4.0 on, when connecting, the application checks that the board is a genuine eMCon controller: the board shows its factory certificate and signs a random question with its identity. If it fails, the application lets you look at it (position, settings, firmware update) but will not machine or move the machine.

The identity lives in its own area of the board's memory. Erasing the settings does not touch it; erasing the whole memory over USB does: the controller then loses its identity and must be registered again with the manufacturer. There is no other way to recover it.

20. Quick diagnostics

21. Final note

This manual is an operating guide. Before machining a real part, always verify toolpath, references, tool and safety conditions.