「Eagle CAD」カテゴリーアーカイブ

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

20 LED オーディオレベルメーター Rev. 2.0

12/17にツベタンから20 LED オーディオレベルメーター Rev 2.0基板が届いた!
今回は1枚の基板に2ch分の20 LED レベルメーターを詰め込んだからぎっしり。それでも16cm x 10cmパネルから6枚も基板をとることができた。9ユーロ余計に取られたことだけあって、穴だらけ。ユニバーサル基板なんじゃないかと思ってしまうほど。

今回も5milのシルク印刷がとてもきれい。スルーホールも満足の行く精度で開けられている。今回は1パネルから6枚もとるからギロチンカットを指定。確かにエッジにはバリが残っていたけど、ささっとヤスリ掛けすれば全く問題なし。切り口は若干精度にばらつきがあるけど、これもホビーユースでは全く問題なし。

さて、問題の裏面(ハンダ面)のシルクスクリーンは!

ない。。。

まあ、HPにあるようにガーバーデータを送らなかった私が悪いんだけどさ。追加料金も払っていないから当然の結果なんだけどさ。まあ、裏面のシルクはなくても何とかなるからいいんだけどさ。

さて、気を取り直してさっそく作っていきましょう。

今回の基板はオリジナル部品データをつくっていろいろとトリッキーなことをしている。ICソケットの内側に部品が実装されていたり、抵抗の足を斜めに折り曲げたり、抵抗のスルーホールのピッチも変えていたり。通常の部品面にICおよびその周辺部品、裏面にダイオードとLEDを実装しているので、スルーホールながら両面実装。部品の実装に順番があるので、気をつけて組み立てよう。

まずはダイオードの取り付け。これは裏面に取り付けるんだけど、いきなりシルクがないのでどっち向きにつけていいか分からない!

まあ、こんなこともあろうかと裏面を紙に大きく印刷しておいて、手元においてあったのさ。ここら辺は表側から抵抗が刺さってくるからダイオードを通す穴を間違いやすい。慎重に。ハンダ付けもダイオードのある面だけにしておく。裏(というよりも表面)には抵抗(そしてその上にICソケット)がくるから長くリードを残しておきたくない。

ダイオード面からハンダ付けして、半対面のリードを切断してハンダ付けする。

そうすると写真のようにコンパクトにハンダ付けすることが出来る。

次は黙々と40個のLEDを植えつけていこう。LEDは裏面に実装するんだけど、裏面にLED用のシルクがない。。。 写真は表面から見たところで、表面はVccがベタパターンなのでVccの穴がサーマルパターン(十字にベタとつながっている)になっている。Vccの穴にLEDのアノード(足の長いほう)を通せばOK。

ここもリードを長くハンダ付けしたくないので、まず片側(カソード・・・足の短いほう)を基板の暑さ程度に短く切っておいて、LEDを基板にさす。写真はこの状態で、短いほうの足を表面からハンダ付けする。このとき、LEDを押し付けながらハンダ付けすればキッチリと実装できる。LEDの実装はいかにきれいに並べられるかがポイントだけど、一つ一つキッチリと実装していけばおのずときちんと整列する。

ちなみに、LEDはロームのSLR-342シリーズがお勧め。緑、黄色、橙、赤がそろっていて、それぞれの輝度、発光パターン、形がとてもそろっている。青がないし輝度が低いのが難点だけど、レベルメーターはそんなに光らなくてもいいし、某国製のものより何といっても加工精度が高いので、きちんと整列させるのが楽。輝度ムラが少ないので、餞別する必要もないのもマル。でも、SLR-342は入手が困難なのが玉にきず。

LEDの短いほうの足が固定されたらLEDを押し付けながら再度キッチリと再加熱して再固定する。次に長いほうの足を切って、ハンダ付けする。

こうするとはみ出るリード線がとても小さくなる。

この作業を地道に40回繰り返せばきれいなLEDアレイの完成! ここで一息入れる。

前にも書いたけど、SLR-342シリーズは4色なので、各色5個のLEDを使った。2chなので4色 x 10個。

次にR3、R4、R13、R14(20kΩ)をこれまた部品側からハンダ付けして、反対側のリード線を切ってからハンダ付け。

抵抗は1/4W 炭素皮膜抵抗を使っている。全く問題なく動作するんだけど、左右のバランスとかシビアなことを要求するなら1/4W 金属皮膜抵抗(誤差±1%)を使ったほうがいいかも。まあ、その他の部品にもばらつきがあるので抵抗だけ凝ってもダメなんだけどね。

さて、取り付けた抵抗の上にICソケットを乗せる。下にある抵抗が凸凹しているのでICソケットが安定しない。この場合は半対面のスルーホールを被せるようにセロテープを貼る。ICソケットの足をスルーホールに入れ、ICソケット側から足を2本ほどハンダ付けして固定する。その後テープをはがして半対面からハンダ付けする。

残りの部品を取り付けていく。

まずは中央の背の低い部品から。中央から外へ、小さいものから大きいものへ、下のものから上のものへ、の順番で。

まずは抵抗から。

ICソケット、電解コンデンサ、半固定抵抗以外は実装済み。

半固定抵抗の取り付け。

LEDのすぐ近くに足がくるので、もっとも接近している足をあらかじめ切っておいてからハンダ付けするとやりやすい。まあ、半田付けした後でも、部品の足はクネクネしていれば切れるから大したことではないけど。

最後にICソケット。これも前に書いたように、ICソケットの反対側のスルーホールをセロテープでふさぎ、ICソケットの足を何ヶ所か固定したらセロテープを外して、残りの足をハンダ付けする。

完成!

写真は暗いですが、とても部品が込み合っているから明るくてもよく見えないかも。

LED面。

ジャンパー線で飛ばしているように見えるのはゼロΩ抵抗。整流回路とLED表示部を分離するために入れている。ここを分離できるようにしておくとデバッグが楽なのと、整流回路を変えたりLED表示部だけ使う、なんてこともできるかな、と。

点灯式。

無事点きました~。パチパチパチ~。

半固定抵抗が8つもあって調整が難しいけど、それだけ利用範囲が広いということ。懸案の整流回路の時定数(LEDの動き)と最下位LEDとLM3915、LM3916間のつながりはRev 1.0同様、全く違和感なし。

LM3915、LM3916を使ったレベルメーターはこれが完成形じゃないかな。一般的なスルーホール部品を使ってなるべくコンパクトに仕上げるのはこれが限界かも。

チップ抵抗のサイズ

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)

Eagleの既存プロジェクトファイルからパーツデータを抽出する

EagleのBrdやSchファイルに欲しい部品が乗っているけど、自分も使いたいし自分のライブラリにコピーしたいということが結構ある。BrdやSchウィンドウで部品をコピーして、自分のlbrファイルにペーストしようとしてもだめ。

こういうときはexp-project-lbr.ulpを使うといい。部品データを抜き取りたいプロジェクトのSchファイルを開き、コマンドラインでrun exp-project-lbrを実行する。お勧めはCreation Modeで「One library」をチェックすること。プロジェクトに使われているパーツを丸ごと1つのlbrに抽出して、そこから必要なものをさらに他のlbrにコピーするほうがいいだろう。

まずは「Collect data」ボタンを押すとプロジェクト内のデータを収集する。途中で「Eport also only mechanical packages from board?」と聞かれるが、今ひとつ意味がわからないので Yes を押しとく(笑)。次に「Create library」ボタンを押すとプロジェクトフォルダにlbrファイルが生成される。この中にプロジェクトに使われている部品のデータが一まとめにされているので、あとはEagleの機能で必要なパーツデータをコピーする。

オーディオレベルメーター 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のようなインターフェースでピンポイントで指し示してくれるのが一番いいんだけどね。でも、これで大分効率が上がったかな。

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がない状態では空ファイルだった。今度これを使ってみよう。