テキスト ボックス:  ITG3200 

 

 

 

I2Cセンサーの種類

3軸ジャイロセンサー

主な機能

X・Y・Z軸のジャイロセンサー

回転軸±2000°/sまで検出し16bitの分解能を持つ

I2Cデバイス名

ITG3200

写真

 

GROVE - I2C 3軸ジャイロセンサ

開発したデバイスの入手先 

製品名 品番・型番

スイッチサイエンス

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.1~3.6V (5Vでは使えません)

0680X69Pin9で選択可能)

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への合算/分割はドライバー内部で処理し、16bit10進数でプロパティへセットされます。

 

通常のレジスタの読み書きは、register
address
を指定した後に処理を行いますが、I2Cセンサー・ドライバーを使用する場合は使用するプロパティにregister addressが紐づけして有る為レジスタアドレスの指定は不要でプロパティへ値の代入、読み出しのみで可能です。

 

 

 

 

開発・テスト風景

IMG_2419

チョットの動きでも、結構値が変化します。高感度です。

 

 

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,
0=push-pull

LATCH_INT_EN

INTピンのラッチモード選択 Latch mode –
1=latch until interrupt is cleared, 0=50us pulse

INT_ANYRD_2CLEAR

INTのクリア方法 Latch clear
method – 1=any register read, 0=status register read only

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,
0=normal)

PWR_MGM_STBY_YG

Y軸スタンバイモード (1=standby,
0=normal)

PWR_MGM_STBY_ZG

Z軸スタンバイモード (1=standby,
0=normal)

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