What's new
What's new

Single-point knurling on a Lathe?

rick-b

Aluminum
Joined
Jan 1, 2013
Location
Queensland
Hi All,

I am trying to work out how to do Single-point knurling on my lathe. I have watched a few videos on the subject but they didn't really help. Does anyone have a sample of some G-code to do it?
 
I think it would be time consuming and abusive to the machine, but I have never attempted it or watched a video attempt.
Cut knurls can look super and the tools for the job are not that expensive.
 
Perhaps use the side of a tap for a tool bit, run at a very course TPI, flip the bit(tap side), and reverse direction with considering the distance between cuts.

Or

Single point at 5 TPI for .200 between cuts but only go .025 deep.
then come back from right to left cutting the other way, with .100 spacing.

Good for a PM lathe guy to play with and report back.
 
Hi All,

I am trying to work out how to do Single-point knurling on my lathe. I have watched a few videos on the subject but they didn't really help. Does anyone have a sample of some G-code to do it?

What control do you have? I jacked around with this once. Ended up with a diamond shaped pattern, if refined could it could resemble a knurled surface. I can post the code later tonight when I get in if I can find it in my mess of a file system. Lol..

I kinda agree with the guy ^ up there, keep the R's on the low side or you'll get a surprise on the first pass, probably beat up the machine too. Basically what I did is in the thread below.

Single Point Knurling on CNC Lathe - Can it be done?

Brent

20140725_201058 (1).jpg
20140726_191213 (1).jpg
 
Another thing, if you have a machine with a Fanuc control that uses the two line G76 cycle I'd switch it over to FS15 and use the one line format for the ease of programming, especially if you're just jacking around testing to see what makes you happy.

I think the Q variable is the number of starts? Maybe Bill will show up with how to switch back and forth between the two Fanuc programming systems.

Brent
 
What control do you have? I jacked around with this once. Ended up with a diamond shaped pattern, if refined could it could resemble a knurled surface. I can post the code later tonight when I get in if I can find it in my mess of a file system. Lol..

I kinda agree with the guy ^ up there, keep the R's on the low side or you'll get a surprise on the first pass, probably beat up the machine too. Basically what I did is in the thread below.

Single Point Knurling on CNC Lathe - Can it be done?

Brent

View attachment 323006
View attachment 323007


yardbird,

That's the type of finish I am looking for maybe slightly deeper. The part is a one-off and the knurl is more for decoration than use so buying a tool just for it at this stage is really out of the question.

The controller is an SZGH it uses Fanuc G-code and it has G76 and G33 if that helps.
 
yardbird,

That's the type of finish I am looking for maybe slightly deeper. The part is a one-off and the knurl is more for decoration than use so buying a tool just for it at this stage is really out of the question.

The controller is an SZGH it uses Fanuc G-code and it has G76 and G33 if that helps.
Hello Rick,
Does that control use a single, or two block format for the G76 cycle?

What you need to do is cut a Multi Start left and right hand thread on the one part. To achieve this, you need to either move the Z Start position of the Threading Tool the pitch of the thread, for each Thread Start being cut, or use an Indexing address with the Threading Cycle to index the Start of each Thread Start. If your control faithfully mimics Fanuc Format, it will use a Q address, which will be available with G33 and G76, but only with the Single Line Format of the G76 Cycle.

With a Fanuc Control, Single or two Block Format for the G76 Cycle can be set via parameter, but I'm not sure if that's possible with your control, or what the parameter number might be. If your control uses a Single Line G76 Cycle Format, then its probable that the Q address can be used for indexing the Thread Starts. Failing that, G33 with a Q indexing address can be used but the program will be considerably longer.

Regards,

Bill
 
Hello Rick,
Does that control use a single, or two block format for the G76 cycle?

What you need to do is cut a Multi Start left and right hand thread on the one part. To achieve this, you need to either move the Z Start position of the Threading Tool the pitch of the thread, for each Thread Start being cut, or use an Indexing address with the Threading Cycle to index the Start of each Thread Start. If your control faithfully mimics Fanuc Format, it will use a Q address, which will be available with G33 and G76, but only with the Single Line Format of the G76 Cycle.

With a Fanuc Control, Single or two Block Format for the G76 Cycle can be set via parameter, but I'm not sure if that's possible with your control, or what the parameter number might be. If your control uses a Single Line G76 Cycle Format, then its probable that the Q address can be used for indexing the Thread Starts. Failing that, G33 with a Q indexing address can be used but the program will be considerably longer.

Regards,

Bill

Bill,

Thanks for that. I am not 100% sure about the G76 I have never use it I will have a look and see. I do know the G33 uses a Q address I was using it the other day.
 
I did this just messing around back in 2014. Code wise this is what I did. Something to look at anyway?

N50(RIGHT HAND)
G0G40G54X14.Z3.T0
T0707
G97S300M3
G0X7.Z.2
G0X.925Z.1M8

G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

M9
G0X7.
G0G40X14.Z3.T0
M1

N60(OTHER HAND)
(THD BAR UPSIDE DOWN)
G0G40G54X14.Z3.T0
T0808
G97S300M4
G0Z.2
G0X.925Z.1M8

G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

M9
G0X8.
G0G40X14.Z3.T0
M0(LOOK SHIT OVER)

Brent
 
I did this just messing around back in 2014. Code wise this is what I did. Something to look at anyway?

N50(RIGHT HAND)
G0G40G54X14.Z3.T0
T0707
G97S300M3
G0X7.Z.2
G0X.925Z.1M8

G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

M9
G0X7.
G0G40X14.Z3.T0
M1

N60(OTHER HAND)
(THD BAR UPSIDE DOWN)
G0G40G54X14.Z3.T0
T0808
G97S300M4
G0Z.2
G0X.925Z.1M8

G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

M9
G0X8.
G0G40X14.Z3.T0
M0(LOOK SHIT OVER)

Brent

Brent,

I will give that a try thanks.

Rick
 
Bill,

It looks to be a two-block format for my G76 cycle. This is out of my manual.
 

Attachments

  • G76.jpg
    G76.jpg
    17.6 KB · Views: 26
Brent,

I will give that a try thanks.

Rick

"Give that a try"?

I was just posting a example to look at but if you are literally going to try to reproduce what I did here is the rest of the program. G76 programs just skims the .875" OD, I moved the depth deeper with the wear. OD tools 55° diamonds...

Brent

%
:1111(SINGLE POINT KNURL)
(1" VISCOUNT OUT 2")

(WORK G54 Z3.9)

N20(ROUGH OD)
G0G99G40G54X14.Z3.T0
T0303
G97S150M4
G0X7.Z.1
G0X1.M8
G50S1200
G96S250
G71U.05R.025
G71P21Q22U.02W0F.01
N21G1X.7750Z.0000
G1X.8750Z-.0500
G1X.8750Z-1.4500
G1X.7750Z-1.5366
G1X.7750Z-1.7000
N22G1X1.
M9
G0X6.
G0G40X14.Z3.T0
M1

N30(FINISH OD)
G0G99G40G54X14.Z3.T0
T0505
G97S150M4
G0X7.Z.05
G0X.9M8
G50S1600
G96S300
G1G42X.7750Z.0000F.006
G1X.8750Z-.0500
G1X.8750Z-1.4500
G1X.7750Z-1.5366
G1X.7750Z-1.7000
G1X1.1
G0G40X6.Z.1M9
G0G40X14.Z3.T0
M1

N40(CHAMFER BACK SIDE)
(.125" PARTING TOOL, TIP 4)
G0G99G40G54X14.Z3.T0
T0909
G97S250M4
G0X7.Z-1.5366
G0X1.M8
G50S1000
G96S300
G1X.775F.002
G0X.925
G0G42Z-1.45
G1X.875
G1X.775Z-1.5
G1Z-1.5366F.006
G0G40X6.M9
G0X14.Z3.T0
M1

** Insert thread programs here **

N70(CUT OFF)
(.125" PARTING TOOL, TIP 4)
G0G40G54X14.Z3.T0
T0909
G97S250M4
G0X7.Z-1.5
M8
G0X1.
G50S1000
G96S300
G1X.1F.0015
G0X6.M9
G0G40X14.Z3.T0
M0(BREAK OFF PART)

N100(FRONT STOP)
M5
G0G40G54X14.Z3.T0
T0606
G0X1.Z0
M30
%
 
Brent,

I should have said "look at it" but thank you for the rest of the program. I am not great at hand-coding on the lathe as yet, I can do small stuff but nothing like your program. So I will sit down with it and work on understanding the code before I try to run it or try to adapt it to my part which is 2"OD.

Rick
 
I did this just messing around back in 2014. Code wise this is what I did. Something to look at anyway?

N50(RIGHT HAND)
G0G40G54X14.Z3.T0
T0707
G97S300M3
G0X7.Z.2
G0X.925Z.1M8

G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

M9
G0X7.
G0G40X14.Z3.T0
M1

N60(OTHER HAND)
(THD BAR UPSIDE DOWN)
G0G40G54X14.Z3.T0
T0808
G97S300M4
G0Z.2
G0X.925Z.1M8

G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

G0W.075
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6

M9
G0X8.
G0G40X14.Z3.T0
M0(LOOK SHIT OVER)

Brent

Hello Brent,
Another approach:

N50(RIGHT HAND)
G0G40G54X14.Z3.T0
T0707
G97S300M3
G0X7.Z.2
G0X.925Z.1M8
#3=1
WHILE [#3 LE 8] DO1
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6
#3=#3+1
G0W.075
END1
M9
G0X7.
G0G40X14.Z3.T0
M1

N60(OTHER HAND)
(THD BAR UPSIDE DOWN)
G0G40G54X14.Z3.T0
T0808
G97S300M4
G0Z.2
G0X.925Z.1M8
#3=1
WHILE [#3 LE 8] DO1
G76P010060Q0050R0
G76X.87Z-1.6P0050Q0050F.6
#3=#3+1
G0W.075
END1
M9
G0X8.
G0G40X14.Z3.T0
M0(LOOK SHIT OVER)

Regards,

Bill
 
Bill,

Is this a macro? I have not seen #3=1 #3=#3+1 before?

Rick

Hello Rick,
#3 is a Macro Local Variable (#1 to #33 are Local Variables).

In this example, #3 is simply used as a counter and I used #3 because, if you were to expand on this and write a full Macro program to single point cut the knurl, #3 would be passed as an argument to the Macro by the Address "C". Accordingly, in the Call Block for the Macro, the "C" address would relate to Counter, but any address could be use; it need not be the "C" address.

The example is not a Macro program per se, but just a few Macro statements to create a Loop and therefore, cut down on the amount of program code to write. You could easily expand on this basic concept and allocate a Macro Variable for the number 8 in the following Macro statement:

WHILE [#3 LE 8] DO1

The 8 in the above Macro statement is the number of Thread Starts in the Knurl. Variables could also be used to represent the Feed Rate in the G76 Cycle (the Lead of the Thread) and the Pitch of the Knurl. When designing the Macro, you could then decide which two of the following to specify:

1. The number of Starts
2. The Pitch of the Thread
3. The Lead of the Thread

If 1 and 2, the Macro would calculate the Feed/Rev (Lead of the Thread) to use with the G76 Cycle (The number of Starts x Pitch).

If 2 and 3, the Macro would calculate the Number of Starts, which is used as the Counter in the Macro. (Lead of the Thread / Pitch).

If 1 and 3, the Macro would calculate the Pitch of the Knurl, which is used as the Z Offset for each successive Thread Start to cut (Lead of the Thread / The number of Starts).

I suspect that the Lead and Pitch would be best specified (the most likely known aspects of the knurl)and the Macro would calculate the number of repeats (number of Starts) of the G76 Cycle.

Regards,

Bill
 
Brent or bill

What would be the best way to calculate the number of starts and pitch you would need?

Rick
Hello Rick,
The size of the diamond in Z will be governed by the Pitch and the size around the circumference by the number of starts. Accordingly, at first glance I'd suggest dividing the circumference by the length of the diamond you want in that direction to get the number of starts; round to the closest integer.

The Lead of the Thread would then be calculated by multiplying the length of the diamond in Z you want (the Pitch) by the Number of Starts. My suggestion of using a Macro and Macro Variables was to allow easy manipulation of the program so as to dial in the result you want. Then you could have a Call Block something like the following, to pass the required arguments to the Macro where the calculations would be made and the RH/LH Threads cut the number of Leads calculated.

G65 C120.0 X2.0 Z1.5

Where:
C = The Circumference
X = The Length of the Diamond around the Circumference.
Z = The Length of the Diamond in Z

Regards,

Bill
 
Last edited:








 
Back
Top