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に出展してきました。
出展用に作った計器の紹介のビラがあるので、アップロードしておきます。
会場に貼っていたもので、配布したビラの上位互換にあたるものです。


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

2011/11/28

工房Emerge+にアクリルパネルを発注してみた

Make: Tokyo Meeting 07で計器の展示を行うことになったので、部品の保護と見栄えをよくするためにアクリルパネルを工房Emerge+に発注してみました。

Illustratorで入稿するのがデータに問題が起きにくい方法だとは思いますが、使い慣れていることもあったのでInkscapeで加工データを作り、入稿してみました。

基本的にガイドラインに従ってデータを用意・入稿すればよいのですが、Inkscapeを使う場合は
  1. 配布されているpdf形式のテンプレートを読み込む
  2. 加工したいパスを入力
  3. svg形式で入稿
という手順を踏めばよいようです。
(8.ファイルフォーマットにsvgが書かれていないのでちょっと戸惑いました。)
Emerge+のブログにもInkscapeを使う場合の注意が書いてあります。

Inkscapeにはpdf/eps出力が備わっているので、はじめはそれを使ってみたのですが、細いパスが正しく出力されず、加工用の0.001mmのパスはすべて消えてしまいました。
また、プリンタドライバを使うタイプのpdf出力ソフトを使っても、カットパスが正しく出力されないようです。

完成したパネルは下の写真のようになります。


レーザー加工ははじめてでしたが、予想以上にきれいな仕上がりでした。
加工ガイドラインによればレーザーによる切り代は0.2mm程度とあったので、M3のねじを通す穴は2.8φで加工指示をしましたが、若干小さかったようです。
3.0φくらいが適当だったのだと思います。

加工代に学割が効いたこともあり、材料代その他を含めても1500円弱と格安でアクリルパネルができました。
精度が必要な加工をしたいときにはかなり便利に使えるサービスなので、何か機会があれば使っていきたいと思います。

2011/11/25

運用終了

電装系を提供しているTeam 'F'の今年の試験飛行が終了しました。

試験飛行は計4回行いましたが、毎回仕様を少しずつ変えながら行ったせいもあり、何度かトラブルに見舞われました。
特に気になったところを書き残しておきます。
  • ハードランディング時に液晶パネルが固定用のフレームから外れた。フレーム以外を使った固定も併用するべき。
メイン基板の取り付け状況。白いパネル部がハードランディング時に取り付けフレームから外れた

  • フォトインタラプタが直射日光で誤動作。比較的日差しの弱い秋の試験飛行、かつフェアリングがついた状態でも対策は必要。
  • 慣性センサは駆動系等からの振動が伝わらないように取り付けないといけない。防振対策と振動が少ない場所の選定は必須。
慣性センサの取り付け状況。左はTinyFeather、右が慣性センサ基板。
両者とも防振ゲルをはさんで取り付けている。
この位置が最適かどうかはわからないが、メイン基板上のものよりは余計な振動が少ない

  • I2C通信を長い距離行わない。テストで大丈夫でも環境を変えるとだめになることもある。
  • 同様にUART通信も環境によって状況はかなり変わる。機体に搭載して試験することは必須。
機体製作は名古屋、電装系の製作は東京と離れた場所で行っているため、システム全体の動作確認は試験飛行ではじめて行うことになってしまいました。
通信まわりのトラブルは事前にチェックできれば修正が効くものだったのでくやしいところではあるのですが、製作地が違うという状況をを考えれば仕方ありません。

上に挙げたもの以外にもいくつか気になる点はあるので、試験飛行の再開までに新しい基板を作る予定です。
同時に、慣性センサ部をどこにでも動かせるように、メイン基板と無線でデータをやりとりする慣性センサ基板も作ろうと考えています。

2011/09/05

PSoC3で電源電圧検出

製作している電装系の基板には、電池電圧の監視機能を搭載する予定です。

しかし、アートワーク時に電池からPSoC3への結線を忘れていたので、何らかの工夫をしないと電池の電圧を測ることができません。
最も簡単な解決策はジャンパを飛ばして配線してしまうことですが、PSoC3/5に内蔵されている電源電圧監視機能で対応できそうなので試してみることにしました。

PSoC3につながる電源は、LiPo管理IC(BQ24072)からの出力をリニアレギュレータ(TAR5SB33)で3.3Vに定電圧化するだけの単純な回路です。
また、使用しているレギュレータには入力電圧が3.6Vを下回ると出力電圧もそれに従って低下する特性があります。

そこで、PSoC3の電源ピンの低電圧検出機能を使ってバッテリー電圧低下の目安にすることにしました。

詳細はPSoC3のレジスタマップに譲りますが、以下のようにレジスタ設定することで低電圧検出機能を使うことができます。
また、デフォルトの状態では電源低下割り込みはリセットを発生させるので、リセットを無効にしています。

CY_SET_REG8(CYDEV_RESET_CR0, 0x65); //トリップ電圧の設定(アナログ・デジタル)
CY_SET_REG8(CYDEV_RESET_CR4, 0x03); //低電圧リセット無効
CY_SET_REG8(CYDEV_RESET_CR5, 0x03); //低電圧リセット無効
CY_SET_REG8(CYDEV_RESET_CR1, 0x03); //低電圧割り込み有効

電源電圧がトリップ電圧を下回ったかどうかは、以下のレジスタで読み出せます。

CY_GET_REG8(CYDEV_RESET_SR2);

以上の方法で、電源電圧の低下を検出できるようになりました。
下の写真はステータスバーの右端に電源電圧低下を示す"BAT"表示を出したものです。

ステータスバーの拡大図
このときのLiPoの電圧は3.36Vで放電終止電圧まではまだ少し余裕がありますが、十分電圧低下の目安にはなりそうです。

2011/09/01

MiniProg3の修理

PSoC3/5用プログラマMiniProg3の調子がどうもおかしくなったので、原因を調べて修理を行いました。

具体的な症状は、PSoC3の書き込みを行おうとすると「ターゲットデバイスに電源が供給されていない」とのエラーメッセージが出て、書き込みが中断してしまう、というものです。
調べてみると、MiniProg3のターゲットボードへの電源供給機能が何らかのきっかけでハードウエア的に壊れてしまい、ターゲットボード用電圧(Vtarg)が出ないことが原因だとわかりました。

Vtarg端子とGND間の抵抗を測ってみると12Ω程度で、ほとんどショートにも近い状態でした。
そこで、MiniProg3のカバーを開け、電源供給部周りの回路を追ってみたところ、USBの5VからVtargを生成するTexas Instruments TPS65053が壊れていることがわかりました。

修理中のMiniProg3。右下は原因を探るためにはがしたチップたち

故障箇所がわかってしまえば修理するのはそれほど難しくはありません。
壊れたチップをホットエアではがし、新しいチップに貼りかえれば修理完了です。

Vtargが出なくなる、という形の故障はF-tecの後輩も経験したようなので、トラブルとしては比較的多いものなのかもしれません。
Vtarg端子から取り出せる電流は200mA程度で、この制限を超えた電流を流してしまったことが故障の原因かもしれないので、MiniProg3につなぐボードの消費電流には十分注意を払う必要がありそうです。

2011/08/28

計器の紹介

現在作製中の計器を紹介する資料を作ったのでアップロードします。

これは交流飛行会2011のために作った物です。
会場でも配布しましたが数が途中から無くなってしまったので、その補完も兼ねています。


軽量PDF版(187KB)

2011/07/17

GPSチップアンテナの実験III

さらに前回の続きです。

今回はチップアンテナをGPSモジュールにつなぎ、きちんと受信できるかどうかを確かめてみました。
また、これまで使っていた市販のパッチアンテナとの比較も行いました。

実験は下の写真のようにベランダにアンテナを設置して行いました。
南北に建物があるためGPS衛星の電波を捉えるにはあまりよい環境ではなく、運用時より厳しい条件になっています。

設置したパッチアンテナ/チップアンテナ
右側の銅が露出しているものがチップアンテナ、左側の四角いものはパッチアンテナです。
GPSモジュールu-blox LEA-6Tが出力するデータをUSB経由でパソコンに送り、u-blox社提供のGPS評価ソフトウエアu-centerでモニタしました。

下にパッチアンテナ/チップアンテナを接続したときのu-centerのスクリーンショットを示します。

パッチアンテナの結果

チップアンテナの結果

スクリーンショットの右端3列のグラフに受信したデータがまとめて表示されています。
左上、左下、中央上のグラフは捕捉している衛星についての情報で、パッチアンテナ(チップアンテナ)の場合、GPS衛星10(9)基とMSAS衛星1基の合計11(10)基が見えていることがわかります。
チップアンテナでは、C/N比が一番悪いもののパッチアンテナは捉えていたPRN番号31の衛星が見えていません。

ここから各衛星のC/N比(dB)を抜き出したものが下の表です。

PRN番号367131619212331129137平均
パッチ35.034.034.035.041.044.035.034.031.041.046.037.3
チップ34.033.039.036.029.042.029.035.0-31.038.034.6

どちらのアンテナのC/N比がよいかはアンテナの指向性の違いのせいかまちまちです。
全体的な傾向としてはパッチアンテナのC/N比が高くなっており、平均では3dB程度の差が出ています。

スクリーンショットの中央に見えているwindowにはハードウエアの状態を表示しています。
特に注目すべきパラメータを下の表にまとめました。

NoiseAGCJamming
パッチ12562.3%4.7%
チップ11289.2%9.8%

分解写真を参考にすると、今回使ったパッチアンテナにはLNA->BPF->LNAという構成でフロントエンドが入っていることがわかります。
このフロントエンドのノイズのため、パッチアンテナのNoiseのパラメータはLNAなしのチップアンテナより大きくなっていると考えられます。
また、パッチアンテナの場合、LNAのゲインの分だけGPSモジュール内部LNAのゲインも下がっています。
GPSモジュールのデータシートによれば、JammingはGPS周波数付近の妨害になる電波の強度を示すようなのですが、パッチアンテナの場合は帯域の狭いBPFが入っているためか値が小さくなっています。

スクリーンショットの右上には、測位した座標等の情報が表示されています。
ここには、測位の精度を示すパラメータも並んでいます。
それを抜き出したものを以下の表にまとめました。

3D精度2D精度PDOPHDOP
パッチ2.28m1.62m1.40.8
チップ4.49m3.12m1.71.0

チップアンテナのほうがどのパラメータも悪い値を示していますが、おそらく捉えたGPS衛星の数が1つ少ないせいなのではないかと思います。

以上の結果から、
  • 今回使ったチップアンテナと基板の組み合わせでも十分GPS信号を受信できる
  • その性能はパッチアンテナと同程度か少し劣る程度
ということが言えます。
しかし、StrawberryLinuxの商品説明のページにある、「この小さいアンテナでこれより面積が大きいセラミックアンテナよりも多くの衛星を受信できます」というほど高い性能は確認できませんでした。

チップアンテナには、
  • GPSモジュールと同一基板上に搭載可能で、アンテナ搭載スペースを削減できる
  • パッチアンテナのLNAに必要な電源(消費電流15mA程度)が不要になり、バッテリ駆動時間が延びる
  • 軽量である
という利点があるので、次に設計する基板には搭載を検討しようと思っています。

2011/07/09

GPSチップアンテナの実験II

前回の記事の続きです。

前回は基板を作るところまででしたが、今回はアンテナを乗せて測定した結果について書きます。

測定結果を示す前に、データシート(PDF)について少し補足があります。
このチップアンテナのデータシートでは、チップの端子のうちひとつはFeeding Point、もうひとつはNCとなっています。
しかし、2つの端子の間の抵抗を測定してみると1Ω程度で、NCは「内部とつながっていない」という意味では使われていないようです。
そのため、固定のために用意するパッドの大きさによってはアンテナの特性が変わってしまうことが予想できます。
(逆にこれを利用してアンテナの特性を合わせ込むのに使えるかもしれません)

下の図にアンテナのセットアップ、リターンロスの測定結果を示します。

アンテナのセットアップ。(a)垂直に立てたもの。(b)NC端子を絶縁したもの。(c)NC端子をはんだ付けしたもの(d)NC端子用のパッドを取り除いたもの
リターンロスの測定結果。垂直に入る点線はGPS周波数
リターンロスのスミスチャート。共振周波数にマーカーをつけた

セットアップ(a)では、アンテナを基板上に垂直に立て、基板の誘電率の影響を極力受けない状態で、アンテナの生に近い特性を調べました。
このアンテナは基板上に取り付けた場合にGPS周波数に合うようになっているので、このセットアップでは電気長が足りず、GPS周波数より高いところに共振点があります。

セットアップ(b)では、NC端子とパッドをカプトンテープ絶縁した状態で測定を行いました。
このときの共振周波数は1.545GHzでGPS周波数に近い値になっています。
また、GPS周波数でのリターンロスも10dB程度あり、データシートにある9.5dBと同程度の値が得られています。

セットアップ(c)では、データシート通りにNC端子を固定用パッドに接続し測定を行いました。
このときの共振周波数は1.46GHzでGPS周波数からかなりずれてしまっています。
NC端子にパッドを接続することによりアンテナの電気長が伸び、低い側に共振周波数がずれたと予想できますが、これがデータシート通りの使い方なので、基板の誘電率や設計に何か問題があるのかもしれません。

セットアップ(d)ではNC端子用のパッドをはがして測定を行いました。
このときの共振周波数は1.565GHzで、これまでのセットアップ中最もGPS周波数に近い値になっています。
また、GPS周波数でのリターンロスも20dB程度と、データシートの値を大きく上回っています。
スミスチャートを見ると、共振周波数でのインピーダンスはほぼ50Ωになっており、受信した電力を効率よくGPSモジュールに送り込めることもわかります。

以上の結果から、1.6mm厚のガラスエポキシ基板上にアンテナを乗せた場合、NC端子を接続しない(b)と(d)のセットアップでうまくGPSアンテナとして働くことが期待できます。
次は最も性能の高いと期待できるセットアップ(d)のアンテナをGPSモジュールに接続し、実際にアンテナとして使えるかどうかを確かめてみようと思います。

2011/07/07

GPSチップアンテナの実験I

現在作製している電装系の基板には、GPSモジュールは搭載されていますが、GPSアンテナは外付けになっています。
人力飛行機に載せる場合、基板の周りが完全にシールドされて電波が入らないということは考えにくいので、GPSアンテナは基板に載せてしまうことも可能です。

そこで、SparkFunで取り扱いのあるGPSチップアンテナが受信に使えるかどうかをテストしてみることにしました。
同じような実験はFenrirさんがすでに行っていますが今回使用したアンテナとは別なものの結果です。

GPS衛星から送られてくる信号の周波数は1575.42MHz(L1)でマイクロ波の領域に入ります。
マイクロ波の領域になると、アンテナとコネクタを載せる基板の設計によっても性能に大きな違いが出るので、まずはチップアンテナのデータシートを参考に基板の設計を行いました。
作製したのは、アンテナとSMAコネクタだけが載るシンプルな基板です。
データシートにあるとおり、アンテナとコネクタはGND付きコプレーナ線路でつなぎました。
コプレーナ線路を含むマイクロ波線路については、以下の書籍に理論も含め詳しい情報があります。
K. C. Gupta, Ramesh Grag, and I. J. Bahl. Microstrip Lines and Slotlines. Artech House, 1979

この本にある計算式から線路のインピーダンスを求めてもよいのですが、楕円積分が登場する少し面倒な計算が必要になります。
(余談ですが、楕円積分の値はCASIOの高精度計算サイトで求めることができます)
いくつかの無料のツールでこの計算を簡単に行えるのですが、たとえば
  1. マイクロ波回路シミュレータAnsoft Designer SVに付属のストリップライン計算ツール(現在は配布されていない模様)
  2. Agilent AppCad
  3. モーメント法マイクロ波シミュレータSonnet Liteによる断面形状からの数値計算(ただし、コプレーナ線路の計算には注意が必要)
  4. I-Laboratoryオンライン計算ツール
等があります。
今回は、最も簡単に利用できる4で計算を行いました。
このツールでの計算では、楕円積分を近似式で置き換えていますが、実用上十分な精度が得られます。

このツールを使って50Ωのコプレーナ線路を設計し、製作した基板が下の写真です。
製作したGPSチップアンテナのテスト基板
サンハヤトのガラスエポキシ片面基板をエッチングしコプレーナ線路を作り、裏面には銅箔テープを貼ってグラウンドにしています。
また、基板の端にも銅箔テープを貼り、裏表のグラウンドを接続しています。
さらに、コプレーナ線路の放射ロスの原因となるスロットモードの抑制のために、線路と平行に波長より十分短い間隔でビアを打ってあります。

この基板にアンテナを取り付け、ネットワークアナライザでその特性を測ってみました。
基板の話がかなり長くなってしまったので、測定結果は次回の記事に書きたいと思います。

2011/06/27

キャリブレーション用治具の製作

加速度・ジャイロ・地磁気センサの校正に使う直交治具を作りました。
キャリブレーション用治具
ジュラルミンの板を3枚貼り合わせています。
直交しないと治具の意味がないので、端面はすべてフライスで仕上げました。

本当ならば、アルミのブロックから削り出しで作ればよかったのですが、大きなブロックは高価なのでこのような作り方にしました。

そろそろ6軸センサのMPU-6050が入手できるようになりそうなので、センサを貼りかえたあとにこの治具を使ってキャリブレーション作業を行うつもりです。

2011/06/19

SDカードのテスト

前回の記事で、ロガーのサンプルレートがSDカードの書き込み速度に影響を受けていて、SDカードによって個体差が見られると書きました。

サンプルレートに影響を与えると考えられるパラメータは、SDカードの書き込みスピード、特に小さなファイルの書き込み能力であると考えられます。
そこで、SDカードの書き込み速度をCrystalDiskMarkを使って測定してみました。

SDカードの書き込み速度の比較


上の図が測定結果です。
CrystalDiskMarkでは書き込み速度の最大値を記録するので公平な比較ではないかもしれませんが、カードによって10倍以上の差が見られます。
特に性能が高い、Panasonic 2GBとToshiba 2GBはClass4のカードでした。

これらのカードにデータを記録し、サンプル間の間隔を測定し、ヒストグラムにしたものが下の図です。
きちんと100spsが出ていれば、0.01秒のところに記録した15000点がすべて集まるはずです。

サンプル間の時間のヒストグラム
ヒストグラムにはカードごとに癖が見られ、サンプルレートはカードによって10sps程度の差が見られます。
全体的な傾向としては、1GBのカードのもののほうが高いサンプルレートが得られるようですが、CrystalDiskMarkで測定した書き込み速度とはあまり相関がないように見えます。

カードの容量は1GBで十分なので、今回一番高いサンプルレートが出たKingmax 1GBのカードを主に使用したいと思います。

2011/06/04

PSoC3でI2C通信

作製している電装系の基板には、
を搭載しています。

これらのセンサのログは100spsで取得するように設定していたのですが、実際に動かしてみると65sps程度しか出ませんでした。
搭載しているマイコンPSoC3の行っている仕事は、センサからのデータ読み出しの他にも、ディスプレイ表示やSDカードへの記録がありますが、調べてみるとデータ読み出しの部分がサンプルレートを制限していることがわかりました。
そこで、データ取得プログラムのどこがボトルネックになっているか調べてみました。

先に挙げたセンサ類はすべてデジタル出力タイプで、PSoC3とは400kbpsでI2C通信しています。
一度に取得するデータは高々20バイト程度なので、正しく通信が行われていれば100spsでのサンプリングには十分に余裕があるはずです。
実際に通信の様子がどうなっているのかをロジックアナライザで調べてみたのが下の図です。
  
2バイトずつ読み込みを行ったときのI2C通信の様子
一番下が40ミリ秒間のデータですが、長いACK(青緑色)が送られているせいで、かなり通信に時間がかかっていることがわかります。
この原因が何なのかはわからなかったのですが、2バイト単位のセンサのデータを一度に読み込まず1バイトずつ読み込むことで、このような問題が起きないことがわかりました。
下の図に1バイトずつデータを読んだときの通信の様子を示します。
1バイトずつ読み込みを行ったときのI2C通信の様子
先ほどと同様に、一番下が30ミリ秒間のデータで、長いACKは姿を見せず、きちんと通信ができていることがわかります。
このときのサンプルレートは92spsになりました。
100spsに届かなかったのは主にSDカード書き込みの部分によるもので、SDカードによって個体差があることまではわかっています。
この部分の対策はなかなか難しそうなので、何枚かSDカードを比較して、一番よい結果が出たものを使うことで対応しようと考えています。

2011/05/26

MVA-TFTモジュールでフォント表示

またまた前回の更新から時間が空いてしまいました。

以前の記事に書きましたが、表示部として使用するMVA-TFTモジュールをPSoC3で実用的なスピードで制御するにはちょっとした工夫が必要でした。
以前の記事では、背景色は黒固定で、その上に任意の色でフォントを描画するものでしたが、モジュールの組み合わせ方を少し改良して、任意の背景色の上に任意の色でフォントを描画できるようにしました。

改良したフォント表示モジュール群
相変わらず回路図入力です。
前回、ANDを使っていた部分をマルチプレクサに置き換え、2つの16ビットカラーをSPIモジュールの吐き出すフォントデータで切り替えています。

改良したモジュール群を使って、表示部のデモを作ってみました。
表示部のデモ
ディスプレイの一番上に、SDカード、GPS、各種センサ類のステータス表示がありますが、ここの背景色を変えるために改良したモジュール群が役に立っています。

表示以外のロガー部等はだいたい完成しているので、今後は運用を考えたテスト等を行うつもりです。

2011/04/02

組み立て完了

前回の更新からだいぶ時間が経ってしまいましたが、少しずつ作業は進んでいます。

発注した基板SeeedStudioから3月19日に届いたので、組み立てを行いました。

組み立てた基板
加速度センサ・LiPo電池などがまだ届いていないため、一部を除きハードウエアは完成です。
UEWで修正が入っているのを見ればわかる通り、パターンに何ヶ所か間違いがありました。
基本的にはデータシートをよく読んでいなかったことが原因なのですが、 PSoC3のデータシートにはミスリーディングな部分があり、それに引っかかったせいもあります。

問題の箇所はCY8C38 Family DatasheetのFig.2-5(100ピンTQFPデバイスでの電源端子の接続例)です。
基板を設計していた時には、この図を参考に回路図を描きました。
この図では、66ピンがVssd端子であるのにかかわらず、Vdddのようなシンボルで描かれています。
そのため、本来Vssdにつなげるべき66ピンをVdddにつなげた回路図を描いてしまい、チェックからも漏れてしまいました。

これまで行ったチェックでは、特に大改造が必要になるような部分は見つかりませんでしたが、はんだ付けがやりにくい箇所があるなど、いろいろ気になる部分はあったので、実際に機体に取り付けて運用してみて問題点を洗い出し、Rev.Bの基板を発注しようと思います。

2011/03/08

対気速度計の校正1.5

2回に分けて書くつもりでしたが、第1回の記事を書いた後にコメントをいただいたりしていろいろ気になることができ、簡単な追加実験も行ったので、第1.5回を追加します。

静特性の測定の追加実験
第1回の記事に静特性の測定結果について書きましたが、測定中のばらつきはかなり大きいものでした。前の記事に対するコメントで、定格より高い回転数で動かしているためにロータリーエンコーダが異常なパルスを出しているのではないか?というコメントをいただいたので、追加実験を行ってみました。
静特性の追加実験の様子
ドライヤーの吹き出し口が気速計のプロペラに当たるようにしただけの簡単なセットアップです。
このセットアップで、第1回と同じように数分間のカウント値を記録したのが下のグラフです。
カウント値のばらつきの比較。赤が風洞試験、青がドライヤーの場合の結果。


比較のため、前回の結果も一緒にプロットしました。
カウント値の最大は2261、最小は2236、平均は2248、標準偏差は4で、少なくともこの実験では、風洞実験の際に観測されたようなばらつきは見られません。
もちろん、風洞実験の時とは電源等の電気的条件、振動等の機械的条件、流れの整流具合等の空力的条件が異なるので、エンコーダの特性に問題が全くないとは言い切れませんが、うまい条件が揃えばばらつきは生じないと言えます。
また、オシロスコープでパルスを観察してみましたが、異常は見つけられませんでした。 
(簡易オシロDSO nanoなので、見逃していた可能性もありますが…)

また、カウント値をヒストグラムにすると下の図のようになりました。 
カウント値のヒストグラム(赤)風洞試験(青)ドライヤー
縦軸・横軸はそれぞれフィットしたガウス関数の高さ・幅で規格化してあります。
どちらも、高カウント側に伸びたヒストグラムが得られていますが、風洞試験場合に伸び方が大きくなっています。
異常なパルスが出力された場合には、このようなヒストグラムが出ると予想されますが、プロペラ+エンコーダで作った風速センサの場合、気象大学校の卒業論文「風向風速計センサの特性比較」にあるとおり、風速が増加する場合の応答が風速が減少する場合の応答より速いという特性があるので、単にその特性が見えているだけなのかもしれません。

追加実験からは、特定の条件が揃った場合にはばらつきが少ないと言うことはわかりましたが、それ以上の情報は得られませんでした。
いずれにせよ、ばらつきは0.1m/s程度で、気速計の取り付け位置による誤差と比べて小さいと考えられるので、これ以上の深追いはしないことにしようと思います。

2011/03/03

基板設計完了

基板の設計が完了し、Fusion PCBにガーバーファイルを送りました。
表側にディスプレイが載る都合があるので、表面実装部品のみを使って設計しました。
Top

Bottom
簡単に仕様をまとめると、以下のようになります。

ディスプレイ:3.5インチMVA-TFT液晶(320*480・16bitカラー)
記録媒体:MicroSDカード
電源:LiPo 3.7V 860mAh
搭載マイコン: PSoC3(8051・67MHz)、PSoC5(ARM Cortex M3・80MHz)に交換可能

USB端子搭載・USB経由でのバッテリ充電可能
GPS搭載・生データ出力可能
3軸加速度・3軸ジャイロ・3軸地磁気センサ搭載

外部接続(センサ等)
気速計・回転数計・高度計:計4
舵角計:3
アナログパネル用サーボ:4
電子ブザー:1

何となくスマートフォンに似ていますね。
基板が届くまでの間に部品を揃えておいて、すぐに作れるよう準備をしておくつもりです。

2011/02/23

対気速度計の校正1

対気速度計の校正を行うために1.5m低速風洞をお借りして実験を行いました。

気速計はCopalのロータリーエンコーダRE12D-100-201-1とIndoor airplane worldで販売されているプロペラを組み合わせて作りました。
F-tecで活動していた頃はエンコーダを自作していましたが、小型・軽量化には限界があるので、今回は市販品を使っています。

製作した対気速度計

エンコーダ+プロペラで気速計を作った場合、エンコーダが出力するパルス数を気速の値に直すためには換算計数を求める作業が必須ですが、今回はそれに加えて動特性と迎え角依存も測定しました。

少し長くなりそうなので、2回に分けて記事を書きます。

静特性の測定

はじめにもっとも基本的な、静特性の測定結果について述べます。

気速に対するカウント値の変化は下の図のようになりました。
測定は気速を上げる・下げるの2方向で行っています。(以下では行き・帰りと表現します)

気速に対するカウント値の変化

少なくとも今までの経験では、気速とカウント値の関係は線形でしたが、行きの測定の10m/sくらいまで、直線から外れた値が出ています。
原因は、測定時の気温が8℃と低く、エンコーダの軸を支えるベアリングのグリスの粘度が上がり、動摩擦が大きくなってしまったことだと考えられます。
それを検証するために気速計を冷凍庫で冷やし、指で回してみましたが、明らかに抵抗が増えていました。
実際に気速計を使用するのは、もっと気温の高い時期なので、実用上は問題がないと考えられます。

また、データシートによると、このエンコーダの最高周波数は10kHzとなっていますが、20kHz(=2000count)でもきちんと動作していることが見て取れます。

行きの直線から大きく外れた点を除いて、カウント値(x)から気速(y)を求める式をフィッティングで求めると、
No.1: y=0.35+0.0053x
No.2: y=0.65+0.0050x
となりました。
同時に試験した2機の換算係数の違いはわずかで、エンコーダ・プロペラの特性にばらつきが少ないことがわかります。

測定中にカウント値がふらつくことがわかったので、9.8m/sに気速を固定し、数分の間カウント値を記録し続けてどの程度のばらつきがあるかを調べてみました。
結果は下の図です。

カウント値のふらつき


カウント値の最大は1900、最小は1760、平均は1811、標準偏差は22となりました。
このデータをフーリエ変換したり、アラン分散を求めたりしてみましたが、ふらつきの原因はよくわかりませんでした。
(ピトー管など違う方式で取ったデータがあればセンサが原因なのか、風洞によるものなのかはわかると思います。)
少なくとも、標準偏差から測定した気速の精度は0.1m/s程度になるとは言えそうです。

ここまでの実験結果で気速計の基本的な特性がわかりました。
次回は動特性と迎え角依存の測定について書く予定です。

2011/02/13

地磁気センサの静置試験

以前変換基板を作製した地磁気センサAMI304の静置試験を、I2C-USBブリッジを使って行いました。

地磁気センサは機体の姿勢角の取得に利用する予定ですが、出力に温度等の原因によるドリフトがあると正確な値を得ることは難しくなります。
そこで、地磁気センサの出力を10spsで1時間ほど取得し、安定性の指標となるアラン分散を求めてみました。
ログデータからアラン分散を求めるにはAlaVarを使用しました。

地磁気センサのアラン分散(Z軸)
60秒くらいからアラン分散の値が上昇しており、何らかのドリフトが認められますが、今回の実験では恒温槽を使って温度を安定させているわけではないので、測定中のチップ温度の変化によるドリフトだと考えられます。
したがって、正確な姿勢角が求めるには、ゼロ点と感度の温度特性を求めないとなりません。

地磁気センサのゼロ点と感度を求める作業は、日本応用磁気学会誌に書いてある方法で行えますが、周りの磁気環境には十分注意を払う必要があります。
実際、今回の実験では、ファスナーのついた服を着て作業を行っていたのですが、そこから出る磁気によってセンサの値が変わることが確認できています。

また、データシートによると、はんだ付け作業など、熱ストレスによってもゼロ点・感度に変化が出るらしいので、実際使う基板に実装した上でのキャリブレーションが必須になると考えられます。
まずは基板のアートワークと組み立てを行わないとならないので、実際にキャリブレーション作業を行うのはしばらく後になりそうです。

2011/02/05

MiniProg3をUSB-I2Cブリッジとして使う

PSoC1/3/5用のプログラマMiniProg3はUSB-I2Cブリッジの機能も持っています。
この機能を使えば、I2C接続のEEPROMの読み書きやI2C接続のセンサのテストなどをPC上から行えるため、使い方を覚えておくと何かと便利です。

使い方は簡単で、PSoC Programmerと一緒にインストールされるBridge Control Panelを開き、送信するI2Cのコマンドを打ち込むだけです。

試しにCY3240-I2USB付属のターゲットボードをMiniProg3につなぎ、ターゲットボード上の照度センサの値を取得してみました。
MiniProg3をUSB-I2Cブリッジとして使い取得した照度センサの値
Bride Control Panelには簡単な実験に使うには十分なチャート機能があるので、それを使って蛍光灯の照度を表示しました。
ステータスバーに表示されている通り、だいたい1秒間に1000個のデータが取得できています。
照度センサの値をそこまで高速にA/D変換していないのではっきりしませんが、蛍光灯の100Hzのちらつきで、照度データが振動している様子が見て取れます。

2月末には、気速計の風洞試験を予定していて、その際には動特性の測定も行う予定なのですが、ログ取得にはこの機能を使ってみようと思います。

2011/01/30

MVA-TFT液晶モジュールのテスト

題名の通り、aitendoで購入した液晶モジュールS95517-A035のテストを行いました。

下の写真にある通り、テストにはPSoC3テストボードを使用しています。
テストの様子。右下に見えるのがコントロールを担うPSoC3
この液晶モジュールを動かすこと自体は、aitendoで配布されているAVR用のサンプルコードをPSoC3に移植すればよいだけなので、それほど難しくありませんでした。
(と、書いていますが、Readピンの初期レベルをHにするのを忘れていたため1発では動いていません)

初期の実験では、PSoC3の8051コアを限界に近い67MHzで動かしていたにもかかわらず、1画面を描画するのに1秒程度かかってしまい、計測データの表示に使うにはちょっと遅すぎました。
単に高速なマイコンを使ってしまうのが最も簡単な解決策ですが、それほど複雑な画面表示をするわけではないのに、高性能なマイコンを使うのはもったいない、ということで、機能をある程度限定し、PSoC3のモジュールを使うことで、表示の高速化を試みました。


2色限定で高速表示を行うためのPSoC3のモジュール群。右半分は色を指定するための、左半分はデータを書き込むためのモジュール 
この液晶モジュールは、16bitの色情報を解像度の320*480回送り込むことで1画面の表示を行います。しかし、今回の目的は計器の表示パネルなので、ある背景色の上に特定の色で文字や図形を描画できれば十分で、16bitカラーをフルに使うことはないと考えられます。

そこで、上のモジュール群の右半分を使い、色情報をレジスタに書き込む値で固定してしまい、ある点を表示する場合(AND群に1入力)にはその色がポートに出力され、表示しない場合(AND群に0入力)には黒が出力されるようにしています。
(ANDを他の論理演算に置き換えれば任意の2色の切り替えができると思います)

また、このような方法をとると、点ひとつを色情報なしの1bitで表すことができるため、プログラム上では8点を1バイトに割り当てています。
そのため、1バイトの各ビット情報を順次右側に送り込む必要があるのですが、これはまさしくシフトレジスタの仕事です。
上のモジュール群の左半分では、シフトレジスタが含まれるSPIモジュールを使い、プログラムから送り込まれる1バイトの値をビットに分解し、右側のモジュールに送り込んでいます。
それと同時に、SPIモジュールのクロック出力で液晶モジュールのWriteピンも制御しているので、プログラム側が行うことは、単に表示データをROMから送り込むことだけです。
(まだ実装していませんが、ROMからSPIモジュールへのデータ転送はDMAを使ってCPUを介さずに行えるので、さらにCPUの仕事を減らすこともできます。)


このモジュール群を使うことで、1画面を表示するのにかかる時間は0.1秒以下にまで短縮することができました。これならば、データ計測やSDカード書き込みなど、表示以外の機能にも十分なリソースを割くことができます。

今後は、この液晶モジュールのサイズに合わせて、実機に搭載する計測ボードの設計を行うつもりです。

2011/01/27

PSoC3の書き込み(解決編)

昨年末に記事にしたPSoC3の書き込みの問題ですが、Cypress社と連絡を取って解決することができました。

Cypress社への連絡

Cypress社に技術的な質問をする場合には、CypressのwebページからMy Account->My Support CaseとたどってTechnical SupportにMy Caseを作成する手があります。
今回はここを利用して相談しました。

最初の書き込みをしてすぐに回答があり、3日ほどでMiniProg Rev.7を送っていただけることになりました。それから10日ほどでMiniProg3が発送され、その後数日で届きました。
届いたMiniProg3を使ってPower Cycle Modeで書き込んでみると、あっさり書き込めました。
連絡を取ってから20日ほどで問題が解決したことになります。

MiniProg3 Rev.7。通常のMiniProg3と見分けるための赤いシールが貼ってある


問題はどこにあったか?

前回の記事にも書いたとおり、問題はPower Cycle Modeでの書き込みができないことに尽きます。
その原因としては、PSoC Programmer3.12.2と現時点でのMiniProg3の最新ファームウエアがPower Cycle Modeでの書き込み時にリセットを使用することがあります。
それに加えて、MiniProg3 revision 7を見ると、少なくともES2までのデバイスではMiniProg Rev.*Aのハードウエア的な問題でPower Cycle Modeが使えないとあり、新しいチップには修正を加えてMiniProg3 Rev.*AでのPower Cycle Modeに対応させるとあります。
ES3は最終版となるはずなので、チップの問題は解決しているのだとは思うのですが、
意味深な書き込みなどもあるので、実際どうなっているかはわかりません。
(ES2では使えないJTAG Boundary Scanが使えたのでES3のマーキングが入ったES2ということはないと思いますが…。)
少なくとも量産版のPSoC3(2010年冬に量産を開始したらしいです。) と、これから出るであろう新しいファームウエアをMiniProg3 Rev.*Aに入れればPower Cycle Modeでの書き込みが可能になり、問題は起こらないのだと思います。

MiniProg3のRevisionについて

MiniProg3 revision 7
MiniProg3 Rev. *A
上に挙げたKnowledge Baseを見ると、MiniProg3にはいくつかのRevisionがあることがわかりますが、Rev.*AとRev.Nがどのような関係にあるかがよくわかりません。
勝手な想像ですが、Rev.6以前はベータ版で、Rev.*Aがリリース第1版に対応するのだと思います。
そうするとRev.7の位置づけがよくわからなくなりますが、今回のような問題が起こった限られたユーザーに対して配布するものだと考えられます。

だいぶ時間がかかってしまいましたが、これでPSoC3の実験が再開できます。
今後は、カラーグラフィック液晶S95517-A035のテストを行う予定です。

2011/01/04

LGAのリフローはんだ付け

地磁気センサAMI304のはんだ付けを行いました。

AMI304は側面に足が出ていないLGA12パッケージで提供されるため、はんだこてを使った手はんだは行えません。
そこで、はんだペーストとホットエアを使ったリフローはんだ付けをしてみました。

はんだペーストを使ったはんだ付けは、Fenrirさんの方法を少しアレンジした方法で行いました。

使った主な道具は以下の通りです。

  • ガス式はんだこて goot GP-510
  • はんだペースト Chip Quik SMD291AX
  • OHPシート EPSON MJOHPS1N

はじめにはんだマスクを用意します。
Fenrirさんはカプトンステンシル・マイラーステンシルを外注していますが、さらに手軽に済ませるために、OHPシートをはんだマスクとして使いました。
今回使ったOHPシートの厚さは130umで、Indoor airplane worldさんが使っているカッティングシートやラミネートフィルムと同じ程度の厚さです。
OHPシートに、はんだペーストを乗せる部分のパターンを印刷し、デザインナイフで切り抜きマスクにします。
今回のパターンは0.7mmピッチで0.35mm×0.35mmの穴を開けるものでしたが、この程度なら手でも十分切れるようです。

はんだペーストの塗布のテスト
試しにコピー用紙の上にはんだペーストを塗布してみました。
はんだペーストの塗布には、そのあたりに転がっていた接着剤(Super-X)に付属してきたへらを使いましたが、特に問題なく塗布できています。
はじめは、0.35mm×0.35mmの穴を開けていましたが、あまり面積が小さいと紙にはんだペーストがうまく付着しないので、少し穴を細長くし、面積を大きくするとうまく付着するようになりました。

はんだペーストの塗布がうまくできたので、実際に基板を使いはんだ付けを行いました。
上に書いた要領ではんだペーストを塗布し、その上にチップ部品を乗せます。
チップ部品を正確な位置に乗せられるかどうかが気になりますが、大体合っていれば加熱してはんだが溶けた時に正しい位置に吸い込まれるようです。

チップ部品を乗せた後は、ガス式はんだこてのホットエアを使い加熱します。
本来ならば、データシートにある温度プロファイルに近くなるようにホットエアの吹き出し口と基板との距離をコントロールすればよいのですが、今回ははんだペーストが溶ける様子を見ながら加熱時間を調整しました。

ホットエアはんだ付けを行った基板
はんだ付けを行った基板が上の写真です。
今回は秋月電子の標準DIP化モジュール風の変換基板を作製しました。
この基板を使って、地磁気センサのテストを行います。