SyntaxHigh

Saturday, November 30, 2013

gcode.ulp のドリル

パターン切削中。Vカッターは先端が0.2mmフラットの40度のもの。
高さは削りながら手動で微調整する。
パターン削り残しがあったらカッターで調整するか深さを変えて再度削る

こんな感じで削っている。手順は、Googleで検索して出てくるが、
  1. Eagleでデザイン
  2. run gcode.ulp
  3. V字カッターでパターンを描く
  4. φ0.8mmのPCBカッター(ダイヤモンドの刀形)でドリル及び切り抜き
これだけ。Vカッターは、耐久性を考えて40度で三角錐になってるものを使っている。60度で1枚刃(といったらわかるだろうか)のVカッターを最初使っていた時は初心者だからかすぐに折れてしまっていた。ただし細い方がバリが少なく綺麗に削れるのでトレードオフ。

三角錐のものだと、切れ味が劣るためバリも大きくなってしまうので、バリができるだけでないようにゆっくり削る。

もう一つ、Eagleのgcode.ulpでdrill holeを書いたときになぜか変な形に削られてしまう問題が発生。
基板を止めるM3のねじ穴を作ろうとしたのだが、こんな感じで変な穴が空いてしまう。gcode.ulpの該当箇所を見ると

void CutDrillHole(real h_x, real h_y, real h_d, real tool, real cut_depth)
{ real raza=(h_d-tool)/2;
 real cut_down=0;
 for (int i = 0; i<cut_steps; ++i)
  {cut_down=cut_down+cut_depth/cut_steps;
  if (h_d > tool) 
   {printf("G00 X%.3f Y%.3f\n", h_x, (h_y+raza)*layer);
   printf("G01 Z-%.3f F%.1f\n",cut_down, cut_speed);
   printf("G02 X%.3f Y%.3f R%3f F%.1f\n", h_x+raza*layer, h_y*layer, raza, cut_speed);
   printf("G02 X%.3f Y%.3f R%3f F%.1f\n", h_x, (h_y-raza)*layer, raza, cut_speed);
   printf("G02 X%.3f Y%.3f R%3f F%.1f\n", h_x-raza*layer, h_y*layer, raza, cut_speed);
   printf("G02 X%.3f Y%.3f R%3f F%.1f\n", h_x, (h_y+raza)*layer, raza, cut_speed);
   printf("G00 Z%.3f\n\n", cut_up);
}}}

なんじゃこりゃ。G02が4つもある。本来円を描くだけなので、4行もいらないはず。h_d というのが半径だとすると、razaの定義は理解できる。

円の中心は h_x, h_y のはずなので、IJK表記を使って、

printf("G02 J%.3f F%.1f\n", raza, cut_speed);

これで円が1回だけ書かれるはず。layer は表の場合1,裏の場合-1とかだろう。やってみよう。

そもそも、なんでこんな形になっているんだろうか?