HMC5843 と HMC5883L を見分ける

オートパイロットシステム Super SylphideTiny Featherで使っている地磁気センサについての話です。Honeywell の HMC5843 あるいはその後継の HMC5883L という製品なのですが、両者をソフトウェアで見分ける必要が最近ありました。というのも、5843は少し前にディスコンになった製品で、地磁気センサのみ5883Lに変更して設計をやりなおしており、新旧バージョンの違いをソフトウェアで吸収しようとしました。もう少し込み入った事情を書くと、例えば両センサは一つでX/Y/Zの3軸分とれるのですが、軸の物理的配置やその読み出し順が異なり、それをソフトウェアで補正する必要があったためです。

HMC58x3.png
軸配置など

ソフトウェアで区別をするということになると、特定のレジスタを読み出して区別ができそうです。5843と5883L、両方ともIdentification Register A/B/C というまさにうってつけのレジスタがあります。が、しかしなんと、両者で同じ値 'H', '4', '3' を返してくるのです! 使い物になりません!! 5883Lの方を 'H', '8', '3' とでも返してくれればいいものを…。

仕方がないので、別の作戦を使うことにしました。両センサともバイアスモードというのが備わっており、一定の地磁気が加わったのと同じ状態を疑似的に作り出すことができます。バイアスモードでかかる疑似地磁気の大きさはそれぞれ0.55G(5843) と 1.1G(5883L) で異なります。これを利用することにしました。すなわち、通常の計測を行った結果とバイアスモードで計測を行った結果の差をとり、その差が大きいか小さいかで5843と5883Lを見分ける、という算段です。

現在のところ、hmc58x3.hhmc58x3.cpp のようなコードでうまく動作しています。HMC58x3#init() に見分けている部分があります。ちょっと強引ですがなんとか区別がついたので満足しています。

※さらに別の地磁気センサを使いだしたので、軸定義についてまとめをつくりました。

June 01, 2012 23:59 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする