Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of ITG3200 by
ITG3200 Class Reference
ITG-3200 triple axis digital gyroscope. More...
#include <ITG3200.h>
Public Types | |
| enum | Correction { NoCorrection, OffsetCorrection, Calibration } |
Zero offset correction mode that can be specified when calling getXYZ(). More... | |
Public Member Functions | |
| ITG3200 (PinName sda, PinName scl, bool fastmode=false) | |
| Constructor. | |
| ITG3200 (I2C &i2c) | |
| Constructor that accepts external i2c interface object. | |
| void | setCalibrationCurve (const float offset[3], const float slope[3]) |
| Sets calibration curve parameters. | |
| char | getWhoAmI (void) |
| Get the identity of the device. | |
| void | setWhoAmI (char address) |
| Set the address of the device. | |
| char | getSampleRateDivider (void) |
| Get the sample rate divider. | |
| void | setSampleRateDivider (char divider) |
| Set the sample rate divider. | |
| int | getInternalSampleRate (void) |
| Get the internal sample rate. | |
| void | setLpBandwidth (char bandwidth) |
| Set the low pass filter bandwidth. | |
| char | getInterruptConfiguration (void) |
| Get the interrupt configuration. | |
| void | setInterruptConfiguration (char config) |
| Set the interrupt configuration. | |
| bool | isPllReady (void) |
| Check the ITG_RDY bit of the INT_STATUS register. | |
| bool | isRawDataReady (void) |
| Check the RAW_DATA_RDY bit of the INT_STATUS register. | |
| int | getRawTemperature (void) |
| Get the temperature in raw format. | |
| float | getTemperature (void) |
| Get the temperature of the device. | |
| int | getX (void) |
| Get the output for the x-axis gyroscope. | |
| int | getY (void) |
| Get the output for the y-axis gyroscope. | |
| int | getZ (void) |
| Get the output on the z-axis gyroscope. | |
| void | getXYZ (int16_t readings[3], Correction corr=OffsetCorrection) |
| Burst read the outputs on the x,y,z-axis gyroscope. | |
| void | getXYZDegrees (double readings[3], Correction corr=OffsetCorrection) |
| Burst read the outputs on the x,y,z-axis gyroscope and convert them into degrees per second. | |
| void | getXYZRadians (double readings[3], Correction corr=OffsetCorrection) |
| Burst read the outputs on the x,y,z-axis gyroscope and convert them into degrees per second. | |
| char | getPowerManagement (void) |
| Get the power management configuration. | |
| void | setPowerManagement (char config) |
| Set power management configuration. | |
| void | calibrate (double time) |
| Calibrate the sensor drift by sampling zero offset. | |
| I2C & | getI2C () |
| Returns the I2C object that this object is using for communication. | |
| void | getOffset (int16_t offset_copy[3]) const |
| Returns internal offset values for zero adjusting. | |
Static Public Attributes | |
| static const int | I2C_ADDRESS = 0xD0 |
| The I2C address that can be passed directly to i2c object (it's already shifted 1 bit left). | |
Protected Member Functions | |
| int | getWord (int regi) |
| Reads a word (2 bytes) from the sensor via I2C bus. | |
| void | getRawXYZ (int16_t readings[3]) |
| An internal method to acquire gyro sensor readings before calibration correction. | |
Protected Attributes | |
| float | offset [3] |
| Offset values that will be subtracted from output. | |
Detailed Description
ITG-3200 triple axis digital gyroscope.
Definition at line 88 of file ITG3200.h.
Member Enumeration Documentation
| enum Correction |
Zero offset correction mode that can be specified when calling getXYZ().
The device has a major drift in readings depending on ambient temperature. You can measure the temperature with built-in thermometer to correct it, but you must have calibration curves for each axes to do so. Here are the options on how to correct the drift.
- Enumerator:
NoCorrection Do not correct zero offset at all; You would have trouble integrating the values to obtain rotation.
OffsetCorrection Correct the outputs with single-point zero adjust.
Calibration Use calibration curve (actually lines) to correct the outputs. You must provide coefficients with setCalibrationCurve().
Constructor & Destructor Documentation
| ITG3200 | ( | PinName | sda, |
| PinName | scl, | ||
| bool | fastmode = false |
||
| ) |
Constructor.
Sets FS_SEL to 0x03 for proper opertaion.
- Parameters:
-
sda - mbed pin to use for the SDA I2C line. scl - mbed pin to use for the SCL I2C line. fastmode Sets the internal I2C interface to use 400kHz clock.
Definition at line 40 of file ITG3200.cpp.
| ITG3200 | ( | I2C & | i2c ) |
Member Function Documentation
| void calibrate | ( | double | time ) |
Calibrate the sensor drift by sampling zero offset.
Be sure to keep the sensor stationary while sampling offset.
Once this function is invoked, following getXYZ*() functions return corrected values.
If the drift value changes over time, you can call this function once in a while to follow it. But don't forget to fix the sensor while calibrating!
- Parameters:
-
time The time span to sample and average offset. Sampling rate is limited, so giving long time to calibrate will improve correction quality.
Definition at line 338 of file ITG3200.cpp.
| I2C& getI2C | ( | ) |
| int getInternalSampleRate | ( | void | ) |
Get the internal sample rate.
- Returns:
- The internal sample rate in kHz - either 1 or 8.
Definition at line 161 of file ITG3200.cpp.
| char getInterruptConfiguration | ( | void | ) |
Get the interrupt configuration.
See datasheet for register contents details.
7 6 5 4 +------+------+--------------+------------------+ | ACTL | OPEN | LATCH_INT_EN | INT_ANYRD_2CLEAR | +------+------+--------------+------------------+
3 2 1 0 +---+------------+------------+---+ | 0 | ITG_RDY_EN | RAW_RDY_EN | 0 | +---+------------+------------+---+
ACTL Logic level for INT output pin; 1 = active low, 0 = active high. OPEN Drive type for INT output pin; 1 = open drain, 0 = push-pull. LATCH_INT_EN Latch mode; 1 = latch until interrupt is cleared, 0 = 50us pulse. INT_ANYRD_2CLEAR Latch clear method; 1 = any register read, 0 = status register read only. ITG_RDY_EN Enable interrupt when device is ready, (PLL ready after changing clock source). RAW_RDY_EN Enable interrupt when data is available. 0 Bits 1 and 3 of the INT_CFG register should be zero.
- Returns:
- the contents of the INT_CFG register.
Definition at line 198 of file ITG3200.cpp.
| void getOffset | ( | int16_t | offset_copy[3] ) | const |
| char getPowerManagement | ( | void | ) |
Get the power management configuration.
See the datasheet for register contents details.
7 6 5 4 +---------+-------+---------+---------+ | H_RESET | SLEEP | STBY_XG | STBY_YG | +---------+-------+---------+---------+
3 2 1 0 +---------+----------+----------+----------+ | STBY_ZG | CLK_SEL2 | CLK_SEL1 | CLK_SEL0 | +---------+----------+----------+----------+
H_RESET Reset device and internal registers to the power-up-default settings. SLEEP Enable low power sleep mode. STBY_XG Put gyro X in standby mode (1=standby, 0=normal). STBY_YG Put gyro Y in standby mode (1=standby, 0=normal). STBY_ZG Put gyro Z in standby mode (1=standby, 0=normal). CLK_SEL Select device clock source:
CLK_SEL | Clock Source --------+-------------- 0 Internal oscillator 1 PLL with X Gyro reference 2 PLL with Y Gyro reference 3 PLL with Z Gyro reference 4 PLL with external 32.768kHz reference 5 PLL with external 19.2MHz reference 6 Reserved 7 Reserved
- Returns:
- The contents of the PWR_MGM register.
Definition at line 313 of file ITG3200.cpp.
| int getRawTemperature | ( | void | ) |
| void getRawXYZ | ( | int16_t | readings[3] ) | [protected] |
An internal method to acquire gyro sensor readings before calibration correction.
Protected for the time being, although there could be cases that raw values are appreciated by the user.
Definition at line 281 of file ITG3200.cpp.
| char getSampleRateDivider | ( | void | ) |
Get the sample rate divider.
- Returns:
- The sample rate divider as a number from 0-255.
Definition at line 136 of file ITG3200.cpp.
| float getTemperature | ( | void | ) |
Get the temperature of the device.
- Returns:
- The temperature in degrees celsius.
Definition at line 274 of file ITG3200.cpp.
| char getWhoAmI | ( | void | ) |
Get the identity of the device.
- Returns:
- The contents of the Who Am I register which contains the I2C address of the device.
Definition at line 110 of file ITG3200.cpp.
| int getWord | ( | int | regi ) | [protected] |
Reads a word (2 bytes) from the sensor via I2C bus.
The queried value is assumed big-endian, 2's complement value.
This protected function is added because we shouldn't write getX(), getY() and getZ() independently, but collect common codes.
- Parameters:
-
regi Register address to be read.
Definition at line 261 of file ITG3200.cpp.
| int getX | ( | void | ) |
| void getXYZ | ( | int16_t | readings[3], |
| Correction | corr = OffsetCorrection |
||
| ) |
Burst read the outputs on the x,y,z-axis gyroscope.
Typical sensitivity is 14.375 LSB/(degrees/sec).
- Parameters:
-
readings The output buffer array that has at least 3 length. corr Correction method for returned values.
Definition at line 295 of file ITG3200.cpp.
| void getXYZDegrees | ( | double | readings[3], |
| Correction | corr = OffsetCorrection |
||
| ) |
| void getXYZRadians | ( | double | readings[3], |
| Correction | corr = OffsetCorrection |
||
| ) |
| int getY | ( | void | ) |
| int getZ | ( | void | ) |
| bool isPllReady | ( | void | ) |
Check the ITG_RDY bit of the INT_STATUS register.
- Returns:
- True if the ITG_RDY bit is set, corresponding to PLL ready, false if the ITG_RDY bit is not set, corresponding to PLL not ready.
Definition at line 223 of file ITG3200.cpp.
| bool isRawDataReady | ( | void | ) |
Check the RAW_DATA_RDY bit of the INT_STATUS register.
- Returns:
- True if the RAW_DATA_RDY bit is set, corresponding to new data in the sensor registers, false if the RAW_DATA_RDY bit is not set, corresponding to no new data yet in the sensor registers.
Definition at line 242 of file ITG3200.cpp.
| void setCalibrationCurve | ( | const float | offset[3], |
| const float | slope[3] | ||
| ) |
Sets calibration curve parameters.
- Parameters:
-
offset An array holding calibration curve offsets (0th-order coefficient) for each axis, must have 3 elements. slope An array holding calibration curve slopes (1st-order coefficient) for each axis, must have 3 elements.
Definition at line 98 of file ITG3200.cpp.
| void setInterruptConfiguration | ( | char | config ) |
Set the interrupt configuration.
See datasheet for configuration byte details.
7 6 5 4 +------+------+--------------+------------------+ | ACTL | OPEN | LATCH_INT_EN | INT_ANYRD_2CLEAR | +------+------+--------------+------------------+
3 2 1 0 +---+------------+------------+---+ | 0 | ITG_RDY_EN | RAW_RDY_EN | 0 | +---+------------+------------+---+
ACTL Logic level for INT output pin; 1 = active low, 0 = active high. OPEN Drive type for INT output pin; 1 = open drain, 0 = push-pull. LATCH_INT_EN Latch mode; 1 = latch until interrupt is cleared, 0 = 50us pulse. INT_ANYRD_2CLEAR Latch clear method; 1 = any register read, 0 = status register read only. ITG_RDY_EN Enable interrupt when device is ready, (PLL ready after changing clock source). RAW_RDY_EN Enable interrupt when data is available. 0 Bits 1 and 3 of the INT_CFG register should be zero.
- Parameters:
-
config Configuration byte to write to INT_CFG register.
Definition at line 212 of file ITG3200.cpp.
| void setLpBandwidth | ( | char | bandwidth ) |
Set the low pass filter bandwidth.
Also used to set the internal sample rate. Pass the define bandwidth codes as a parameter.
256Hz -> 8kHz internal sample rate. Everything else -> 1kHz internal rate.
- Parameters:
-
bandwidth Low pass filter bandwidth code
Definition at line 186 of file ITG3200.cpp.
| void setPowerManagement | ( | char | config ) |
Set power management configuration.
See the datasheet for configuration byte details
7 6 5 4 +---------+-------+---------+---------+ | H_RESET | SLEEP | STBY_XG | STBY_YG | +---------+-------+---------+---------+
3 2 1 0 +---------+----------+----------+----------+ | STBY_ZG | CLK_SEL2 | CLK_SEL1 | CLK_SEL0 | +---------+----------+----------+----------+
H_RESET Reset device and internal registers to the power-up-default settings. SLEEP Enable low power sleep mode. STBY_XG Put gyro X in standby mode (1=standby, 0=normal). STBY_YG Put gyro Y in standby mode (1=standby, 0=normal). STBY_ZG Put gyro Z in standby mode (1=standby, 0=normal). CLK_SEL Select device clock source:
CLK_SEL | Clock Source --------+-------------- 0 Internal oscillator 1 PLL with X Gyro reference 2 PLL with Y Gyro reference 3 PLL with Z Gyro reference 4 PLL with external 32.768kHz reference 5 PLL with external 19.2MHz reference 6 Reserved 7 Reserved
- Parameters:
-
config The configuration byte to write to the PWR_MGM register.
Definition at line 327 of file ITG3200.cpp.
| void setSampleRateDivider | ( | char | divider ) |
Set the sample rate divider.
Fsample = Finternal / (divider + 1), where Finternal = 1kHz or 8kHz, as decidied by the DLPF_FS register.
- Parameters:
-
The sample rate divider as a number from 0-255.
Definition at line 150 of file ITG3200.cpp.
| void setWhoAmI | ( | char | address ) |
Set the address of the device.
- Parameters:
-
address The I2C slave address to write to the Who Am I register on the device.
Definition at line 125 of file ITG3200.cpp.
Field Documentation
const int I2C_ADDRESS = 0xD0 [static] |
Generated on Wed Aug 3 2022 05:22:16 by
1.7.2
