summaryrefslogtreecommitdiff
path: root/tests/interp/cam-nisley/cam.ngc
blob: 218499e440793e5658c22509bef4ecbddd184fce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
%
( Storm door latch cam )
( Outside milling, clamped on center axis)
( Ed Nisley - Nov 2006 - Mar 2007)
(-----------------)
#1000 =  75.00		(tool change XYZ)
#1001 =   0.00
#1002 =  75.00
#1004 =  10.00		(traverse clearance)

(-----------------)
(Cutter and material values)

#1110 =   3.10				(cutter diameter from Sherline_mm.tbl entry, per #1113 tool slot)
#1111 = [0.0005 * 25.4]		(chip load, inches/tooth -> mm/tooth)
#1112 =   2					(number of teeth)
#1113 =   1					(tool slot holding this cutter: verify this in *.tbl entry)
#1114 =  1.00				(max cut depth)
#1115 =  1.00				(max cut width)

#1120 = [150 * 12 * 25.4]	(cutting speed, surface ft/min > mm/min)
#1121 = [#1120 / [3.14 * #1110]]	(spindle RPM)
#1122 = [#1121 * #1111 * #1112]		(milling feed, mm/min = RPM * load * teeth)

(-----------------)
(Part dimensions)

#1201 =  4.17				(shaft Z thickness)
#1202 =  2.95				(cam Z thickness)

#1211 = FUP[#1201 / #1114]	(shaft Z passes)
#1212 = FUP[#1202 / #1114]	(cam Z passes)

#1221 = [#1201 / #1211]		(shaft Z cut depth)
#1222 = [#1202 / #1212]		(cam Z cut depth)

#1230 = [17.75 / 2]			(raw part OD -> radius)
#1231 = [10.30 / 2]			(shaft finished OD and cam small OD)
#1232 = [17.36 / 2]			(cam large OD)

#1241 = FUP[[#1230 - #1231] / #1115]	(shaft radius passes)
#1242 = FUP[[#1230 - #1232] / #1115]	(cam OD radius passes)

#1251 = [[#1230 - #1231] / #1241]	(shaft radius cut depth)
#1252 = [[#1230 - #1232] / #1242]	(cam OD radius cut depth)

#1272 = [216 / 2]					(half-angle of cam solid arc)

#1300 =  1.60				(inside corner fillet radius)

(-----------------)
(Define setup)
						
G90				(absolute coordinates)
G21				(metric units)
S #1121			(set spindle speed)
F #1122			(set milling feed)
T #1113 M6		(set up the tool)

(-----------------)
(msg,Verify METRIC Sherline.tbl file!)
(msg,Align XY=0 at center, Z=0 at surface, spindle to match S value, hit [Run])
						
M0				(wait for Resume)
M3				(spindle CW)
G0 Z#1004		(get air for alignment)

(-----------------)
(Commence cutting!)
(Start cutter compensation)
(External cutting: CCW around the part)

G0 X[0-#1300] Y[0-[#1230 + 3 * #1300]]	(alignment move)
G42 D#1113								(comp on: tool to right, D = cutter)
G1 X[0-#1300] Y[0-[#1230 + #1300]]		(first entry move)
G2 X0 Y[0-#1230] I#1300 J0				(second entry move to part edge)

G0 Z#1004			(to traverse level)

(--- Cut shaft)
							 
O309 IF [1]

#900 = 0			(Z iteration counter - start at surface)
#901 = 0.00			(initial Z cut depth)

O300 DO				(Z iteration)
							
G1 Z#901			(to new Z level)
							
#910 = 0			(radius iteration counter)
#911 = #1230		(initial radius - start at raw OD)

O310 DO				(radius iteration)

O311 IF [#911 NE #1230]				(if new is not max OD, then reposition)
G91									(relative coords)
G2 Y[0 - 2 * #1300] J[0-#1300]						(loop outward by min radius)
G2 Y[#1251 + 2 * #1300] J[#1300 + #1251 / 2]		(loop inward to new radius)
G90									(abs coords)
O311 ENDIF

G3 Y[0-#911] J[#911]		(one pass CCW around shaft)

#910 = [#910 + 1]			(tick radius counter)
#911 = [#911 - #1251]		(figure next radius)

O310 WHILE [#910 LE #1241]	(for all radius passes)

G2 Y[0 -[#1230 + 2 * #1300]] J[0 -[[[#1230 - #1231] / 2] + #1300]]	(align to max OD)
G2 Y[0 -#1230] J[#1300]

#900 = [#900 + 1]		(tick loop counter)
#901 = [#901 - #1221]	(next Z level)
				 
O300 WHILE [#900 LE #1211]	(for all Z steps)

O309 ENDIF

(--- Cut cam OD)

O349 IF [1]

#900 = 0			(Z iteration counter - at top of cam)
#901 = [0-#1201]	(initial Z cut depth - top of cam = bottom of shaft)

O340 DO				(Z iteration)
							
G1 Z#901			(to new Z level)
							
#910 = 0			(radius iteration counter)
#911 = #1230		(initial radius - start at raw OD)

O350 DO				(radius iteration)

O351 IF [#911 NE #1230]				(if new is not max OD, then reposition)
G91									(relative coords)
G2 Y[0 - 2 * #1300] J[0-#1300]						(loop outward by min radius)
G2 Y[#1252 + 2 * #1300] J[#1300 + #1252 / 2]		(loop inward to new radius)
G90									(abs coords)
O351 ENDIF

G3 Y[0-#911] J[#911]		(one pass CCW around shaft)

#910 = [#910 + 1]			(tick radius counter)
#911 = [#911 - #1252]		(figure next radius)

O350 WHILE [#910 LE #1242]	(for all radius passes)

G2 Y[0 -[#1230 + 2 * #1300]] J[0 -[[[#1230 - #1232] / 2] + #1300]]	(align to max OD)
G2 Y[0 -#1230] J[#1300]

#900 = [#900 + 1]		(tick loop counter)
#901 = [#901 - #1222]	(next Z level)
				 
O340 WHILE [#900 LE #1212]	(for all Z steps)

O349 ENDIF

(--- Cut cam ID)
(This goes in to shaft OD)
(Realign for CW passes in air clearing max OD by a bit, CCW cutting in part)

G0 Z#1004			(reposition at clearance OD facing CW for next move)

#520 = [#1110 + 2 * #1300]			(cutter dia + 2 x min fillet radius)
#521 = [#1230 + #520]				("exterior material contour" for air cutting)

G2 Y[0 -#521] J[0 -[#520 / 2]]		(half-circle to new OD, cutter still to right)

#522 = [#521 - #1300]				(O-P - dist origin to outer circle center)
#523 = [ASIN[#1300 / #522]]			(alpha - angle cam edge to outer circle center)
#524 = [#1272 - #523]				(beta - angle Y axis to outer circle center)
#525 = [#522 * COS[#523]]			(O-B - dist origin to B tangent on cam edge)

#531 = [#521 * SIN[#524]]			(A - X coord fairing circle tangent to OD)
#532 = [#521 * COS[#524]]			(A - Y coord fairing circle tangent to OD)

#541 = [#525 * SIN[#1272]]			(B - X coord fairing circle tangent to cam)
#542 = [#525 * COS[#1272]]			(B - Y coord fairing circle tangent to cam)

#551 = [#522 * SIN[#524]]			(P - X coord fairing circle center)
#552 = [#522 * COS[#524]]			(P - Y coord fairing circle center)

#900 = 0			(Z iteration counter - start at top of cam again)
#901 = [0 -#1201]	(initial Z cut level - top of cam = bottom of shaft)

O380 DO				(Z iteration)
							
G1 Z#901			(to new Z level)
							
#910 = 0			(radius iteration counter)
#911 = #1230		(initial radius - start at raw OD)

O390 DO				(radius iteration)

#622 = [#911 + #1300]				(O-Q - dist orgin to current inner circle center)
#623 = [ASIN[#1300 / #622]]			(gamma - angle cam edge to inner circle center)
#624 = [#1272 - #623]				(delta - angle Y axis to inner circle center)
#625 = [#622 * COS[#623]]			(O-C - dist origin to C tangent on cam edge)

#631 = [#625 * SIN[#1272]]			(C - X coord inner circle tangent to cam)
#632 = [#625 * COS[#1272]]			(C - Y coord inner circle tangent to cam)

#641 = [#911 * SIN[#624]]			(D - X coord inner circle tangent to shaft)
#642 = [#911 * COS[#624]]			(D - Y coord inner circle tangent to shaft)

#651 = [#622 * SIN[#624]]			(Q - X coord inner circle center)
#652 = [#622 * COS[#624]]			(Q - Y coord inner circle center)

G2 X[0 -#531] Y[0 -#532] J[#521]							(left side of air pass)
G2 X[0 -#541] Y[0 -#542] I[#531 - #551] J[#532 - #552]		(fillet to cam edge)

G1 X[0 -#631] Y[0 -#632]									(left cam edge)
G2 X[0 -#641] Y[0 -#642] I[#631 - #651] J[#632 - #652]		(fillet to current shaft OD)

G3 X[#641] Y[0 -#642] I[#641] J[#642]						(current shaft OD)
G2 X[#631] Y[0 -#632] I[#651 - #641] J[#642 - #652]			(fillet to cam edge)

G1 X[#541] Y[0 -#542]										(right cam edge)
G2 X[#531] Y[0 -#532] I[#551 - #541] J[#542 - #552]			(fillet to air pass)

G2 X[0] Y[0 -#521] I[0 -#531] J[#532]						(right side of air pass)

#910 = [#910 + 1]			(tick radius counter)
#911 = [#911 - #1251]		(figure next radius)

O390 WHILE [#910 LE #1241]	(for all radius passes)

#900 = [#900 + 1]		(tick loop counter)
#901 = [#901 - #1222]	(next Z level)
				 
O380 WHILE [#900 LE #1212]	(for all Z steps)

(-----------------)
M5					(spindle off)
G0 Z#1002			(get air)

G40					(cutter comp off)

G0 X#1000 Y#1001	(return home)
(msg,Done!)
M2
%