VIVITABLOG

VIVITAで活躍するメンバーの情報発信サイト

VIVITAの回路設計CAD環境

VIVITAのハードウェアエンジニアの嶋田(@shozaburo)です。今日は回路設計をするためのCAD環境について紹介します。

今日紹介するCADはKiCadという回路設計用のCADなのですが、こちらは完全に無料のCADですので趣味で電子工作をされている方にも参考になればと思います。

f:id:shozaburo:20181120142429p:plain

CADの選定

私はVIVITAの初のエンジニアでしたので、開発環境は基本的に自分で決めなければなりませんでした。入社当時は売上も何もないですしアイディアも企画段階でしたので明確に設計するもの(その規模感など)が全く見えていませんでした。

「使い勝手」を考えれば前職で使用していたCADが当然の候補だったのですが、プロ用のCADで百万単位の費用がかかるので、設計が全く見えていない状態においてその投資は非常に躊躇われました。

そこで候補に挙がったのは2つ「Eagle」と「KiCad」です。

Eagleは、電子工作界隈では知らない人はいないというくらい有名なCADで、一部機能制限付きではありますが無料、有償版も少額でコスパの高いCADです。 他方KiCadは、オープンソースCADなのですべての機能を無料で使えます。ただし、オープンソースですのでサポートは一切ありませんし、ネットでの情報もEagleに比べれは非常に少ないです。

私は以前にEagleを使用したことがあったのですが、symbolとfootprintを必ずペアで管理(.lbr)するEagleには使いづらさを感じていました。footprintの流用性もあがりません。 他方、KiCadはsymbol(.lib)とfootprint(.kicad_mod)が別々に管理されており、symbol(.llib)にfootprintをアサインしておくこともできますし、回路図を引いた後でアサインしたりという柔軟性があります。 例えば私の場合、1005のチップ部品はsymbolの中で事前に表面実装用のfootprintをアサインしていますが、回路図を作ったあとに手はんだにしようと思ったら、手はんだ用のfootprintを回路図の中でアサインします。 こういったライブラリ管理の容易さ、柔軟さからKiCadを選択しました。

f:id:shozaburo:20181120140606p:plain

KiCadのあれこれ

次にKiCadを数年使って考えたノウハウについて共有します。

レイヤーの活用

f:id:shozaburo:20181120155710p:plain

上図がレイヤーの一覧ですが、F.CuからDwgs.Userまで、そしてEdge.Cuts。これらのレイヤーについては使い方が予め決められている重要なレイヤーです。基板の発注でも使用します。 残りについては、ある程度自由に使えるレイヤーですので、以下に私の利用方法を説明します。

  • Eco1.User, Eco2.User

配線禁止エリアをこのレイヤー(1がTop、2がBottom)でメモしておきます。Eagleにおいては"Restrict"という配線禁止を指定するためのレイヤが用意されているようですがKiCadにはありません。そこで下図のように部品に配線禁止があるものは、footprintにEco1.User/Eco2.Userで配線禁止枠をメモしておき、

f:id:shozaburo:20181124230713p:plain

それを基板に配置した後で先ほどのメモを見て配線禁止エリアで囲います。

f:id:shozaburo:20181124230727p:plain

そしてベタを貼ると、下図のようにきちんとベタが抜かれます。

f:id:shozaburo:20181124230733p:plain

メモはあくまでもメモですので、配線禁止エリアを利用しなければベタは抜かれません。Eagleの「レイヤに指定」の1ステップに比べ、「レイヤにメモ」「メモに合わせて配線禁止を引く」という2ステップになるのはKiCadの不利な点です。もちろんメモせずに配線禁止を引いてもよいのですが、レイヤでメモをしておけばあとでレイヤだけ出力をして間違いチェックがでるため(メモが煩わしければレイヤのチェックを外せばよい)、私は手間でもそのようにやっています。

  • F.CrtYd, B.CrtYd

実装禁止エリア、もしくは高さ制限エリアです。KiCadには高さ制限をつけて自動でエラーをつけてくれる機能はないため、このレイヤーを使ってメモをしています。 footprint作成時に部品外形にもこのレイヤを適用します。(当然、部品と同じ位置に部品はおけないから)

  • F.Fab, B.Fab

部品外形です。これは事前にfootprint側で設定をしておきます。CrtYdで部品外形を設定しているにもかかわらずFabでも設定するのは、基板発注時の実装図を出力するためです。(実装図についてはこちら

KiCadはレイヤ毎、もしくは複数のレイヤを重ねてPDF出力ができますが、実装図を出力するときにCrtYdレイヤを使用すると部品外形だけではなく、その他の高さ制限エリアなどの情報も含まれてしまい、実装図としては使えません。

そこで実装図には、部品外形だけを含むFabレイヤを使用して出力しています。

スクリプトが使える!

KiCadではpythonスクリプトを使用して自動変更などが可能です。「何度も行うような作業」「手作業では手間が大きすぎる作業」にはスクリプトを使用します。ここでは私が作ったスクリプトについて紹介します。

発注資料をクリック一発で作成

基板を発注するときには、基板屋毎にガーバーの設定(例えばFusionPCBの場合)が異なっています。発注自体は何度もやるのですが、毎回設定を確認したり、拡張子を変更したりする手間があったためスクリプト化しました。 以下は、FusionPCB(https://www.fusionpcb.jp/)用のスクリプトです。スクリプトを実行するとガーバーデータがフォルダの中に生成され、各ファイルは発注用に拡張子が変更されます。また、必要なファイルのみをzip化してくれます。このスクリプトの場合メタルマスクデータ(.GTP, .GBP)、ビューワで確認するためだけのドリルデータ(.drl)はzipから外されます。

f:id:shozaburo:20181122171425p:plain

サンプルスクリプト

https://github.com/shozaburo-shimada/KiCADscripts/blob/master/forFusionPCB.py

大量の部品を整列させる

表面実装LEDを並べてLEDマトリクス基板を作成した際に約300個のLEDを使用しました。これを手で配置すると非常に大変ですし手作業ではミスも起こります。そこで、これを一気に並べるスクリプトを書きました。これで圧倒的に時間を短縮でき、マウス操作で腱鞘炎にもならずに済みました。

f:id:shozaburo:20181122141655p:plain

Refの一括変更

KiCadには自動でRefをつけてくれる機能があるのですが、「空き番号から使用」「100番から使用」「1000番から使用」の3種類しかありません。

f:id:shozaburo:20181122170932p:plain

これで困ったのは、6種類の回路を異種面付けで製造したときです。(異種面付けとは、下図のように複数種類の回路、この場合はA~Fまでの6種類の回路を一枚の基板の上に製造し、後で分割して使う製造手法のことです)

f:id:shozaburo:20181126102309p:plain

面付けをする際は、すべての基板において同じRef番号が存在してはいけませんが、KiCadの機能を使っても、「0番から」「100番から」「1000番から」の3種類の基板までしか対応できません。こちらとしては任意の番号からRefを振りたいのです。 そこで一旦すべての回路を0番からRefを振り、スクリプトの中でRefを読み込みその数値に、こちらが指定した番号を足して振り直す機能を作りました。 これで「100番から」「200番から」...「600番から」のように6種類の基板を、全て同じRefを使うことなく振り直すことができました。

サンプルスクリプト

https://github.com/shozaburo-shimada/KiCADscripts/blob/master/changeRef.py

おわり

以上、私のKiCad活用術です。これまで作った回路がまだ複雑なものではないので、見えていないKiCadの弱点も多々あるかと思いますが、趣味の電子工作やスタートアップのちょっとした試作には実用レベルだと思います。ご興味のある方はぜひ試してみてはいかがでしょうか?