FlatCAMでPCBのガーバーデータからGコードを生成する

出荷待ちのSnapmakerという3Dプリンタ(過去の投稿)には、CNCフライス機能があり、ベークライトや紙フェノールの基板であれば、問題なく切削できそうである。設計したプリント基板をこのエンドミルで彫れないか画策している。

プリント基板設計は、Kicadを使用しているので、ここから出発してSnapmakerでフィニッシュするPCBのワークフローを考えてみる。

  1. Kicadでプリント基板設計
  2. Kicadからガーバーデータを出力
  3. どうにかしてフライス用のGコードに変換
  4. Snapmakerでプリント基板を切削

問題は3番であり、Kicadから出力するガーバーデータは、エンドミルで彫るパスは出力できない。(有料のEagleでは直接出力できるらしい?)

あとは、そもそもGコードを扱ったことないので、プリンタの精度はともかく4番まで到達するのが大変なのかどうなのかも良く分からない。

いろいろ調査していると、FlatCAMというGUIベースで、変換できるオープンソースがあるようなので、2~3番のワークフローをこのツールを使う前提でまず検証してみることにした。

ガーバー(Gerber)データとGコードの違い

どちらもベクター系のデータフォーマットだが、そもそも考え方が異なる。
ガーバー(Gerber)データは、設計した導線に対して、1本の線で経路を表現しており、属性として線幅が付与されている。

それに対して、Gコードはマシンの先端に装着している工具をXY方向に動かすための制御コードで、ガーバーが1本の線で表現するところを、外周を切削するパスを表現する必要がある。ガーバーデータからは線幅と使用する工具の径を加味して、線をオフセットする変換が必要になる。

FlatCAMは、上記の変換はGUI形式で変換&表示してくれるツールだと思われる。

flatcam01e-1

Python2.7+ライブラリとFlatCAMのインストール

FlatCAMはPython2.7のプログラムで作成されており、Windows、Mac、Linuxで利用することができる。

FlatCAM - 2. Installation

まずは、Python本体とライブラリをインストールする。以下の作業はUbuntu16.04で実施している。

> sudo apt install python2.7 python-pip python-qt4 python-matplotlib python-numpy python-shapely python-rtree python-simplejson python-svg.path

FlatCAM本体は、GitHubで管理されているので、クローンを取得する。

> git clone https://bitbucket.org/jpcgt/flatcam

FlatCAMの起動と初期設定

リポジトリのクローン内にスクリプトがあるので実行するだけでツールが起動する。

> cd flatcam
> ./flatcam

flatcam07

初期設定と言っても、長さの単位をミリとインチで選択できるので、最初に設定しておく。(Units項)ほかは都度設定すれば良いので、デフォルトのままとする。

flatcam08

Kicad設計からGコード出力までのワークフロー

サンプルデータを用意する

まずは、切削するためのサンプル回路を作成する。今回は、自作する回路で最も精度を要するであろうQFN64(ピン間距離が0.2mm)を使ったサンプルデータを用意した。(切削テストなので、動作しなくてもOK)

論理回路
flatcam01a

3Dプレビュー
flatcam01c

プリントパターンのみ
flatcam01d

まず、pcbnewで設計完了したら、パターンとドリルの原点を同一座標に設定しておく(下図の左上のシンボル)
flatcam02
flatcam01

ガーバーファイルの出力

プロット画面を起動し、出力するレイヤーにチェックを入れる。(今回は片面のF.Cuと外形のEdge.Cutsのみ)また、「原点に補助座標を使用」にチェックを入れると、設定した原点の座標系になる。「製造ファイル出力」を実行すると、ガーバーファイルが出力される。(チェックしたレイヤー数だけ出力される)
flatcam05

また、必要であれば、「ドリルファイルを生成」を選択してドリルデータも出力しておく。こちらも「補助座標」を選択すると、設定した原点の座標系になる。
flatcam06

FlatCAMでガーバーデータのロード

FlatCAMのファイルメニューから「Open Gerber...」を選択する。
flatcam09

出力したファイルを選択。
flatcam10

下図のような銅パターンの絵になるはずである。
flatcam11

工具の設定

「Project」タブから読み込んだガーバーファイルを選択した後、「Selected」タブを選択する。

下図のようなPCB用のVカッターを使う予定なので、これにあわせた寸法を設定する。
vcutter-1

FlatCAMでは、工具の径と深さを設定する必要がある。Vカッターの場合は、切削深さによって切削幅が変わるので、目的の幅とその深さをざっくり計算しておく。ただし、安物の先端工具とホビーなプリンタなので、少し大めの設定が必要だと思われるが、実際試行錯誤しないと最適サイズはわからないが、工具を入手したら、下図を元に概算はしておく必要がある。

vcutter2

  • Tool dia : 工具径だが、Vカッターの場合は切削幅を指定する
  • Width : 1固定
  • Pass overlap : 実際にやってみないとわからないが、少しラップしないと削り残しが発生しそうである

切削パスの生成

パネルでパラメータを設定したら、「Generate Geometry」を実行する。

flatcam12

実行すると、境界をオフセットした赤いパスが生成される。最小の切削幅が今回は0.2mmなので、Tool diaをそれ以下にしないと、パスが生成されないので注意する。

flatcam13

ほかにもパスを生成する機能があり、「Board cutout」は基板を切り抜くパスを生成できる。
*_isoというシェイプがProjectタブに追加される。

flatcam14
flatcam15

一旦Projectタブに戻って、上記で生成したシェイプを選択した後にSelectedタブを選択する。
ここでは、工具の高さ方向の距離と送りスピードなどを設定する。

  • Cut Z: 切削深さを負値で設定する
  • Travel Z: 工具を移動するときの高さ。低すぎると基板に当たってしまうので注意
  • Feed Rate: 工具の移動スピード。単位がミリならmm/minsらしい
  • Tool dia: 恐らくパス生成時に指定した径が自動的に設定されているはず。もちろん同じである必要がある。
    flatcam16

Generateを実行すると、下図のように切削パス(青色)、移動パス(黄色)が生成される。切削パスは工具径が加味された太さになっている。(外形の切り抜きパスは省略。基本同じ操作)
flatcam17

Gコードの生成

上記を実行すると、*_iso_cncという名前のシェイプが作成されるので、Projectタブで選択した後、Selectedタブを選択する。ここでは下部にあるExport G-Codeを選択するだけである。

選択すると、ファイル選択ダイアログが表示されるので、任意の場所にGコードのファイルを出力する。
flatcam20

Gコードの確認

生成したGコードをオンラインでプレビューできるサイトがあったので、確認してみる。

NC Viewer

生成したGコードのファイルを画面左上の"Drop NC File here"にドロップするとプレビュー確認できる。また、再生ボタンを押すと工具のアニメーションも表示できる。かなり優秀なサイトである。

flatcam22

まとめ

手数は必要ではあるが、割と簡単にGコード変換できる。プリント基板の絵とオフセットした切削パスをGUIで確認できるので、設定したパラメータが正しそうかその場で確認できるのは便利である。

やってみて気が付いたのは、このワークフローだと、あくまで「輪郭を切削している」だけある。このため、ノイズ源の浮島がたくさん生成されてしまう問題点がある反面、切削量は少なめなので工具の消耗を最小限にできるのと、切削時間削減になる。

次回は、輪郭だけでなく導体が存在してない部分を切削する方法をまとめる。