uchan が 2021年07月26日21時28分28秒 に編集
初版
タイトルの変更
KiCad + FlatCAM で楕円を削る
タグの変更
FlatCAM
KiCad
プリント基板
基板自作
メイン画像の変更
記事種類の変更
セットアップや使用方法
本文の変更
KiCad で楕円の穴が必要な部品を使った場合、ドリルデータに楕円が出力されますが、そのままでは FlatCAM で楕円を扱えません。本記事では、Gerber X2 形式でドリルデータを出力することで、楕円の穴を FlatCAM で扱う方法を説明します。 ## 問題背景 [KiCad + FlatCAM で KitMill 用の基板切削データを作る](https://elchika.com/article/3bfd48b8-24e8-4455-b2dd-c3b582fd0c23/) という記事を書きましたが、この記事の方法だけでは、下図のような楕円を必要とする部品を上手く扱えません。  このような部品を含む基板パターンで、先の記事の通りにファイルを出力すると、ドリルデータに楕円穴も含まれて出力されます。そのまま FlatCAM でドリルデータを開くと、下図のように楕円の両端に穴があるように認識されてしまいます。  本来、2 つずつの穴は楕円として繋がっていて、長細い穴が空くはずなのです。しかし、このまま加工すると、単に 2 箇所にドリルが打たれるだけで、楕円になりません。 ## 対処方法 この問題に対処するには 3 つの方法があると思います。(他にもあるかもしれませんが) - 部品の端子を曲げて、表面実装で対応する - 穴を空ける必要を無くす、という発想 - ドリルで穴を空けた後、手動加工により穴を広げる - FlatCAM が対応する形式で楕円データを出力する 本記事では 3 番目のやり方を説明します。 大まかな手順としては、KiCad で楕円のドリルデータを Gerber X2 形式で出力し、FlatCAM で「ドリルによる穴開け」ではなく「切削による穴開け」として対処します。 ## ドリルデータから楕円を削除 ドリルデータは、先の記事では Excellon 形式で出力しました。しかし、FlatCAM は Excellon に含まれる楕円を認識できません[^1]。そこで、楕円のドリルデータをガーバー形式で出力する、という方法を用います。必要なドリルデータは次の 2 つです。 [^1]: https://muut.com/i/flatcam/usage:can-i-make-oval-holes - Excellon 形式の普通の穴データ(通常のドリル加工用) - ガーバー形式の楕円の穴データ(切削による加工用) 普通の穴と楕円の穴をファイルとして分離するということです。それらが同じファイルに含まれてしまっていると、普通の穴まで切削加工(Mill Holes)の対象になってしまいます。普通の穴は従来通り、ドリルで加工したいですからね。 Excellon 形式の普通の穴データを作るには、まず Pcbnew で基板パターンを開き、Excellon 形式でドリルファイルを生成します。この Excellon ファイルには普通の穴も、楕円の穴も含まれています。 このファイルをテキストエディタを開き、楕円データを削除します。難しそうに思えるかもしれませんが、ドリルファイルを見る限り、楕円は最後の方にまとまるようなので、それほど心配は要らないでしょう。 Excellon 形式のドリルファイル(*.drl)の中身はこのようになっています。 ``` M48 《中略》 FMAT,2 METRIC T1C0.800 T2C1.000 % G90 G05 T1 X004374Y056900 《中略》 X071620Y021340 T2 X005580Y021340 《中略》 X071620Y008640 T1 G00X005860Y068620 M15 G01X005860Y066420 M16 G05 G00X011760Y070770 M15 G01X009560Y070770 M16 G05 T2 G00X011910Y064520 M15 G01X009410Y064520 M16 G05 T0 M30 ``` Excellon 形式について詳しくないですが、どうやらこんな意味のようです。 | 命令 | 意味 | |-------|-------| | T1C0.800 | ツール 1 の定義。T1 = 0.8mm | | T2C1.000 | ツール 2 の定義。T2 = 1.0mm | | T1 | ツール 1 を選択 | | T2 | ツール 2 を選択 | | X004374Y056900 | X 座標 004374、Y 座標 056900 | ファイルの先頭にツールの定義などがあり、その後で普通の穴の座標がずらっと並びます。穴は、ドリル交換を最小にするために、径ごとにまとまって出力されています。登場する穴径の種類が 2 種類だったので上記のように T2 まで登場しています。種類数が変われば、その数だけ T* が出現するはずです。 普通の穴の並びに続き、楕円の穴が登場します。上記の例では、T1、T2 の後、T1 が再度登場する行が楕円の始まりです。1 つの楕円データだけを抜き出すと、以下の通りです。 ``` T1 G00X005860Y068620 M15 G01X005860Y066420 M16 G05 ``` 座標 (005860, 068620) から (005860, 066420) に向かう楕円を表しています。座標を良く見ると Y 座標だけが変化しているので、縦方向の楕円だということが分かります。 これらの、楕円を表す行をすべて削除してください。削除すると、最終的に次のような内容になります。 ``` M48 《中略》 FMAT,2 METRIC T1C0.800 T2C1.000 % G90 G05 T1 X004374Y056900 《中略》 X071620Y021340 T2 X005580Y021340 《中略》 X071620Y008640 T0 M30 ``` これで「楕円を含まないドリルファイル」が完成しました[^2]。 このファイルを FlatCAM で読み込むと、楕円部分だけ穴が空かないことが分かります。  [^2]: Excellon ファイルをテキストエディタで修正するのではなく、Pcbnew で「楕円パッドを含まないパターン」を作り、ドリルファイルを出力する方法もあります。お好きな方を選択してください。個人的には Excellon ファイルの修正の方が楽だなと思います。 ## 楕円データをガーバー形式で出力 「楕円を含まないドリルファイル」が完成したので、次は「楕円だけを含むガーバーファイル」を作ります。 それには、まず Pcbnew で「楕円パッドだけを含む基板パターン」を用意します。これは、本来の基板パターンを作成した後、楕円パッド以外を削除することで作れます。本来の基板パターンを壊さないように、Pcbnew のファイルメニューから「名前を付けてコピーを保存」でコピーを作り作業すると良いでしょう。 楕円だけを含む基板パターンを作成できたら、ドリルファイルの生成画面で「Gerber X2」を選びます(下図)。  *-PTH-drl.gbr と *-NPTH-drl.gbr の 2 つのファイルが生成されます。前者はスルーホールの穴、後者は非スルーホールの穴を含んだファイルです。部品を取り付けるための穴は通常はスルーホールなので、後者のファイルはほとんどの場合に活躍しません。 ## FlatCAM で楕円データを切削 楕円だけを含むガーバーファイルを FlatCAM で開くと、次のような表示になります。(下図は、導体面のガーバーデータも読み込んであります)  Excellon 形式の穴はオレンジ色で表示されるのに対し、楕円はガーバー形式ですので、緑の線で表示されています。この緑の線を削れば、見事楕円の穴が空く、というわけです。 導体面を削るのと同様の流れで、FlatCAM で処理していきます。その際、下図のように、エンドミルの直径(Tool dia)を負値にするのがミソです。  このように設定し、Generate Geometry をクリックすると、下図のようにジオメトリオブジェクトが生成されます。  楕円の緑線の内側を赤い線が通っているのがポイントです。これが直径を負値にした効果です[^3]。Tool dia を正の値にすると、楕円の外側を削ることになってしまいますが、負にすることで内側を削れるのです。 次に、切削の設定をしますが、ここでは Tool dia を正の値に戻しておきましょう[^4]。  そして、穴を空けるので「Cut Z」は基板厚以上の値を設定し、Feed Rate もエンドミルが折れない程度の値に調整してください。 Generate で CNC プログラム(G code)が生成されます。  ここまで来れば、後は通常の手順で切削するのみです! [^3]: そもそも「負値」に設定できることを発見したのは、ひらめきです。 [^4]: ここで「Tool dia」を正に戻しておかないと、FlatCAM がバグります。