« Maxonからモータが届いた | トップページ | 接続テストは上々 »

2008年8月30日 (土)

V2Xeのheadingデータが飛んでしまう

ようやくデジタルコンパスモジュールV2Xeをコントロールできるようになったのですが、それでもまだ未解決の問題があります。それは、コンパスモジュールをゆっくり動かしても特定の方位で heading データの値が不連続に変化することです。

具体的には、
Xc = -.126, Yc =  .603, head = 129.0, m =  .616, t = 40.5, d = 1, sts = 0
Xc = -.158, Yc =  .619, head = 255.6, m =  .639, t = 37.1, d = 1, sts = 0
こんな感じで、コンパスモジュールをゆっくり動かしているにもかかわらず heading の値が不連続になってしまっています。ちなみに、Xc, Yc はキャリブレーション済みの磁気センサの値で、このXc, Ycを使ってV2Xe内部でコンパスの向きを計算しています。

きゃりぶレーションが下手なのか、電源ケーブルのせいなのか、はたまた私の部屋に変な磁界があるのか。疑ってみましたがどれも白っぽい。そんな中でPNI社のV2Xe サポートページで次のような記述を見かけました。

  • Heading Angle = θ
  • θ  = arctan (Y/X)

で、先ほどのheadingデータが不連続なときのXc, Yc の値は不連続ではなさそうなので、-π~πまでを出力範囲にするために atan2 を使えば連続した headingデータを求められるのではないか、と。いうことで、Excelで計算してみた結果は次の通り。

Xc      Yc      head(rad)      head(deg)
-------------------------------------------
-0.126    0.603    1.776787663    101.8024342
-0.158    0.619    1.820710409    104.3190222

なんだかよさそうです。

そこでPIC上でこの計算をしてやろうと思ったのですがCCS-PCMにはatan2関数がありません。じゃあ自分で作ったろかと思ってやり始めたのですが、atan関数を使おうとするとメモリが足りず、多項式を使ったやり方では計算に時間がかかり過ぎるということで、PIC側でatan2計算するのをあきらめました。 コンパスデータを受け取るPC側で計算すればいいかな。

« Maxonからモータが届いた | トップページ | 接続テストは上々 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/167990/42323060

この記事へのトラックバック一覧です: V2Xeのheadingデータが飛んでしまう:

« Maxonからモータが届いた | トップページ | 接続テストは上々 »

最近の写真