ラベル

2017年12月23日土曜日

自転車サスペンション用リンクを作る




こんな物が欲しい。




























マウンテンバイクのサスペンションリンク。サイズは79×54×32mm、材質はA2017、
初体験のボリューム。
今回の一番のポイントは、肉抜きの3次元切削の部分。
この部分のGコードを考えるにあたって、初め、YZ平面上でG02を使って削れないかと思っていたが、円筒軸がX軸又はY軸と平行でないので座標系の回転が必要になり、何をやっているのかよくわからなくなること、また、何より、刃物軌跡が円筒軸と直行していない場合、螺旋軌道のXY平面への投影は直線とならないことから、このアイデアは却下、
座標値をパラメータの計算で決めることにした。
ちょっと長いが、肉抜き部コード全文は以下。
(当然のことながら、このコードを使って何が起きても責任は取れない。)

G90G54G92X0Y0Z10.
#1001=#5213(SAVE Z- syoki)
#1002=1.5(offset-step)
#1003=15.(offset-max_kari)
#1004=FUP[#1003/#1002](times)
#1005=[#1002*#1004](offset-now)
M07
S2500M03
M98P01L#1004(raff GOSUB PASS)
#1005=[#1002*0.3](pre-siage GOSUB PASS)
M98P01
#1005=0.(siage  GOSUB PASS)
M98P01
G00Z10.
G00X0Y0
M09
M05
M30

O01(***PASS***)
#1103=-5.(Z0)
#1106=31.329(angle-axis_ccw+)
#1107=50.(times-arc)
#1108=16.(radius *MEN-R + BALL-R)
#5213=[#1001+#1005](INPUT Z-offset)
G92.3
G00X43.166Y-21.089
G01Z-11.66F50.
F200.

(++GOSUB_ARC-Z-END-TANGENT1++)
#1101=25.765(X0 :Tangent side)
#1102=-16.462(Y0 :Tangent side)
#1104=43.166(X1)
#1105=-21.089(Y1)
M98P12
G01X22.783Y-15.669
G03X22.723Y-15.86I-0.026J-0.097
G01X25.234Y-16.785

(++GOSUB_ARC-Z-START-TANGENT2++)
#1101=25.234(X0:Tangent side)
#1102=-16.785(Y0:Tangent side)
#1104=41.118(X1)
#1105=-22.637(Y1)
M98P11

G00X45.Y-19.973Z-11.66

(++GOSUB_ARC-Z-END-TANGENT3++)
#1101=27.599(X0:Tangent side)
#1102=-15.346(Y0:Tangent side)
#1104=45.(X1)
#1105=-19.973(Y1)
M98P12

G01X23.182Y-14.171
G03X22.187Y-17.314I-0.424J-1.595
G01X23.544Y-17.814

(++GOSUB_ARC-Z-START-TANGENT4++)
#1101=23.544(X0:Tangent side)
#1102=-17.814(Y0:Tangent side)
#1104=40.57(X1)
#1105=-24.087(Y1)
M98P11

G00X47.476Y-19.027Z-12.38

(++GOSUB_ARC-Z-END-TANGENT5++)
#1101=29.433(X0:Tangent side)
#1102=-14.23(Y0:Tangent side)
#1104=47.476(X1)
#1105=-19.027(Y1)
M98P12

G01X23.58Y-12.673
G03X21.651Y-18.769I-0.822J-3.093
G01X21.853Y-18.843

(++GOSUB_ARC-Z-START-TANGENT6++)
#1101=21.853(X0:Tangent side)
#1102=-18.843(Y0:Tangent side)
#1104=40.906(X1)
#1105=-25.862(Y1)
M98P11

G00X43.166Y-21.089Z-11.66

#1005=[#1005-#1002]
M99

O11(***SUB_ARC-Z-START-TANGENT***)
#1201=SQRT[[#1101-#1104]**2.+[#1102-#1105]**2.] (LENGTH_01)
#1202=ATAN[#1102-#1105]/[#1101-#1104]
#1202=[#1202-#1106]                       (ANGLE 01-AXIS_s)
#1203=[#1201*SIN[#1202]]   (Be:DISTANCE_XeYe-AXIS_START-TANGENT)
#1204=1.(i:COUNT-ARC)
M98P21L#1107
M99

O21(**SUB2_ARC-Z-ST-SUB**)
#1301=[[#1104-#1101]*#1204/#1107+#1101] (Xi)
#1302=[[#1105-#1102]*#1204/#1107+#1102] (Yi)
#1303=[#1203*#1204/#1107] (Bi)
#1304=SQRT[#1108**2.-#1303**2.]
#1304=[#1304+#1103-#1108] (Zi)
G01X#1301Y#1302Z#1304
#1204=[#1204+1.]
M99

O12(***SUB_ARC-Z-END-TANGENT***)
#1201=SQRT[[#1101-#1104]**2.+[#1102-#1105]**2.] (LENGTH_01)
#1202=ATAN[#1102-#1105]/[#1101-#1104]
#1202=[#1202-#1106]                       (ANGLE 01-AXIS_e)
#1203=[#1201*SIN[#1202]]          (Be:DISTANCE_XeYe-AXIS_END-TANGENT)
#1204=[#1107-1.](i:COUNT-ARC)
M98P22L#1107
M99

O22(**SUB2_ARC-Z-ET-SUB**)
#1301=[[#1104-#1101]*#1204/#1107+#1101] (Xi)
#1302=[[#1105-#1102]*#1204/#1107+#1102] (Yi)
#1303=[#1203*#1204/#1107] (Bi)
#1304=SQRT[#1108**2.-#1303**2.]
#1304=[#1304+#1103-#1108] (Zi)
G01X#1301Y#1302Z#1304
#1204=[#1204-1.]
M99
%

簡単に解説すると、プログラムはサブルーチンの4層構造。
(1)メインでZ方向の最終掘り込み深さとステップ量からZ方向繰り返し数を決めて
   2層目のサブルーチンO01(***PASS***)をコール、

(2)2層目のO01(***PASS***)で円筒軸とX軸の角度、刃物軌跡の半径(ボール中心)
   始点と終点のXY座標を指定してZ軸オフセットを決め、
   円弧切削部の分割数を指定して、3層目の
   O11(***SUB_ARC-Z-START-TANGENT***):接線から円弧状にZ方向に下がる、
   または
   O12(***SUB_ARC-Z-END-TANGENT***):円弧状にZ方向に上がって接線で
   終わる、をコール、

(3)3層目のO11(***SUB_ARC-Z-START-TANGENT***)、または
   O12(***SUB_ARC-Z-END-TANGENT***)で刃物軌跡のXY平面上の距離、
   刃物軌跡と円筒軸の距離を計算して、円弧の分割の回数分、4層目の
   サブルーチンO21(**SUB2_ARC-Z-ST-SUB**)
   又はO22(**SUB2_ARC-Z-ET-SUB**)をコール

(4)4層目でXYZの座標を計算してG01で直線移動、

という構造になっている。
円弧を直線で近似するのできれいな弧を描くには分割を細かくする必要があり、(今回は50分割)計算が追い付かなくてギクシャクすることを心配したが、今回の条件F200ではきれいに動いた。




今回、この切削用にボールエンドミルを新調した。
OSGのWXL-LN-EBDR2×8×4。突っ込みが深いのでロングネックが必要になった。
アルミ用ではないが、えらく良く切れる。
やっぱり、少々高くても、ちゃんとしたメーカ物のほうがいいな。

後、今回のGコードはZ方向をオフセットするのに#5213(Z方向オフセット量のシステムパラメータ)を直接書き込んでG92.3でオフセットする方法を取ったが、どうもあんまり好きじゃない。特にG41(工具径オフセット)と共存させるのがめんどくさい辺が、、、
次に書き直す時はZ座標を直接パラメータで指定するようにしよう。


色々難はあるが、なんとか完成。





















あとは、錆びる前にアルマイトをかけないと。