Eagle と Modela を使って電子基板を作る その2


20141019_pcb_test

概要
Eagle は電子基板を作成する CAD ソフトです。
Modela は、Roland 社の切削加工機です。
その1 では、Modela でどんな加工ができるのか味見してみました。
今回は、もう少し実用的なものにしてみました。
題材は、3x3 LED マトリックス の Arduino シールドです。

EagleデータとArduinoスケッチは GitHub で公開しています。

全体の流れ
Modela の加工は、 (1)配線 (2)穴あけ (3)外形 という異なるエンドミルを使う3つのステップがありますが。
今回は、穴あけに適切なエンドミルがないので、配線と同時に穴の位置を切削して、あとでミニドリルで穴をあける手順にしました。
また、外形を加工しようとしたところ、原点がずれたようで違うところを切削しようとしたので、外形の加工は諦めて、あとでアクリルカッタで切りました。

Eagle 側の作業
(1) 回路図(sch)とボード図(brd)を作成するところは、ほぼ同じです。
配線を太くしたり、PADを大きくしたり、大きいドリル穴を追加します。
今回は、配線が交わるところがあるので、一部は表面になっています。
基板で配線されるのは、裏面だけなので、表面は手配線します。
20141019_pcb_eagle_sch 20141019_pcb_eagle_brd

(2) 配線とドリル穴のデータを bitimap で出力します。
このとき、左右反転(Mirror) して、白黒画像にします。
20141019_pcb_eagle_pat 20141019_pcb_eagle_drill

(3) Eagle が exportする画像は png形式なので、BMP形式に変換します。

Dr.Engrave 側の作業

1. 配線の加工
(1) データの作成
配線の画像を import します。
グリッドを表示して、外形に合わせて、リサイズします。
近接している PAD の間に、ハンダブリッジしないように、長方形を追加します。
20141019_pcb_engrave_pat

(3) Modelra に 1/64 のエンドミルをつけます。
(4) 加工を指示します。

2. 穴あけの加工
(1) データの作成
穴あけの画像を import します。
外形に合わせて、リサイズします。
外形を削除します。
穴の大きさを 0.1 mmに変更します。
左下は、切削できなかったところあったので、もう一度切削にするために、配線パターンを残しています。
20141019_pcb_engrave_drill

(2) エンドミルはそのままで、加工を指示します。

3. 外形の加工
(1) 配線と穴あけの画像から、配線と穴あけの削除して、外形のみにします。
(2) Modelra を 1/32 のエンドミルに変えます。
(3) 加工を指示します。
(4) 問題発生
原点がずれたようで違うところを切削しようとしたので、外形の加工は諦めて、すぐに止めました。

穴あけ
(1) 基板を Modela からはずします。
(2) 机に基板を固定します。
(3) ミニドリルに 0.8mm のドリル歯をつけて、穴をあけます。
LEDや抵抗にリード線には、この大きさでぴったりです。
ピンヘッダには、少し小さいので、穴を大きくなるようにグルグリします。
手操作のため、ちょっと穴に位置がずれて、ピンヘッダがまっすぐ入らないところもありますが、気にしないことに。
20141019_pcb_drill

外形の切削
(1) 基板をアクリルカッタで切ります。
結構大変だった上に。
途中まで切って、板を割ったところ、断面がギザギザになってしまった。(^^;
(2) 基板の側面を、やすりで磨きます。
20141019_pcb_outline

基板の研磨
(1) 基板の縁を平ヤスリで削ります。
(2) 基板の銅箔面を荒い紙ヤスリで磨いて、表面のギザギザをとります。
(3) 銅箔面を研磨剤で磨いて、ハンダが乗りやすいように、表面を滑らかにします。
20141019_pcb_board

ハンダ付け
(1) 部品をつけて、裏面をハンダ付けします。
(2) 本来の手順であれば、表面の配線は、部品をつけるときに同時に行うべきですが。
忘れてしまったので、あとから空中配線しました。(^^;
回路図とボード図にゼロオームの抵抗をダミーで置くなど、工夫が必要です。
20141019_pcb_rear 20141019_pcb_front

動作確認
(1) Arduino に今回作った基板を載せます。
(2) Arduino にスケッチを書き込みます。
(3) 全てのLEDが点灯すれば、OKです。

課題
(1) エンドミルを交換するため、電源を切ると、Modela の原点がずれます。
(2) 配線の加工で、切削できないところがありました。
20141019_pcb_milling_2


Arduino の int 型は2バイト


20141014arduino

多くの処理系では int 型は4バイトですが。
Arduino では2バイトです。

ちょっとはまりました (^^;
正の整数の加算をしているはずが、マイナスになることがありました。
調べてみたら、32767 を超えて、オーバーフローしていました。
こういう場合は long を使うべきですね。
これなら、最大値は 約20億 です。

整数型
char : 1バイト -128 から 127
byte : unsigned char
int : 2バイト −32,768 から 32,767
short : int と同じ
word : unsigned int
long : 4バイト -2,147,483,648 から 2,147,483,647

実数型
float : 4バイト -3.4028235E+38 から 3.4028235E+38
double : 4バイト (float と同じ)

参考
Arduino Language Reference


Arduino のメモリ削減


Arduino の動作が不安定なので、調べてみたところ、メモリ不足のようです。

リファレンス に次のような記述があります。
SRAM の容量は大きくありません。
SRAM を使い切ってしまうと、あなたのスケッチは期待通りの動作をしてくれません。

どのくらい SRAM を使うのかは、次の方法で調べることできます
(1) IDE の設定を変更する。
20141012arduino_setting
(2) コンパイルする。
20141012arduino_compile
(3) 生成された elf ファイルを解析する。
data (初期化した変数) と bss (初期化しない変数) の合計が、SRAM の容量です。
20141012arduino_objdump

メモリを削減する方法として、次の2つが有効です。
(1) 長い文字列の使用を避ける。
(2) Serial#print には F マクロを使用する。

実際に適用してみました。
bss はあまり変わりませんが、data が 70% ほど削減され、全体で 35% ほど削減されました。
変更前: data 02a4 + bss 02e6
変更後: data 00b2 + bss 02ee

参考
Arduinoチュートリアル 基礎編 メモリ
Arduino Uno のメモリ
Arduino でのメモリ使用率の調べ方
Arduinoで、小っちゃいIC(ATTiny)を使う方法
avr-objdump


Eagle と Modela を使って電子基板を作る その1


20141012modela_pcb_arduino

Eagle は電子基板を作成する CAD ソフトです。

Roland Modela MDX-15 は、切削加工機です。
Modela には、 Modela Player と Dr.Engrave が付属してます。
Modela Player は3次元データ用です。
Dr.Engrave は2次元データ用です。

概要
今回は、Dr.Engrave を使用しました。
Dr.Engrave が取り込めるのは、BMP形式とDXF形式の画像データです。
BMP形式の画像データから輪郭を抽出します。
DXF形式では、輪郭でなく中心線になってしまい、うまくいきませんでした。
取り込んだ画像データには、大きさの情報がありません。
あらかじめ、外形などを大きさの分かる画像を用意します。
また、小さな図形だと、うまく輪郭を抽出できません。
あらかじめ 、大きめの図形に変換しておきます。

Eagle 側の作業
今回は、LEDと抵抗のみというシンプルな電子基板を作成します。
参考 Eagle を試す

配線と穴あけの2つの画像を作成します。

1. 配線の画像
配線 (top) の幅を、0.04インチ にします。
配線層にPADを追加します。半径 0.02インチ、幅 0.04インチ。
外形 (demenssion) を表示します。
白黒画像で export します。

2. 穴あけの画像。
ホール層 (hole) にドリル穴を追加します。半径 0.01インチ。
白黒画像で export します。

20141012modela_eagle_board 20141012modela_eagle_img_pat 20141012modela_eagle_img_drill

Eagle が exportする画像は png形式なので、BMP形式に変換します。

Modela 側の作業
捨て板を敷いて、基板を固定します。
捨て板には、100均の発砲ボードを使用しました。
固定には、両面テープを使用しました。
外形を切り出したときに、はずれないように、加工する箇所にも両面テープを貼ります。

Dr.Engrave 側の作業

1. 配線の加工
配線の画像を import します。
この時点では、大きさが加工領域になっています。
グリッドを表示して、外形に合わせて、リサイズします。
外形が2重になっているので、1つ削除します。
20141012modela_engrave_pat_bmp20141012modela_engrave_pat_resize20141012modela_engrave_pat_final_

Modela のパラメータを指定します。
「塗り潰をする」を解除する。
「Z切削ピッチ」を0にする。
これを忘れると、加工がいままでも終わりません。
20141012modela_engrave_pat_print

Modela に 1/64 のエンドミルを設置します。
エンドミルの高さを、基板の上面に合わせます。
OK を押して、加工します。
20141012modela_board_milling

2. 穴あけの加工
穴あけの画像を import します。
外形に合わせて、リサイズします。
外形を削除します。
穴の大きさを 0.1 mmに変更します。
20141012modela_engrave_drill_resize20141012modela_engrave_drill_hole20141012modela_engrave_drill_final

Modela に 1/32 のエンドミルを設置します。
手持ちに 1/32 がなかったので、1/16 を使用しました。
穴が大きくなって、半田付けで苦戦しました。

Dr. Engrave から、深さ方向の設定が、うまくいかなかったので。
エンドミルの高さを、基板の下面に合わせて。
強引に穴あけしました。
20141012modela_board_drill

3. 外形の加工
穴あけと同様に加工します。

基板の組み立て
切り出した基板の側面を、やすりで磨きます。
部品をつけて、半田付けします。

20141012modela_board_bare20141012modela_board_front20141012modela_board_rear

留意点
(1) 1/32 のエンドミルで穴あけしたところ、穴が大きくなって、部品が固定されず、苦戦しました。
(2) 1/64 のエンドミルで切削したところ、配線領域と残りの部分との余裕が 0.5mm くらいしかなく、半田ブリッジを起こしやすい。

動作確認
1. 電池をつないで、点灯するか、確認します。

2. Arduino につないで、点滅させます。
切削した面が、半田面になるので、裏表が逆になった。
作った基板が、Arduino の外側になってしまいました。

20141012modela_pcb_test20141012modela_pcb_arduino

まとめ
(1) 加工には 1/64 と 1/32 のエンドミルが必要です。
(2) 加工面は、裏側の半田面になるので、画像の表裏の反転が必要です。
(3) 配線領域と残りの部分との余裕が少ないので、半田ブリッジを起こしやすい。
PADを大きめにするとか、外側にガード領域を作るとか、工夫が必要です。

参考
Dr.Engrave で加工した例