プリントしないプリント基板 (PCB) とやらです。

現状


ふとやってみよう、と思ったので、0.8mm のエンドミルを使うべきところ (穴あけ) に 1mm のエンドミルを使っており、ランドが消滅していたりする。実際はシミュレーションとほぼ同じように削れたので、0.8mm にすれば解決するだろう。

Eagle -> G-code

Eagle -> G-code は直接出力する ULP が公開されているものがあったので、これを使ってみた。キデッジ ブログ  個人製造雑記(MINI_CNC) CNCとEAGLEによる片面プリント基板の自作法!, キデッジ ブログ  個人製造雑記(MINI_CNC) ドリル、外周カット用ULP version2!

これらのうち以下だけを使った。

  • 1_linepattern_gcode_bottom.ulp
  • 2_drill_holes_cutoff_v2.ulp

1_linepattern_gcode_bottom.ulp

  1. スピンドルスピードが設定されておらず回転しないでぶつかるぞ

X軸を中心に反転した座標で吐かれるので、Y軸原点にオフセットが必要 (X軸は+方向に、Y軸は-方向に進む)。左下が (0, 0) なら、左上 (0, +Y) を作業座標としてゼロにセットする必要がある。

--- 1_linepattern_gcode_bottom.txt	2015-09-07 01:19:30.000000000 +0900
+++ 1_linepattern_gcode_bottom.ulp	2015-09-06 23:23:36.000000000 +0900
@@ -42,7 +42,7 @@
 //////////////////// ユーザー設定 ////////////////////
 //////////////////////////////////////////////////////
 
-string  DefaultSuffix   = "_bot.tap";   //お使いのCNC似合わせた拡張子に変更してください
+string  DefaultSuffix   = "_lines.gcode";   //お使いのCNC似合わせた拡張子に変更してください
 real    Width           = .3;           //実際に削る線幅を指定してください
 real	Lift            = 1;            //空中移動時の高さを指定してください
 real	Depth           = .1;          //実際に削る深さを指定してください
@@ -129,7 +129,7 @@
          printf ("G0Z%2.3f\n",Lift);
 //         printf ("G0Z0.23\n");
          printf ("G0X0Y0\n");
-         printf ("M03\n");
+         printf ("S10000 M03\n");
          printf ("\n");
          printf ("(Begin)\n");
 }

2_drill_holes_cutoff_v2.ulp

  1. G90 が指定されておらず、機械側のモードがG91だと死ぬぞ
  2. 最初に原点復帰しないせいで原点以外から再開しようとすると死ぬぞ
  3. スピンドルスピードが設定されておらず回転しないでぶつかるぞ

dtool 以下の穴についてはG-codeが生成されない。cut_up がなんかおかしくてエンドミル一本折ったので少し大きめに指定するといいでしょう……

--- 2_drill_holes_cutoff_v2.txt	2015-09-07 01:19:20.000000000 +0900
+++ 2_drill_holes_cutoff_v2.ulp	2015-09-07 00:16:18.000000000 +0900
@@ -12,13 +12,13 @@
 //////////////////// ユーザー設定 ////////////////////
 //////////////////////////////////////////////////////
 
-string  DefaultSuffix   = "_cut.tap";           // お使いのCNC似合わせた拡張子に変更してください
+string  DefaultSuffix   = "_cuts.gcode";           // お使いのCNC似合わせた拡張子に変更してください
 real    dtool           = 0.8;                  // エンドミルの直径を指定してください
 real    zstep           = 0.4;                  // Z軸のステップ値を指定してください
-real    depth           = -1.5;                 // 基板の厚さを指定してください
-int    fvalue          = 200;                   // XY軸のF値を指定してください
+real    depth           = -1.7;                 // 基板の厚さを指定してください
+int    fvalue          = 80;                   // XY軸のF値を指定してください
 int    z_fvalue        = 50;                    // Z軸のF値を指定してください
-real 	cut_up 		= 1;  			// 空転移動時の高さを指定してください
+real 	cut_up 		= 2;  			// 空転移動時の高さを指定してください
 int     drill_cut       = 1;                    // 取り付け穴のパスが必要ない場合は0にしてください
 int     drill_on        = 1;                    // エンドミルによるドリルのオンオフ
 int     pecker_mode     = 1;                    // キツツキドリルのオンオフ
@@ -764,7 +764,10 @@
   {
     line_counter();
     checkturn_right_or_left();
-    printf("T2 M06 S0 M03\n");
+    printf("G90\n");
+    printf("G0Z2\n");
+    printf("G0X0Y0\n");
+    printf("T2 S10000 M03\n");
     
     if (drill_cut == 1)
     {

他人がつくったG-Code生成器は本当に良く良く確認したほうがよくて(確認したつもりでもつらいことがおきる)、特に以下は絶対にチェックする必要がある

  • OpenSCAM で開いて意図した通りのパスになっているか
  • 冒頭らへんに座標指定 G90 があるか (G90=絶対座標, G91=相対座標)
  • 冒頭らへんに原点復帰 (G0Zxx, G0X0Y0) があるか
  • 冒頭らへんに M3 S10000 とがあるか
  • G-code 全体を見て、X軸Y軸が増えていくか減っていくか。(作業原点の設定位置に関わる)
  • 実行直前に G-Code 実行器 (grbl) をリセットすること

OpenSCAM で確認したから安心、とはいかない。G-Code 実行器はモーダルなため、何かしらの状態が残っていると困ったことになることがある。

そして、座標指定まわりがおかしいと、本当にとんでもないことになるので一旦 Z 軸をあげた状態で動かしてみるといい。

実際の切削

基板をしっかり固定するのが重要なのは言うまでもないけど実際難しい。基板自体が反ってしまっている場合、両面テープで貼ろうとしてもどうしても浮いてしまうし、クランプするとクランプした周辺だけ浮かない状態になって削れなくなってしまう。

切削で楽をしようとするなら、基板作成の段階のデザインルールで0.5mmぐらいのルールをしくのがよさそう。ユニバーサル基板の代わり(自動配線したいだけ) なら、このほうが圧倒的に楽

あと処理

結構バリがでるのでなんらかの方法でとりたい。

  1. トップ
  2. tech
  3. CNC フライスで基板をつくる
▲ この日のエントリ