自作電子小物/PC20データーロガー/SDカード版
自作電子小物/PC20データーロガー/SDカード版
PC20 SD logger
2009年2月20日金曜日
「PC20 SD logger」はDMM(デジタルマルチメーター)のSANWA PC20にロギング機能を追加します。PC20背面にタバコ箱大の「小物」装着する事で、計測データを長時間SD Cardに蓄積でき、後でSDカードを取り出しパソコン等で数値データを取り込みできます。ケーブルなどは一切ありませんので取り回しが楽です。
Cypress Semiconductor社のPSoCマイコンを使用する事で簡単・安価に自作できます。PC20は三和電気計器株式会社が販売する、PC連携機能を持つ一番ベーシックなモデルです。
<仕様>
名称:PC20 SD logger
分類:DMM測定値記録器(メモリーカード型)
対応機種:SANWA PC-20 / PC20TK
対応メディア:SD card(変換アダプタでmini, microも可能)
データフォーマット:
ファイルシステム:FAT16または32、フォーマット済である事
データ形式:CSV
ファイル名:固定(PC20.csv)、既にファイルがある場合は追記されます
データ精度:PC20仕様と同一
サンプリング回数: 約3回/秒(PC20のデータリンク出力仕様に従う)
デー他項目:シーケンス番号、AC/DC、数値、単位
最大データ量:使用するSDカードの容量により制限、例えば8MBのSDカードで約40万件・100時間分
外形:縦72mm、横42mm、高さ23mm
電源:単3型乾電池または充電池×2本
動作時間:1000時間以上
製作費:約3000円ぐらい
<機能/特徴>
■測定場所、時間を選ばない
■SDカードを差し込むだけでロギング開始の簡単な使用法
■充電池を使用する事でランニングコストを抑えられる
■部品数がきわめて少ないので簡単に作れる
注意事項: 三和電気計器株式会社様とは全く関係がありません。ご迷惑を掛けてしまいますので、問合せなど絶対しないで下さい。
念願 の独立型データロガーを作ってみました。これで、パソコンの電源を入れっぱなしにしなくても済み電気代を節約できます。また、測定場所も選びません。
出来るだけ簡単に済むようにと考え、マイコンはPSoCを選択しました。入出力は全てデジタルなので、もっと安いデバイス(PIC等)にすべきでしょうが、ソフトウエア側を考えると、 SDカードのI/OとFATファイルシステムをどこかから持ってくるか、作るかしなければなりません。さすがに昔を思い出しながらFATを実装するまで寄り道する気が起こらなかったので、標準でSD/MMCカードサポートモジュールが提供されているPSoCを使う事にしました※1。PIC18にもFATを含んだSDカードのI/Oライブラリが提供されているので、こちらでも良いかもしれません※2。
※1 PSoC Designer 5 SP5以降では、SD/MMCカードサポートモジュールが削除されています。配置済みのプロジェクトを開いたり、ビルドする事は可能との事です。実際、SP5.5で動作確認できています。新規でPSoCでSDカードを利用したものを作ろうと考えている方は注意する必要があります。SD/MMCカードサポートモジュールが使われている既存のプロジェクトを開き、別の名前でプロジェクトを保存すれば、モジュールを利用する事は可能のようですが、Cypress社の本意ではないでしょう。 2009.11.28
※2 PICでの実現性を調査しましたが、Microchip提供のリソースではプログラムメモリ容量が64kB程度は必要で、結局お高いデバイスしか選択肢がありません。別のライブラリ(FatFs等)や他のIDE(MikroC)を使えば、より少ない容量で済みますので、それに頼る方法もあります。PSoCの事もあり、簡易的なSDカード+FATを実装してみました。比較的安いPIC18F2550でもSDカードのファイル読み書きが可能となりました。2010.1.22
回路図を見ても解る通り、ほとんど外部部品は必要ありません。(画像クリックで拡大)マイコン本体とSDカードコネクタ、フォトトランジスタ、クリスタルぐらいです。時間精度にこだわらなければ、時計用クリスタルもカットできます。LEDはパイロットランプで、手持ち部品を使っただけですので何でもOKです。プログラムもFATファイルシステムを全く意識しなくても済むので、コーディングは楽勝です。
*** 部品表 ***
区分 品名 数 金額 入手先
---------- --------------- -- ---- ------------------
PSoC CY8C29466-PXI 1 500 秋月電子通商
水晶 32768Hz 1 100 -
フォトTr TPS611 1 115 マルツパーツ館
3色LED LATBT66B 1 200 秋月電子通商
コンデンサ 20p 2 34 マルツパーツ館
0.1uF 1 42 マルツパーツ館
10uF 1 42 マルツパーツ館
抵抗 10k 4 84 マルツパーツ館
750 1 21 マルツパーツ館
250 2 42 マルツパーツ館
SDコネクタ DM1B-DSF-PEJ(82) 1 190 秋月電子通商
SDカード CU-SD008 1 100 秋月電子通商
蛇の目基板 P-00517 1 60 秋月電子通商
ピンヘッダ C-01669 1 50 秋月電子通商
電池ホルダ BH-321-4A 1 60 秋月電子通商
---------- --------------- -- ---- ------------------
1640
ー電源部ー
区分 品名 数 金額 入手先
---------- --------------- -- ---- ------------------
DCDC TPS61070 1 300 Digi-Key
インダクタ 10uH(東光) 1 94 マルツパーツ館
コンデンサ 10uF 2 84 マルツパーツ館
0.1uF 2 84 マルツパーツ館
抵抗 1M 1 21 マルツパーツ館
180K 1 21 マルツパーツ館
---------- --------------- -- ---- ------------------
604
金額は参考
SDカードの仕様から、3.3V前後の電源を用意すれば良いので、通常はバッテリ3本+低消費電力型のLDOで良いと思います。
私は、バッテリ数を減らすのにこだわるあまり、PSoCのSMP機能を何とか利用できないかと、かなりの時間をかけてしまいました。このSMP機能がくせ者で、そのままでは数mA程度とPSoC自身もやっとやっとまかなえる程度しかドライブできません。外付部品で容量アップを考えても、意外と部品点数が増えてしまい、もっといい方法はないものか悩み始めます。また、意外だったのはSD Cardの消費電流が思っていたより多い事で、市販されているSD Cardの仕様を調べると100mAとかいう物があったりします。PSoCのSD/MMCカードサポートモジュールは、比較的低速なSPIインタフェースが使われるとの事で、実際はもっと少ないかもしれませんが、そこまでデータシートに載っていないし、制限を付けたくもなかったので、余裕を持った設計にせざるを得ません。
結局あまり、これに多くの時間を使いたく無かったし、部品点数が大差なければ、専用ICが有利という結論になりました。
バッテリは1本にしたかったのですが、SDカードの消費電流次第で、製品を限定しなければならなくなるので、残念ながら2本にせざるを得ませんでした。消費電力が小さいSDカードであれば1本でも十分動きます。
<ソースコード>
●PC20のデータストリームは「 PC20データーロガー/mac版」に纏めてあります。
●SD/MMCカードサポートモジュールは、モジュール自身のコードサイズが大きいので、高価なCY8C29466しか選択肢がありません。さらに、自分が書けるコードサイズも多くとれません。注意点として、他のモジュールと同様にプロパティの設定をする必要がありますが、それに加え一部の入出力ピンの割当ては自分で行う必要があります。この辺が少し解りにくいのですが、そんなに難しくはないでしょう。私は入力であるはずのSD_DOをグローバル出力バスを使ってピンに接続し、動かない状況に暫く悩んでしまいました。後は、APIをコールするユーザコードを用意。オープン処理として、 SDCard_x_Start(), SDCard_x_InitCard()を呼んでおき、読み書きはstdio(fopen()/puts()/fclose())に似たAPIなので、SDカードのI/O仕様を全く知らずともSDカードへの書き込みが実現できました。
●バッテリ稼働が前提のため、出来るだけ省電力を考慮したつもりです。PC20自体は約150時間の仕様ですが、実際は倍以上動くようなので、300時間以上が目標です。1.2V×2Ah×1のバッテリで逆算すると、平均8mW以下にする必要があります。
●電力削減の目的でSLEEPを多用したかったため、スリープ中でも止まらないILO/ECO,32KHzクロックからシリアル受信に必要なクロック19.2KHzを強引に生成。インチキだが実働させると問題なさそう。なお、デジタルインターコネクト間はIMOで刻まれているようでSLEEPすると通じなくなります。何か手はあるのかもしれませんが、私は外部ピンに信号を引き出して直結する方法をとりました。
●電力削減のため、SDカードへの書き込みを一点集中させるバースト方式としました。メモリバッファを多用しているので、残りが少なくなっています。
●結局バッテリが2セルになってしまったので、バッテリの過放電防止の仕組みが必要ですが現在実装しておりません。とりあえず、ソフトウエアで、バッテリ電圧を読み取って危険水域に達したら強制シャットダウンしようかと考えています。
●アナログブロックは全く使用していません。もったいない...
<ダウンロード>
PSoC Designer 5 プロジェクトファイル : pc20sdlogger02.zip(2.9MB)
※HI-TECH Cが必要 (Lite版でOK)
バージョン:0.2
リリース日:2009.2.20
ライセンス:フリーソフトウエア(GPL v3)
作成者:富樫豊彦 tog001@nifty.com
開発環境:
Cypress Semiconductor PSoC Designer 5.0 (SP3a Build718)
HI-TECH C for the PSoC Mixed-Signal Array Version 9.60PL5 (Lite版)
Cypress Semiconductor PSoC Programmer 3.05
MiniProg
<開発環境について>
PSoCでC言語での開発を行う前提では、CQ出版の「PSoCマイコン・トレーニングキット」から始めるのがお勧めでしたが、HI-TECH Cの無料版が出た事で、書き込み器”CY3210-MiniProg1” 単体だけ購入すれば基本の環境は整います。必要なドキュメント、ソフトウエアは全てサイプレス社のサイトから無料で得られます。また、標準のImageCraft社のCコンパイラはライブラリが頼りない(普通あると思うようなものが無い時がある)ので、HI-TECH Cの方が好きです。私は、もうImageCraftに戻りたくはないのですが、買収関連でそうもいかないようです。
今回も、ブレッドボードに回路を組んだ所にMiniProgをつなぎ、プログラムを書き込みしました。
PC20の背面に取付けたいが故にかなり高密度になってしまいました。何台も作るのであればパターンを起こすのですが、2台だけ欲しいので、蛇の目基板で作ります。
電池の金具はタカチのものですが、自立できないので、マイナス側はケース壁面に、プラス側はICソケットにもたれかけさせました。華奢ですぐ壊れそうです。単四型の電池ケースを使うべきでした。右下の縦に取付けた基板はDCDCコンバータ部。左下の黒い目玉はフォトトランジスタで、PC20に張り合わせた時に丁度、対面する位置に配置します。ICソケットを使ったので、無くともいいのですが、プログラム書き込み用のコネクタを付けました。書き換えする時は楽なはずです。バッテリを外さないとMiniProgを取付できませんが、これはこれで単純ミスを防げるので、いいアイデアでした。
裏に、ヒロセのSDカードコネクタを張り付け。2.54mm蛇の目基板と合わせにくい感じでしたが、困る程でもありません。ケースの足が微妙に銅パターンにかかってしまうので、やはり基板を起こした方が良かったかも。
挿入検出スイッチを電源スイッチの代わりに使いました。接点の電流容量が微妙でしたが、大丈夫でしょう!?。部品選定の時にmini型のコネクタを使おうとも思いましたが、これは挿入すると接点が切れるタイプだったので、この用途には使えません。
解りにくいのですが、SDカードコネクタの右下あたりに、RGB-LEDがあります。(黒縁の白い●)後から考えると裏面を光らすのではなく、SDカード挿入口の近くに同じ向きにした方が判りやすいかもしれません。3色かつ個別PWM駆動というのはやりすぎですが、PSoCでは簡単に出来てしまいます。
ケースは有り合わせのアクリル板を切って曲げて作りました。側面全て1枚の細長い板の4カ所を曲げて筒状にします。向かい合った部分がきっちり合うように正確に作業します。解りにくいですが、左側の真ん中が接合部です。切るのはプラカッターで簡単にカットできますが、曲げるのは専用の棒状のヒータ、接着も専用のものが必要です。
もう一枚、底板分を正確に切り出して、これも接着します。LEDの都合で半透明の物を使いました。サンドペーパーでカット面を削り、ぴったり入るよう微調整を行います。楽なので私は良くこの工法を使います。
上面は、PC20側になりますので、このまま開いた状態となります。
この面を本体に張り合わせて装着します。PC20裏蓋内側に磁石を取付けておき、バッテリーに吸着するようにしました。今回は、PC20に開いているねじ穴は使いません。
フォトトランジスタの位置がうまく合っています。
背面の板は、LEDが見える様に穴を開けるのが面倒だったのと、たまたま手持ちの乳白色のアクリル板があったので、透けて見えるようにしました。
大きさもばっちり、取付け取外しも楽だし満足!と思っていたら、PC20本体を立てた状態ではケースがテーブルに接触する。まあ、致命的ではないので、2個目作る時に対応策を考えようと思います。
SDカードを挿入して電源オンさせると、赤→緑→青と順番に色が変化し初期化できた事を表します。データ受信の度に緑色に、カード書込みで青色にフラッシュし、受信エラー等が出ると赤色になります。
受信クロックを怪しい方法で生成しているので、受信エラーが心配でしたが、24H動かしても1回もエラーが出ませんでした。
<関連>
「自作電子小物/PC20データロガー/SDカード版 V0.3」
富樫 豊彦 tog001@nifty.com
DMM data logging attachment
SANWA PC20
SD card media