« 無線モジュールXbeeで(に)遊んでいる(遊ばれている) | トップページ | リニアーPCMプレーヤー2号機ついに完成 »

2009年10月 5日 (月)

Olimexのプリント基板はXbeeを先に使う

Olimexから基板キター(9/29/09)A9292302
 前回のブログをアップして居間に戻ったら、郵便屋さんが「書き留めでーす」と訪ねてきた。今か今かと待ちかねていたOlimexからの基板の入った航空便だった。へー、日本では書き留め扱いするんだ。しかし、それにしても、「shipped」のメールはその前のブログ記事のアップの直後、今度もこのタイミング。奇妙な符合である。日数が数えやすい。12日で到着したことになる。

 記念すべき最初のブルガリアから基板到着便だ。封を切る前にあわててカメラを取り出し記念撮影する。中からは少し厚めのシュリンクラップにつつまれて基板5枚が出てきた。仕上げはどうだ。うむ、パッドがハンダ仕上げでなく、金フラッシュなので素晴らしく綺麗に見える。A9292306

 いやあ、たいしたもんだ。しかし、見ているうちに徐々に胸が高まってくる。果たして実際の部品が、この基板のパッドに正確に入るかどうかを、これから確かめねばならない。自作した部品ライブラリーが正確に出来たかどうか、公開に耐える品質なのかこれからはっきりする。スケール1の印刷で調べてはあるが不安は消えていない。

 まず、SDカードスロットを載せてみる。おお、空けてあった穴とスロットの突起がピッタリ入ってきっちりと納まった。接点も完全に合っている。うまいぞ。次は、平型の2連VR。うむ、こいつも所定の穴にぴたっと納まった。よーし、残るはステレオフォンジャックだ。ややや、こいつは入らない。標準のライブラリに同じものがあったので、余り念入りに確認していなかった。まずドリルサイズがジャックの端子の巾よりほんの少しだが小さい。それに端子の一つが0.2ミリほどずれている。

 マーフィーの法則ではないが、間の悪いことにずれているところはアクティブな端子のひとつだ。しかも配線パターンが部品側でハンダ付けで誤魔化せない。うーむ、困った。ドリルサイズが小さいのは、端子をやすりで細くして何とかなりそうだが、このずれは致命的な結果になる恐れがある。

 暫く思案したが、意を決して、このあいだ使ったアートナイフでドリル穴を少しづつ削りだした。削ったところのスルーホールの金属面は失われてしまうがこれは仕方がない。
アートナイフが結構良く切れるので、ほどなく端子が入るところまで削れた。ルーペでチェックする。まずい。反対側のパッドまで少し削れてしまった。これは大変だ。

 残りの不整合部は、端子をやすりで削り、少しづつジャックを入れていく。入った。恐る恐るテスターで問題の箇所の導通を調べる。良かった。ハンダ付けしなくても導通している。固定する前にハンダメッキすれば大丈夫だろう。胸を撫で下ろす。

 ここ以外は標準部品ライブラリそのままなので余り心配しなくて良い(はずだ)。でも念のため、USBジャックや、ICを確かめる。よし、みんなOKだ。いやあ良かった。部品を載せて本当に動くまで、まだドラマは終わらないが、LPCMプレーヤー2号機の制作は一山を越した。あとは半田付けだけである。

 もうひとつのプリント基板、Xbeeモジュールのピッチ変換基板である。こちらは、2ミリピッチを確かめるだけだ。くもの巣状のXbeeモジュールからソケットを抜いてテストする。苦もなくピッタリ納まる。思わず半田ごてに電気を入れて2つの変換基板のハンダ付けにとりかかってしまう。Aa032309

 直近から言えば、こちらの基板の方がニーズが高い。バラック配線で苦労している。早速、親機側にブレッドボードに接続するための10ピンヘッダーと、リセットスイッチ、子機には電源と、ループバック用のジャンパーピンを取り付ける。机の上の実験環境はこれで見違えるようにきれいになった。よし、これから本格的なXbeeの実験にとりかかれる。

わかりにくいXbeeのAPIフレーム(9/30/09)
 机の上が片付いたので、本格的にXbeeのADCデータの解析を始めた。ADCデータが送信されるのは確認してあるが、中味はまだ何も調べていない。

 こいつが難儀した。何かわざと難しく書いてあるのではないかと勘ぐりたくなるほどマニュアルのADCデータフォーマットの説明が分かりにくい。わかりやすい英語なのだが、解説しているところが分散してしまっている。Ws000000

 ADCデータのデータフォーマットはすぐわかった(12ページ)。しかし全体の記述がない。実は次のページ(13ページ)にAPI supportという見出しで、これが0x83(16ビットアドレスのとき)の識別子(後述)を持ち、詳しいフレームフォーマットは62ページを見よという説明があるのだが、このAPI supportという見出しそのものが誤解を招く。APIフレームや識別子そのものが良くわからないときはこのあたりは読み飛ばしてしまう。

 これは説明の順番が逆だろう。始めにADCデータはAPIフレームフォーマットと全く同じ様式であると説明し、そのあと、その識別子(identifier)は0x83で、その中味はこれこれ、と説明されればここまで迷うことなかったように思う。

フレームの構造そのものはそう難しくはない。

1バイト目 0x7E   APIフレームの先頭をあらわすデリミッター。固定。
2      チェックサムを除いたデータフレームの長さ2バイト MSB
3                               LSB

ここからがデータフレーム
4     APIフレーム識別子(identifier) APIフレームの種類を規定

ここまでがAPIフレーム共通フォーマットで、このあとはAPIフレーム識別子によってそれぞれ異なるフォーマットを持つ。0x83で表わされる16ビットアドレスモジュールの送信I/Oデータは、

5     フレームを作った通信モジュールアドレス(16ビットアドレスのとき)で、 
6     64ビットアドレスのときは、5~6 でなく、5~12バイトとなる。
7     1バイトで表わされる受信電波強度(RSSI) 
8     オプションバイト(ブロードキャストフラグなど)

実は、この4バイトも、大部分のAPIフレームに共通のフォーマットなのだが、最初、このブロックを見落とし、解析に非常に手間取った。この4バイトのあとが、マニュアルの最初に出ているADCデータのフォーマットの部分である。

9    I/Oデータのサンプル数(合計ではない。合計はサンプル数×ポート数)
10    15ビット分のアクティブなI/OとADCポートの表示。アクティブなところ
11    に1が立つ。 
      | ?A5 A4 A3 A2 A1 A0 D8 | D7 D6 D5 D4 D3 D2 D1 D0 |
      例えば、A0とD2 、D4をアクティブにしていると、0x02、0x14となる。
      ここまでが、データヘッダーと呼ばれる部分。
12~   これ以降は2バイトづつのDIOデータとADCデータ(右詰10ビット)が
      並ぶ。数は、アクティブなポート数でわかる。但し、DIOデータは必ず先頭で、ひとつしかなく、何らかのDIOをアクティブにしたときのみ付く。フォーマットは右詰のビットフィールドでDIOの状態を表わす。

 フレームの最後は必ず、4バイト目以降のすべてのバイトを足し上げた和の末尾1バイトを0xFFから引いたチェックサムバイトが付く。

 やれやれ。わかってみるとどうということもないフォーマットだが、このADCから出されるデータの解析にほぼ半日かかってしまった。I/Oデータフレームのフォーマットは12ページ、0x83の記述が13ページ、実際のフレーム全体の定義は62ページに分散して書かれているので理解しにくい。最初は0x83の識別子を持つAPIフレームをAPIを解説している章で捜し回って「ない、ない」と騒いでいた。まあ、根が慌て者の早飲み込みと言うだけなのだが。

Xbee子機の電源制御はもっと楽な方法があった(10/2/09)
 何事もやりだすと夢中になって止まらない性質(たち)である。やっとのことでAPIフレームの仕様がわかったので、その勢いが止まらない。本題のLPCMプレーヤー基板の実装はそっちのけで、XbeeのADCデータの解析に進んだ。

 まず、ADCの実際の値を調べる。電流センサーは仕掛けがかさばるので、簡単な手持ちの温度センサーICをテストに使う。最近、秋月が売り出した低電圧でも動く温度センサーLM60である。温度センサーというとLM35Dあたりが定番だが、このセンサーは電源電圧が最低でも4V以上必要で、最初に作った温度ロガーでは、ボタン電池を使って5Vを確保している。

 これに対してLM60の最低電圧は2.7Vからなので、Xbeeなどの3.3V機器には都合が良い。このあいだ使う予定もないのに買ってきてあった。このLM60を鼻歌交じりでXbeeのADCピンに接続し、温度出力を確かめる。こいつは、LM35Dと違って氷点下まで測れる優れもので、0Vが424mV、1 度あたりが6.25mVとなっている。

 ありゃあ、XbeeのADCデータが全く出ていない。電圧が0.6Vくらい出ている(温度26度程度)のはテスターで確かめてあるのに、10ビットのADCデータは3FF(1024)を指したままピクリとも動かない。何故だ。あ、あ、馬鹿だなあ。基準電圧ピンに何もつないでいない。Xbeeには基準電圧ピンのない機種もあるそうだが、この無印Xbeeは基準電圧を入れてやる必要がある。

 とりあえずVccにつないでめでたく数値は、600mV前後の値、200あたりを指すようになった。指でおさえれば着実に数値が上がる。定常状態でちょっと値がフラフラするのが気がかりだが、とりあえずADCの動作は確認できた。

 次は、AC電流センサーの出力を整流するオペアンプの電源制御である。これについては、このあいだ買ったインターフェースのXbeeの記事で願ってもない情報を見つけた。スリープ/アクティブの状況を表示するピン(13ピン)があったのだ。 負論理で、スリープの時がLow、アクティブのときがHighである。勿論、オリジナルのマニュアルのピンアサインにもちゃんと載っている。見落としていただけだ。なーんだ、これを使えば、面倒なリモートATコマンドで子機のI/Oピンをドライブする必要がない。リモートATコマンドも面白いが、これはあとにしよう。

 しかし、このピンで実際の電源制御をFETでやろうとして困った。FETのゲートに直接つなぐことができない。FETはゲートがLowでON、HighでOFFとなり、論理が逆だ。インバーターをつなぐ?うーむ、大げさになるな。何とか素子ひとつで順論理を実現するうまい方法はないか。

順論理のソリッドステートリレーを作る(10/4/09)
 ネットで色々調べたが、順論理の動きをする手頃なソリッドステートリレー回路が見当たらない。FETでなく、トランジスター(オープンコレクター)でも論理は反転してしまう。しかも、NPNトランジスターのオープンコレクターでは、負荷のマイナス側を切ることになり、電源制御のこの方法は前に何度かひどい目にあっている。

 モーターのような独立したディバイスなら問題ないが、LCDや、SDカードなど制御線が本体とつながっている機器は、Vccをグランド側で切ると、機器への電流が制御線を通じて流れ、おかしな動作をする。一番ひどかったのは、SDカードの電源をグランド側で切ったときだ。プラス側が生きているのでSPIを通じてMCUのMega168のI/Oピンに大量の電流が流れ、チップを壊してしまったことがある(8/31/2008 MMC(SDカード)をMega168で)。LCDの電源をグランド側で切ったときも、全体の消費電流が逆に倍増して、あわててバックライトの電源だけを切って、事なきを得た。

 この問題を以前、専門家(サーバーのハード設計者)に尋ねたことがある。答えは、素子の間をフォトカプラーなどで電気的に絶縁しない限り、こういう仕様外の結線では、何がおきるか全く保障されていないということだった。要するにそのときの結線状態の電気回路になるというのだ。この解析は素人の手に負える問題ではない。

 プラス側を切る電源制御も油断がならない。このあいだのH8では、SDカードの電源をFETを使ってプラス側で切ったが、このときはレベルシフター(H8が5V、SDカードが3.3V)経由のSPIを通じて、H8からSDカードに電流が流れ、Vccが上がって幽霊動作をしていたことがある。このお陰で配線間違いのバグに気づかず、H8でSDカードを動かすのに半年近くもかかった。Aa042315

 それはさておき、整流用オペアンプの消費電流は1mA以下である。直接XbeeのI/Oピンで駆動できそうな気もするが、さすがにそれはやめておく。インバーターをどう実装するかをあれこれ考えるより、こういうものは一歩づつ、とにかく動かしていくのが一番だ。まずはXbeeのSLEEP/ONピンがスペック通り動いているかを確認しよう。ピンにLEDを付け、実際に点灯するか確かめる。あれえ、小さく点きっぱなしだ。電圧をテスターで測る。3.3Vと3V。なにい、ON/OFFの差が殆どない。しかもLEDに殆ど電流が流れないじゃないか。何か足らないものがあるのか。あ、あ、あ、ピンの位置を間違えている。馬鹿な話である。正しい13ピンに接続し、めでたくLEDはスリープの度に点灯と消灯を繰り返した。OKだ。Photo

 次は、図の回路である。FETにオープンコレクターのトランジスタをつけた。オペアンプひとつの電源制御のために2つも素子を使うのも抵抗があるが、この際仕方がない。論理反転しているので点灯と消灯がちょうど逆になるはずである。あれえ、同時に消灯、点灯となる。何故だ。SLEEPで点灯したときは消灯し、動作状態のとき点灯しなければいけない。おかしい。あ、あ、あ、それで良いのだ。今日はどうかしている。FETが論理反転するので、わざわざ反転させて正論理にしていることをすっかり忘れていた。Xbeeのスリープ表示ピンは負論理でスリープ時は消灯だった。どうも慌て者の癖が直らない。

 とにかく、これで、省電力設計のXbeeセンサー開発は一歩進んだ。リモートATコマンドのハンドリングも面白そうだが、わざわざしかけを複雑にすることはない。この回路を使えば子機はコマンドを貰わずに独立して電源制御が出来る。

 出来上がった回路を良く見ていて、このFETをPNPトランジスターに替えれば、このあいだ作った検電器のダーリントン接続と全く同じになることに気が付いた。そうか、あの検電器は順論理のソリッドステートリレーだったのだ。ダーリントン接続の回路も早速試してみる。問題なく動いた。まあ、電源制御といっても数mAしか流れない。気楽なものだ。(回路は自己責任でご利用ください。全く自信はありません)

|

« 無線モジュールXbeeで(に)遊んでいる(遊ばれている) | トップページ | リニアーPCMプレーヤー2号機ついに完成 »

電子工作」カテゴリの記事

Xbee」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: Olimexのプリント基板はXbeeを先に使う:

« 無線モジュールXbeeで(に)遊んでいる(遊ばれている) | トップページ | リニアーPCMプレーヤー2号機ついに完成 »