Darkside(リンクエラー修正しました)

2014年11月の記事

<< 前のページ

2014年11月30日(日) 20:36

代替気圧センサー

 改めて秋月で扱っているLPS25Hを確認。
 これ遅いので却下したが、変換レートは設定可能で毎秒25回まで速くできる。分解能はMS5611が0.012ヘクトパスカルに対して0.03ヘクトパスカルと相当に劣るが、ハードウェアでノイズリダクション機能を持ち、0.01ヘクトパスカルが実現可能。要するに、少々劣るが実用できるかもしれないレベルのセンサーだ。

 MS5611は、分解能はともかくマイコンとコンビを組んでの実用には耐えられないと判断した。
 しかしLPS25Hは、使い勝手に関しては文句なし。さすが秋月採用である。例によって気圧と温度の2つを取得するが、センサー内部で校正や計算は自動で行い、結論の数値だけを出力する。だから、温度を読まなくても気圧だけ単独で取得できる。毎秒25回の頻度でセンサー内部で値を更新し、外部から読めばその時点での最新値を返してくれる。つまり、AD変換開始指令だの何だの一切無しで、他のセンサーと同様の使い勝手が実現している。
 また、設定レジスターが豊富で、柔軟な設定があれこれ可能。

 MS5611は、設定レジスターの類はゼロ。
 どうやら考えるに、センサーしか作れないメーカーとマイコンも作れるメーカーの差という感じがする。そう、LPS25Hは他でもない。STM32を作っているSTマイクロが製造している気圧センサーなのだ。
 そこでSTマイクロのサイトを調べると、分解能の劣るLPS331だけでなく、上位機種のLPS22HBという気圧センサーを発見。これは、毎秒75回の更新が行われて分解能もノイズリダクション無しで0.01ヘクトパスカルを実現している。完全に、マルチローターに必要な性能と機能を満たしている!

 ならば、どこで買えるのか?
 検索すると、驚いた。何と、発表されたのが今年の11月28日だったのだ!
 いつもながら、STマイクロは製品ページの更新が早い。製品として出回るのは、STM32F7と同時期になりそうな感じだ。よし、秋月でLPS25Hを購入して当面はそれを使い、LPS22HBが出回ってから乗り換えよう。使用手順は、両者ほぼ同一みたいだし。
 ノウハウの互換性をキープしてくれるのが、STマイクロのうまいところである。

written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2014年11月29日(土) 17:59

仕様確認の重要性

 工場校正値が読み出せたら、次はいよいよ本丸の測定値読み出しである。ところが、いざ取り掛かろうとして大変なミスに気付いた。
 MS5611以外のセンサーはすべて、測定値を単に読むだけである。ところがこいつは、AD変換開始コマンドを送り出さねばならない。そこから数ミリ秒待ってから、改めてAD変換後の値を読むのだ。データーシートを詳細に確認すると、とんでもない仕様がボロボロ出て来た。

・生測定値と温度測定値を別々に読まねばならない
 それぞれデーターシートでは、D1およびD2と表記。
・D1とD2は独立で読み出さねばならない。
・D1変換中にD2変換は開始できないし逆も同様。
・変換中を示すフラグは存在しない。

 読んでみて0なら変換中で、その場合変換は失敗する。再度読んでも、正しくない値しか取得できない ←おいおい

 すなわち、
1)D1変換開始コマンドをI2Cで送り出す。
2)変換が終了するのに十分な時間待つ。
3)D1の値をI2Cで読み出す。
4)D2変換開始コマンドをI2Cで送り出す。
5)変換が終了するのに十分な時間待つ。
6)D2の値をI2Cで読み出す。
7)D1とD2を元に、マイコンで複雑な計算を行い、高度値を得る。

 以上の操作を行ってようやく、高度が分かる。
 高度ではなく気圧だけ得るにも、かなり複雑な計算を行わねばならないしD1だけでなくD2も必須。

 これでは、8ミリ秒程度で変換が終了する高速性も、高精度も、まったく宝の持ち腐れである。割り込みでI2Cをアクセスすればロクなことにならないのは思い切り想定できるわけで、MS5611を使うだけで複雑怪奇なプログラミングを強いられるだろう。それは可能だが、プログラムコードの保守性も信頼性も奈落の底である。空モノということを考えると、MS5611を捨てて別のセンサーを考えるのがベターだ。

 データーシートを詳細に検討せずにMS5611を買った自分が悪いのだが、スペックだけでなく操作手順まで確認すべきであることを学んだ。また、I2Cの2バイト連続読み取りの動作確認もできた。空モノ以外に単純な気圧計として使うことは可能だろうし、それほど高い授業料でもなかったから諦めるとしよう。

written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2014年11月28日(金) 21:29

POSフラグ

 BTFフラグが立つのを待つ部分は、3バイト以上連続読み取りにおいて動作実績がある。どこか記述ミスが無いか再確認するが、これまで散々やっている。
 磁気センサーのプロトコルとMS5611を比較し、ストップビットによる区切り以外に相違点がないか確認。だが、それ以外はI2C標準の手法に従っている。すなわち、プログラムの一部流用も問題ないはず。

 本当に困ったが、遂に勘違いに気付いた。
 2バイト連続の読み取りでは、最初にPOSフラグを1にして、最後に0に戻す仕様になっている。ところが自分は勘違いして、POSというのは抽象的なポインターだと思い込んでしまったのだ。
 2バイトを配列で確保する場合、添え字は0と1になる。公式資料の説明で、POS=1とか0とか書いてあるのは「添え字1のデーターを処理し、最後に添え字0のデーターを処理」みたいな補助説明記述だと思った。それで、プログラミングしなかったのだ。

 実際には、POSフラグというのが厳然と存在する。

 POSフラグを立ててやると、BTF=1待ちもすんなり通過。MS5611の工場校正値を読み出すことができた。
 いやほんと、I2C複雑怪奇過ぎだ。とっくの昔に思考停止して、公式資料を丸写ししている。読み出しルーチンが意味不明な呪文のランダム羅列になっていて、何やってるのかまるで理解できない。どのような動作結果になるのかは理解できているが、なぜそんな動作結果になるのかが分からない。
 でも、動いている(怖)。

written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2014年11月27日(木) 21:01

まだ動かない

 無事にMS5611にアクセス出来るようになった。そう喜んだのも束の間、リセットコマンドは受け付けられたものの工場校正値の読み出しがタイムアウトする。書き込みできても、読み出せない・・・またしても過去の障害歴を踏襲している。
 読み出し手順に関しては、公式資料の丸写しによって1バイトと3バイト以上は成功している。MS5611は2バイト連続であって、これは動作実績がない。手順自体もまるで異なる。だが、公式資料の丸写しには変わりないので、動かないとは考え難い。本当に丸写しできているかも確認したが、問題なさそうだ。

 となると、MS5611のプロトコルの差異が厄介かもしれない。
 以下は、MS5611のデーターシートより工場校正値の読み出し手順を抜き出したものである。command がMS5611内アドレスの指定となっている。すなわち、MS5611内アドレスを書き込んだらStopを送信してパケット通信を終了させる。続いて別パケットをStartさせ、MS5611内アドレスの指定抜きで2バイト連続の読み出しを行う。

 PX4FLOWの時は、Stopを送信せずに単一パケット内でWとRを切り替えていた。この微妙な差異により、プログラムコードをどこまで流用できるかが変わってくる。何か些細な記述ミスがあるに違いない。
 ちなみに、引っ掛かっている場所はBTFフラグが1になるのを待つところ。

written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2014年11月26日(水) 21:06

犯人絞られる

 原因の可能性が次々に除外され、犯人が絞られて来た。

 こうなると最も怪しいのは、スレイブアドレスの食い違いである。0x76というのが2倍後の値ではないかもしれない。改めて、MS5611のデーターシートを精査する。その結果、どうやら読み間違えていたことに気付いた。
 0x76は、2倍前の値かもしれない。

 また、MS5611のスレイブアドレスは固定だと思っていたが、チップセレクト信号により1ビット可変。
 中華基板内部で処理されている可能性が高く、CSに何も接続しなくても値自体は存在するようだ。要するに、正しいアドレス(2倍後)は、0xECまたは0xEEのいずれかとなる。両方試したところ、0xEEで遂にACKが返って来た。

 こうして最小限の動作確認は出来たものの、新しい基板はまだプルアップ抵抗が付いたままである。これではI2Cバスのプルアップ抵抗値が小さくなり過ぎて、回路に負担となる。
 ハンダ付けを外し、元の基板に戻す。これも無事にACKが返って来た。壊れてはいなかったようだ。

 液晶ディスプレイの電源その他、現在実験に使用している補助電源は古いニッカドである。

 これでも発売当時は、容量2400などという大容量ニッカド登場!とかなりの最先端だったのである。だが、最近はバッテリーの持ちが悪くなって来た。既にラジコン用としては時代遅れだが、実験用としても苦しそうだ。充電したところ、充電容量が1006で満充電停止。相当に劣化している。

written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

<< 前のページ

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4