2011/12/31

LIS3LV02DLの使い方

製作した計器に搭載している加速度センサLIS3LV02DLにはかなり癖があることがわかったので、調べたことをまとめておきます。
このセンサはCSピンの論理によってI2C/SPIモードの切り替えができるため、2つのモードについて分けて書きます。

1. I2Cモード
I2Cモードでの動作には非常に癖があります。
下の図はUSB-I2Cブリッジを使い、I2Cのアドレスを表示させたものです。
USB-I2Cブリッジを使って調べたI2Cのアドレス
データシートによると、このデバイスのアドレスは3A(8bit)ですが、ほかのアドレスも表示されています。
問題がこれだけならばよいのですが、100Hz程度の読み出しを行うとI2Cバスが途中で停止してしまいました。
これらの挙動には電圧依存があるらしく、3.3V動作と2.5V動作を比べると、2.5Vの場合のほうがうまく動いているようでした。
以前に、長いACKが出力されるという問題をレポートしましたが、その原因もこのセンサにあったようです。
I2Cモードではこのような動作をするので、読み出す頻度が低い場合やテスト以外にはI2Cモードは使うべきではありません。

2. SPIモード
SPIモードではこのセンサは特に癖もなく、問題なく動きます。
下の図は10msごとに3軸分の加速度を読んだ様子をロジックアナライザで調べたものですが、読み出しはI2Cに比べ高速で挙動も安定しています。
SPIモードで3軸を同時に読み出している様子

製作した計器では何とかごまかしながら加速度を測定していますが、近いうちに使っているジャイロセンサIMU-3000とピン互換のある6軸センサMPU-60X0が出るはずなので、そちらに切り替える予定です。
また、9軸分のセンサと行っているI2C通信にかかる時間がかなりシステムの足を引っ張っていることがわかったので、次に基板を作製する時にはMPU-6000からSPI通信で6軸分のデータを取得しようと考えています。

2011/12/29

GPS用Wilkinson Couplerの設計とシミュレーション

2台の異なるGPS受信機の比較をしてみたくなったので、分配器について考えてみました。
市販されている分配器は、高価で海外から取り寄せる必要があるなど購入しにくかったり、小型の受信機に多いMCX/MMCXコネクタタイプが少なく使い勝手があまりよくなかったりします。

そこで、GPSで使う周波数帯で性能が発揮できればよいという条件で、マイクロ波分配器Wilkinson Couplerを設計・シミュレーションしました。
できるだけ安くプリント基板を作りたいので、コンパクトにまとめるというのも制約条件です。

Wilkinson CouplerについてはI-Laboratoryに詳しい情報があります。
今回は小型なものを作りたいので、できるだけ使うストリップラインが短いものを選択しました。
同じくI-laboratoryにあるストリップラインのインピーダンス計算機を使い、線路幅、線路長を決め、できるだけ小さな領域に入るように配置して設計は終わりです。

シミュレーションはモーメント法マイクロ波シミュレータSonnetを使って行ないました。
シミュレーションに使ったモデルは下図のようになります。
35mm x 35mmの領域に配置したシミュレーションモデル
基板を発注することを想定して、誘電体はFR-4、伝導体は35um厚の銅箔に設定しています。
また、抵抗・コンデンサのモデルには理想素子を使っています。
無料版には計算に使うメモリが32MByteまでという制限があるので、メッシュは0.4mmピッチが限界でした。
左がGPSアンテナをつなぐポート、右の2つがGPS受信機をつなぐポートです。
GPSアンテナの電源はアンテナ線に重畳して供給されるため、2台の受信機をそのままつなぐと不具合が生じる可能性があります。
そのため、右下のポートにはDCカット用のコンデンサも入れてあります。

下図がシミュレーションの結果です。
ポート間の透過率(左軸)とVSWR(右軸)
Sパラメータのスミスチャートプロット
GPSで使う周波数帯は大体1.2 - 1.6GHzの範囲にありますが、その全域でVSWRは1.5以下となっています。
また、S12(=S21~S13=S31)から入力した信号の半分(-3dB)ずつが出力ポートに伝わり、S23(=S32)から出力ポート同士の結合は-15dB以下と小さいことがわかります。

シミュレーション上では十分な性能が発揮できそうなことがわかったので、設計データをガーバに落とし、基板を発注してみようと思います。

2011/12/11

PSoC5はじめました

やっとデバイスが手に入るようになったのでPSoC5を使いはじめました。

PSoC3をはがして貼りかえたPSoC5

新しいマイコンを使い始めるときには、開発キットを買う、基板を起こすなどするところですが、現在購入できるTQFP100のチップはPSoC3と完全なピン互換があるので、使っていたPSoC3をはがしてPSoC5に貼りかえることで基板と周辺回路を再利用しています。

ハードウエアはPSoC3と完全に互換性があるのですが、ソフトウエアはそうもいかないようです。
以下にプロジェクトファイルを移植する過程で気になった点を書いておきます。
詳しく調べていないものがほとんどですが、多くはPSoC3で使うコンパイラKeilとPSoC5で使うコンパイラGCCの違いによるものだと思います。
  • 再帰が使えるようになった。たとえば、ChanさんのところにあるFatFs用サンプルプロジェクトを移植しやすくなるなど、プログラムが書きやすくなった。
  • Keilがビッグエンディアン、GCCがリトルエンディアンを採用しているので、加速度センサの読み出しなど一部のコードに修正が必要になった。
  • Keilでは構造体のパディングは0だったのだが、GCCでは2バイト境界に合わせるように(?)パディングされる。
  • math.hで定義される関数がそのままでは使えない。コンパイラオプションを変更することで対応できるはず(?)。
  • PSoC3には存在するがPSoC5には存在しないレジスタがある。低電圧リセット関係がその一例。
また、PSoC5のリリースに合わせて(?)統合開発環境PSoC Creatorが2.0にメジャーアップデートされ、一部のユーザーモジュールには変更もあったようです。
  • DeltaSigmaADCがデジタル・アナログクロックの両方を要求するようになった。以前のバージョンでは、アナログクロックのみだったので、デジタルクロックを使い切っているプロジェクトの移植には注意が必要。
以上が気がついた点です。

エンディアンとパディングの違いは計器のプログラムに大きな影響を与えるため、かなりの部分のコードに修正を加えないといけないことがわかりました。
せっかくの機会なので、構造体のパディングに依存しないようにコードを書き換えるなど、移植性も考えてプログラムに修正を加えていくつもりです。

2011/12/04

計器の紹介その2

Make: Tokyo Meeting 07に出展してきました。
出展用に作った計器の紹介のビラがあるので、アップロードしておきます。
会場に貼っていたもので、配布したビラの上位互換にあたるものです。


計器の紹介のページにあるものは作ったものの紹介という感じですが、こちらには測った結果も載せています。