CNCの実験2:2006.01.03(火)〜2006.06.30(金) 2006.12.31(日)〜 / CNC App、DXF2NC App、HPGL2NC Appなどの作成。
2006.06.30(金) Φ3mmのエンドミルのシャンク部で、一回転の芯ぶれ量を測定しました。 スピンドルに対して、エンドミルの取り付け位置を約45度ずつずらして測定。 コレットの位置は不定です。 取付位置 芯ぶれ量 (度) (μm) ----------+---------- 0 38 45 11 90 22 135 56 180 50 225 40 270 27 315 30 --------------------- MIN 11 MAX 56 平均 34.25 初めに製作した拡張スリーブの芯ぶれの最大値が45μmある為 取付位置 芯ぶれ量 Φ0.3mm半月カッターに対する割合 -----------+---------------+----------------------------------- 強調 56+45=101μm 33.7% 打消 56-45= 11μm 3.7% 打消し位置の再現性向上が課題です。 2006.06.29(木) スピンドルに対して、スリーブの位置をはじめに戻しました。 2006.06.26(月)の一番下の溝とは全く様子が違います。 半月カッターは、スリーブに取り付けたままです。 2006.06.26(月) スピンドルに対して、スリーブの位置をおよそ60度づつ変えて直線パターンを切削しました。 チャック位置により切削の良し悪しがあります。 SECさん、ご教示有難うございました。 切削条件 項目 内容 -----------+----------------------------------------------------- 主軸回転数 約3500(rmp) 切削油 無し 切り込み量 0.1mm 送り速度 F90 パターン 長さ5mm。ピッチ1mm。 エンドミル 半月カッター。Φ0.3mm。刃厚0.14mm。 P板 t1.6mm。片面基板。高さ自由クランプで左右を固定。 2006.06.24(土) 半月カッターに逃げ代を設け、直線パターンの切削テストをしました。 溝 逃げ代 切削後に必要な処理 -----+----------+------------------------------------- 上 無し 真鍮ブラシでヒゲの除去 下 有り 回転研磨でヒゲとバリの除去 切削条件 項目 内容 -----------+----------------------------------------------------- 主軸回転数 約3500(rmp) 切削油 無し 切り込み量 0.1mm 送り速度 F90 パターン 長さ5mm。ピッチ1mm。 エンドミル 半月カッター。Φ0.3mm。刃厚0.14mm。逃げ代有り/無し P板 t1.6mm。片面基板。高さ自由クランプで左右を固定。 半月カッターの断面図 0.05mmが逃げ代です。 2006.06.23(金) モーター側のカップラーと連結部品をで接着しました。 結果: 回転騒音が増大しました。 対策: 1) 接着剤を除去。 2) カップラーと連結部品との間に樹脂用グリスを薄く塗布。 で以前の回転音に戻りました。 2006.06.21(水) コレット側からスピンドルの軸受けを見ました。 ベアリングをCリングで固定しているようです。 2006.06.19(月) 2個目の拡張スリーブを製作。 旋盤の三爪ユニバーサルチャックに拡張スリーブを取り付けて、 半月カッターシャンク(Φ0.3mm)の芯ぶれの幅を測定しました。 参考:Φ10mmのシャフトを取り付けた時の芯ぶれ幅は5μです。 芯ぶれ幅 (単位μm) 取付位置 No.1 No,2 ----------+--------+------------ 0度 53 28 60度 49 44 120度 38 45 180度 52 30 240度 63 10 300度 70 7 ----------+--------+------------ MAX 70 45 MIN 38 7 平均 54.2 27.3 No.1:今回製作した拡張スリーブ。 No,2:前回製作した拡張スリーブ。 No.1のコレット部のスリット。幅0.1mm×長さ4mm 斜めです。 2006.06.18(日) モーターとスピンドルのカップラー内に装着されている部品で弾力性があり緩衝効果 がありそうです。 モーター側のカップラーは、一体成型の様に見えましたが、別部品でした。 2006.06.16(金) 接着剤の飛散テストをしました。 紙製の円盤の周囲に厚さ約1mmで接着剤を塗布し、5分待ってから円盤を円筒の中へ降 下させ、3600(rpm)で回転。 接着剤はあっというまに飛び散りました。 一日放置したあと 1) 円盤の端を指で上下すると、よくしなります。 復元力が少し増したようです。 2) 円盤の表面の接着剤の薄膜にはベトツキ感があります。 指に接着剤が着くことはありません。 2006.06.14(水) モーターとスピンドルのカップラーに充填を検討中の緩衝材(接着剤)です。 効能書き 期待 -----------------------+------------------------------------------- 接着層がショックを吸収 回転音が静かになる。 弾性接着剤 モーターとスピンドルの芯ずれを吸収する。 肉やせがない 硬化しても隙間が出来ない。 タレがない カップラーの接触面に定着する。 無溶剤 モーターの回転子や刷子に対する化学的な影響が無い。 以前に同じ接着剤を使用した時の感想。 1. 硬化しても弾力性がある。 2. 合成樹脂(ABS)の場合、硬化した接着剤を剥しやすい。 3. プラスチックが溶けない。 接着剤充填の方法 案1) 接着剤を塗布しカップラーを合わせ、回転させながら位置出しをしてモーターを 固定する。 → 回転中に接着剤が飛散。 → モーター駆動回路に手を加えて、接着剤が飛散しない位まで回転数を下げる。 案2) モーターを固定後に、接着剤を注入する。 → 注入箇所を観測 → サービスミラーを使用する。 → 注入方法 → 注射筒を使用する。 → 注射筒の出口から注入箇所までチューブで接着剤を誘導する。 → 粘性が強いので、小径のチューブでは流れない可能性大。 *案1が有力です。 2006.06.11(日) CNC AppにZ軸原点出しメニューを追加しました。 拡張スリーブとP基板の銅箔表面に、接触検出用のクリップを接続します。 Z軸を最小分解能で降下させて、P基板の表面にエンドミルの刃先が接触した位置を 電気的に検出しZ軸の原点にします。 フローチャート (Z軸原点出しスタート) ↓ ├←─────────┐ ↓ Low │ < PORT-A5 入力 >→─────────┐ ↓ High │ │ Z軸降下(最小分解能で) │ │ ↓ │ │ └──────────┘ │ ↓ Z軸現在位置を0(原点)に設定 ↓ Z軸の原点からのパルス数を0に設定 ↓ 終了 2006.06.10(土) モーター側のカップラーです。 内側の4つの凹みと、スピンドル側の4つの凸がかみ合って回転を伝達します。 スピンドル側のカップラーです。 回転音が最も小さい位置で、モーターを固定します。 2006.06.09(金) スピンドル回転音をFFT解析しました。 暗騒音 スピンドル回転オフ。部屋の騒音です。 3600回転 昼間なら窓を開けていても、近所迷惑にならない程度です。 5000回転 耳障りな音が出始めます。 17000回転 居たたまれない騒音です。 ピーク 回転数(rpm) ピーク周波数(Hz) モーター回転倍数(倍) ------------+-----------------------+------------------------ 3600 480 8 5000 664, 3.3K 8, 40 17000 566, 2.2K, 4.4K, 5.6K 2, 4, 8, 10 モーターとスピンドルを結合している4つの爪から出る偶数次の高調波が有力です。 5000回転付近では、他の回転数とは異なる音で、3kHz付近でメカ共振が起きている ようです。 測定条件 -----------+-------------------------------------- マイク SONY DYNAMIC F-V80T 録音VOL 最大 (録音コントロールパネルで) 距離 コラムから100mm 切削 せず (空転) FFT RH1 FFT 2006.06.08(木) | バリ 回転数 | 騒音 | F10 | F90 -------+------------------------+-----+------ 3600 耐えうる騒音です。 7 5 17000 耐えられない騒音です。 7 7 バリ: 2006.06.03(土)の結果と比較し評価しました。 表面研磨が必要です。 切削条件 項目 内容 -----------+----------------------------------------- 送り速度 :前半=F10。 後半=F90。 エンドミル:半月カッター。Φ0.3mm。刃厚0.1mm。 切削油 :無し 材料 :t1.6mmプリント基板 撮影距離 :220mm(ワークとデジカメ間) 2006.06.03(土) 送り速度を変えて直線パターンを切削しました。 左:切削油なし。 右:切削油あり。 下からF10,20,30,40,50,60,70,80,90,90。 切削条件 項目 内容 -----------+----------------------------------------- 主軸回転数 約3600(rmp) 切削油 有り(タップオイル塗布) / 無し 切り込み量 0.15mm 送り速度 F10〜90 パターン 長さ5mm。ピッチ0.6mm。 エンドミル 半月カッター。Φ0.3mm。刃厚0.1mm。 評価はバリがほとんどない状態を1とし、数値が大きくなるに従ってバリが多く かつ大きくなります。 1から4以内ならば、表面研磨は不要と思える程度です。 結果: | 切削油 F | 有り | 無し -----+-------+-------- 90 1 4 80 1 5 70 2 6 60 2 6 50 3 7 40 4 7 30 4 6 20 5 6 10 6 6 2006.06.02(金) 主軸の回転数を変えてテストパターンを切削しました。 表面を研磨した後の画像です。 刃厚0.1mmの半月カッター使用。9600(rpm)。F70。 上はピッチ0.6mmのICランド想定。 下はピン間1本を想定。 |研磨前| 表面研磨後 | 切削 |モーター 回転数 | 切削油 | バリ | バリ | ひげ | 評価 | 音 -------+---------------+------+-------+------+------+---------- 3600 タップオイル 多 無 無 ○ 小 3600 樹脂用グリス 多 少 無 △ 小 5600 無し 多 少 有 × 中 9600 無し 多 無 無 ○ 大 17000 無し 多 無 有 × 大 ひげ:銅箔がひげ状に伸びて、隣のパターンエッジに接触しています。 9600や17000回転は、使用時間15分の定格がもっとな勢いです。 1) 3600回転タップオイル有りで切削 2) 表面研磨 3) 洗浄(石鹸水等) 4) 乾燥 が実用的で、半月カッターの持ちもよさそうです。 2006.05.31(水) 製作した半月カッターで、P基板パターンを切削しました。 左が今回の切削で、右は2006.04.30(日)の切削です。 ドリルによる穴あけは省きました。 パターン切削条件 今回 2006.04.30(日) ----------+----------------+------------------------ エンドミル Φ0.3mm(自作) Φ0.3mm一枚刃(メーカ品) 切り込み量 0.1mm 0.25mm 水平送り F70 F70 垂直送り F20 F20 切削油 なし なし 主軸回転 3600(rpm) 4600(rpm) 所用時間 約25分 約30分 結果: 拡張スリーブと半月カッターで、一枚刃(メーカ品)と同等程度の切削が可能。 最適化(0.1mm)で、所用時間が短縮。未切削パターンは無し。 切り込み量が0.1mmの為、数箇所で銅箔の削り残りが発生。次回は0.15mmで実験。 2006.05.30(火) 半月刃の刃先角の検討図です。 刃厚(mm) 刃先角(度) ----+-------------------------------+---------------- 左 0.2mm = 0.15mm(半径)+0.05mm 109.47 中央 0.1mm = 0.15mm(半径)−0.05mm 70.53 右 0.14mm = 0.15mm(半径)−0.01mm 86.18 アルミ板を切削しました。 ルーペ越しの為、少しゆがんでいます。 結果 ------------------------------------------- 刃厚(mm) バリ 切削幅 実用 ----+----------+------+----------+--------- 左 0.2mm 多 約0.3mm 不向き 右 0.1mm 少 約0.3mm 向き 切削条件 -----------+----------------------------------------- 主軸回転数 約3600(rmp) 切削油 タップオイル 切り込み量 0.1mm 送り速度 F70 パターン 幅0.17mm×4.87mm×5本。ピッチ0.6mm。間隔0.43mm。 2006.05.28(日) Φ0.3mmの半月刃を製作しました。 拡張スリーブ製作中に折れたΦ0.3mmのドリルのシャンクをホルダーに固定し、 回転砥石で削ります。 研ぎ終わった半月刃を、拡張スリーブに取り付けました。 半月刃でアルミ板を切削しました。 四角形の一辺は1.3mm(辺の中心間で1mm)。溝の幅は0.3mmです。 主軸回転数: 約3000(rmp) 切削油 : 使用せず 切り込み量: 0.1mm 送り速度 : 手動でゆっくり (フライスマシン No.16000使用) 2006.05.23(火) 拡張スリーブ製作実験その11。 Φ0.3mm用拡張スリーブを作り直しました。 今回のスリット切り込みは、4mmまでは概ね直線になりました。 主軸の傾き調整の効果でしょうか。 偏芯量測定 (60度取り付け位置を変えて測定) 今回製作 前回製作 Φ1.5mmドリル ---------------+----------+---------------- 110 170 68 47 78 120 48 62 118 92 184 66 116 178 41 115 128 91 ---------------+----------+---------------- MIN 48 63 41 MAX 116 184 120 平均 88 133 84 Φ1.5mmのストレートドリル使用時と同等に仕上りました。 上:Φ0.3mm用拡張スリーブ。 下:Φ0.8mm用拡張スリーブ。 久しぶりのCNC切削です。 切削条件 ドリル : Φ0.3mm 、ピッチ : 0.6mm 深さ : 0.1mm 穴数 : 10×10 (縦×横) 主軸回転: 3500(rpm) 切下速度: F10 材質 : アルミ 切削油 : タップオイル塗布 NCコード: G00 Z0.5 M03 M98 P10L10 M05 G00 X0 Y0 M30 O10 M98 P20 L10 G00 X0 G91 G00 Y0.6 G90 M99 O20 G00 Z0 G01 Z-0.1 F10 G00 Z0.5 G91 G00 X0.6 G90 M99 2006.05.22(月) 拡張スリーブ製作実験その10。 スリーブ切り込みの曲がり検討。 フライスマシン(No.16000)の主軸の傾きを調べました。 A位置でピックテストの目盛りを0にセット。 D(Y軸方向) │ │ C ──┼── A(X軸方向) │ │ B X軸方向(傾き調整が可能) A C 傾き 傾き [μ] [μ] [度] 方向 -------+------+------+-----------+----------- 調整前 0 54 0.12628 左 調整後 0 1 0.00234 左 Y軸方向(傾き調整は不可) B D 傾き 傾き [μ] [μ] [度] 方向 備考 -------+------+------+-----------+------------+--------------------- 調整前 73 -9 0.19176 刃先が奥 調整後 32 -29 0.14265 刃先が奥 X軸方向傾き調整後 スリットの切り込みは、スリーブをCからA(X軸方向)に向かって移動しました。 丸ノコがスリーブに斜めに切り込むために、刃先があおられてスリットが曲ったのか もしれません。 2006.05.21(日) 拡張スリーブ製作実験その9。 新たにスリットを設け、曲がったスリット(四角の枠内)に0.1mmのアルミ板を挿入し ました。 フライスマシン(No.16000)でドリルシャンク部の偏芯量を測定しました。 Φ1.5mmドリル Φ0.3mmドリル(拡張スリーブ有) --------------+--------------------------------- 68 170 120 78 118 62 66 184 (ピックテスト測定限界付近) 41 178 91 128 およそ60度づつ取り付け位置をずらして測定。 単位は[μm]。 2006.05.20(土) 拡張スリーブ製作実験その8。 スリットが曲がり、ドリル固定用ナットを締めると偏芯します。 ドリル装着穴:Φ0.3mm (深さ5mm) シャンク径 :Φ3mm ナットネジ :Φ3mm スリット幅 : 0.1mm 2006.05.19(金) 左は最適化前、右が最適化後のツールパスです。 右の青い○で囲んだ中の輪郭線が一本消滅する症状のデバッグが手詰まり状態で、 しばらく「果報は....」モードに遷移します。 追伸: 昼寝の効果で、輪郭線が消滅する症状がなくなりました。 対策: 「直線Aが直線Bを内包する場合 → 直線Bを削除」を図形データの構造体配列の終 端まで繰り返していた処理を、1つの図形削除で一端終了するようにしました。 2006.05.17(水) HPGL2NC Appの最適化処理の検討で、パターンを構成する各直線に対して、傾き、X軸 との交点、Y軸との交点、のそれぞれが設定範囲内で、始点と終点の間に内包される 直線の割合を求めました。 | 内包直線検出 | 近接・近似直線検出 距離 | 個数 割合 | 個数 割合 (mm) | (個) (%) | (個) (%) --------+---------+-------------+---------+------------- 0.00 | 84 7.24 | 14 1.21 0.05 | 356 37.43 | 224 23.55 0.10 | 386 41.91 | 254 27.58 0.15 | 483 50.29 | 304 34.90 0.20 | 513 62.79 | 358 43.82 近接・近似直線検出のデータは 2006.05.14(日)からの引用です。 次は、下記の処理を追加する予定です。 1) 直線Aが直線Bを内包する場合 → 直線Bを削除。 2) 直線Aが直線Bに内包される場合 → 直線Aを削除。 3) 上記に該当しない場合 → 直線A、Bともに削除対象外。 2006.05.14(日) パターンを形成する多角形で、近接していて長さが近似の直線の割合を求めました。 距離 個数 割合 (mm) (個) (%) --------+---------+------------- 0.00 14 1.21 0.05 224 23.55 0.10 254 27.58 0.15 304 34.90 0.20 358 43.82 2006.04.30(日)に切削したP基板用のデータを使用し、 直線の始点どうしと、終点どうしが距離で指定した範囲内にある図形をカウントしま した。 最適化の処理では、上記の条件に一致した図形を削除します。 左は最適化前、右は距離0.15mmで最適化したときの、IC周辺のツールパスです。 最適化しても部分的に多重に切削するところがあるため、近接・近似図形の検出アル ゴリズムを改善する必要があります。 濃く黒い直線が多重部分です。 直線を表す式 y=ax+b のaとbを多角形の要素直線毎に求め、aとbが許容範囲内で、 はみ出さずに重なっている直線を検出する方法を検討したいと思います。 2006.05.12(金) HPGL2NC Appのドリル用ツールパスの最適化検討です。 左は、mill-outlines.ulpが出力したHPGLコードのドリル用ツールパスです。 右は、同じHPGLコードを最適化したときのドリル用ツールパスです。 2006.05.09(火) 拡張スリーブ製作実験その7。 Φ0.3mmの穴あけで、今日までに計9本のドリルを折りました。 深さ4mmを過ぎると途端に難しくなる為、別な方法を検討します。 2006.05.07(日) HPGL2NC Appのツールパスの最適化検討です。 左は、mill-outlines.ulpが出力したHPGLコードのツールパスです。 右は、同じHPGLコードを図形単位に分割した後に、図形間を最短でリンクするように したときのツールパスです。 長い距離の非切削ルート(赤色)が減少しました。 2006.05.04(木) 拡張スリーブ製作実験その6。 ピンバイス型にしました。 ドリル径 : 0.8mm シャンク径 : 3mm ナットネジ : 3mm 締付用スパナ: 5mm 2006.05.03(水) 2006.04.30(日)にパターン切削したP基板のHPGLコードを図形要素(直線)に分解し、 始点と終点が同じか、それぞれが近接する直線図形をカウントしました。 直線図形の総数 = 1384本 距離が0.05mm以内の直線図形を1つに集約しても、信号間が短絡したり、絶縁距離不 足になることは無いと思います。 2006.05.02(火) むむっ。 Visual C# 2005 Express Edition Beta2 日本語版 をアンインストールし Visual C# 2005 Express Edition 日本語版をインストールしました。 ライセンス登録を行い、CNC関連Appの開発環境が無事に復旧しました。 ほっ。 2006.04.30(日) 基板を切り出しました。60×50です。 Φ0.8mmのドリルで、部品リード用の穴をあけました。 パターン切削が終了しました。 ICのピンPAD周辺です。 ドリルであけた穴は良好です。 ルーペを通して写した為、少し楕円に見えます。 パターン切削はまるでおろし金のようなバリがあります。 パターン幅は縦、横、斜めともに約0.3mmで、ほぼ設計どうりです。 パターン切削条件 エンドミル:Φ0.3mm一枚刃 切り込み量:0.25mm 水平送り :F70 垂直送り :F20。 ドリルも同じです。 切削油 :なし 主軸回転 :4600(rpm) 所用時間 :約30分 2006.04.28(金) 拡張スリーブ製作実験その5。 Φ0.8mmのドリルを装着しました。 先端でも目立った振れはありません。 材料 :真ちゅう。Φ3mm。 ドリル :Φ0.8mm チャック:旋盤付属のドリルチャック 回転数 :740(rpm) 切削油 :タップオイル 下穴 :Φ0.5mmセンタードリル 切込量 :2mm/回 送り速度:2〜4mm/min(手動の為、概略値です。) 仕上深さ:11mm スリット:幅=0.2mm。 長さ=4.5mm。 2分割。 2006.04.26(水) 拡張スリーブ製作実験その4。 材料 :真ちゅう。Φ3mm。 ドリル :Φ0.3mm チャック:ドリルチャックにt0.1mmのアルミ板を挟んでドリルを固定。 回転数 :740(rpm) 切削油 :タップオイル 下穴 :Φ0.5mmセンタードリル 切込量 :1mm〜2mm 送り速度:10〜12mm/min(手動の為、概略値です。) 仕上深さ:7mm 目視結果:偏芯、傾き、ガタは良好。 切削のはじめは、チャックからのドリルの突き出し量を2mmにして1mm切り込み、 以後順次ドリルの突き出し量を2mmづつ増やしながらあけました。 2006.04.24(月) 拡張スリーブ製作実験その3。 ドリルΦ0.3mmの入荷待ちの為、Φ1.5mmで練習しました。 t1mmの輪切りを連ねて20mmの長さにし、円筒に詰め込む目論見です。 命名:パイナップル缶詰方式 材料 :真ちゅう。Φ4.1mm。 ドリル :Φ1.5mm チャック:ドリルチャック 回転数 :850(rpm) 下穴 :2Φセンタードリル使用 穴の深さ:1.5mm 仕上厚さ:1mm 2006.04.21(金) 拡張スリーブ製作実験その2。 材料 :真ちゅう。Φ5mm。 ドリル :Φ0.3mm チャック:ピンバイスを使用。 回転数 :2520(rpm)。旋盤の三爪チャックが温かくなりました。 下穴 :2Φセンタードリル使用。 Φ0.3mm相手には太すぎました。 結果 :実験その1よりさらに斜めです。 :センタードリルであけた穴底(平面?)Φ約0.8mmの中心から約0.1mmずれた :ところからあいています。 :写真を撮ろうとしてドリルを挿入中に折れて詰まり、撮影断念。 :Φ0.3mm穴あけ実験の継続は、風雲のともし火です。 2006.04.20(木) Φ0.3mm〜0.8mmのドリル柄径の拡張スリーブ製作実験その1。 Φ5mmの真ちゅうにドリルΦ0.3mmで旋盤加工。 深さ4.5mm。 少し斜めで、ガタがあります。 反省点: 1) ドリルチャックに紙を挟んでドリルを取り付けたこと。 次はピンバイス を使ってみます。 キーレスチャックならさらに改善できそうです。 2) 途中で引っ込んでしまったドリルを付けな直したこと。 1)と同じ改善。 3) センタードリルで下穴をあけなかったこと。 少しの手間を省いてしまいました。 4) ドリルの出し入れが多すぎたこと。 ドリル折れを気にしすぎました。 目標:深さ10mm。すり割り加工(無理なら接着)。 2006.04.19(水) 反転用のチェックボックスと、基板幅設定テキストボックスを追加しました。 左はMt面から見たツールパスで、右は反転したツールパスです。 両面切削では、反転オフでMt面のパターン切削データを生成し、反転オンと基板幅設 定で、裏面のパターン切削データを生成します。 各面ともX原点に設けたガイドに、基板の左端を突き当てて切削を行います。 mill-outlines.ulpでもミラー出力が可能です。 ミラーチェック設定と他のいつかの 設定を行います。 またX方向の座標が負の値である為、ワークテーブルの右サイドに 原点を設定する必要があります。 両面切削ではY軸を中心に裏返す為、X方向の移動範囲が不足する場合は、Mt面と裏面 で原点位置を変える必要があります。 2006.04.16(日) ツールメニューで「3 Contour」を選択した時のツールパスです。 ツールメニューで「1 Pad Drill」を選択した時のツールパスです。 2006.04.14(金) HPGLをNCに変換するAppをDXF2NC Appとは別に製作することにしました。 パターン切削の他に、Pad、VIA、Holeなどのドリルデータをウィンドパネル上で取り 扱えるようにする事が主な目的です。 DXF2NC Appプロジェクトをコピーし、プロジェクト名を変更しビルド、動作確認を行 いました。 今後、HPGL2NC Appとしてパネルデザインやプログラムの編集設計を行います。 mill-outlines.ulpが表示する条件設定ウィンドで色々な設定を試してみました。 EAGLE本体のDRC(Designe Rules Check)の定義との関連で、条件によっては切削ルー トが生成されない事があります。 outlines.ulpも試してみました。 設定が簡単です。 出力データのPA命令がターミネータ(";")で区切られずに連続して生成される為、 outlines.ulpの一箇所を編集してoutlines_1.ulpを作成。 PA命令ごとにターミネー タを挿入しツールパスを描きました。 抵抗とLEDのランドです。 ランド内を斜めに横切る切削ルートがあります。原因は未検討です。 2006.04.12(水) HPGL→NC変換でPA、PU、PD、SP検出。インチ/mm変換。NCコード生成を追加しました。 ペン種が「3」の時だけHPGLをNCに変換し、ツールパスを描きました。 HPGLコード NCコード mill-outlines.ulpが表示する条件設定ウィンドの □Mirror チェックボックスで切 削用の裏返しデータ出力、その他にも切削に必要な条件設定ができるようです。 2006.04.11(火) EAGLEでmill-outlines.ulpを使用して出力したHPGLコードファイルのNCコード変換を DXF2NC Appに追加することにしました。 HPGLコードの1行中の";"(ターミネータ)で区切られた複数の命令を、分割して命令 ごとに文字配列に格納した結果を表示しました。 1行中の複数の命令を1命令ごとに文字列配列に格納するプログラムです。 for (src_end = 0; (str = file_text.ReadLine()) != null;) { // 大文字に変換 str = str.ToUpper(); string tmp; int n; while (str.IndexOf(";") >= 0) { // ターミネーターがあれば n = str.IndexOf(";"); // 文字列の先頭からターミネータ前までを取り出す tmp = str.Substring(0, n); // スペースを取り除く tmp = tmp.Trim(); // 文字列配列に格納 src_code[src_end++] = tmp; // 元の文字列から取り出した文字列を除く tmp = str.Substring(n + 1, str.Length - n - 1); str = tmp; listBox1.Items.Add(src_code[src_end-1]); } } 2006.04.08(土) プリント基板用CADのEAGLEで自動生成したパターンです。 片面基盤。ベタ・グランド。縦約45mm。横約60mm。 EAGLEでmill-outlines.ulpを実行し、パターン切削用コード(HPGL)を出力しました。 次のコードは、2334行あるファイルの最初と最後の部分です。 IN; IP 0,0,100,100;SC 0,100,0,100; PU; SP1; PA0,0; PA203,1524;PD; PA203,1524;PU; PA2134,1575;PD; 中略 PA-81,47;PD; PA-81,-33; PA-33,-81; PA33,-81; PA2354,-81;PU; PU; SP0; 略語の意味 IN(INitialize) : プロッターの初期化 IP(InPut P1 & P2) : 尺度設定範囲の入力 SC(SCale) : 尺度設定範囲に尺度を設定。ユーザー領域に切換え SP(Select Pen) : ペン選択 PU(Pen Up) : ペンアップ PD(Pen Down) : ペンダウン PA(Plot Absolute) : 絶対座標移動 数値の単位 1/1000inch(約0.025mm) 2006.04.05(水) プリント基板用CADのEAGLE 4.11r2 Lightを 4.16r1 にバージョンアップしてインス トールし、回路図の作成から再チャレンジしています。 機能が多い分、とっつき難い感がありましたが慣れてくると使いやすそうなCADです。 ごく一部の機能ですが、使い方をP板CAD(EAGLE編)に書いています。 2006.04.03(月) プリント基板用CAD(EAGLE 4.11 r2 Light)を勉強中です。 操作ミスでアラームが盛んに鳴るなか、ようやくパターンを引きました。 AVRマイコンを使ったバイナリーカウンター回路基板です。 HPGLコードでファイルへ出力したところ、ペン種の選択、ペンのアップ/ダウン、直  線コマンドなどで構成されていました。 HPGLからNCへのコード変換プログラムの作成を検討中です。 2006.03.30(木) ICパッケージPQFPの半田ランドをテスト切削しました。材質はアルミ合金。 形状 ピッチ ランド幅 深さ 切削油 バリ ------+--------+----------+------+--------+------ PQFP 0.8mm 0.45mm 50μ 5-56 極少 エンドミル 形状 角度 先端Φ -------+--------+------------ 1枚刃 30度 0.3mm 切削油をたっぷり注いだ為か、ランドのエッジの直線に凹凸がほとんど無く、溝の底 はナシ地のような仕上がりです。 ランドの1個目と44個目の深さは、ルーペで見た限りでは同じで、見ていると半田付 けをしたくなります。 水平切削送り速度: 70mm/min。 垂直切削送り速度: 20mm/min。 スピンドル回転 : 5600rpm。 2006.03.29(水) プリント基板パターン切削テストをアルミ合金板で行いました。 No. 形状 ピッチ 深さ 刃物 切削油 バリ 備考 ----+------+---------+------+------+--------+------+------------------------- 1) DIP 2.54mm 50μ 6 水性 多 ピン間1本可。 2) DIP 2.54mm 50μ 5 水性 少 ピン間2本も出来そう。 3) QFP 0.6mm 70μ 5 5-56 少 ピン間中央に土手が残る 4) QFP 0.6mm 50μ 5 無し 多少 〃 刃物(エンドミル) No. 形状 角度 先端Φ ---+--------+--------+--------------- 5) 傘刃 (45度) 6)の1/2以下 6) 1枚刃 30度 0.3mm 水平切削送り速度: 70mm/min。 垂直切削送り速度: 20mm/min。 スピンドル回転 : 5600rpm。 2006.03.28(火) ピン間1本のテストパターンのツールパスです。 半田ランドΦ1.6mm。 部品穴Φ0.8mm。 部品穴ピッチ2.54mm。パターン間隔0.3mm。 ピン間のパターン幅0.34mm。 切込量50μm。 エンドミル先端Φ0.3mm。 2006.03.27(月) CNC Appで、送りネジピッチの設定用変数をint型からdouble型に変更し、1μmの小数 点以下の設定が出来るようにしました。 移動量の精度向上が目的です。 ベアリングホルダー固定の影響確認も兼ねて、X、Yの移動量を測定しました。 X軸方向移動量。送りねじピッチ998μm。BL44μm。 NCコード | 平均 | 測定値 -------------+-------+-------+-------+-------+-------+-------- G01 X10 F50 | 10.00 | 0.00 9.99 9.99 10.00 10.00 G01 X50 F50 | 50.00 | 49.99 50.00 50.00 50.00 50.00 G01 X0 F50 | 0.00 | -0.01 0.00 0.00 0.00 0.00 Y軸方向移動量測定。送りねじピッチ998.3μm。BL150μm。 NCコード | 平均 | 測定値 -------------+-------+-------+-------+-------+-------+-------- G01 Y10 F50 | 10.00 | 10.00 10.00 10.00 10.00 10.01 G01 Y30 F50 | 30.00 | 30.00 30.00 30.00 30.00 30.00 G01 Y0 F50 | 0.00 | 0.00 0.00 0.00 0.00 0.00 (単位:μm) 2006.03.26(日) X軸とY軸のベアリングホルダーを固定し、バックラッシュを測定しました。 | | | | 送り速度 | 前回 軸 | 平均 | 測定値 | 補正量 | (mm/min) | 平均 -----+------+------+------+------+------+------+--------+----------+-------- X | -2.2 | -2 | -3 | -1 | -2 | -3 | 24 | 50 | -0.4 Y | -0.8 | 0 | 0 | -1 | -1 | -2 | 100 | 50 | 1.2 (単位:μm) 2006.03.25(土) 左はナット用ドライバーで、肉厚を薄くし過ぎて先端に亀裂が入ってしまいました。 中は従来使用していたスパナで、ナットから外れやすく、ナットの角をかじってしま います。 右は昨日ハンズでポイント+αで購入したスパナで、平面の仕上りが良く、角がしっ かりしています。 凹側の長さと幅を3mmほどヤスリで削り、回転時にY軸の基盤(アリ溝凸付)に当り難く しました。 ○側はY軸のロックナットとベースとの隙間が狭く、ナット用ドライバーと同様に そのままでは使用できません。 X軸のロックナットには使用可能です。 Y軸のジブ調整ネジのナットに装着しました。 2006.03.24(金) 5回くらい使用したところで、ドライバーが空回りをするようになりました。 六角レンチを出し入れする為の窓から先端に向かって亀裂が入った事が原因です。 今日、スパナを購入し、Y軸シブのナット回し用に改造しています。 2006.03.23(木) プラスチック成形のX軸受板の土手を削り、裏の鉄製補強板にタップをたて、ベアリ ングホルダーを固定しました。 テーブル、軸受板、X送りネジを組み立てました。 左からジョイント、ストッパー、ベアリング(ホルダー付)、軸受板、ベアリング、 ストッパー、そして送りネジの順です。 送りねじとナットの樹脂用グリスを拭き取り、新たに樹脂用グリスを塗布しました。 テーブルを本体に取り付けました。 2006.03.21(火) ベアリングホルダー2個目を製作しました。 X軸用に使用します。 ベアリングの嵌合が、前回(2006.02.25)よりもきつ目に仕上がりました。 項目 | 条件 ----------+------------------------------------------------------------- 送り速度 | X、Y:70mm/min。 Z:20mm。 切込量 | 通常:0.2mm。 切り抜き:0.1mm。 工具回転 | 約4500rpm。 エンドミル| Φ2mm。 切削油 | 水溶性切削油。 材質 | アルミ合金。 ブリッジ | ホルダー穴と外周のそれぞれで上下左右4箇所。幅2mm。厚み0.4mm。 1) 材料をアルミからアルミ合金に変更。 2) ブリッジの厚みを0.2mmから0.4mmに変更。 3) ブリッジ残しの切込量を0.2mmから0.1mmに変更。 などで、前回発生したブリッジ部分の変形はありませんでした。 2006.03.20(月) DXF2NC AppのGUIを変更しました。 1) 垂直方向の送り速度(F)設定を追加 :水平方向(X、Y)とは異なる設定が可能。 2) 垂直方向の切削開始位置設定を追加:ブリッジ切抜き用NCコード作成に使用。 3) グラフ調整をcomboBoxに変更 :プルダウンメニューで設定が可能。 2006.03.18(土) 六角レンチを出し入れする為の窓を開けました。 Y軸のジブ調整後のロックが容易で、ナットの角をかじる心配が無くなりました。 2006.03.24(金) 5回くらい使用したところで、ドライバーが空回りをするようになりました。 六角レンチを出し入れする為の窓から先端に向かって亀裂が入った事が原因です。 2006.03.17(金) ナット用ドライバーの先端を直径9.2mmから約7mmにしました。フライスマシンで荒削 りをした後、ヤスリで仕上げました。 ジブ調整ネジのロックナットを回す冶具にします。 六角レンチを出し入れする為の窓を開ければ完成です。 2006.03.15(水) CNC Appのドキュメントを作成しました。ここをクリックすると開きます。 2006.03.14(火) XとYとZ方向の移動量を測定し、 移動量計算方法の変更が精度に影響しないことを確認しました。 X軸方向移動量。送りねじピッチ998μm。BL54μm。 NCコード | 平均 | 測定値 -------------+-------+-------+-------+-------+-------+-------- G01 X10 F50 | 10.00 | 10.00 10.00 10.00 10.00 9.99 G01 X50 F50 | 50.00 | 50.00 50.00 50.00 49.99 49.99 G01 X0 F50 | 0.00 | 0.00 0.00 0.00 0.00 0.00 Y軸方向移動量測定。送りねじピッチ997μm。BL26μm。 NCコード | 平均 | 測定値 -------------+-------+-------+-------+-------+-------+-------- G01 Y10 F50 | 9.99 | 10.00 10.00 9.99 9.99 9.99 G01 Y30 F50 | 30.00 | 30.00 30.00 29.99 30.00 30.00 G01 Y0 F50 | 0.00 | 0.00 0.00 -0.01 0.00 0.00 Z軸方向移動量測定。送りねじピッチ998μm。BL171μm。 NCコード | 平均 | 測定値 -------------+-------+-------+-------+-------+-------+-------- G01 Z-10 F50 10.00 9.99 10.00 10.00 10.00 10.00 G01 Z-20 F50 20.00 20.00 20.01 20.00 20.00 20.01 G01 Z0 F50 0.00 0.00 0.00 0.00 0.00 0.00 (平均と測定値の単位は mm) 2006.03.13(月) バックラッシュを測定し、 移動量計算方法の変更が精度に影響しないことを確認しました。 単位=μm | | | | 送り速度 | 前回 軸 | 平均 | 測定値 | 補正量 | (mm/min) | 平均 -----+------+------+------+------+------+------+--------+----------+-------- X | 0.4 | 1 | 2 | 0 | -1 | 0 | 34 | 100 | -2.0 Y | -1.2 | 0 | -1 | -2 | -1 | -2 | 20 | 100 | 2.8 Z | -0.4 | 0 | 0 | 0 | -2 | 0 | 171 | 20 | -1.6 2006.03.12(日) 移動誤差の補正計算を見直しました。 漢字4文字の切削で、G01 Z-0.2を26回実行した結果です。 | 切込量の変動幅(μm) 見直し | 平均 | 最大 --------+-----------+--------------- 後 | 1 | 3 前 | 6 | 12 見直し前 1) 移動パルス数を計算 sz = pulse_count_calc(z1, z2, z_step, z_pitch); 2) 現在のパルス位置と座標との補正量を計算 sz += pulse_count_calc(0, z_cur, z_step, z_pitch) - z_pls_position; 3) 目標座標へ移動したとしてパルスの過不足を計算(2006.03.11(土)の追加分) sz += pulse_count_calc(0, z2, z_step, z_pitch) - (z_pls_position + sz); 見直し後 上記の1)と2)と3)をまとめると、一回の計算になりました。 sz = pulse_count_calc(0, z2, z_step, z_pitch) - z_pls_position; 原点から目標座標までのパルス数 −) 実勢パルス数の累計 -------------------------------------- = 移動パルス数 あれこれ回り道をしましたが、これでよかったようです。 見直し前は、1)と2)と3)の各計算でパルス数の丸め(四捨五入)が行われるのに対し、 見直し後は、丸めが一回になり、切込量の変動幅が小さくなっています。 余談 z1は関数の引数でz_curの値が与えられる為、 2)式は sz += pulse_count_calc(0, z1, z_step, z_pitch) - z_pls_position; ↑が関数本来の記述です。(結果は同じ) 補正プログラム作成当初にいろいろ試していたときの混乱のなごりです。 参考 名称 用途 -------------------+------------------------------------------- pulse_count_calc() 座標間の移動パルス数を計算する関数。 z1 Z軸現在座標。 z2 Z軸目標座標。 z_step Z軸移動量/ステップパルス。 z_pitch 送りネジピッチ。 z_pls_position 現座標までの実勢パルス数の累計 2006.03.11(土) 文字列の切削中に、Z軸が想定外の動きをしました。 以下のNCコードで発生します。 G00 Z2 G00 X5 Y5 G00 Z0 G01 Z-0.2 G01 X0 Y0 F50 ← ここでZ軸が数ステップ分回ります。 原因: 前回移動時の補正量の過不足分を、次の移動時に持ち越したことが原因です。 対策: 現在位置での補正量に目標座標での過不足分を加えることで、次回に過不足分を持ち 越さないようにしました。 結果: 漢字4文字の切削で、G01 Z-0.2を26回行い、 切込量の誤差範囲が最大で±6μm以内。多くが±3μm以内に収まりました。 2006.03.09(木) Y軸のボールベアリングにホルダーを両面テープで仮止めしました。 Y軸バックラッシュ測定(単位μm) (ピックテスト使用 最小目盛1μm) ホルダー| | ばら | | | 有無 |平均値 | つき | 測定値 | 補正量 | 測定日 --------+-------+------+----+----+----+----+----+--------+----------------- 有り -1.2 2 -2 -2 0 0 -2 20 2006.03.09(木) 無し 2.8 8 -2 1 5 4 6 47 2006.01.14(土) バックラッシュのばらつきが減少しました。 Y軸移動量測定(単位mm) ホルダー| | ばら | | 有無 | 平均値 | つき | 測定値 | 測定日 --------+--------+------+------+------+------+------+------+---------------- 有り 10.00 0.00 10.00 10.00 10.00 10.00 10.00 2006.03.09(木) 無し 10.01 0.01 10.00 10.01 10.00 10.01 10.01 2006.01.16(水) 移動量の精度が向上しました。 *バックラッシュ、移動量ともにF50で測定。 2006.03.08(水) 1) 切込量 = 0.2mm 2) 送り速度 = 70mm/min 3) スピンドル回転数 = 約4600回転/min 3) エンドミル = Φ1mm 4) 切削油 = 水性 で切削しました。 2006.03.07(火) X軸用ステッピングモーター脱調の為、"験"が途中でずれました。 Φ1mmエンドミル使用。切削油=5-56使用。スピンドル回転数=約4600回転/min。 脱調の原因 1) 切込量=0.5が多すぎ。 2) 送り速度=70mm/minが速すぎ。 3) X方向でテーブルが左に行くほど移動力が重い。 かみそりの調整で、がたつきを減らすか移動力を減らすか。今はがたつきを減ら す方向で調整。 4) ステッピングモーターのトルク不足。 ボールペンテストには足りても、切削には不足気味。 などが考えられます。 2006.03.06(月) 鍋CADで文字列をDXFに変換し、DXF2NC Appでツールパスを描きました。 上がサブプログラム生成OFFで下がONです。 切込量=0.2mm、深さ仕上り0.2mm。 OFFの切削回数は1回、ONでは0.1mmづつ往復で切削します。 NCサブプログラムのONとOFFで生成したNCコードの行数 OFF ON ---------+--------- 218 546 OFFの方がツールパスがシンプルで、NCコードの行数も少なくなっています。 OFFでも切込を数回に分けて実施する場合は、結果が逆転します。 この文字列で使われている図形は全て直線で、102本ありました。 文字列をDXFに変換するときに、ロックヒルさんのこちらを参考にしました。 ボールペンテストをしました。 "験"の文字が不完全です。 ペンのかすれではありません。 何度やっても、"馬"のは ね足で蹴り上げられて、Zが降下しなくなります。 CNC Appのバグを修正し正常に描画できました。 仮想3軸関数でステップパルス数の絶対値を入れるべき変数に、符号付数値を代入し ていた事が原因でした。 (誤)v_sx = sz; v_sy = sx; v_pz = sy; ↓ (正)v_sx = sz; v_sy = sx; v_sz = sy; 2006.03.02(木) DXF2NC App でNCのサブプログラム生成ONとOFFのルーチンを分離し、Appプログラム の見通しをよくしました。 結果、Appプログラムが作りやすくなり、バグを発見しや すくなりました。 NCサブプログラムのONとOFFで生成したNCコードの行数です。 深さ3mmまで、0.2mmステップで切込みます。 図形 ON OFF ----------------------------+---------+--------- ベアリングホルダー取付穴 20 53 〃 穴切抜 59 247 〃 ビス穴 33 99 〃 外形 25 160 〃 外形切抜 83 427 〃 一括 65 298 ioio 119 490 半円加工 19 67 コーナー(┐)加工 23 97 作成したNCコードを手直しする場合は、行数の少ないONの方が有利です。 またONは往復切削を行う為、切削時間がOFFより短くなります。 2006.02.28(火) iの縦棒のツールパスが赤い線の下にあります。 現在位置から図形の始点までの距離を求める為の、3平方の定理の記述にバグがあり ました。 誤) 距離 = 平方根((X座標の差分)の2乗 * (Y座標の差分)の2乗) ↓ 正) ↓ 距離 = 平方根((X座標の差分)の2乗 + (Y座標の差分)の2乗) 記述は // 現在位置から図形の始点までの距離を求める len1 = Math.Sqrt(Math.Pow((Fig[f].start_point_x - x_current), 2) + Math.Pow((Fig[f].start_point_y - y_current), 2)); です。 現在位置と、次の図形の両端で近い方を選択する時に計算します。 2006.02.27(月) iの縦棒のツールパスがありません。 CAD図面には縦棒があるので、DXF2NC Appのバグです。 2006.02.26(日) ベアリングホルダーを切削した時の5つのファイルを1つにまとめたNCコードです。 サブプログラムの並べ換えをし、全体を通しで切削できるようにしました。 NCコード 切削の改善点: 1) ブリッジを厚くする。 今回:0.2mm。 ブリッジに若干の変形があり、強化が必要です。 2) 切り抜き切削の切込量を少なくする。 今回:0.2mm 上記1)とも関連し、ワークに加わる切削力を軽減します。 3) 切子の除去。 切削痕が少し荒れています。 4) 切削中の給油と廃油。 自動的な給油と、廃油と一緒に切子を除去する工夫が必要です。 2006.02.25(土) ベアリングホルダー(t3mm)を切削中です。 左はACアダプターのプラグが途中で抜けて失敗です。 気を取り直して再開。 切削終了。 上下左右でブリッジしています。 ブリッジを切り取りヤスリで仕上げ、ボールベアリングを挿入しました。 5つのNCコードファイルを使用しました。 1) ベアリング挿入穴 深さ2.8mm 2) ベアリング挿入穴切り抜き 深さ3.1mm。4箇所ブリッジ残し。 3) ビス穴切り抜き 深さ3.1mm 4) 外形 深さ2.8mm 5) 外形切り抜き 深さ3.1mm。4箇所ブリッジ残し。 2006.02.24(金) DXF2NC Appに設定入力を追加しました。 水平方向(平面切削)のサブプログラム作成は未対応です。 2006.02.23(木) DXF2NC Appに集合図形用サブプログラムの生成機能を追加しました。 複数の図形で構成した外形などの、深さ方向への増分値切削用のNCコードを生成しま す。 グラフの上がX-Zのツールパスで、下がX-Yのツールパスです。 一回の切り込み量は0.5mm、ワーク面から深さ3mmまで切削します。 2006.02.22(水) DXF2NC Appにサブプログラム生成機能を組み込みました。 穴あけなどの単独図形の深さ方向への増分値切削用のNCコードを生成します。 外形などの集合図形は未対応です。 2006.02.21(火) 工具径Φ2mmを考慮した切削用の図面を鍋CADで作成しました。 1) ページ0に完成時のベアリングホルダーの図面(作図済み) 2) ページ1にワーク原点の図面 3) ページ2に穴開け図面 4) ページ3に外形切削の図面 です。 原点図面作成: 1. 線種は実線を選択します。(以下全て実線です) 2. ページ0を背景にし、ページ1を前面にします。 3.「Dim]でベアリングホルダーの中心から、左端と下端までの寸法を測ります。 4.「Move」「オフセット」でオフセット量を中心から左端までの寸法にします。 5. 縦の中心線の少し左側をクリックします。 図形の左端に接する垂線が引かれます。 6. 同様にして、図形の下側に接する水平線を引きます。 7.「Edit」「線分調整」で2本の直線が交わるようにします。(必要なら) 穴開け図面作成: 1. ページ0を背景にし、ページ2を前面にします。 2.「Move」「オフセット」でオフセット量を1mmにします。 3. 円の少し内側をクリックします。 内側に円が描かれます。 4. スペースキーを押します。 オフセット量1mmが再セットされます。 5. 全ての円ついて3.から4.を繰返します。 外形切削図面作成: 操作は穴開け図面作成と同様です。 1. ページ0を背景にし、ページ3を前面にします。 2. スペースキーを押します。 オフセット量1mmが再セットされます。(穴明け図面作成で使用した値です) 3. 外形を構成する直線や円弧の少し外側をクリックします。 外側に直線や円弧が引かれます。 4. 全ての外形線について2.から3.を繰返します。 操作方法を書くと長いですが、あっと言う間に切削用図面が完成します。 外形切削図面で直線と円弧のつながりは、倍率をいくら上げても段差なく接続されて います。 鍋CADの交点処理は優れていてとても便利です。 CNC Appに、工具径補正コードG40、G41、G42の機能追加の緊急度がなくなりました。 4つのページを重ねた図面です。 DXF2NC Appで、完成、切削用外形、切削用穴開けのツールパスを描きました。 2006.02.20(月) DXF2NC Appに原点図面の読み込みメニューを追加しました。 原点図面は鍋CADで作成しました。 ここをクリックすると、ドキュメントが開きます。 図形左下の赤い線の交点がワーク原点です。 2006.02.19(日) DXF2NC Appにツールパスのグラフ表示を追加しました。 2006.02.18(土) CNCの実験(メカ編)の資料を作成しました。 内容の追加など随時更新する予定です。 2006.02.17(金) DXF2NC Appをツールパスが最短になる様に改造しました。 左が改造前で、右が改造後です。 改造前は、ベアリング挿入穴、左ビス穴、右ビス穴、外形の順です。 改造後は、外形、左ビス穴、ベアリング挿入穴、右ビス穴の順になります。 改造前は、概ねDXFデータのエンティティの出現順でツールパスを決定します。 改造後は、はじめは原点に始点又は終点が最も近い図形を選択し、図形の終端に最も 近い終点又は始点を持つ図形に順次リンクするようにツールパスを決定します。 2006.02.16(木) DXF2NC Appに 1) ワーク原点からの移動で、ツールを上昇した後に主軸回転開始"M03"を追加。 2) G00コードの前に、ツール上昇"G00 Z○"を追加。 3) G00コードの後に、ツール降下"G00 Z○"を追加。但し切削終了時は除外。 4) 切削を終了し、ツールを上昇し後に主軸回転停止"M05"を追加。 5) ファイル名をNCコードリストの先頭に追加。 6) NCコード生成日時をNCコードリストに追加。 7) 生成したNCコードのファイル保存。 を追加しました。 NCデータファイルです。 自動生成コード CNC Appでツールパスを描きました。 2006.02.15(水) NCコードを生成しました。 ワークの原点はX100、Y100にしました。 NCコード生成の過程です。 1) NCコードのXとYの座標値は、x_end及びy_endからワークの原点座標値を差し引い た値です。 2) 直線図形なら、"G01" + " X座標" + " Y座標"です。 3) 円図形なら、"G02" + " X座標" + " Y座標" + " I相対値" + " J相対値" です。 4) 円弧図形なら、 1. 図形の始点とパスの終点(x_end,y_end)が等しければ、右回りで"G02"です。 2. 図形の終点とパスの終点(x_end,y_end)が等しければ、左周りで"G03"です。 3. 始点角と終点角の差の絶対値が180度以下ならば、"R"+"半径"です。 4. 始点角と終点角の差の絶対値が180度を超えていたら、"-R"+"半径"です。 5. NCコードを組み立てると "G02またはG03" + " X座標" + " Y座標" + " R半径または-R半径" です。 5) 非連続の図形間は、"G00" + " X座標" + " Y座標"です。 但しXとYの座標値は、x_start及びy_startからワークの原点座標値を差し引いた 値です。 *1 x_end,y_endは、図形の始点又は終点で、現在座標から遠い距離にある方の座標で す。 詳しくは、2006.02.14(火)の記事を参照してください。 *2 x_start,y_startは、図形の始点又は終点で、現在座標に近い距離にある方の座標 です。 詳しくは、2006.02.14(火)の記事を参照してください。 *3 数値は文字列に変換して使用します。 例:Fig[f].radius.ToString() で変換します。 2006.02.14(火) ツールパスを決定するために、図形同士の連結ポイントを求めます。 図形リンクテーブルです。 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ 1│ 0│ 2│ 0│ 3│ 0│ 4│ 7│10│ 5│11│ 6│ 9│ 8│12│ 0│ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ │ ↑│ ↑│ ↑│↑│↑│↑│↑│↑│↑│↑│↑ └──┘└──┘└──┘└┘└┘└┘└┘└┘└┘└┘└┘ 1) はじめに現在座標をx_cur、y_curとします。x_cur = y_cur = 0 です。 2) 図形No.1を指定し、x_cur、y_cur(現在座標)から図形No.1の始点又は終点の座標 までで、より距離の近い方の始点又は終点の座標を選択し、x_start、y_startに それぞれの値を代入します。 3) 図形No.1の始点又は終点で、現在座標よりも遠い距離にある方を、x_end、y_end に代入します。 4) 現在座標からの移動は、x_cur,y_cur → x_start,y_startです。 NCコードでは、G00 Xx_start Yy_start になります。 5) 図形のx_startからx_endまで、工具が移動することになります。 6) x_end、y_endまで移動したことにして、x_curとy_curにx_endとy_endの値をそれ ぞれに代入します。 7) 図形No.1のリンク先図形No.2を指定します。 8) 2)から7)と同様の処理を繰返します。 9) 集合図形(No.4からNo.12)では、4)の処理をスキップします。 図形間の連結ポイントを検出し、リストに表示しました。 座標値は見やすくするために、少数点第一位で四捨五入しています。 2006.02.13(月) DXF2NC Appの作成資料をドキュメントにしました。 ここをクリックすると、ドキュメントが開きます。 2006.02.12(日) DXF2NC Appの図形リンクテーブルです。 単独図形と集合図形の図形No.を検出順に格納します。 ツールパスを決定する時に使用します。 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ 1│ 0│ 2│ 0│ 3│ 0│ 4│ 7│10│ 5│11│ 6│ 9│ 8│12│ 0│ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ ↑ ↑ │←───────────────→│ │ └─図形の区切り 集合図形リンク 図形No 図形リンクテーブルのデータをリストに表示しました。 2006.02.11(土) DXF2NC Appの単独図形検出と、集合図形のリンク順検出のアルゴリズムです。 1) 単独図形検出 図形データを格納した構造体配列のイメージです。数字(添え字)は図形No.です。 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ 0│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ 8│ 9│10│11│12│ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ │→ 構造体メンバーのfigureが"CIRCLE"と一致する図形を検索します。 ↓ ↓ ↓ 一致したら単独図形とします。 2) 集合図形のリンク順検出 2-1) ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ 0│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ 8│ 9│10│11│12│ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ │→ 構造体メンバーのfigureが"CIRCLE"以外の図形を検索します。 ↓ 図形No.4 "ARC"を検出しました。 2-2) ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ 0│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ 8│ 9│10│11│12│ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ │→ 図形No.4と始点又は終点が一致する図形を検索します。 ↓ 一致したら構造体メンバーのattributeに4を代入し ます。(図形No.4からリンク) 2-3) ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │ 0│ 1│ 2│ 3│ 4│ 5│ 6│ 7│ 8│ 9│10│11│12│ └─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘ │→ 図形No.7と始点又は終点が一致する図形を検索します。 ↓ 一致したら構造体メンバーのattributeに7を代入し ます。(図形No.7からリンク) 2-3)と同様な処理を配列最後のデータまで繰返すか、初めの図形No.4にリンクが戻る まで繰返します。 結果:4→7→10→5→11→6→9→8→12→(4) がリンク順になります。 *1: 集合図形として最初に検出した図形No.4のattributeには、自身の図形No.4を代 入します。 リンク順検出の最後で、図形No.12から4にリンクする場合は、12 に書き換えます。 *2: 始点又は終点の一致検索では、figureが"CIRCLE"又はattributeが0以外の図形は 検索の対象外です。 *3: 図形No.0にはワークの原点座標データを格納し、NCコード生成時にワーク原点 からの座標を求めるときに使用する予定です。 2006.02.10(金) DXF2NC Appに単独の図形検出と、集合図形のリンク順検出の処理を追加しました。 リストした単独図形は上から、左ビス穴、ベアリング取付穴、右ビス穴です。 集合図形は、右端下の円弧(○印)から右回りで外周を回り、右端上の円弧に戻る順に なります。 外周右端の円弧は、CADで円を円弧に分割した時に中心線で2分された結果、上下に 分かれました。 テストに用いた ベアリングホルダー.DXF です。 2006.02.09(木) DXFファイル中の各エンティティを元に計算した図形データを構造体配列に格納し、 いつでも図形番号で参照できるようしました。 画像は同配列を参照しリストに表示 した図形データです。 配列添え字=0 の構造体配列の要素には、図面上のワークの原点を指定するデータが入 る予定です。 配列添え字=1 以降の構造体配列の要素に、DXFファイルのエンティティセクションか ら読み出した順に図形データを格納します。 構造体記述例 2006.02.08(水) DXFをNCに変換するApp「DXF2NC」です。 1) ファイルの先頭からエンティティセクションまでを空読みします。 2) 各エンティティ毎に図形の種類と線種を判定します。 3) 線種が実線ならばエンティティからデータを取り出します。 4) 円のエンティティなら、終点座標X、Yと中心点I、Jを求めます。 5) 円弧のエンティティなら、始点と終点の座標を求めます。 6) 直線はエンティティそのままの値です。 以上の結果をリストに表示したところです。 次は、各図形をGコードに変換し、ツールパスを自動的に決定するためのアルゴリズ ムを検討します。 テストに用いた ベアリングホルダー.DXF です。 2006.02.07(火) Z軸移動のNCコードを追加し、ボールペンで切削ルートを描きました。 NCコード 2006.02.06(月) ボールベアリングホルダーです。 DXFデータを手書きでNCコードに変換します。 DXFファイル中のエンティティです。 エンティティをNCコードに変換しました。 そのツールパスです。 NCコードの順序や、始点と終点を入れ換えました。 使えそうなツールパスになりました。 2006.02.05(日) AutoCADのHP(Autodesk)で「DXF Reference」を見てきました。 AutoCADのHP DXF Reference DXFファイルは下記の5つのセクションで構成されます。 ヘッダーセクション ファイルの始まり。 (クラスセクション) 未調査(無くても可?) テーブルセクション 線種やレイヤーなどを定義します。 (ブロックセクション) 未調査(無くても可?) エンティティセクション 図形データを記述します。 エンティティセクションに図形を記述します。 0 エンティティセクションの始まり SECTION 0 ENTITIES ↑ この間に図形のエンティティを1つづづ記述します。 ↓ 0 エンティティセクションの終わり ENDSEC 図形のエンティティ 記述例:LINE 1) 長さ10mmの水平な直線。始点の座標がX=100、Y=100の場合。 DXF中の記述 内容 --------------------+------------------------------------------ 0 エンティティの始まり LINE 図形の種類(直線グループ) 8 テーブル参照 NT4WORP000 レイヤー名(テーブルセクションに定義) 6 テーブル参照 CONTINUOUS 連続線 (LTYPEで定義) 10 Xスタートポイント 100.000000000000 値 20 Y(Z)スタートポイント 100.000000000000 値 11 Xエンドポイント 110.000000000000 値 21 Y(Z)エンドポイント 100.000000000000 値 --------------------+------------------------------------------ 2006.02.04(土) DXF形式の図面データで、図形情報と思われる記述を探しました。 作図は「鍋CAD」です。 1) 長さ10mmの水平な直線。始点の座標がX=100、Y=100の場合。 DXF中の記述 内容 --------------------+---------------- LINE 直線 8 ? NT4WORP000 ? 6 ? CONTINUOUS 連続線 10 X始点座標 100.000000000000 値 20 Y始点座標 100.000000000000 値 11 X終点座標 110.000000000000 値 21 Y終点座標 100.000000000000 値 --------------------+---------------- NCコードの表記例:現在の座標をX=100,Y=100とした場合 G01 X110 Y100 2) 半径10mmの円。中心の座標がX=100、Y=100の場合。 DXF中の記述 内容 --------------------+---------------- CIRCLE 円 8 ? NT4WORP000 ? 6 ? CONTINUOUS 連続線 10 X中心座標 100.000000000000 値 20 Y中心座標 100.000000000000 値 40 半径 10.000000000000 値 --------------------+---------------- NCコードの表記例:現在の座標をX=100,Y=90とした場合 G02 X100 Y90 I0 Y10 3) 半径10mmの円弧(上半分)。中心の座標がX=100、Y=100の場合。 DXF中の記述 内容 --------------------+---------------- ARC 円弧 8 ? NT4WORP000 ? 6 ? CONTINUOUS 連続線 10 X中心座標 100.000000000000 値 20 Y中心座標 100.000000000000 値 40 半径 10.000000000000 値 50 始点中心角 0.000000000000 値 51 終点中心角 180.000000000000 値 --------------------+----------------+------------------------------------ NCコードの表記例:現在の座標をX=90,Y=100とした場合 G02 X110 Y100 R10 NCコードの表記例:現在の座標をX=110,Y=100とした場合 G03 X90 Y100 R10 などが該当するよに思います。 2006.02.03(金) 刃先がテーブルまであと0.5mmのところでスピンドルを止めました。 ヒヤリ」としました。 Z軸の移動量の事前確認を見やすくする為に、XYZをグラフ 中で3次元的に表示する事をやめ、X-Zグラフを追加しました。 ステッピングモータやスピンドルモータの電源を遮断する緊急時停止スイッチも早め に用意した方がよさそうです。 タイトルバーにプログラムを更新した日付を表示。バージョン表示の代わりです。 CNC Appのフォームロード関数内に // フォームのタイトルに日付を表示 this.Text ="CNC (2006.02.03(金))"; を追加しました。 2006.02.01(水) CNC AppでNCコードにより、上の2つのメッセージボックスを出すようにしました。 1) M03とM04で「スピンドルを回転してください。」 2) M05で「スピンドルを停止してください。」 「OK」をクリックするまでは、次に続くNCコードは実行されません。 "M"コードの解析・実行ルーチンに if(new_op == "03" || new_op == "04") { // 工具CW/CCW回転ON MessageBox.Show("スピンドルを回転してください。"); } if (new_op == "05") { // 工具CW/CCW回転OFF MessageBox.Show("スピンドルを停止してください。"); } を追加しました。 MessageBox.Show("...");の部分を、EZ-USBマイコンでリレーをON/OFFするプログラム に書き換えれば、スピンドルの自動 ON/OFF が可能です。 しばらくは手動です。 2006.01.31(火) 円の平面切削の5回目を行いました。 昨日と同様にボールベアリングが底までぴたりと入り、深さの誤差も良い結果になり ました。 仕上がり: 項目 測定値 誤差 ---------------+------------+------------ X方向の直径 12.00mm 0mm Y方向の直径 12.00mm 0mm 深さ 1.99mm 0.01mm 次の対策で、加工精度が向上した様に思います。 1) X、Y、Zのジブを調整しました。 特にヘッドとコラム間のガタツキが多くなっていました。 2) 導通テスターを使ってZ軸の原点設定をしました。 1. テスターの測定用クリップをワークと工具のそれぞれに接続します。 2. 工具を0.01mmづつ 降下させます。 3. 導通ブザーが鳴ったところをZ軸の原点にします。 スピンドルと本体間が絶縁されている為、この方法が使えました。 3) 切削にオイル(5-56)を使用しました。 2006.01.30(月) 円の平面切削で、ボールベアリングが底までぴたりと入りました。 少しでも斜めに なると入らず、取り外しが出来ません。 左から3番目は、外周のみ反時計回りになるようにNCコードを変更し、1面を切削す る毎にオイルを吹きかけ切子の掃除をしながら切削しました。 仕上がり: 項目 測定値 設定値 ---------------+------------+------------ X方向の直径 11.99mm 12mm Y方向の直径 11.98mm 12mm 深さ 2.07mm 2mm 0.05mmづつ工具を降下し、ワーク表面を少し切削した位置をZ原点としたために、深 さの誤差が大きくなっています。 左から4番目は、昨日と同じNCコードで時計回りです。 1面を切削する毎にオイル(5-56)を吹きかけ、オイルと切子の中でエンドミルが回転 し移動していました。 仕上がり: 項目 測定値 設定値 備考 ---------------+------------+---------+------------- X方向の直径 11.99mm 12mm Y方向の直径 11.99mm 12mm 深さ 1.87mm 2mm Z原点ずれ Z原点がワーク面より少し上がっていたため、1ループ目の平面切削では、刃先がワ ークの表面すれすれをかすめていました。 9ループ分の切り込み量+の深さになり ました。 ワーク面と刃先の位置調整が課題です。 切削時にオイルを使用することで、切削音が小さくなり、加工面の肌理が細かく、バ リも少なく仕上がりました ワークの振動やガタツキが減少した為に、加工の精度が向上したように思います。 底面の切削跡がステレオ印刷の様に、見る向きにより立体的に動き綺麗です。 ボールベアリングの外径は、ノギスで測ったところ12.00mmでした。 ノギスのデプスバーでは測定値のバラつきが大きいため、 ベアリングの厚み -) ベアリングを取り付けた時のワーク底面とベアリング上面間の厚み +) ワークの厚み ------------------------------------------------------------------------- = 深さ で計算しました。 2006.01.29(日) サブプログラムの多重コールで、直径12mmの円を切削しました。 今回切削したのは右側で、左側は2006.01.24(火)に切削したものです。 使用したエンドミルは2mmです。 仕上がり: 項目 測定値 設定値 ---------------+------------+------------ X方向の直径 11.91mm 12mm Y方向の直径 11.86mm 12mm 深さ 2.23mm 2mm 外径が12mmのボールベアリングを挿入したところ、1.8mm入ったところで止まりまし た。 入れるとき、Y方向がきつめでした。 直径と深さの誤差について、原因の調査と対策が必要です。 NCコード 2006.01.28(土) サブプログラムからさらに別のサブプログラムをコールするNCコードで、同心円状の 切削ルートを描画しました。 外周は半径=25mmで、内側の円は半径が5mmづつ減少します。 5つの同心円を切削すると外周に戻り、0.2mm掘り下げ再び5つの同心円を切削しま す。 5回繰返すことで深さの合計は1mmになます。 NCコード CNC AppのGコード解析・実行関数を再入可能なプログラムにすることで、NCコードの サブプグラムの多重化が出来ます。 2006.01.27(金) マイクロ・フライステーブル、ノートPC、モータードライブ回路(黒いケース)、 USBケーブル、モーター用電源(ACアダプター。 5V 2A)です。 据え置きPCで作成したCNC.exeだけをノートPCにコピーしたところ、モーターが動か ず、CNC Appプロジェクトの「Release」フォルダーごとコピーすることで、モーター が動くようになりました。 フライス盤のすぐそばにPCがあると、刃先の位置調整の時に重宝します。 モーターリードと延長ケーブルを接続しているコネクター(黒色)はロック付で、 機械の移動の時など簡単に脱着が出来て意外と便利です。 2006.01.24(火) サブプログラムのループ処理で、半径5mmと半径4mmの同心円を0.1mmづつ掘り下げ 、幅3mm深さ2mmの溝を切削しました。 Φ2mmのエンドミルを使用。 傘刃のキリに交換しバリを取り、再度Φ2mmのエンドミルを装着して外径と内径を半 径にして0.01mmづつ切削し、ボールベアリングを挿入しました。 ボールベアリングは外径が12mm、内径が6mm、厚みが4mmです。 切削コード 2006.01.23(月) Gコードのサブプログラム処理用にM98、P、L、O、M99の解析と実行を追加しました。 ループ回数をm98()関数内で処理するようにしたため、実行順が以下の様になります 。 メインプログラム: 0→1→2→3→┐ ┌→ 4→5→6(終了) ↓ │ サブプログラム: 7→8→9→10→11┐ ↑ │ └ 30回繰り返し ┘ サブプログラムをループ回数分繰返した後に、メインプログラムに戻ります。 2006.01.22(日) Gコードのサブプログラム処理の為、ソースコードファイルを読み込んで文字列の 配列要素に1行づつ格納するようにしました 。 従来は、ファイルから1行読み込む毎にコードを解析し実行していました。 これからは、配列を行ったり来たりしながら1行づつ解析し実行します。 配列に入るコードの参考: 半径5mmの円を0.1mmづつ掘り下げて深さ3mmの溝にします。 ファイル実行前にX0、Y0、Z10に移動しスピンドルを回転させます。 添字 配列要素 ┏━━━━━━━━┓(メインプログラム開始) 0 ┃G00 Z1 ┃(刃先をワーク面上1mmまで降下) ┠────────┨ 1 ┃G00 X5 Y0 ┃(X方向へ移動) ┠────────┨ 2 ┃G01 Z0 F50 ┃(刃先をワーク面まで切削速度で降下) ┠────────┨ 3 ┃M98 P10 L30 ┃(サブプログラムコール。30回繰り返し) ┠────────┨ 4 ┃G00 Z1 ┃(刃先をワーク面より1mm上昇) ┠────────┨ 5 ┃G00 X0 Y0 ┃(ワーク座標XとYの原点に移動) ┠────────┨ 6 ┃M30 ┃(メインプログラム終了) ┣━━━━━━━━┫ 7 ┃O10 ┃(サブプログラム開始) ┠────────┨ 8 ┃G91 Z-0.1 ┃(増分値移動でZを0.1mm降下) ┠────────┨ 9 ┃G90 ┃(絶対値移動に設定) ┠────────┨ 10 ┃G02 X5 Y0 I0 J5 ┃(円弧移動。半径5mm) ┠────────┨ 11 ┃M99 ┃(サブプログラム終了) ┗━━━━━━━━┛ 実行順 0→1→2→3→7→8→9→10→11┐ ↑ │ └─ 30回繰り返し ─┘ ↓ └→4→5→6(終了) 1) メインプログラムの実行位置(添字No)を記憶する変数。 繰り返し実行中は添字No=3に留まります。 2) サブプログラムの実行位置(添字No)を記憶する変数。 配列要素を順次検索し"O10"を見つけたらその配列の添字Noを代入し、"M99"が見 つかるまでサブプログラムを実行します。 3) サブプログラムが終了したら、メインプログラムの実行位置を記憶する変数が示 す配列3のコードを実行します。 4) L30が示す回数分サブプログラムを実行したら、メインプログラムの実行位置を記 憶する変数の値に+1して、配列4からメインプログラムを続行します。 2006.01.21(土) CNC Appに、 G90:絶対座標値による移動。 G91実行前のモード(絶対座標値制御)に復帰します。 G91:増分値による移動。 現在の座標値に増分値を加えます。 G92:ワーク座標の変更。 現在のワーク座標を指定した値に変更します。 等の処理を追加しました。 2006.01.20(金) 設定値に対する送り速度の直線性を測定しました。 300(mm/min)以下なら誤差が少なく使用できます。 ステッピングモータが脱調する速度に対して、約20%の余裕をみた各軸の最大送り速 度が、X=100(mm/min)、Y=100(mm/min)、 Z=50(mm/min)で、CNC Appとしては直線性に 余裕があります。 また、パルス幅の揺らぎは±2(%)以下で、使用上問題にならない量だと思います。 送り速度直線性の測定結果: 速度設定 パルス幅(msec) 速度換算値 (mm/min) (3パルス分) (mm/min) 誤差(%) -----------+----------------+-------------+----------- 10 186.0 10.08 0.81 20 92.0 20.38 1.90 50 36.8 50.95 1.90 100 18.4 101.90 1.90 150 12.4 151.21 0.81 200 9.2 203.80 1.90 250 7.4 253.38 1.35 300 6.4 292.97 -2.34 350 6.0 312.50 -10.71 400 6.0 312.50 -21.88 パルス幅制御のEZ-USBマイコンへの移行は、ステッピングモータの高性能化の時に再 検討します。 バックラッシュ補正の効果、移動量、送り速度などCNC Appが制御する物理的な諸特 性が、P基板のパターン切削機として実用的な値を示すようになり、棚上げしたGコー ドの拡張が再開できそうです。 2006.01.19(木) ノギスの本尺の内・外測定アゴを高さ自由クランプでワークテーブルに固定し、 Z方向の移動量を測定しました。 アゴの外側の端面(3mm×26mm)で直立します。 Z軸送りねじのピッチは、998μmに設定しました。 結果: 項目 平均値(mm) 誤差(%) コード -------------------+------------+---------+------------------------ 直線 10mm 10.00 0.00 G01 Z10 F50 直線 20mm 20.01 0.05 G01 Z20 F50 移動誤差補正の概略説明(2006.01.14(土))を図示すると下記になります。 ステップパルス生成のブロック線図(X,Y,Z共通) ┏━┓ ┏━┓ ┏━┓ 現在座標────→┨−┠────→┨+┠─┬─┨+┠─→ステップパルス数出力 ┗┯┛ ┗┯┛ │ ┗┯┛ (移動方向により±) 移動先座標────→┘ ↑ │ ↑ ┏━┓ │ │ │ 現在座標のパルス数換算─→┨−┠──┘ │ │ ┗┯┛ │ │ ステップパルス累計────→┘ │ │ ↑ │ │ │┏━━┓ │ │ └┨+=┠←─────────────┘ │ ┗━━┛ │ a │ S1 ○────────┤ バックラッシュ──────○── ┏━━━┓ │ ○──┨−1倍┠─┘ b ┗━━━┛ *S1は移動方向に変化があった時、移動方向によりa側又はb側に接続します。 *バックラッシュを含まないステップパルス数を累計し、次回のステップパルス生 成の時に使用します。 2006.01.18(水) Y方向の移動量を測定しました。 結果: 項目 平均値(mm) 誤差(%) コード -------------------+------------+---------+------------------------ 直線 10mm 10.01 0.1 G01 Y10 F50 直線 20mm 20.00 0.0 G01 Y20 F50 円弧 直径10mm 10.00 0.0 G02 X0 Y0 I0 J5 F50 円弧 直径20mm 20.00 0.0 G02 X0 Y0 I0 J10 F50 Y軸送りねじのピッチは、X軸と同じ 997μmに設定しました。 円の直径の測定方法: 1) CNC Appの仮想3軸系関数の中で、X方向の移動ステップパルス数の計算結果を強 制的に 0 にして、X方向に移動しないようします。 2) CNC Appの送り方向の切り換えルーチンにプログラムのブレークポイントを設定し ます。 3) 円弧移動のコードの実行を再開します。 4) 2)で設定したポイントでプログラムがブレークしたら、ノギスの測定端をコレット に取り付けたドリルの柄に当て、ノギスの表示を 0 にリセットします。 5) プログラムを続行します。 6) 円弧移動コードが終了し、ノギスの表示が円の直径になります。 2006.01.17(火) 円弧補間計算の現在位置更新が、円と垂直軸及び水平軸との交点付近で行なわれてい なかったので修正しました。 対策:角度の増分毎に現在位置を更新するように変更。(更新条件の判断文を削除) 結果: 項目 平均値(mm) 誤差(%) コード -------------------+------------+---------+------------------------ 直線 10mm 9.99 -0.1 G01 X10 F50 直線 20mm 20.00 0.0 G01 X20 F50 円弧 直径10mm 9.99 -0.1 G02 X0 Y0 I0 J5 F50 円弧 直径20mm 20.01 0.1 G02 X0 Y0 I0 J10 F50 ようやくステッピングモータの1ステップの誤差(約10μm)になりました。 2006.01.16(月) 移動誤差を改善しました。 対策:ステップパルス数計算で四捨五入を実施。 結果: 項目 平均値(mm) 誤差(%) コード -------------------+------------+---------+------------------------ 直線 10mm 9.97 -0.3 G01 X10 F50 直線 20mm 19.94 -0.3 G01 X20 F50 円弧 直径10mm 9.97 -0.3 G02 X0 Y0 I0 J5 F50 円弧 直径20mm 19.95 -0.25 G02 X0 Y0 I0 J10 F50 誤差が-0.3%に揃ったので、送りネジのピッチを1000μmから997μmに変更します。 結果: 項目 平均値(mm) 誤差(%) コード -------------------+------------+---------+------------------------ 直線 10mm 9.99 -0.1 G01 X10 F50 直線 20mm 20.00 0.0 G01 X20 F50 円弧 直径10mm 9.98 -0.2 G02 X0 Y0 I0 J5 F50 円弧 直径20mm 20.00 0.0 G02 X0 Y0 I0 J10 F50 円弧直径10mmの誤差が大きめですが、いまは改善のネタが品切れということもあり、 しばらくは目をつむります。 上記はX軸のデータで、Y軸とZ軸の移動量をどのように測定すればよいのか、これから 検討します。 2006.01.15(日) X方向の移動量を測定しました。 項目 平均値(mm) 誤差(%) コード -------------------+------------+---------+------------------------ 直線 10mm 9.98 -0.2 G01 X10 F50 円弧 直径10mm 9.94 -0.6 G02 X0 Y0 I0 J5 F50 円弧 直径20mm 19.92 -0.4 G02 X0 Y0 I0 J10 F50 もう少し誤差を改善できればと思います。 2006.01.14(土) CNC Appに移動誤差の補正処理を追加しました。 移動誤差補正の概略 1) 前回移動した座標と、今回移動する座標の差分(μm)を計算します。 2) 差分をステップパルス数に換算します。 3) 原点から前回移動した座標までの距離をステップパルス数に変換します。 4) 原点から前回までに実際の移動に使用したステップパルス数の累計(移動方向に より+/−あり)したパルス数を 3) で求めた値から減算します。 5) 2)の差分に3)の差分を加えた値が、移動誤を差補正したパルス数です。 6) 今回移動方向が変わる場合は、5)の結果にバックラッシュに相当するパルス数 を加えます。 結果: G02 X0 Y0 I0 J5 F50 (半径5mmの円) でテーブルを移動させました。 直尺をテーブルに置き、ケガキ針をコレットに挿入、ルーペで見ながら測った直径は 10mmでした。 さらに測定の精度を上げたいと思います。 ちなみに半径5mmの円は、円周を約3000に分割して移動します。同じ回数の移動 誤差の補正を行っていることになります。 バックラッシュは補正により3軸とも平均値で3μm以内に入り、バラツキは平均値 ±5μm以内に入りました。 補正なし 補正あり 補正量 (単位μm) ------+----------+----------+----------------------------- X軸 14.0 -2.0 14 Y軸 40.4 2.8 42 Z軸 138.2 -1.6 137 2006.01.09(月) ステッピングモータ駆動データをバッファに生成する共通ルーチンが、「ガッガッ」 「ピチッピチッ」という音を軸のジョイント部分から出さなくなり、初切削と同様の 動きをするようになりました。 1) 共通ルーチン(仮想3軸関数)は、仮想の3軸移動データVX、VY、VZを使用します。 2) 仮想3軸関数は、VX >= XY >= VZ の条件でモータ駆動データを生成するため、 実際の各軸の移動量を上記の条件を充たす為のアルゴリズムで組み換えます。 3) バックラッシュやパルス出力に用いる諸々の制御パラメータも同様のアルゴリズ ムで組み換えます。 4) 仮想3軸関数をコールします。 5) 同関数が終了すると、関数呼び出し前とは逆のアルゴリズムで、モータ駆動データ や制御パラメータを実際の3軸系に組み換えます。 実3軸系(各軸の移動量、制御パラメータ) ↓ 仮想3軸系に組み換え ↓ ┏━━━━━━━━━┓ ┃ 仮想3軸関数 ┃───────────┐ ┗━━━━━━━━━┛ │ ↓ ↓ 制御パラメータ 実モータ駆動データに組み換え ↓ ↓ 実3軸系に組み換え EZ-USBマイコンへ出力 ↓ モータ駆動 これで、move_table関数にあった X、Y、Z の大小関係でそれぞれ使用していた6つの ルーチンが1つにまとまり、変更前に800行以上あったプログラムが約400行にサイズ ダウン。 改造がやりやすくなりバグも減るはずです。(祈願バグ撲滅) 2006.01.06(金) EZ-USBマイコンでステッピングモータの駆動パルス幅制御を行う為に、CNC Appの関数 move_table()を改造しています。 各軸の移動区間毎にパルス数を求めると直ちにモータ制御信号を出力していた方法を 、モータ駆動データをバッファリングし、パルス幅時間データとともに一括してEZ- USBマイコンへ転送する方法に変更します。 EZ-USBマイコンは、受信したパルス幅時間データをカウンタ値に変換後タイマーカウ ンタに設定し、タイマー割込みを許可します。 タイマー割込み毎にモータ駆動データをそのまま指定ポートへ出力します。 バッファリングするデータの内容です。 1ステップ分のデータを4バイトで構成します。 データ順 内容 -------------+---------------------------------------------------------- 1バイト目 パルス幅(μsec)の下位1バイト 2バイト目 パルス幅(μsec)の上位1バイト 3バイト目 X軸駆動データ。 ポート出力下位4ビット(A相:2bit,B相:2bit) Y軸駆動データ。 ポート出力上位4ビット(A相:2bit,B相:2bit) 4バイト目 Z軸駆動データ。 ポート出力下位4ビット(A相:2bit,B相:2bit) A軸駆動データ。 ポート出力上位4ビット(A相:2bit,B相:2bit) byte型の配列を4バイト毎のブロックに分け、1ブロックに1ステップ分のデータを 格納します。 Gコード1行分のパルスデータ(例G01 X10 Y10) │←───────────────────────── ─ ─ ──→│ 第1ブロック 第2ブロック 第3ブロック │←─────→│←─────→│←─────→│ ┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳ ━ ━ ━━━┓ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┗━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻ ━ ━ ━━━┛ ↑ ↑ ↑ ↑ └┬┘ │ └─ Z、Aポート出力データ │ └── X、Yポート出力データ └── パルス幅時間データ(μsec) Gコード1行分かバッファー分のデータを生成すると、順次EZ-USBマイコンへデータ を転送します。 取り合えずEZ-USBマイコン用のプログラムは変更せずに、CNC App内でバッファリン グしたデータを用いて、ポート出力制御と、PCの内臓カウンターによるパルス幅の制 御を行い、X>=Y>=Zの移動条件でテーブルとヘッドの移動を確認しました。 X>=Z>=Yなど残りの5つの条件でも使えるようにルーチンの共通化を行う予定です。 2006.01.03(火) CNC Appのウウィンドが他のウィンドウの後ろに隠れ、再び前面に戻ったときにグラ フの移動ルートが消えてしまう問題を、GraphicsのDrawImageメソッドを使う方法か らpictureBoxのImageプロパティを使う方法に変更して対策しました。 このCNC Appは切削中など特にWindows OS下で微少な時間単位の管理が必要な為、他の Appは終了させておく必要があります(OutlookExpress、アンチウィルスのスケジュー ルなど)。 マウス操作の影響も心配です。 切削中は、PCに触れないことが原則で、 ウィンドを切り換えることは無いと思いますが、消えたままのグラフは精神衛生上よ くないので対策しました。 プログラムメモ ----------------------------------------------------------------------------- // App起動時のメインフォームのロードでグラフィックイメージを使えるようにする pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); ----------------------------------------------------------------------------- // グラフを書く場合 Graphics g = Graphics.FromImage(pictureBox1.Image); // ハンドルの取得 Pen MyPen = new Pen(Color.Blue, 1); // ペンの生成 g.DrawLine(MyPen, x1, y1, x2, y2); // 線の描画 g.Dispose(); // ハンドルを廃棄 pictureBox1.Invalidate(); // 再描画 Application.DoEvents(); // OSに一時的に戻し画面に表示 ----------------------------------------------------------------------------- // グラフ全体を消去し、再描画に備える pictureBox1.Image.Dispose(); // グラフィックイメージを廃棄 pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); ----------------------------------------------------------------------------- // ペンの色を変更する場合 MyPen.Color = Color.WhiteSmoke; -----------------------------------------------------------------------------
CNCの実験へ:
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合にのみ複製が可能です。
inserted by FC2 system