2014年12月6日(土) 19:17
SPIを使うためのプログラムは、非常に簡単である。
同期式だしコマンドはすべて別配線のデジタルだから、紛れもない。信号変化が速くなり過ぎないようにデーターシートで確認しておけば、あとはプログラムをガリガリ書くだけで何とかなる。PIC時代と違って普通にCが使えると、記述も非常に楽だ。
データーシートだけ眺めると、SPIはいろいろ複雑なことが書いてあるように見える。なまじ配線数が多いため、タイミングチャートも複雑に見える。だが、やることは単純極まる。更に単純にしようとしてプロトコルが魑魅魍魎になたのがI2Cで、プロトコルを簡単なままにしておくために必要な最小限の配線を残したのがSPIである。
SPI通信すると、一発でセンサーへのアクセスは成功。3バイト連続読み出しも、拍子抜けするほど簡単に成功。内部レジスターアドレスをオートインクリメントで指定し、何の問題もなく取得できた。I2Cでの訳分からない謎の動作不良は何だったのか。
これで取得に要する時間はI2Cの10倍速いのだから、もはや馬鹿馬鹿しくてI2Cなど使ってられない。I2Cしか使えないPX4FLOWを除き、センサーをI2Cバスから取り外す。PX4FLOWも、電源は5Vだから三端子レギュレーターに接続したままだが、I2C信号は3Vで行けるのでSTM32F4へ直結。他にセンサーが無くなったので、I2Cレベル変換基板も不要になった。
配線は面倒臭いが、頑張って済ませてしまえばソフトウェアの方は天国のはず。
温度センサーは、SPI対応版を買わねばならない。だが、当面は使わないことにした。
高精度の温度センサーが存在しても、用途は基本的に2つしかない。1つは、気圧から高度への変換計算。もう1つは、温度ドリフトが存在するセンサーの校正。
前者は、気圧センサー内蔵の温度センサーを使う方が良い。精度は低いが、気圧センサー内部では気圧値を計算しており、その段階で内蔵温度センサーの値を使っているはずである。その気圧値を利用するのであれば、温度センサーも気圧計内蔵の値を使うのが相関性から望ましい。
後者はあくまでセンサー内部の温度が重要なので、どんなに高精度であっても外部の温度計では宝の持ち腐れになりかねない。どうせ相関性は低いのだから、既存の値を流用しても良いのではないか。電源入れてからセンサー内部の発熱で温度上昇するであろうことも考えると、むしろ他センサー内温度計の値を流用した方がマシな可能性すらある。少なくとも、センサーを別に1つ増やすコストに見合うかどうかは疑問である。
written by higashino [マルチローター] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4