ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« PSoCとリアルタイムクロックで日時を表示する | メイン | PSoCとGPSモジュールで経緯度を表示する »

PSoCと3軸加速度センサーでXYZ軸の加速度を計測する




psoc_3g_01.gif
今回はPSoCに3軸加速度センサーを接続してX軸、Y軸、Z軸の3方向の加速度を表示する。

加速度センサーには秋月電子で800円程度で売られている「KXM52-1050」を利用した。この加速度センサーは5Vでも3.3Vでも動作し、出力はXYZ軸それぞれが独立したアナログの電圧として取り出せるものだ。感度もよく(1000mV/g)、使い勝手がいい。

psoc_3g_02.gif
利用するモジュールをプロジェクトに追加する。まず「ADCs」にある「TRIADC」を右クリックして現れるメニューから「Select」を選択して追加する。この「TRIADC」は3つの入力を持つA/Dコンバーターだ。今回の3軸加速度センサーを利用するのにうってつけだろう。

psoc_3g_03.gif
次にアンプを追加する。「Amplifiers」の「PGA」を右クリックして「Select」を選択する。このアンプは1入力1出力なので、3軸分、合計3つを追加する。3つ追加するには同じ操作(「Amplifiers」の「PGA」を右クリックして「Select」を選択するという操作)を3回繰り返す。

psoc_3g_04.gif
次に測定結果を出力するための液晶用モジュールを追加する。「Misc Digital」の「LCD」を右クリックして「Select」すればいい。

psoc_3g_05.gif
これで利用するモジュールの選択が終わった。次に配線などの設定をするため「Config」メニューの「Interconnect」を選択する。

psoc_3g_06.gif
まず「Global Resources」を設定する。
「Power Setting」を「5.0V / 6MHz」に、
「VC1=SysClk/N」を「16」に、
「RefMux」を「(Vdd/2)+/-(Vdd/2)」にする。
次に「LCD_1」の「LCDPort」を「Port_2」に設定する。

psoc_3g_07.gif
さらに3つあるアンプの設定をする。まず「PGA_1」を右クリックして「Place」により配置する。

psoc_3g_08.gif
そして「Gain」を「1.000」に、
「Input」を「AnalogColumn_InputMux_0」に、
「Reference」を「VSS」に、
「AnalogBus」を「Disabel」に設定する。

psoc_3g_09.gif
次に「PGA_2」の設定をする。「PGA_1」のときと同様に右クリックして「Place」で配置する。そして左側の設定欄で
「Gain」を「1.000」に、
「Input」を「AnalogColumn_InputSelect_1」に、
「Reference」を「VSS」に、
「AnalogBus」を「Disabel」に設定する。

psoc_3g_10.gif
次に「PGA_3」の設定をする。「PGA_1」や「PGA_2」のときと同様に右クリックして「Place」で配置する。そして左側の設定欄で
「Gain」を「1.000」に、
「Input」を「AnalogColumn_InputSelect_2」に、
「Reference」を「VSS」に、
「AnalogBus」を「Disabel」に設定する。

psoc_3g_11.gif
最後に「TRIADC_1」の設定をする。「TRIADC_1」を右クリックして現れたメニューから「Place」を選択して配置する。そして
「ADC Input1」を「ACB00」に、
「ADC Input2」を「ACB01」に、
「ADC Input3」を「ACB02」に、
「Clock」を「VC1」に(画面では「VC2」になっていますが「VC1」の間違えです)、
「ADCResolution」を「12 Bit」に設定する。

psoc_3g_12.gif
これで設定が終わったので次に配線をする。
「PGA_2」の上の部分をクリックする。

psoc_3g_13.gif
そして「Port_0_2」を選択する。これで「PGA_2」がポート02からの入力で動くようになる。

psoc_3g_14.gif
「PGA_3」の上の部分をクリックする。

psoc_3g_15.gif
そして「Port_0_3」を選択する。これで「PGA_3」がポート03からの入力で動くようになる。

psoc_3g_16.gif
配線まで一通り終わったのでソースコードを書くため画面を切り替える。「View」メニューから「Application Editor」を選択する。

psoc_3g_17.gif
長くなるのでソースコードを作成する過程は省略した。基本的に各モジュールのサンプルコードの切り貼りで作成できる。ただし今回はアンプを3つ利用した。それぞれ「PGA_1」、「PGA_2」、「PGA_3」なので各命令もそれぞれの頭文字から始まるように修正する(例:PGA_2_Start(...);など)。


//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules

#include "stdlib.h"

void User_Function(int iResult1, int iResult2, int iResult3)
{
char pszData[7];

iResult1 *= (5000/4096);
iResult2 *= (5000/4096);
iResult3 *= (5000/4096);

LCD_1_Position(0,4);
LCD_1_PrCString("X:");
itoa(pszData,iResult1,10);
LCD_1_PrString(pszData);
LCD_1_PrCString(" ");

LCD_1_Position(1,4);
LCD_1_PrCString("Y:");
itoa(pszData,iResult2,10);
LCD_1_PrString(pszData);
LCD_1_PrCString(" ");

LCD_1_Position(2,0);
LCD_1_PrCString("Z:");
itoa(pszData,iResult3,10);
LCD_1_PrString(pszData);
LCD_1_PrCString(" ");
}


void main()
{
int iResult1, iResult2, iResult3;

LCD_1_Start();
PGA_1_Start(PGA_1_MEDPOWER);
PGA_2_Start(PGA_2_MEDPOWER);
PGA_3_Start(PGA_3_MEDPOWER);

M8C_EnableGInt; // Enable global interrupts
TRIADC_1_Start(TRIADC_1_HIGHPOWER); // Turn on Analog section
TRIADC_1_SetResolution(12); // Set resolution to 10 Bits
TRIADC_1_GetSamples(0); // Start ADC to read continuously
for(;;)
{
while(TRIADC_1_fIsDataAvailable() == 0); // Wait for data to be ready
iResult1 = TRIADC_1_iGetData1(); // Get Data from ADC Input1
iResult2 = TRIADC_1_iGetData2(); // Get Data from ADC Input2
iResult3 = TRIADC_1_iGetData3ClearFlag(); // Get Data from ADC Input3
// and clear data ready flag
User_Function(iResult1,iResult2,iResult3); // User function to use
// data
}
}





_DSC9034.JPG
今回はCY8C29466とPSoCEval基板を利用して動作確認を行った。

_DSC9035.JPG
これが利用した加速度センサー「KMX52-1050」。「KXM52 50137」のように書かれたフラットICのセンサー本体が8ピンDIPモジュールに変換されている。この状態で秋月電子で800円程度で販売されている。

1ピンと2ピンをVccに、3ピンと5ピンをGNDに、6ピンをポート01に、7ピンをポート02に、8ピンをポート03に接続する。また、VCCとGNDの間に0.1μF程度のコンデンサを配置する。

_DSC9037.JPG
この加速度センサーはモジュール化されていて便利なのだが...固定がいい加減なことがある。今回利用したセンサーは写真の通り傾きまくっている。もう少し水平に取り付けてもらいたいものだ。

_DSC9039.JPG
センサーを水平にするとXとYが0g、Zが1.000gになるはずなのだが水平を出すのは難しい。適当に置いた状態でZは0.983gとなった。

センサーの出力値は5V電源のとき、2.5Vを中心に1000mV/gだけ変化する。つまり、出力電圧が2.5Vのとき0g、3.5Vのとき1g、1.5Vのとき-1gとなる。









Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報