An EMCO 220P lathe retrofitted with a Masso G3 controller cuts straight threads with G32. It has no dedicated canned cycles for tapered, face, or radius threads, and no start-angle entry for multi-start threads. You can produce tapered threads and multi-start threads now by programming each pass as its own G32 block. The decision checks below confirm what the control does inside a G32 block, then give the pass program and the measurements that prove the thread.
Spindle-index synchronization in a G32 threading block
A G32 block is a single-point threading move. The control waits for the spindle encoder index pulse, which is the once-per-revolution reference mark, and then feeds the axis at a rate locked to spindle position. The lead is the axial advance per spindle revolution, and it is programmed as F. The pitch is the axial distance between adjacent thread crests. For a single-start thread, lead equals pitch. For an n-start thread, lead = n × pitch.
Every pass starts on the same index pulse. If every pass also starts from the same Z position, the tool lands in the same groove. This is the property every workaround relies on:
- Change the X/Z endpoints of the block and you get a taper.
- Change the Z start and you move the groove to a different angular position, which gives a multi-start thread.
Canned cycles on controls such as Okuma only automate this arithmetic. The motion underneath is the same.
Check 1: X-axis motion inside a G32 block
Reading to take: with no part in the chuck, run G32 X<end> Z<end> F<lead>. Use an X end that differs from the X start by a visible amount, for example 2 mm on diameter.
- Both axes arrive at the endpoint together in one synchronized move: the control interpolates X with Z during threading. Go to Check 2.
-
The control rejects the X word, or moves X separately: it cannot cut a tapered thread with
G32. Check the Masso G-code documentation for a different synchronized-threading command before continuing.
Confirm whether X is in diameter mode or radius mode:
- In diameter mode, the X change equals the change in diameter, ΔD.
- In radius mode, the X change is ΔD / 2.
For a taper with ratio T on diameter over length L: ΔD = T × L.
On a taper, some controls apply F along Z and others apply it along the tool path. The two differ by a factor of cos(θ), where θ is the half-angle of the taper. On shallow tapers the difference is negligible. On steep tapers, measure the lead (Check 5) to find out which convention the control uses.
Check 2: Groove registration and lead-in distance
Reading to take: take two passes at the same X depth on scrap and look at the groove.
- One clean groove: index synchronization is working. Go to Check 3.
- A doubled or widened groove: the axis is still accelerating when the thread starts, or the spindle speed changed between passes.
The Z axis must reach threading speed before the tool meets material. Work out the minimum lead-in as follows:
- Calculate the threading speed: v = S × L / 60. S is spindle speed in rpm, L is lead in mm, and v is in mm/s.
- Read the Z-axis acceleration, a, from the axis configuration in the Masso setup.
- Calculate the acceleration distance: d = v² / (2a).
- Start the pass at least d plus a margin ahead of the part face.
Rules for every threading pass:
- Program
G97, which gives constant rpm. - Never use constant surface speed (
G96) while threading. It changes rpm with X, and each rpm change shifts the acceleration lag and the groove position. - On a taper, extend the taper line through the lead-in air gap. Calculate the X at the actual Z start. Do not use the X at the part face, or the first thread turn is cut to the wrong depth.
Check 3: Start-angle word versus Z-shift indexing
Reading to take: check whether the Masso G32 documentation defines an address for spindle start angle.
- It does: program each start at 360° / n and keep Z the same for all starts.
- It does not: use Z-shift indexing. This needs no control support.
Z-shift indexing works like this:
- Program
F= lead = n × P, where P is the pitch. - Start thread k (for k = 0 to n−1) at Zstart + k × P.
A Z shift of one pitch at a fixed index pulse is geometrically identical to an angular shift of 360° / n. Shift the start away from the part so the lead-in only gets longer.
Cut all starts at each depth before taking the next depth. Finishing one start completely before beginning the next is poor practice: the tool wears between starts and the flank profiles no longer match.
For flank infeed, shift Z on every depth pass by the radial infeed × tan of slightly less than the thread half-angle. Apply the same shift to every start.
Tapered multi-start pass program built from G32 blocks
The example below uses these values:
- External thread, X in diameter mode, mm
- 2 starts, P = 1.5 mm, so L = 3.0 mm
- Lead-in start at Z6.0
The taper line is X = 20.0 − Z/16. With 0.4 mm of infeed on diameter:
- Start 0 begins at X19.225.
- Start 1, at Z7.5, begins at X19.131.
These are illustrative values using Fanuc-style syntax. Confirm the syntax against the Masso manual.
- Calculate the taper start X at each start's own Z. Starts differ in Z, so their start X values also differ.
- Subtract the same diameter infeed from the start X and the end X, so the taper stays parallel to the finished thread.
- Retract in X before returning in Z, so the tool never drags back through the groove.
- Keep S constant through every pass of the job.
- Generate the pass table with a spreadsheet, a CAM threading post, or a macro if the control supports variables. The arithmetic is the same for any number of starts.
Thread lead, taper, and start spacing measurements
- Air cut with a marker on the tool tip on a blued blank. Expected reading: spacing between marks equals the programmed lead, 3.0 mm in the example.
- Two identical passes on scrap. Expected reading: a single groove with no second witness line.
- Micrometer at two Z positions on the threaded taper, over wires or at the crests. Expected reading: (D2 − D1) / ΔZ equals the programmed taper ratio, 1/16 in the example.
- Pitch gauge at P across adjacent grooves. Expected reading: the gauge seats fully, which confirms the starts are evenly split.
- Follow one groove through one revolution with an indicator or marker. Expected reading: the axial advance equals n × P.
- Land widths between the starts. Expected reading: equal widths. Unequal lands mean the Z shift does not equal P, or the rpm or Z start drifted between starts.
- Thread engagement with the mating part or gauge. Expected reading: smooth engagement to the specified stand-off with no binding on either start.
FAQ
How do I cut a tapered thread with G32 on a Masso lathe?
Program X and Z endpoints in the same G32 block, with the X change equal to the diameter change (diameter mode) or half of it (radius mode). Offset both the start X and end X by the infeed on each pass. Calculate the start X at the lead-in Z, not at the part face.
How do I program a multi-start thread without a spindle start-angle command?
Set F to the lead (starts × pitch) and begin each start one pitch further along Z than the previous one. A one-pitch Z shift at the same index pulse equals an angular shift of 360° / n.
How do I stop G32 threading passes from double-cutting the groove?
Hold constant rpm with G97 and use the same Z start for every pass of a given start. Give the axis a lead-in of at least v² / (2a), where v = rpm × lead / 60.
How do I check that multi-start threads are evenly spaced?
Seat a pitch gauge at the single-start pitch across adjacent grooves and compare the land widths. Then follow one groove through one revolution and confirm it advances by the full lead.
Can I use constant surface speed while threading a taper on a lathe?
No. G96 changes rpm as X changes, which shifts the acceleration lag and the groove position from pass to pass. Thread in G97 at a fixed rpm.