背景
KiCadのpcbnewで基板を複製して並べるのが思ったより手間だったので、備忘録を兼ねて記事を残します。使ったもの
- KiCad5.1.9
- KiCadで作った基板データ
grove端子の拡張ボードを利用しました。
標準機能を利用する場合: 配列を作成機能を利用
複製したい部分を選択状態にして右クリックして「配列を作成」を選びます。間隔を入力してOKを押します。
行列状に複製できました。
Vcutを利用した基板の注文のために複製したい場合は、間隔を基板の幅と高さにすると隙間なく複製できます。
pythonを利用する場合: moduleとそれ以外で、複製方法が異なる
準備
pcbnewのツール -> スクリプトコンソールを選択してpythonの実行画面を表示します。moduleの場合
module(多分footprintを示すもの)の場合はクラスのコンストラクタを利用して要素を複製し、座標を指定して配置します。import pcbnew
board = pcbnew.GetBoard()
offsetX = 20000000 # nm
offsetY = 0 # nm
for baseItem in board.GetModules():
newItem = baseItem.__class__(baseItem)
board.Add(newItem)
basePosition = baseItem.GetPosition()
newItem.SetPosition(pcbnew.wxPoint(basePosition[0] + offsetX, basePosition[1] + offsetY))
pcbnew.Refresh()
上記のコードはx方向に20mmのところにmoduleを複製する処理になっており、実行すると下記のようになります。
それ以外の要素の場合
module以外の要素はarea, track, drawingがあります。それらの要素はDupricate関数を利用して複製できるため、それを利用して複製したあとでMove関数を利用して移動させます。
import pcbnew
board = pcbnew.GetBoard()
offsetX = 20000000 # nm
offsetY = 0 # nm
tracks = list(board.GetTracks())
drawings = list(board.GetDrawings())
areas = [board.GetArea(i) for i in range(0, board.GetAreaCount())]
for baseItem in tracks + drawings + areas:
newItem = baseItem.Duplicate()
newItem.Move(pcbnew.wxPoint(offsetX, offsetY))
board.Add(newItem)
pcbnew.Refresh()
上記のコードを実行すると下記図のようになります。
module以外の要素が20mm右に期待通り複製されます。
必要な要素を行列状に複製するコード
moduleとそれ以外の要素を行列状に複製するコードがこちらです。import pcbnew
board = pcbnew.GetBoard()
intervalX = 15000000 # nm
intervalY = 20000000 # nm
numberX = 3
numberY = 2
modules = list(board.GetModules())
tracks = list(board.GetTracks())
drawings = list(board.GetDrawings())
areas = [board.GetArea(i) for i in range(0, board.GetAreaCount())]
for x in range(0, numberX):
for y in range(0, numberY):
if x == 0 and y == 0:
continue
offsetX = intervalX * x
offsetY = intervalY * y
for baseItem in tracks + drawings + areas:
newItem = baseItem.Duplicate()
newItem.Move(pcbnew.wxPoint(offsetX, offsetY))
board.Add(newItem)
for baseItem in modules:
newItem = baseItem.__class__(baseItem)
board.Add(newItem)
basePosition = baseItem.GetPosition()
newItem.SetPosition(pcbnew.wxPoint(basePosition[0] + offsetX, basePosition[1] + offsetY))
pcbnew.Refresh()
上記のコードはコードの前半で複製方針を定義しており、x方向に15mm間隔、y方向に20mm間隔、x方向に3回、y方向に2回複製を行う設定になっています。
intervalX = 15000000 # nm
intervalY = 20000000 # nm
numberX = 3
numberY = 2
実行すると下記のように期待する結果を得られます。
大きさの測定やコードのコピペをせずに複製したい: プラグインmatrix_clonerを使う
前回把握した基板の大きさを測定する方法を含めて、基板を複製するKiCad向けのプラグインを作成しました。インストール方法はREADMEや以前作ったプラグインの記事を参考にしてください。
https://github.com/asukiaaa/matrix_cloner
これを利用することで基板が四角形なら隙間なく配列でき、特定の大きさに収まる範囲で出来る限り複製も可能です。
上記の設定(基板メーカーの最安価格で製造してくれる最大サイズである100x100mmに収まる範囲)で複製すると下記のようになります。
まとめ
行列状に基板を複製する方法として、下記の3種類を紹介しました。- KiCad標準機能の「配列を作成」を利用
- pythonのコードを実行
- pcbnewのプラグインmatrix_clonerを利用
この記事にまとめた方法をmatrix_clonerに適用したので、良かったらプラグインをご利用ください。
参考
KiCAD_layout_cloner/layout_cloner.py参考になったプラグインのコードです。
PCB製造サービス向けのガーバーデータとzipを作るKiCadのプラグインを作ってみた
以前作ったプラグインの記事です。
0 件のコメント :
コメントを投稿