Hi, I'm Anthony.

Taig CNC mill-to-lathe conversion, plus some electronics upgrades

September 5, 2025

We recently acquired a used Taig MicroMill 2019DSLS CNC mill, in great condition and just 8 years old. Even though there’s already a fancier CNC mill in our workshop, we were sorely missing a small metalworking lathe for a few projects, and found it hard to resist such a good deal. Let’s turn this thing into a CNC lathe!

Taig MicroMill 2019DSLS CNC mill, product photo

(Forgot to take “before” pictures. Here’s the official product photo instead.)

See the last section below for design files and a bill of materials.

Aside: Taig mill and lathe model numbers

Since I haven’t seen this explained online, this is what the “2019DSLS” in the model name actually means for a Taig mill:

The mill-to-lathe conversion essentially turns the mill into something equivalent to the TaigTurn 3019DSLS. Here’s what the “3019DSLS” in the model name actually means for a TaigTurn lathe:

Mill to lathe conversion

Adding the lathe headstock, tool holders, and drive system is relatively simple - Taig actually just sells a quite reasonably-priced package for this, the 4100ER mill-to-lathe conversion kit.

You could even skip the 300-00ER lathe spindle, since the mill’s existing 200-00ER spindle is usable for this purpose, as well as the 1040ER ER16 collet set, since you probably already have these from the mill anyways. It’s possible to skip the 1021WIRED 1/4hp motor and reuse the mill’s existing spindle motor too, but this is more involved because you’d have to make a custom motor mount.

Although there weren’t any instructions included, it’s not difficult to figure out how all the pieces fit together from the product photos online. An hour or two of assembling and re-assembling, and we’ve got the mechanical components set up and working.

For the motors, we’ll reuse the X-axis and Z-axis motors from the mill. There ends up being an unused Y-axis motor attached to the cable harness, but we’ll just put it somewhere out of the way. For the breakout board/motor driver, we’re reusing the Taig mill controller box and the CNCdrive UC100 motion controller that were both bundled with the mill.

Lathe fully assembled Top view of fully assembled lathe Front side view of fully assembled lathe Axis view of fully assembled lathe

For the software, we’re using Artsoft’s Mach3Turn on the same Windows machine that we use for CAM, connected to the UC100 via USB. Because the UC100 handles all of the real-time tasks, we don’t need to worry about the OS latency or real-time capabilities on this machine. The standard Mach3Turn setup works fine here, with the only special configuration needed being the input signals for the DSLS closed-loop steppers (more on this topic below):

Mach3Turn manual mode screen

(Excuse the low-quality photos - we can’t use screenshots from this machine due to the airgapped setup)

Spindle indexing sensor

A spindle indexing sensor is crucial for thread cutting operations, which is one of the big reasons we needed a lathe in the first place. Each pass of the thread cutting operation has to cut deeper in the exact same groove as the previous pass, which means that the controller needs to know the angle of the spindle when starting the cut.

First, we obtained Taig’s official spindle indexing sensor, the “Digital Indexing Signal Processor” (DISP). We don’t have the manual or any official documentation about it, and we don’t want to damage the DISP or the controller box by just trying to plug them together, so the best place to start would be to take everything apart to see how it all works.

The DISP is a small metal box with a purple sensor head on one side, and on the other side, a wire that has an DIN-45326 (type 8A) plug (also known as the “DIN-8 270-degree connector”) on the end, designed to plug into the back of the TaigTurn controller box:

DISP front DISP sensor

Note that there are many circular connectors that are called “8-pin DIN”, but only DIN-45326 (type 8A) looks like a pin slightly offset from the middle, with a circle of 7 pins around the middle and a gap in the circle at the connector’s keyway. When looking for DIN plugs or receptacles, always check the photo to make sure it matches. The MSX wiki’s page about these connectors is a great reference:

DIN45326 connector reference

The spindle pulley has a steel insert that looks like it’s designed to trigger the sensor:

Steel insert on the spindle pulley

The sensor’s tip is opaque and the spindle pulley’s steel insert isn’t magnetized, so the sensor couldn’t be an optical or hall-effect type, making it very likely to be an inductive sensor. Our guess is that the inductive sensor’s spacing is adjusted so that the steel insert triggers the sensor, but the aluminum pulley doesn’t (aluminum is harder than steel for inductive sensors to detect).

Understanding how the DISP works

Taking apart the DISP, it has an inductive sensor with three wires, blue/brown/black, which for this type of sensor almost always means ground/power/sensor-output, respectively. On the other side is the DIN-45326 (type 8A) plug, where there are three wires, white/blue/black, connected to three of the eight pins of the connector:

DISP inductive sensor, with its blue/brown/black wires showing DISP three wires connected to three DIN connector pins DISP wire colors mapped to DIN connector pins

Taking apart the sensor cable, we’ve figured out that the sensor’s blue/brown/black wires map to blue/white/black wires at the connector, respectively.:

DISP sensor wires where they connect to the three wires of the DISP's cable

We can now try using the DISP in our own circuit. After crimping on some pin headers and testing at various voltages and circuit configurations, we figured out that it’s definitely an inductive sensor, with a 4V minimum operating voltage (uncommon, usually it’s 10V minimum), a 6mm sensing distance (somewhat uncommon, usually it’s 2mm-4mm for these 12mm sensors), and the output is NPN open-collector (very common, almost all sensors use this):

Testing the DISP in a circuit DISP detecting a metal object, which lights up an LED in the test circuit

We couldn’t measure the maximum operating voltage since we didn’t want to break it, but it’s likely this sensor is designed to be powered from 5V. The response frequency was at least 500Hz, which matches most other inductive sensors on the market, though it’s possible that the maximum response frequency is higher.

Understanding how the Taig mill controller box works

We don’t have a TaigTurn controller box, but we do have a Taig mill controller box, and this box has an I/O port in the form of a DIN-45326 (type 8A) receptacle, shown with a corresponding DIN-45326 (type 8A) plug for reference:

DIN-45326 (type 8A) plug Back of the Taig mill controller

Could we just plug the DISP into the TaigTurn controller box? To answer this, I obtained the pinout of the I/O port from a forum post on IndustryArena, combined with the pin mapping from my other Taig mill’s user manual:

Pinout diagram of the Taig mill controller box's I/O port Better quality version of the above diagram that also includes the parallel port pinouts, but doesn't have the connector-side mirrored version of the diagram

We then took apart the controller and used the pinout diagram to start figuring out what each pin is connected to:

Top of the DSLS board inside the controller Bottom of the DSLS board inside the controller

Looking at the traces coming out of the I/O port connector, we found that all of them except GND were connected to a strange-looking component labelled “10X-1-102LF”:

Resistor network component that connects to all of the I/O port pins

This seems to be a Bourns 4610X-101-102LF resistor network, which according to the datasheet, connects pin 1 to each of the other pins by a 1kOhm resistor:

Screenshot from datasheet showing the internal layout of the resistor network

Pin 1 of this resistor network is connected to the output of an ST LM7805CV 5V 200mA linear regulator, and pins 2 though 8 are connected to the 7 non-GND pins of the I/O port.

Each of the I/O port pins were also directly connected to specific pins on the parallel port:

The I/O port pins on the board connector, labelled with which pin of the parallel port they're connected to

Additionally, the Xin/Yin/Zin/Ain pins were each connected to one of the four “DSLS V2.1” DIP components. Peeling back the label on one of those components reveals that it’s a PIC18F microcontroller:

PIC18F microcontroller that implements the DSLS controller

Each microcontroller is likely a DSLS processor for one axis, continuously checking that the motor encoder results match the commanded motor movements, and pulling an “error output” pin low when a discrepency is detected. The pins that Xin/Yin/Zin/Ain were connected to on each “DSLS V2.1” component is likely to be that “error output” pin.

Summarizing our findings, we can now describe each pin of the I/O port:

From this pinout diagram, if we plugged the DISP directly into the I/O port, white/brown (power) on the DISP would go to EMO (parallel port pin 10) on the controller’s I/O port, blue (ground) would go to GND, and black (sensor output) would go to Ain (parallel port pin 15). Blue is supposed to be GND, and Ain would indeed be a suitable pin to use with for the sensor output, especially since CNC lathes almost never have an A axis to occupy these pins for other purposes. However, powering the sensor from EMO’s 5V pullup wouldn’t work reliably under all temperature and EMI conditions, because even at 1mA DISP supply current, the pullup would drop the voltage by 1V, barely reaching the minimum operating voltage. To make this work, the TaigTurn controller must have some sort of 5V power supply pin where this controller has its EMO pin.

Later, we managed to borrow a 2024-era Taig mill controller box for comparison purposes. Here’s what it looks like inside:

Inside of the 2024-era Taig mill controller box

As it turns out, this controller has exactly the difference we expected to see in the TaigTurn controller, a 5V power supply pin where the older controller has its EMO pin! Perhaps the TaigTurn controller is exactly the same product? It would make sense from a design perspective since they’re meant to perform the exact same kinds of motor control tasks.

That means above pinout diagram is inaccurate for newer Taig mill controllers - although EMO is still an input pin tied to pin 10 of the parallel port, it’s tied to 5V directly through a wire jumper instead of through a ~1kOhm pullup (trace highlighted with a red line):

Top of the DSLS board on the 2024-era Taig mill controller box, with the trace connecting the EMO pin to 5V highlighted with a red line Bottom of the DSLS board on the 2024-era Taig mill controller box

The wire jumper is likely meant to be cut if you want the I/O port to have the same behaviour as the ones on older Taig controller boxes, like the one I have. If you had a newer Taig mill controller box (internally labelled DSLS v3.0 or later), you could just plug in the DISP and it would work, as long as you didn’t need to access any other pins on the I/O port! Likewise, we could easily modify our older Taig controller box to work with the DISP in the same way, by bodging a wire between the EMO pin and the 5V output of the regulator.

Using a custom spindle indexing sensor

Although we’ve managed to make the DISP work with the controller box, it still has two problems if we want to actually use it with our current setup. First, it takes up the entire I/O port of the Taig mill controller box, leaving no pins free for limit switches, coolant control, etc. This means we’ll need to make a special DIN-45326 (type 8A) cable that breaks out the other pins for limit switches.

The other issue with the particular DISP we have is that this one is designed to be mounted on the variable-speed spindle motor TaigTurn lathe, where the DISP is mounted on the motor rail and points to an aluminum disk attached to the end of the spindle pulley:

TaigTurn variable-speed spindle motor variant, official product photo

While the regular fixed-speed spindle motor TaigTurn uses a totally different mounting design, where the DISP is mounted on an arm attached to the spindle, and points to the flat end of the spindle pulley:

TaigTurn fixed-speed spindle motor variant, official product photo

To solve this, we could purchase the second variant’s mounting hardware, or purchase the first variant’s spindle pulley (or perhaps the aluminum disk is a separate part that just mounts to the same shaft as the spindle pulley?). However, at this point we didn’t feel like reassembling the DISP unit again, and figured it was probably more fun to make something custom, especially now that we understand how the DISP works.

To summarize what we’ve learned so far, the DISP is an inductive sensor that generates a single active-low pulse on each revolution of the spindle (since the steel insert would pass by the sensor once per revolution). This pulse is then passed directly to the controller, which can then use that information to synchronize axis motions with the position of the spindle.

We’ll first design and 3D print a mounting bracket for a standard 12mm diameter inductive sensor that holds it right in front of the steel insert on the spindle pulley:

3D-printable mount for lathe indexing sensor

It took a few tries to get the measurements exact, but finally the mounting bracket secures to the T-slots at the top of the spindle via #10-24 5/8” bolts and standard #10-24 nuts, and holds the inductive sensor right up against the spindle pulley’s steel insert. Pulley ratio changes are still straightforward with this bracket in place, since it doesn’t block access to the drive belt:

Installing the 3D printable mount

For the inductive sensor, we’ll use a GTRIC LR12-02N1, which has an NPN-open-collector normally-open output, a 10V-30V operating voltage, a 2mm sensing distance, and a 500Hz response frequency:

LR12-02N1 inductive sensor

At 500Hz and a 50% duty cycle (the usual assumption for response frequency specifications), the sensor can support a minimum on-time and off-time of 1ms. The max lathe speed is 1800rpm, going by the TaigTurn product page, so 30 revolutions per second. If the steel insert triggers the sensor for around 10% of each revolution, that corresponds to an on-time of 3.3ms at max speed. The response frequency of this sensor should be more than enough to sense every revolution, even at max speed.

The sensor should be adjusted so there is around 1mm of space between the sensor and the spindle pulley, and then the bolts can be tightened:

Adjusting the spacing of spindle indexing sensor

Limit switches, motors, and other electronics setup

We’ll install the 3D printed limit switch mounts that we made for the Taig mill (a topic for a future post), except we’ll only need the X-axis and Y-axis ones (since the Y-axis on the mill becomes the Z-axis on the lathe in the mill-to-lathe conversion):

Front X-axis limit switch installed Back X-axis limit switch installed Y-axis limit switches installed

Now we can connect the limit switches and spindle index sensor to the I/O port of the Taig mill controller box (and an external 12V power adapter) as follows:

Schematic showing how all the sensors are connected and powered

To power the limit switches and spindle index sensor, we’ll use a 12V 2A power adapter with a 5.5mm OD/2.1mm ID barrel jack plug. It comes with a matching barrel jack receptacle that connects to a 2-pin screw terminal, perfect for point-to-point wiring.

To connect the wiring to the I/O port of the Taig mill controller, we’ll cut a DIN-45326 (type 8A) cable in half, and solder the 8 lines to their own pins on an 8-pin screw terminal, labelled according to the pinout diagram above:

Cable with DIN-45326 (type 8A) connector on one end and an 8-pin screw terminal on the other

Now we can wire everything up according to the schematic. We crimped ferrules onto all of the wire ends, then joined everything using Wago terminal blocks:

Wiring for all of the controller I/O, including limit switches, indexing sensor, and power supply, top view Wiring for all of the controller I/O, including limit switches, indexing sensor, and power supply, bottom view

It looks a bit messy, but this approach is reliable and easy to modify/repair! While ferrules aren’t strictly needed with Wago terminal blocks, they provide some extra strain relief, and make the wiring easier to inspect.

Software Setup

In Mach3Turn, the limit switches/homing switches and spindle index sensor pins should be configured as active-low inputs under “Config > Ports & Pins > Input Signals” (these should be the only input signals enabled):

Mach3Turn input signals setup, page 1 Mach3Turn input signals setup, page 2

The motor outputs should be set up according to the defaults, here they are for posterity:

Mach3Turn motor outputs setup

To make spindle indexing work properly, we also need to check “Use Spindle Feedback in Sync Modes” under “Config > Ports & Pins > Spindle Setup”, which (from my current understanding) causes the UC100 to delay the execution of each G-code operation until the next spindle index sensor pulse comes in. That means each operation starts at the same relative position of the spindle, allowing each threading pass to cut into the same groove:

Mach3Turn spindle setup

We also find that results are slightly better with the “Spindle Speed Averaging” setting enabled (which smooths out small variations in spindle speed over time), but that’s likely because of some of the limitations of the spindle indexing sensor, which we’ll talk about below.

One limitation of the UC100 is that you can only use one at a time with one computer. However, we have two UC100s and one computer, one for the mill and one for the lathe. For security reasons, all control-related computers are airgapped, so adding another computer would make the setup a lot more complicated due to how our data diodes are configured. Instead, we’ll use a bidirectional USB switcher to select between the two UC100s with a button (shown next to the spindle on/off switch):

USB switcher to select between two UC100s, to the right of the spindle on/off switch

Limitations and future work

This is a quick-and-dirty way of getting some essential functionality working so we could start making parts. It would be pretty simple to turn this into a PCB with a nice enclosure and panel-mount connectors, but if you’re running a lathe like this one, you’d probably prefer to make this sort of thing yourself.

One limitation with our current spindle indexing setup is that the inductive sensor only outputs one pulse per revolution, so less than 100Hz compared to the multi-kHz control loops inside the controller. This means the controller takes dozens of milliseconds to detect that the spindle speed has changed and modify the Z-axis feed rate to match, resulting in localized inaccuracies in the thread.

This is perfectly acceptable for our purposes, since the spindle speed should not be changing much anyways while making lighter cuts, but we could improve this by replacing the indexing sensor with a high-resolution spindle encoder, which would give thousands of pulses per revolution instead of just one. The controller could then start responding within dozens of microseconds rather than dozens of milliseconds. Mach3 doesn’t support spindle encoders that output more than one pulse per revolution, so if we did this upgrade, we’d also need to switch to something that does (UCCNC, Mach4, LinuxCNC).

The other limitation is specific to using Mach3 together with the UC100. The Mach3 plugin architecture only allows the UC100’s Mach3 plugin to synchronize the threading operation with the spindle position at the very beginning of the threading operation, with no ability to adjust the Z-axis feed rate while the threading operation is in progress. This means that if the spindle speed changes halfway through a cut, the Z-axis feed rate won’t change at all, giving the thread an inconsistent pitch.

This generally isn’t a problem, for the same reason as for the first limitation, but the solution for this would also involve switching away from Mach3Turn. According to the CNCDrive development team, the UC100 Mach4 plugin doesn’t support threading, so Mach4 is out. In this post on the official CNCDrive forums, CNCDrive recommends using their software, UCCNC, instead. LinuxCNC should also support this with its Spindle Synchronized Motion functionality. From what we can tell, most people seem to end up using UCCNC with this kind of setup.

Another way to improve both of these would be to use a closed-loop spindle motor, such as one of the spindle motor upgrade kits offered by GlockCNC - if the spindle speed doesn’t change, then the Z-axis feed rate doesn’t need to change either. You’d still need the one-pulse-per-revolution sensor to keep track of the spindle’s position, but you can otherwise assume that the spindle speed stays constant. This isn’t as good as a proper spindle encoder, since the bandwidth of the motor’s speed control loop will almost certainly be a lot lower than that of a controller’s Z-axis feed rate control loop, but would likely still get pretty good accuracy.

We originally wanted to make the spindle indexing sensor mount out of aluminum at some point, but now it’s hard to justify when the 3D-printed version has been working so well. The easiest way would probably be to drill out the sensor hole and mounting holes in a strip of 4mm thick aluminum, and then use a press brake to bend it into a similar question-mark-shape.

And now, a picture of the final setup. Overall, very happy with how this lathe conversion turned out:

Completed Taig lathe conversion, overhead view

Downloads

Shopping list (besides the used Taig MicroMill 2019DSLS CNC mill):

Questions or comments? Drop me a line at me@anthonyz.ca.
Creative Commons License This work by Anthony Zhang is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Copyright 2013-2025 Anthony Zhang.