2016年5月8日日曜日

BBC micro:bitの加速度センサMMA8653をFRDM-KL46Zで作る

BBC micro:bitに搭載されている加速度センサMMA8653FCは次のようにnRF51882に接続されています。

//ACCEL INTERRUPT PINS (MMA8653FC)
ACCEL_INT2 = p27,
ACCEL_INT1 = p28,
//SDA (SERIAL DATA LINE)
I2C_SDA0 = p30,
//SCL (SERIAL CLOCK LINE)
I2C_SCL0 = p0
mbed/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51_MICROBIT/PinNames.h

32.768kHzクリスタル搭載タイプではINT2 P0_27(p27)がクリスタル接続ピンと衝突するが、
ドライバのソースコードを見ると、現在は使われているのはINT1のみでINT2は使われていません。

ドライバ
microbit-dal/source/drivers/MicroBitAccelerometer.cpp
microbit-dal/inc/drivers/MicroBitAccelerometer.h
http://lancaster-university.github.io/microbit-docs/ubit/accelerometer/

MMA8653のブレイクアウトボードは無さそうなので、FRDM-KL46Zに搭載されている加速度センサMMA8451QとI2Cスレーブ機能を使ってMMA8653FCを模擬します。
データシートで比較する限り、MMA8451はMMA8653の上位互換になっているようで、I2Cアドレスを一致させれば同じように動きそうです。
I2Cスレーブでは反応速度が要求されるので、ドライバから送られてくるI2Cデータを前提にして動作させます。

作成したFRDM-KL46Z用のプログラムは次のようになります。
MMA8653 emulator for BBC micro:bit
https://developer.mbed.org/users/va009039/code/emuMMA8653/

ブロックエディタでX,Y,Zの加速度センサを表示するプログラムを作って実行します。


I2Cのデータは次のように流れます。(>>はMMA8643への書込み、<<は読み込みを表します)
最初の6個は設定で、次から加速度データを読み込んでいます。


データシート

MMA8653FC 3-Axis, 10-bit Digital Accelerometer
http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8653FC.pdf

MMA8451Q: ±2g/±4g/±8g, Low g, 14-bit Digital Accelerometer
http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8451Q.pdf

おそらく、MMA8452でも動きそうだが未確認です。

MMA8452Q: ±2g/±4g/±8g, Low g, 12-bit Digital Accelerometer

データシート
http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8452Q.pdf

(2016/5/8)
---



0 件のコメント: