(2014.9.10 作成)
ジャイロセンサー(L3GD20)はI2C, SPIどちらでもアクセスが可能なICです。Pin5(CS)がHiだとI2Cアクセス、LowだとSPIアクセスになります。STM32Discovery基板ではSPIアクセスになるように実装されていますので、ここでの紹介するプログラムもSPIでアクセスします。
ICのアクセス方法は特に難しいことはなく、簡単にレジスタアクセスが可能です。SPIの場合アドレスの7bit目がMS(Multi Sinle?)ビットとなっており、1にすることでアドレスがオートインクリメントされ、連続してデータの読み書きが可能になります。
またFIFOを用いた高度な使用も可能ではありますが、ここで紹介するプログラムは測定値を読んでくるだけの単純なものになります。FIFOを使用する機会があれば更新しようと思います。
一つ注意する点はOUT_TEMPレジスタ(0x26)によって温度を読むことができるようですが、明らかにおかしな値が返ります(温めると温度が下がる・・・)。仕様書上記載がないので詳細不明です。
コンストラクタ |
||||||||
プロトタイプ |
L3GD20( DKS::SPI::SPI_Base *SPI, const DKS::IDigitalOut *SSpin); |
|||||||
戻り値 |
なし |
|||||||
引数 | SPI |
SPIクラスへのポインタ |
||||||
SSpin |
SS端子をつないだDigitalOutクラスへのポインタ |
|||||||
備考 |
SPIのクロックは10MHz以下にする必要があります。 コンストラクタ内で”WHO_AM_I"レジスタ(0Fh)へアクセスして正常な返答があることを確認しています。もし接続ミス等で応答がなければ無限ループになります。 |
ジャイロデータの取得 |
||||||||
プロトタイプ |
void ReadMagData(float Data[3]); void ReadMagData(uint16_t Data[3]); |
|||||||
戻り値 |
なし |
|||||||
引数 | Data |
測定データが格納されます |
||||||
備考 |
XYZ順でデータが返ります。 事前に確保された配列を渡してください。 uint16_t型の方が絶対値への変換を行わないので少し高速に動作します。 |
温度データの取得 |
||||||||
プロトタイプ |
void ReadTemperature(int8_t &Temperature); |
|||||||
戻り値 |
なし |
|||||||
引数 | Temperature |
温度データが格納されます |
||||||
備考 |
結果はかなり怪しいです。。。 |