ページ 11

マイコンで加速度の読み込み

Posted: 2013年8月22日(木) 18:56
by クミコミクス
http://elinux.org/ECE497_Projecting_with_Sense
で紹介されている、demo.cをbeagleboard上でコンパイルしたのですがarduinoでの出力結果とだいぶ違っているのです。
これはどうしてでしょうか。
ゲインとかのせいでしょうか。
私の見る限り上のプログラムはゲインの調節とかが入っていないような感じがします。
arduinoのほうですが
この動画の右上の値が加速度計の値です。何も動かしていないときは1G以上になっていません。
[youtube][/youtube]
arduino用のプログラムhttps://github.com/jenschr/Arduino-libraries/blob/master/ADXL345/ADXL345.cpp

これがbeageboardで読み込んだ値なのですが。何も動かしていないのになぜか重力が1.6Gになってしまいます。xy軸も本来はもっと0に近いはずなのに変です。

コード:


X: 0.086106, Y: -0.046967, Z: 1.675147
X: 0.086106, Y: -0.046967, Z: 1.675147
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319


Re: マイコンで加速度の読み込み

Posted: 2013年8月22日(木) 21:27
by softya(ソフト屋)
加速度センサに詳しいわけではないですが、同じ加速度センサなら接続をまず疑ってみてください。
ご自分でarduinoでも動作を確認されていますか?
あと、arduino用のプログラムの方はライブラリなので、これだけだと比較できないです。

Re: マイコンで加速度の読み込み

Posted: 2013年8月22日(木) 21:49
by クミコミクス
私の方でも確認はできています。
接続のほうは問題なさそうです。

この種の問題を質問ができるサイトはどこかないでしょうか。
正直このことについても随分と悩みました。
日本語か英語のサイトであればいいのですが。。。

自分としてはdemo.cのサイトの方に載っている残りのcファイルが正しくないのではないかとも思っているのですがやはりここでは難しいのでしょうか。

Re: マイコンで加速度の読み込み

Posted: 2013年8月22日(木) 21:52
by クミコミクス
私としては下記の部分が間違っているのではないかと思ています。

コード:

float convert_to_g(unsigned short raw){
        char negative = 0;
        float result;
        //Convert from twos complement
        if((raw >> 15) == 1){
                raw = ~raw + 1;
                negative = 1;
        }
        result = (float)raw;
        if(negative)
                result *= -1;
 
        //1FF is the maximum value of a 10-bit signed register
        result = (float)4 * (result/(0x1FF));
}
 
vec get_orientation() {
    char xyz[6];
    vec orientation;
   
    read_multibyte(REG_DATAX0, xyz, 6);
    orientation.x = convert_to_g(xyz[1] << 8 | xyz[0]);
    orientation.y = convert_to_g(xyz[3] << 8 | xyz[2]);
    orientation.z = convert_to_g(xyz[5] << 8 | xyz[4]);
   
    return orientation;
}

Re: マイコンで加速度の読み込み

Posted: 2013年8月22日(木) 22:34
by softya(ソフト屋)
同じ機器で動作させている人が居ないと正確には答えられないと思います。
マイコンは、1つ1つ問題を潰していくしか無いでしょう。
ロジック・アナライザとか波形記録できるオシロとかでやりとりする信号調べると色んなことが分かるんですが。

> 私としては下記の部分が間違っているのではないかと思ています。

arduinoとbeagleboardでconvert_to_g前の値で比較してみれば分かるんではないでしょうか?