月別アーカイブ: 1月 2016

リフロープログラム公開&リフローの勘所

スイッチサイエンスのリフローキットのプログラム

Papanda_SSR_Solder_Toaster_Controller_Platform (GitHub)

これ以上持っていても仕方がないのでとりあえず公開しておきます。実は純正プログラムも、最初はPID制御をしていたけど後に辞めた、ということを知ったのはPIDライブラリで書きなおしたあとでした(^^;

TSSOP-8パッケージのリフロー成功

まだ、1608パッドの周辺はダマになってるけど、狭ピッチのICもリフローできるようになってきたよ。

TSSOP-8リフローの様子

秘訣は….

クリームはんだを撹拌すること

でした….マジかよ。要するに上澄みの方は有機溶剤が飛んでいて、十分な濡れ性を確保できていなかったようだ。表面張力で引き寄せられない部分がダマになるってわけ。均一性が崩れるので撹拌しすぎるのも良くないらしいけど。

世間を見回せば、今回買ったような容器タイプじゃなくて、シリンジタイプのものがたくさんあるのね。これは有機溶剤が飛ばないようにするためのものだと思う。

正直、通販だと賞味期限とか保管時の温度とか信頼できないわけだけど、最低限撹拌はするというのが勘所かしら。

 

温度プロファイルの条件出し

最終的な温度プロファイルは以下に。

最終温度プロファイル

正直最初のころとあまり変わっていない。プリヒート工程を2段にしたことくらいかな。パラメータは以下に。

  • ヒーター: 下段のみ
  • TimeInterval: 2000 ms
  • Kp: 107
  • Ki: 0.65
  • Kd: 18.5
  • 工程: 80度/120度/230度

PID使っちゃったのが運のつきなんだけど、PID理論についてはモータのPID制御法 というページが一番わかりやすかったです。今回のヒーターの場合はKdがあまり小さいと追従性がいまいちということがわかりました。

あと色々苦労した経験上、やっぱりプログラムや熱電対だけでは実際の基板の温度がわからないので、下記のような放射温度計がどーしても必要です。参照基板に熱電対をカプトンテープで固定しているのですが、隣接する実際の基板と20度以上違うことも珍しくありませんでした。

熱せないとクリームはんだ溶けませんけど、熱し過ぎるとチップが壊れるので測定重要です。

Eagleの設定し忘れ

余談ですが。

どうも以前から気になっていたのだが、PCBステンシルを使ってパッドに盛ったクリームはんだの量が多い。写真でも確認できるけど1608のパッドはてんこ盛りである。デザインルールはElecrowからダウンロードしたものをそのまま使っていたので再確認してみると…Masksの設定が全くされていない(オール0)であることに気づいた。いつからだ….

Cream項目設定し忘れ

このうちのStopがストップマスクの設定で、Creamがクリームはんだを塗る領域を指定する指標らしいんだな。しかし、今これを気づいたところで、また基板とステンシルを再発注ということになってしまうのであった。

ほんと経験がないから金ばっかりかかってもう….ハード屋さんが身近にいれば色々助かるんだけどねえ。

いまさらSamba3で苦労している

いまさらSamba3で苦労している

ほんと「単一ドメインでディレクトリ/mnt/shareを誰でも共有できるようにする」目的だけ達成できればいいのに、すごーく苦労しているという話。SMB2を使って高速化したかっただけなんだけどねー

今更samba3もないものだけど余計に情報が錯綜して困ってる。

現状の設定ファイル

testparmを通したもの….

[global]
 server string = %h server
 map to guest = Bad User
 obey pam restrictions = Yes
 pam password change = Yes
 passwd program = /usr/bin/passwd %u
 passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
 unix password sync = Yes
 syslog = 0
 log level = 3
 log file = /var/log/samba/log.%m
 max log size = 100
 disable spoolss = Yes
 dns proxy = No
 panic action = /usr/share/samba/panic-action %d
 printing = bsd
 print command = lpr -r -P'%p' %s
 lpq command = lpq -P'%p'
 lprm command = lprm -P'%p' %j
 blocking locks = No
 oplocks = No
 wide links = Yes
[share]
 comment = Media Directories
 path = /mnt/share
 read only = No
 guest ok = Yes

設定ファイル解説

文字セットをWin/Linux/Macで「普通」に使えるようにする

display charset = UTF-8
 unix charset = UTF-8
 dos charset = CP932

security=shareを設定する愚策脱却

map to guest = Bad User
 (security = user)

SMB2を使って高速化

 max protocol = SMB2
 (security = user)

NetBIOS名の解決にDNSを使わない,タイムアウト抑止

dns proxy = No

アカウント管理を極力UNIX(PAM)に任せる

obey pam restrictions = Yes
 pam password change = Yes
 unix password sync = Yes

ログを最小にする

syslog = 0
 log file = /var/log/samba/log.%m
 max log size = 100

Sambaでプリンタ共有無効&ログ抑止

disable spoolss = Yes
 printing = bsd

複数Ver.Windows OSが共存している状態でファイルが壊れる問題の対処

blocking locks = No
 oplocks = No

Win含めたユーザにsymlinkを意識させず、かつ管理者はSambaの外で操作できる

unix extensions = No
 wide links = Yes

どうしてもMac OS Xからログインできない

ゲストでも登録ユーザでもダメで….多分上記の設定ファイルが間違っている
のだろうけど全くPAM <-> Sambaのアカウント管理が同期してくれないよのね。

/var/lib/samba/passdb.tdbがなぜか更新されない。smbpasswdも使えない。

腹が立ったので

# pdbedit -a -u papanda

として強制的にユーザ追加してguestログインは諦めた!敗北!

find,xargsコマンドの小ネタ

findコマンドの正規表現

仕事で。とある動画系商用システムで、定期的に動かしていたコンテンツを別サーバと同期するバッチが凍り付くようになったとヘルプ。バッチを覗いてみると…

find /var/cache -type f -name '*.jpg' -exec rm -f {} \;
find /var/cache -type f -name '*.JPG' -exec rm -f {} \;
find /var/cache -type f -name '*.png' -exec rm -f {} \;
find /var/cache -type f -name '*.PNG' -exec rm -f {} \;
find /var/cache -type f -name '*.bmp' -exec rm -f {} \;
(これが20行くらい続く)

ouch!

仮に/var/cacheに10万個ファイルがあれば、ディレクトリサーチは10万x20行。開発者に聞いたところ「拡張子を列挙しようと思ったが()が効かないのでそういうものだと諦めた」だそうで。

Linuxなどでよく使われているGNUfindコマンドの場合、regextypeで正規表現を切り替えることができる。大文字小文字を区別しない-iregexもある。以下のように書くだけでディレクトリサーチの回数は1/20になる。

find /var/cache -type f -regextype posix-exteneded -iregex
'.+\.(jpg|png|gif|bmp|mpg|mp4|3gpp|ts|mp4a|aac)$' ....

ファイル削除の高速化

さらにバッチが凍り付く原因を調べると、動画からサムネイルを生成する
プログラムが壊れたアップロードファイルを読み込んで暴走し、cacheディレクトリに800万個くらいのJPEGを生成したことがわかった。そりゃ凍り付くわな….

findのもうひとつの盲点は-execオプションの扱い。ちまたのLinux入門書を見ると半ば定型句のように-exec rm -f {} \;が書いてある(俺もな!)。
実はこの指定、1ファイルごとにrmコマンドをfork()してexec()するので
とても遅い。

本来、手動で複数ファイルを消すときも、

$ rm hoge.txt piyo.txt aho.jpg ...

というように複数ファイルを指定することが多いはず。これを模倣してくれるのがxargsコマンド。findから受け取ったファイルリストをコマンド引数ギリギリの長さまで羅列して、rmコマンドに渡してくれる。

20万個の空ファイルを生成してベンチマークしてみる。

$ time find cache -type f -exec rm -f {} \;
real 2m38.417s
user 0m1.356s
sys 0m35.328s

ファイル名に空白を含む場合を想定して、findには-print0オプションを、
xargsには-0オプションをつけることにしよう。

$ time find cache -type f -print0 | xargs -0 rm -f 
real 0m9.092s
user 0m0.276s
sys 0m2.812s

約18倍高速化

6時間かかる削除処理が20分で終わります…となると、実作業の効率はだいぶ異なってくる。顧客の心情も。

さて。これが最速か?実はわざわざxargsをパイプで結ばなくても、もともとfindコマンドには-deleteオプションがあり、一切外部コマンドを使わなくてもファイルを消すことだけはできる。ディレクトリサーチしているfindが直接unlink()システムコールを呼ぶから理論上は最速のはず….

$ time find cache -type f -delete
real 0m9.105s
user 0m0.144s
sys 0m2.692s

しかし(この環境では)あまり変わらなかったようだ。速度が全く同じであれば、rm -vfとして実際に消せたかログを残せるxargsコンビの方が多少有利か。

xargsコマンドの小技

ちなみに、xargsコマンドには-lオプションというのがあって何ファイルずつ引数に渡すかを指定できる。なお、-lのデフォルト行数は1なので以下の2行はほとんど等価である(等価に遅い)。

$ time find cache -type f -print0 | xargs -l -0 rm -f 
$ time find cache -type f -exec rm -f {} \;

xargsに-lオプションを付けたいとき、というのは擬似的には

$ mv hoge.txt /var/trash

のようなファイル削除以外のファイル操作コマンドの、第2引数にコピー先を与えたいときだろう。本当は以下のように書きたい用途において。

$ mv hoge.txt piyo.txt ... /var/trash

GNU fileutilsに属するコマンドはよく考えられており、cp,mv等には-tオプションが存在する。-tは宛先ディレクトリ指定。ゆえに以下の2行は等価である。

$ mv hoge.txt piyo.txt /var/trash
$ mv -t /var/trash hoge.txt piyo.txt

おっ、宛先ディレクトリが前出しできた。-t /var/trash以降にはコマンドライン引数限度めいっぱいまでファイル名が並べられるので、xargsとベストマッチする。

これまでの内容を組み合わせて、例えば特定のディレクトリの特定種のファイルのみを別ディレクトリに移動する、といった場面を考えたとき、以下のようなコマンドが最速となる、だろう。

$ find /var/cache -type f -regextype posix-exteneded ¥
-iregex '.+\.(jpg|png|gif|bmp|mpg|mp4|3gpp|ts|mp4a|aac)$' ¥
-print0 | xargs -0 mv -t /var/trash

ま、本当に緊急回避的に/var/cacheを掃除したいなら

$ mv cache cache_orig
$ mkdir -p cache

が最速である(^^; これがオチでいいのか….

クリームはんだ、ダマ地獄

まあ写真を見てくださいよ・・・・

ダマみえます?パッド周辺に細かいダマのようなものができてるでしょ。LPC1114周辺はさらに怪しくて短絡している始末。正直手はんだの方が高クォリティですよ。

せっかく炉まで作ったのに。温度プロファイルをアレコレ変えても今のところ打開策なし。ソーク工程を短くすると少しマシにはなりますが力尽きた。

クリームはんだそのものの問題?

温度のせいだけじゃないと思うんですよ。フラックスがヘタってるとしか思えないんだよね。なぜならPCBステンシル経由で塗付する時点ですでにダマっぽいので。クリームはんだの品質は、温度管理等様々な劣化要因があることは知ってて、もっとも安心そうな東京デバイセズから買って、それで駄目ならどうすりゃええんや・・・・

ほんと、ハードウェア趣味は金がかかるなあ。

てなわけで、しばらく日記をお休みしていたのは、こんな初歩的なところで躓いていたからなのでした。