I2Cセンサーの種類 |
3軸ジャイロセンサー |
|
主な機能 |
X・Y・Z軸のジャイロセンサー 回転軸±2000°/sまで検出し16bitの分解能を持つ |
|
I2Cデバイス名 |
ITG3200 |
|
写真
|
||
開発したデバイスの入手先 製品名 品番・型番 |
スイッチサイエンス GROVE – I2C 3軸ジャイロセンサ(SEEED-101020050) |
|
デバイスのData-Sheet |
https://www.invensense.com/wp-content/uploads/2015/02/ITG-3200-Datasheet.pdf https://www.invensense.com/wp-content/uploads/2015/02/ITG-3200-Register-Map.pdf |
|
デバイスの主な仕様
|
電源電圧 I2Cアドレス 分解能 I2C通信速度 検出軸 |
2.1V~3.6V (5Vでは使えません) 0X68、0X69(Pin9で選択可能) 16bit 400Kbps X軸、Y軸、Z軸の回転速度検出 |
説明 |
3軸のMEMSジャイロICです。±2000°/sまで検出可能で、300rpmまでの回転をX,Y,Z 軸で検出可能です。 また、10kgまでのショックに耐える構造のICで、温度センサーも内臓しています。
測定値の読み出す場合X,Y,Z及び温度は、全て16bitですので2つの8bitのレジスタよりデータを得て合算や8bitへの分割処理が必要となります。I2Cセンサードライバーでは16bitへの合算/分割はドライバー内部で処理し、16bitの10進数でプロパティへセットされます。
通常のレジスタの読み書きは、register |
|
|
|
|
開発・テスト風景
チョットの動きでも、結構値が変化します。高感度です。 |
I2Cデバイス内部のレジスタ構成(レジスタに対する設定値、レジスタの内容等のご質問はお答えできません)
WHO_AM_I |
GYRO_ZOUT_L |
SMPLRT_DIV |
PWR_MGM |
DLPF_FS |
|
NT_CFG |
|
INT_STATUS |
|
TEMP_OUT_H |
|
TEMP_OUT_L |
|
GYRO_XOUT_H |
|
GYRO_XOUT_L |
|
GYRO_YOUT_H |
|
GYRO_YOUT_L |
|
GYRO_ZOUT_H |
|
I2Cセンサー・ドライバーで準備済みのプロパティ・メソッド
プロパティ
機能名 |
機能説明 |
ID |
デバイスのアイデンティティを検証するために使用されます。 |
SMPLRT_DIV |
ジャイロのサンプルレートを決定します。 |
FS_SEL |
ジャイロセンサデータのフルスケールの選択 |
DLPF_CFG |
デジタル低域通過フィルタの構成および内部サンプリングレートの設定 |
ACTL |
INT時のピン出力レベル設定 output pin 1=active low, 0=active high |
OPEN |
INTピンの出力方法設定 1=open drain, |
LATCH_INT_EN |
INTピンのラッチモード選択 Latch mode – |
INT_ANYRD_2CLEAR |
INTのクリア方法 Latch clear |
TG_RDY_EN |
デバイスは、(クロックソースを変更した後、PLLレディ)準備ができたときに割り込みを有効にします |
RAW_RDY_EN |
データが利用可能になったときに割り込みを有効にします |
STATUS_ITG_RDY |
準備ができて計測可能 |
STATUS_RAW_DATA_RDY |
生データは、準備ができています |
機能名 |
機能説明 |
TEMP_OUT |
16-bit 温度データ |
GYRO_XOUT |
16-bit X軸 ジャイロデータ |
GYRO_YOUT |
16-bit Y軸ジャイロデータ |
GYRO_ZOUT |
16-bit Z 軸ジャイロデータ |
PWR_MGM_H_RESET |
デバイスのリセットと電源投入時にレジスタのデフォルト値設定 |
PWR_MGM_SLEEP |
スリープモード |
PWR_MGM_STBY_XG |
X軸スタンバイモード (1=standby, |
PWR_MGM_STBY_YG |
Y軸スタンバイモード (1=standby, |
PWR_MGM_STBY_ZG |
Z軸スタンバイモード (1=standby, |
PWR_MGM_CLK_SEL |
クロックのソース選択 |
メソッド
機能名 |
機能説明 |
Init |
I2Cバスコントローラに指定された接続設定を使って非同期的に接続します。 |
Read |
指定レジスタ読込 |
Write |
指定レジスタ書込 |
定数
機能名 |
機能説明 |
定数値 |
REG_ADDR.WHO_AM_I |
レジスタWHO_AM_I |
0x00 |
REG_ADDR.SMPLRT_DIV |
レジスタSMPLRT_DIV |
0x15 |
REG_ADDR.DLPF_FS |
レジスタDLPF_FS |
0x16 |
REG_ADDR.INT_CFG |
レジスタINT_CFG |
0x17 |
REG_ADDR.INT_STATUS |
レジスタINT_STATUS |
0x1A |
REG_ADDR.GYRO_DATA |
レジスタGYRO_XOUT |
0x1B |
REG_ADDR.PWR_MGM |
レジスタPWR_MGM |
0x3E |
I2Cセンサードライバーを使ったVBでのサンプルソース
Imports I2CLibrary Public NotInheritable Class ITG3200Page Inherits Page
Private Const ITG3200_Address As Byte = &H77 Private ITG3200 As ITG3200 = New ITG3200() Private WithEvents RefreshTimer As DispatcherTimer = New DispatcherTimer()
Public Sub New() InitializeComponent() Call Init() End Sub
Private Async Sub Init() Await ITG3200.Init(ITG3200_Address) ‘ DLPF_FS書込 ITG3200.FS_SEL = &H3 ITG3200.DLPF_CFG = &H0 ITG3200.Write(ITG3200.REG_ADDR.DLPF_FS) ITG3200.Read(ITG3200.REG_ADDR.INT_CFG) If (ITG3200.Status = 1) Then Debug.WriteLine(“ACTL = “ & ITG3200.ACTL.ToString()) Debug.WriteLine(“OPEN = “ & ITG3200.OPEN.ToString()) Debug.WriteLine(“LATCH_INT_EN = “ & ITG3200.LATCH_INT_EN.ToString()) Debug.WriteLine(“INT_ANYRD_2CLEAR = “ & ITG3200.INT_ANYRD_2CLEAR.ToString()) Debug.WriteLine(“TG_RDY_EN = “ & ITG3200.TG_RDY_EN.ToString()) End If
ITG3200.Read(ITG3200.REG_ADDR.INT_STATUS)
If (ITG3200.Status = 1) Then Debug.WriteLine(“ITG_RDY = “ & ITG3200.ITG_RDY.ToString()) Debug.WriteLine(“RAW_DATA_RDY = “ & ITG3200.RAW_DATA_RDY.ToString()) End If
End Sub
Private Sub btnStart_Click(sender As Object, e As RoutedEventArgs) RefreshTimer.Interval = TimeSpan.FromMilliseconds(100) RefreshTimer.Start() End Sub
Private Sub Measurement(sender As Object, e As Object) Handles RefreshTimer.Tick RefreshTimer.Stop() ITG3200.Read(ITG3200.REG_ADDR.GYRO_DATA) If (ITG3200.Status = 1) Then Debug.WriteLine(“TEMP_OUT = {0:D}”, ITG3200.TEMP_OUT) Debug.WriteLine(“GYRO_XOUT = {0:D}”, ITG3200.GYRO_XOUT) Debug.WriteLine(“GYRO_YOUT = {0:D}”, ITG3200.GYRO_YOUT) Debug.WriteLine(“GYRO_ZOUT = {0:D}”, ITG3200.GYRO_ZOUT) End If
RefreshTimer.Start() End Sub
Private Sub btnStop_Click(sender As Object, e As RoutedEventArgs) RefreshTimer.Stop() End Sub
Private Sub btnBack_Click(sender As Object, e As RoutedEventArgs) RefreshTimer.Stop() ITG3200.close() App.rootFrame.Navigate(GetType(MenuPage)) End Sub End Class
|