I think that the simpliest way is to begin at the start of the half turn that reach the start diameter. That way, you always have less than an half turn cutting the air. You have to determine if tis an odd or even half turn in order to know if the value are positive or negative. Nothing has been tested.
G65 P9013 Axx Bxx CXX Dxx Fxx Hxx Rxx Xxx Yxx Zxx
A=STEP OVER (#1)
B=TOOL DIAMETER (#2)
C=START DIAMETER(#3)
D=FINAL DIAMETER (#7)
F=X-Y FEED (#9)
H=Z FEED (#11)
R=RETRACT PLANE (#18)
X=X CENTER OF SPIRAL (#24)
Y=Y CENTER OF SPIRAL (#25)
Z=Z COORDINATE AT THE BOTTOM OF TOOLPATH (#26)
Code:
%
O9013(SPIRAL MACRO)
#7=#7-#2 (FINAL DIAMETER-TOOL DIAMETER)
#100=FUP[#7/#1+.5] (NUMBER OF HALF TURN NEEDED TO REACH FINAL DIAM)
#101=[#7/[#100-.5]] (CORRECTED STEP OVER )
IF[#3 NE #0] GOTO5 (IF THERE IS A START DIAMETER INPUTED)
#102=1 (HALF TURN COUNTER)
#103=[#101/4] (CURRENT DIAMETER)
G0 G90 X#24 Y#25 (RAPID TO CENTER)
Z#18 (RAPID TO RETRACT PLANE)
G01 Z#26 F#11
G91
G03 X#103 I[#103/2] F#9 (CUT THE FIRST ARC)
#102=#102+1 (INCREMENT COUNTER)
GOTO7
N5 #102=FIX[#3/#101]+1
#104=[#101*[#102-1]/2] (DISTANCE FROM START POINT TO CENTER)
#105=#102 AND 1
IF [#105 EQ 1] GOTO 6 (IF THE START HALF TURN IS AN EVEN HALF TURN)
G0 G90 X[#24+#104] Y#25 (RAPID TO START POINT)
Z#18 (RAPID TO RETRACT PLANE)
G01 Z#26 F#11
G91
#103=#101*[#102-1]
G03 X#103 I[#103/2] F#9
#102=#102+1
IF[#102 GT #100] GOTO10
GOTO 7
N6 G0 G90 X[#24-#104] Y#25 (RAPID TO START POINT)
Z#18 (RAPID TO RETRACT PLANE)
G01 Z#26 F#11
G91
N7 DO1 (CUT THE SPIRAL)
#103=#101*[#102-1] (CURRENT DIAMETER)
G03 X-#103 I[-#103/2]
#102=#102+1
IF[#102GT#100] GOTO15
#103=#101*[#102-1]
G03 X#103 I[#103/2] F#9
#102=#102+1
IF[#102 GT #100] GOTO10
END1
N10 G03 I-[#7/2] (ENTIRE CIRCLE AT FINAL DIAMETER)
GOTO20
N15 G03 I[#7/2] (ENTIRE CIRCLE AT FINAL DIAMETER)
N20 G0 G90 Z#18
M99
%