Sim's blog

電子工作はじめてみました

3軸加速度センサーにつないでみる

2007-05-09 00:49:25 | V850
秋月で売っている3軸加速度センサーKXM52-1050モジュールをV850付録基板につないでみました。このセンサーは2.7~5.5Vで動作します。出力は3.3V動作の場合、1.65Vを中心に上下660mV動きます。昨日のA/D変換を応用すれば電圧を数値にすることができます。

ブレッドボードの上に載っている8pinの基板が加速度センサーです。秋月ではチップを載せた基板の形(完成品)で売っています(800円)。パスコンとかも実装済みなので外付け部品なしで使えます。

加速度センサーということになっていますが、実際は重力センサーというか傾き角度センサーです。

値の変化は例えばx軸だと、傾けた角度が0度のときは1.65Vで90度までは増加して2.31Vになります。その後180度まで減少して1.65Vにさらに減少して270度では0.99Vになり、今度は増加して0度で1.65Vに戻ります。
  0度         1.65V
  0度~ 90度  増加
 90度         2.31V (1.65V + 0.66V)
 90度~180度  減少
180度         1.65V
180度~270度  減少
270度         0.99V (1.65V - 0.66V)
270度~360度  増加
360度         1.65V

y軸も似たような感じですが、z軸は上向きが2.31Vで下向きが0.99Vになっています。ニュートラルの状態が1.65Vです。この値は電源電圧のちょうど半分みたいです。増減するのは見ていますが、角度に比例して変化するかどうかはちゃんと調べていません。

LCDの表示は1列目がA/D変換から読み取った値を16進4桁でx y zの順に表示しています。2列目はmVに変換した10進4桁を同じくx y zの順に表示しています。3列目と4列目は偶数番目の測定結果です(1,2列目は奇数番目)。ブレッドボードを持ち上げて傾けると、傾けた角度に応じて値が変化します。

配線はAN0(CON2の1pin)がx軸(6pin)、AN1(CON2の2pin)がy軸(7pin)、AN2(CON2の3pin)がz軸(8pin)です。

A/D変換のモードはワンショットスキャンモード(複数チャネルを一回だけ変換するモード)を使っています。appliletでは0-2のように複数の(0からはじまる)チャネルを選択できます。モードが違うので動作も多少違います。割り込みは変換が全チャネル完了したときにはいります。変換結果の読み取り(AD_Read)も配列を渡すと一気に書き込んでくれます。実際には同時に変換しているわけではなくて1つずつ変換しています。わずかな時間差なので、ほぼ同時に変換していることになります。

メインはこんな感じです。昨日と違うのは、変換値を複数受け取るので配列にしたところと、結果の表示の部分だけです。
#define MAX_VOLT 3250            // 実測3.25V
volatile short rdy;

void  main( void )
{
    unsigned short val[3];       // A/D変換結果
    int i, v;

    lcd_init();                  // LCD初期化

    while(1){
        // A/D変換
        rdy = 0;
        AD_Start();              // 変換開始
        while(!rdy) ;            // 変換完了まで待つ
        AD_Read(val);            // 変換結果を読む

        // 結果表示
        for(i = 0; i < 3; i++){
            lcd_puthexs(val[i]); // 変換結果の16進出力
            lcd_putc(' ');
        }
        lcd_puts("     ");

        for(i = 0; i < 3; i++){
            v = (MAX_VOLT * (int)val[i]) >> 10; // mVに変換
            lcd_putdec4(v);      // mV値の10進出力
            lcd_putc(' ');
        }
        lcd_puts("     ");
    }
}

ソース中に'<'や'¥'があると化けたりしますね。'&lt;'とかにするのが面倒です。