「Electronics」カテゴリーアーカイブ

Eagleの部品表

Eagle CADで設計した基板の部品表を簡単に作るには、回路図画面でrun bomとすればCSVかHTMLでEagleのパーツデータを出力してくれる。ただ、問題は細かい部品型番までは分からないし、部品の説明などは後から付け足さないといけない。そもそも回路図を作っている段階で大まかな部品の仕様は頭に入っていたり、部品の型番などを調べたりしているのにそれがCADにも部品表(BOM: Bill Of Materials)にも反映できないのはなんとももどかしい。いったん外部で部品表を作ったあとに修正なんか入ると修正ミスやオペミスの可能性が高くなるので、なんとかEagle CAD上で部品情報が管理できればいいのに、と常々思っていた。

で、よく調べてみたらEagleにはVer 5からAttribute属性を部品につけられるようになっている。ここに部品の型番や特別なメモ(オーディオ用抵抗使用、とか)を書き込めるようになっている。これはこれで便利だけど、残念なのはこの情報がBOMに反映されないこと。Attributeは自由に情報を書き込めるが使い道を提供してくれない。せめて、どうにかしてAttributeの内容をBOMに出力できないか。。。

そう考えた偉人がいらっしゃいました! Embed Incさんの中の人がちょうど思っていたツールを作って公開していました。早速install_eagle.exeをダウンロードして実行。デフォルトでは c:¥embedincなるディレクトリにツール群が解凍される。このうち、eagle¥com以下すべてとeagle¥ulp¥bom.ulpをEagleのフォルダにコピーする。Eagle-5.6.0¥comなるディレクトリは元々ないのでそっくりコピーして、bom.ulpはオリジナルのものをbom_org.ulpなどとリネームしておいてからコピーすると良いだろう。

これで回路図画面からrun bomと実行すると。。。 エラーになる。。。 ulpからcomディレクトリ内のcsv_bom.exeを実行しようとしてエラーになるっぽい。どうやらcsv_bom.exeに渡しているパラメータが日本語OSでは扱えないものになっているよう。コマンドラインでごにょごにょすれば何とか実行できるので、csv_bom.exe自体はちゃんと動いているようで、出力結果のtsvファイルもExcelファイルも見事なもの。

Attribute項目が出力されているのはもちろん、ちゃんと似たような部品はグルーピングされて数量欄まで追加されている。Excelに取り込んで使えるように式を出力した項目なんかも追加されている。個人的にはあまり必要ではないけど。

パーツのグルーピングは

  1. library名
  2. device名
  3. value値
  4. package名

で重複するものをまとめているよう。まあ、ほぼこれで思い通りのまとめ方をしてくれるんだけど、唯一通常の抵抗とオーディオ用抵抗を分けたいところがあって、苦肉の策でvalueに*をつけることにした(例: 20k*)。

そして出力できるAttribute項目は決めうちで、doc¥eagle_attr.txtになーんとなく書いてある。まあ、ようするに、DESCに大まかな部品説明(例: Aluminum Electrolytic Capacitor)、PARTNUMに部品型番(例: Nichicon KZ 50V)を書いておくと良さそう。なぜ例が英語かというと、Eagleは日本語をデータとして保持することはできないようなので使えない。ここがかなりイタイところ。

さて、日本語が使えないのはいいとして、なんとかcsv_bom.exeを簡単に実行する方法はないものかと小一時間考えて、vbscriptを書いてみた。

bom.vbs (zipファイルをダウンロードして解凍して下さい)

bom.ulp本体もちょっと改造する。以下のようにコメントアウトして、//exstat = system ("run_cmline (cog)com/csv_bom " + fnam);その下に以下を追加する。string curdir; //Current directory
string lnam; //Log file name
string bnam; //Base file name
project.schematic (sch) { //open the schematic
curdir = filedir(gnam); //get current directory
bnam = filename(gnam);
}
lnam = curdir + "bom.log";
output(lnam, "wt") {
printf(fnam + "\n");
printf(curdir + "\n");
printf(bnam + "\n");
}

dlgMessageBox ("Created CSV and log file " + lnam,"ok");
を追加する。bom.ulpでcsv_bomを実行させずに、csvファイル情報をbom.logファイルに書き出す。

bom.vbsをプロジェクトのディレクトリに入れて実行すると、csv_bom.exeを実行してHTML化まで行っちゃうようにした。tsvやxlsよりもhtmlのほうが扱いやすいし、なぜかxlsファイルを出力しようとするとエラーになるし。bom.ulpからbom.vbsを実行させようとじたばたしてみたけど、どうしても実行できなかったので、仕方なくプロジェクトフォルダで手動起動することにした。

日本語が扱えないのと出力できるAttribute項目が若干貧弱であることを除けば非常に良い仕組みが出来上がった。これで回路図を作りながら部品を調べて、その内容を回路図に書き込めるようになった。Attributeの入力欄は1行で狭いけど、あらかじめHTMLタグつきで入力しておけば、BOM処理をした最後のHTMLファイルではとても見栄えがある。

VBSで日本語注釈をつけられるように拡張することも可能だけど、とりあえずこの形でしばらく使ってみよう。

チップ抵抗のサイズ

Eagle CADのチップ抵抗を選ぼうにも、サイズのネーミングがここでも分からないものがいっぱい。たぶんインチ系の呼称だろうから、ミリ系のものとの対応表を作っておこう。

インチ系 ミリ系
1812 (0.18″ × 0.12″)
1206 (0.12″ × 0.06″) 3216 (3.2 mm x 1.6 mm)
0805 (0.08″ × 0.05″) 2125 (2.0 mm x 1.25 mm) or 2012
0603 (0.06″ × 0.03″) 1608 (1.6 mm x 0.8 mm)
0402 (0.04″ × 0.02″) 1005 (1.0 mm x 0.5 mm)
0201 (0.02″ × 0.01″) 0603 (0.6 mm x 0.3 mm)
0402 (0.4 mm x 0.2 mm)

オーディオレベルメーター Rev 2.0発注

20個のLEDを使ったオーディオレベルメータの第2弾PCBをOlimexに注文した。改めてここでまとめてみよう。

Olimexへの注文方法は詳しくはこちらにあるけど、最新情報を付け加えてみようと思う。

今回はGaincloneアンプ基板も試作してみたのであわせて注文した。2つの基板をパネライズするのではなく、2つのパネルに各々1種類のボードをパネライズした。これで2回別々に注文するより送料が節約できるはず。

そして初めての試みとして、裏面シルクを指定してみた。Olimexは標準では上面しかシルクスクリーンを印刷してくれない。裏面にもシルク印刷をお願いするときはガーバーデータを送りなさい、てFAQに書いてあったけど、なんとなく後処理(ガーバーデータ)に苦手意識(食わず嫌い?)があるので、Eagleの22と26レイヤ(21,25に対応する裏面レイヤ)を裏面にシルクプリーズ! ってreadme.txtに書いてみた。さて、Tsvetanはどう反応するか。

Olimexからオーダー票が添付されたメールが届いたのが11/30 5:05pm。追加料金を見てみると、ドリル数が規定オーバーということで9ユーロ追加。あれ? 3ユーロじゃなかったっけ? ツベタン~、冗談よしてよ~、と思ったけどちょっと冷静になってドリル数をカウントしてみた。ボードウィンドウで以下のコマンドを入力する。run statistic-brdあるいはrun count基板(ボード)上は259だけど、1パネルに6ボードだから・・・ 1554。ちょうど500の3倍。規定数の3倍も多いドリル数だから3 x 3 = 9ユーロね。まあ、確かに16cm x 10cmのボードに1554個も穴あけるのは尋常じゃないね。

その他の追加料金はなし。なし?! 裏面シルクはツベタンに華麗にスルーされてしまった。せっかくreadmeに書いておいてあげたんだから、一言なんかあってもいいんじゃない? ここでツベタンに「裏面シルクは?」ってメールしても良いんだけど、このやりとりだけで平気で3,4日はつぶれるし、そもそもガーバーデータで送らなかったのがいけなかったといえばいけなかったし。まあ、裏面シルクは無くても何とかなるからいいんだけど。

送料は2つ合わせて1回のエアメール代になっていた。よし、よし。あとは2つの注文を入れたことで納期が延長されなければいいんだけど。。。

早速ブルガリアにファックスして、ツベタンからのメールを待つ。Free Faxを試したかったけど、面倒くさかったので国際電話といえばKDDIということで、001-010-359-32-621270にファックスした。普通のファックスなら送れたかどうかが分かるから安心だし。

それにしてもOlimexはひとつひとつのアクションに待ち時間があってじれったい。。。

普通なら「fax received」とボソッとツベタンからのつぶやきメールが入るはずだけど、前回は無かった。今回もスルーかな、と思ったら12/1 8:22pmにfax receivedメールが届いた! よ~し、今回は順調だ。この調子だと12月第3週くらいには届くかな? 頑張れ、ツベタン!

※2009/12/10 追記
お~い。。。 ツベタン。。。。 遅いぞ~っ!

※2009/12/10 夜 追記
ここを読んだのか(ないって)、20:58に「shipped」メールがツベタンから届いた! ラッキーなら来週中に届くかな?

※2009/12/17 追記
やった~、きた~!

オーディオレベルメーター完成!

基板がOlimexから届いて早速製作に取り掛かった20 LEDオーディオレベルメーターなんだけど、初めて作ったPCBとあって、やはりバグがそこここに。。。 それを解決するのに少々時間が掛かったけど、無事、完成! パチパチパチ~。

IMG_0506一般公開を念頭に入れて(?)なるべく手に入りやすい3mmΦLEDを探したんだけど、これがまた難航。秋月のOSDR3133A(赤)、OSYL3133A(黄)、OSNG3133A(緑)を選んでみたけど、緑が若干暗い。スペック上は同じくらいの明るさ(500~600mcd)なんだけど、見るからに緑だけが目立って暗い。そこで千石に特価で3mmΦ緑LEDがあったので試してみたら結構いい感じ。発光パターンが少し違うから角度をつけてみると光り方が赤、黄とは違うけど、これは拡散キャップをつけることでカバーできるからよしとしよう。

まあ、紆余曲折はあったものの、無事完成! 長かった~。

IMG_0507バグその1。
LM3916Nの感度を下げるための分圧抵抗の場所を間違えてた (-_-;;)。これは回路図レベルのミスなので、どうにか抵抗の取り付け方でカバー。致命的なミスでなくて良かった。

IMG_0508バグその2。
LM3915N、LM3916Nの電圧範囲を決めるゲインを調整する可変抵抗を入れるべきところが普通の抵抗になっていた (-_-;;;)。う~ん、なんて初歩的なミス。これも回路図レベルのミスだから、なんとか可変抵抗を無理やり取り付けてカバー。まあ、これもリカバリーが楽なミスで良かった。

IMG_0514LM3915とLM3916のつながり具合、コンパレータ(NJM2403D)を追加して増設した最下位LEDの感度とも、非常にいい感じで調整できてる。LED10と11が境目だけど、全く違和感なし。音楽がフェードアウトしていくとともに最下位LEDが明滅する様子は感動的でもある。LEDが音楽とシンクロして動いているのを見ていると、時間を忘れる。。。

さて、これらのバグを直してさらにステレオ対応したオーディオレベルメーター Rev 2.0をOlimexに11/27 1:37 amに発注! 部品点数が倍増していながら基板は小型化!アートワークにも慣れてきて、今回はかなりトリッキーな技も使っていたりして。さて、今度はどれくらいで届くかな。クリスマス前には欲しいところだな。たのんまっせ、Tsvetan!

OlimexのPanelization

ボードの設計は160mm x 100mmに抑えるとSSS、DSSサイズでお安くなるんだけど、このサイズ以下の場合は複数ボードを取れるだけとってくれるらしい。一枚のパネルから複数枚のボードを切り分けることをpanelizationというけど、これにはちょっとしたテクニックがいる。切り取る際のきりしろをとっておかないといけない、ということ。

ちなみに、ほっぽっておくと彼らが適当にpanelizationしてくれるというけど、あんまり信用置けないなぁ。

で、panelizationするときはボードのdimensionに注意する必要がある。160mm x 100mmのボードを長辺でn等分するときは、せん断(guilotinee cut)なら、ボード長 = (160-0.254(n-1))/n-0.254 (単位はmm)切削(abrasive disk cut)なら、ボード長 = (160-2(n-1))/n-0.254 (単位はmm)という計算になる。

今度6等分したボードを設計しようと思うけど、その際のdimensionはせん断でn = 6
X = (160-0.254(6-1))/6-0.254
 = 26.201 mm
となる。milに換算すると、切捨てで約1031mil。このサイズをEagleで設計しようする場合、まずグリッドをmilにして、最小単位を1milに設定する。座標軸で(0, 0)~(1031, 3937)がボード寸法になる。

切削の場合は24.746mmとなって、1枚のボードあたり1.455mmも小さくなってしまう。6等分もすると1辺が短くなってくるからこの差は大きい。細かくpanelizationする場合はせん断するに限るね。

ちなみに、このサイズは外形であってEagleのdimensionの線は10milに設定しておく必要がある。

unrouted.ulpを試す

この前書いたEagle CADのunrouted.ulpを試す機会があったので、早速レポートを。unrouted.ulpはwww.cadsoft.deにあるので、ダウンロードしてEagleのULPフォルダに入れておく。

ratsnestを行ってairwireが見つかったと報告されるけど、目視では中々見つからないairwireがある場合、ボードウィンドウのコマンドラインからrun unroutedを実行するとEagleのカレントディレクトリ(c:¥Program Files¥Eagle-5.6.0)にunrouted.txtが作成される。ここにSignal = N$13 (2980/1560) (3000/1560)
Signal = V- (1483/2973) (1490/2973)
こんな感じでairwireの名前と座標が出力されている。

名前でピンとくればいいけど、大体は座標で絞り込んでいく。ボードウィンドウの左上に表示される座標をunrouted.txtにある座標に近づけていく。近くなってきたらズームしていくとairwireが見えてくる。それでも見えない場合は付近のwireを移動させてみたり、rip-upしてみると見えてくる。

前回紹介したレイヤを非表示にする方法はちょっと手間が掛かるからこっちのほうが便利かも。まあ、DRCのようなインターフェースでピンポイントで指し示してくれるのが一番いいんだけどね。でも、これで大分効率が上がったかな。

Olimexから基板到着!

人生初のオリジナルプリント基板をOlimexに頼んだんだけど、昨日ようやく届いた。先日作成したオーディオレベルメーターをPCBにしてみた。そのためにEagleを勉強して、そもそもPCBの作り方、Olimexへの注文方法、Olimex用のEagleの設定とか諸々を調べた。あまりにもボリュームが多いので、気がついたものから少しずつ公開することにしよう。

IMG_0501色々なサイトでPCB作成は取り上げられてて、初めて作ったPCBには感動すると書いてあるけど、いや~、自分の設計したものがカッコイイボードになっていると本当に感動する。金色がキラキラしててきれいだなぁ。こちらが表面。Component Sideあるいは部品面と言われるほう。

IMG_0502そしてこちらが裏面。Solder Sideあるいは半田面と言われるほう。初心者なのにいっちょまえにグランドをベタにしたので一面緑色。これもきれい。

IMG_0504こちらもいっちょまえに名前を入れたんだけど、Eagleの設定がそうなっているから何も考えずにテキストをTopレイヤーに入れたら見づらい。。。 そうか、シルクに印刷するには25 tNamesレイヤーに書かなきゃいけないのか。。。

IMG_0505Olimexと言えばシルク印刷の線幅が10mil、フォントはVectorと相場は決まっているようだけど、最近「5milにも対応しました」ってHPに書いてあったから(一応メールで確認を取った上で)、5mil幅、Proportionalフォントのデータを送ってみた。なんときれいに印刷されてるじゃありませんか。これは便利。ってゆーか、最初から対応していればいいのに、って話なんだけどね。ま、相変わらず回路の線幅、クリアランスは10mil、8milルールが存在する。それでもシルク印刷のテキストを強制的にSize=50、Ratio=20%、Font=Vectorにしなくてよくなったのはとても楽。部品のアウトラインも同様だけど、ulpを使って一発変換できるから手間ではないんだけど、不可逆だし見栄えが悪い。あと、25レイヤー以外にある情報を印刷したい場合は25レイヤーにコピーしないといけないのは以前と同じ。

半固定抵抗は側面調整のものにも対応できるようにすればよかったかも、とか、配線を見ていると???と思うところもあるけど、初PCBであることを考えてみれば上出来、上出来。

さあ、この基板で20ステップのレベルメータを作ってみよう!

Eagle CADの抵抗器のパッケージ規格

Eagle CADの謎の一つに抵抗器のパッケージ(外形)規格がある。良く使う1/4W抵抗器はピッチ幅75mm(正確には2.54mm x 3 = 7.62mm)だから、抵抗のpackageはR-US_0207/7(type 0207, grid 75mm)を使っていた。でも、今取り掛かっているPCBには1Wとか3Wとかの抵抗が必要で、メーカーやものによって大きさが様々である。抵抗の形状って、どういう基準があるんだろう?

いや、これまで使ってきた0207って何だろう? と思ってググッても中々答えが見つからない。小一時間ググッたらVishayの技術資料にそのものズバリがこっそりと載っていた。DIN規格らしいのだが、最初の二桁は直径で、後ろの二桁は長さをmmで小数点以下を四捨五入したものと明記されている。ほほ~と思って色々と見てみたら、四捨五入と言うより切り捨てに近い感じ。0207なら直径1.5~2.4mm、長さ6.5~7.4mmなんだけど、直径2.x mm、長さ7.x mmくらいに考えておいたほうが良さそう。

まあ、言われてみればそんな感じのネーミングだわな。なんでいままで気がつかなかったんだろう???

Eagle CADのairwireの探し方

Eagle CADでアートワークをしているのがとっても楽しい。けど、配線も終盤になってくると面倒なのが残っているairwireを探し出すこと。くまなく探しているんだけど、見つからないairwireもある。配線しているときにしっかりと端子に結合していなくて、と~っても微小なairwireが残ってしまうことが結構ある。こういうときは、ボード画面のコマンド入力欄でdisplay none
display 19
とやると、airwireだけを表示させることが出来る。まあ、大抵はこれで乗り切れるけど、本当に本当に微小なairwireはこれでも見付けづらい。ちなみに、Eagleのデフォルト表示レイヤーに戻すには、display 1 16 17 18 19 20 21 22 23 24 25 26 27 28 39 40 41 42 43 48 49 51 52とする。

すべて終わっちゃったんだけど、unrouted.ulpなるものがあることを知った。http://www.cadsoft.deでダウンロードできる。run unroutedを実行するとairwireを探し出してくれるようだ。unrouted.txtというファイルがカレントディレクトリ(c:¥Program Files¥Eagle-5.6.0かな?)に出力されて、これを見ると分かるらしい。airwireがない状態では空ファイルだった。今度これを使ってみよう。

Eagle CADの部品番号の並び替え

LEDレベルメータのPCBを作るためにEagle CADを使い始めたんだけど、なかなか便利。最初は敷居が高いんだけど、慣れてくると思いのほか簡単に基板設計ができる。

特にulpやscrというユーザが拡張できるコマンドを駆使できるようになると使い勝手が加速度的に良くなる。あとはキー割り当てを変更することができるので、よく使うコマンドをFキーに割り当てるといいかも。F7(Move)とF6にRouteを割り当てたら無茶苦茶使い勝手が上がった。あと、以外に重宝するのがChange機能。線幅を間違えたり変更したいときなんかはこれがあると便利。レイヤー間移動も簡単。

さて、本題の部品番号の並び替えだけど、renumber-sch.ulpというコマンドがあるんだけど、これがいまひとつで、上下、左右の順番に付番してくれる。感覚的には左右、上下で付番してほしい。こんなときはスクリプトをちょちょっと改造すればOK。renumber-sch.ulpのバックアップをとっておいて、renumber-sch.ulpをエディタで開いて92行目あたりにある、 sort(nrNames,i, sh, y, x); sort(nrNames,i, sh, x, y);に変えるだけ。

これでしっくりくる番号が振り直された。ちなみに、回路が分かれているときはGroup Moveして左右に並ぶようにするといい。