KiCadにおいてコイルパターンをPythonで作成する

# プリント基板上にコイルパターンを作成したい
　以下は、標準電波に似せた電波（磁力線）を疑似的に発信するプリント基板です。電波の届かない場所にある電波時計の時刻合わせを狙っています。渦巻きコイルに40/60kHzの電流を流します。このようなコイルパターンをKiCad[^201]上で作成する方法を探して試行しました。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/825ee985-d592-c2ec-4445-2f98b076150f.jpeg">
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/0b21debd-1989-67b6-652a-109ece48ef57.jpeg">

[^201]: [KiCad EDA](https://www.kicad.org/)

# KiCad Coil Creator
　KiCadでのコイルパターン作成は、ネットやGitHubで"kicad coil"などと検索すると、多くの事例が公開されているのがわかります。今回は、KiCad Coil Creator[^202]を使用して良好な結果が得られました。

[^202]:[Hackaday.io: KiCad Coil Creator](https://hackaday.io/project/188200-kicad-coil-creator)

# 試行手順

## 1. KiCad Coil Creatorを入手
　GitHubのリポジトリspoter368/kicad-coil-creator[^203]をクローンまたはダウンロードします。

[^203]:[GitHub: spoter368/kicad-coil-creator](https://github.com/spoter368/kicad-coil-creator)

## 2. Python環境でパラメータを編集して実行
　Python環境としてAnaconda[^204]を使用しました。Anaconda PromptからIdle Shellを経由してKiCad Coil Creatorのmain.pyを開きます。

![スクリーンショット 2023-10-19 153250.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/0ba5e6f8-66e9-0e4b-195c-bbba2b038fde.png)

　冒頭部分を編集します。

![スクリーンショット 2023-10-19 155430.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/6fec70e8-29fc-5e8e-4ee5-8ba426c0fcb5.png)

|パラメータ|型|説明|今回設定値|
|---|---|---|---|
|DUAL_LAYER|Bool|2層指定|True|
|WRAP_CLOCKWISE|Bool|時計回り指定|True|
|N_TURNS|Int|層あたりの巻き数|10|
|TRACE_WIDTH|Float|配線幅(mm)|0.25|
|TRACE_SPACING|Float|配線間の幅(mm)|0.25|
|VIA_DIAMETER|Float|ビア径(mm)|0.8|
|VIA_DRILL|Float|ビア穴径(mm)|0.4|
|VIA_OFFSET|Float|中心からビアまでの距離(mm)|11.7|
|BREAKOUT_LEN|Float|取出し線の長さ(mm)|0.5|

　今回のコイルは、外直径35mm、表10ターン、裏10ターン、内側のビアで表裏を接続します。コイル部の幅は以下です。
$$
配線幅 0.25mm + 配線間の幅 0.25mm) \times 10ターン = 5mm
$$
　その内側に直径0.8mmのビアを置くと、中心からビアまでの距離は以下です。
$$
( 外直径35mm \div 2 ) - 5mm - 0.8mm = 11.7mm
$$
　このコードを実行すると、中心から11.7mmのところにあるビアを起点に裏表各々10ターンのコイルパターンが生成され、footprintファイルCOIL_GENERATOR_1.kicad.modとして保存されます。

[^204]: [Anaconda](https://www.anaconda.com/)

## 3. KiCad Footprint Editorで修正
　ファイルCOIL_GENERATOR_11.kicad.modをユーザ用フォルダに移動します。例えば、以下の様なフォルダ階層の下に
移動します。

C:\Users\username\Documents\KiCad\7.0\footprints\

　KiCadのFootprint EditorでCOIL_GENERATOR_1.kicad.modを修正します。

![スクリーンショット 2023-10-19 223430.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/b11242e2-8508-9344-e002-b67755b3aab1.png)

　今回は、端子を丸型のSMD Padとして適切な名称を付けて保存します。

![スクリーンショット 2023-10-19 223817.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/f2ed547a-8c50-9b6b-9bef-a593730b461d.png)

　Padにコイル部分が直接つながっていると、プリント基板上で配線ができない問題が発生しました。Padとしての属性があるのは端子部分のみであり、PCB Editorではコイル部分は接続不可と認識されます。このため、SMD PadにSegment（直線パターン）Primitiveを追加してコイル部分に繋いでいます。

![スクリーンショット 2023-10-19 223943.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/7fb3d11d-ebed-76f4-5fa7-466845001de9.png)

## 4. KiCad PCB Editorで配置
　KiCadのSchematic EditorのFootprint assignment toolでアサインするなどして、自分用に修正したFootprintをPCB Editorに反映し、配置と配線を行います。

![スクリーンショット 2023-10-20 110222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/0e19a184-db3e-0477-1216-2b7994100928.png)

　PCB EditorでDRC(Design Rules Checker)を実行するとFootprint内部でエラーを検出することがあります。特に、SMD Padとコイル部との接続部分はネット不一致によりClearance violationとなります。このエラーを解消するために試行錯誤しましたが、結果的には設計者が全ての箇所を確認し判断して無視するのが簡単と思われます。

![スクリーンショット 2023-10-20 110936.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/547d2891-3176-c68b-fd2a-38603bf38f4e.png)

## 5. 発注
　完成したPCBレイアウトをKikit[^205]で面付けし、JLCPCB[^206]にPCB製造とPCBA(PCB Assembly)を発注しました。できあがったプリント基板が期待通り動作することを確認できました。

![5923149072964713adfbf5bcb036ee75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378410/3196036a-4502-e539-aa0e-955c1b9f1df1.png)

[^205]: [Qiita: KiCadのプラグインKiKitを使って面付けし、JLCPCBに発注する](https://qiita.com/BotanicFields/items/70155f1f245d88d5d26d)
[^206]: [JLCPCB](https://jlcpcb.com/)

# おわりに
　KiCad はデータがテキスト形式で、外部プログラムで修正や補完が可能という特徴があります。多くの人が便利な外部プログラムを作成して公開しています。これらの方々に感謝しつつ資産を有効活用したいと思います。