投稿

3月, 2019の投稿を表示しています

STM32F3 Discovery、電子水平器の作成

イメージ
STM32F3 Discovery、電子水平器の作成 前回、STM32F3 Discovery のLSM303DLHC磁気センサーを使って電子コンパスを作成しましたが、このICにはもう一つ、加速度センサーが搭載されています。 今回は、この加速度センサーを使って水平器を作成してみたいと思います。 そして、今回も外部回路は無しで、表示は8つのLEDだけで実現してみたいと思います。 LSM303DLHCの加速度センサーの使い方 LSM303DLHCの加速度センサーは、XYZの3軸に対する加速度を検出します。 各軸の加速度は、各軸の加速度を検出しています。 ボードの表側を上にして水平な状態で静止できたとするならば、Z軸が鉛直方向となり1Gが検出され、XY軸は0Gとなります。 傾いた状態、鉛直方向からの角度θで得られるCos()を1Gに掛けたものとなります。 つまり、軸が鉛直方向の場合θは0度となりCos(0)=1で9.8G、軸が45度の場合はCos(45)=0.707...となり6.9、90度の場合はCos(90)=0となり0、逆さまにするとCos(180)=-1で-9.8となります。 検出されるデーターについて 得られるデーターが割と曲者です。 データーシートには書いてありませんが、データーを取得すると下位4ビットは必ず0なので、実は得られるデーターは12bit、下4ビットを無視する必要があります。 データーシートによると、得られる数値はFSビットによって設定されるとあります。 CTRL_REG4_A(23h)のFS[0:1]でスケールを設定します。デフォルトは00で ±2G のレンジとなり、取得できるデータは、1 mg/LSB となります。 この、1 mg/LSB はLSB1ビットあたりの単位を示しています。 仮にある軸のデータが 0x001 となった場合の加速度を求めると、 = 1mg = 0.001G = 0.00980665m/s2 となり、 1000の値を取得できたときは、 1000 * 0.00980665m/s2 = 9.80665m/s2 と、なります。 スケールを ±4G とした場合は、2mg/LSBとなるので、 0x001 = 0.002G = 0.019601