HMC5843 と HMC5883L を見分ける
オートパイロットシステム Super Sylphide や Tiny Featherで使っている地磁気センサについての話です。Honeywell の HMC5843 あるいはその後継の HMC5883L という製品なのですが、両者をソフトウェアで見分ける必要が最近ありました。というのも、5843は少し前にディスコンになった製品で、地磁気センサのみ5883Lに変更して設計をやりなおしており、新旧バージョンの違いをソフトウェアで吸収しようとしました。もう少し込み入った事情を書くと、例えば両センサは一つでX/Y/Zの3軸分とれるのですが、軸の物理的配置やその読み出し順が異なり、それをソフトウェアで補正する必要があったためです。
ソフトウェアで区別をするということになると、特定のレジスタを読み出して区別ができそうです。5843と5883L、両方ともIdentification Register A/B/C というまさにうってつけのレジスタがあります。が、しかしなんと、両者で同じ値 'H', '4', '3' を返してくるのです! 使い物になりません!! 5883Lの方を 'H', '8', '3' とでも返してくれればいいものを…。
仕方がないので、別の作戦を使うことにしました。両センサともバイアスモードというのが備わっており、一定の地磁気が加わったのと同じ状態を疑似的に作り出すことができます。バイアスモードでかかる疑似地磁気の大きさはそれぞれ0.55G(5843) と 1.1G(5883L) で異なります。これを利用することにしました。すなわち、通常の計測を行った結果とバイアスモードで計測を行った結果の差をとり、その差が大きいか小さいかで5843と5883Lを見分ける、という算段です。
現在のところ、hmc58x3.h や hmc58x3.cpp のようなコードでうまく動作しています。HMC58x3#init() に見分けている部分があります。ちょっと強引ですがなんとか区別がついたので満足しています。
※さらに別の地磁気センサを使いだしたので、軸定義についてまとめをつくりました。
コメント
コメントする
- 匿名でのコメントは受け付けておりません。
- お名前(ハンドル名可)とメールアドレスは必ず入力してください。
- メールアドレスを表示されたくないときはURLも必ず記入してください。
- コメント欄でHTMLタグは使用できません。
- コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
- コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。
- 投稿ボタンを押してエラーがでなければ、投稿は成功しています。反映されるまでには少し時間がかかります。