AHRS Library

Committer:
altb
Date:
Tue Dec 04 15:49:48 2018 +0000
Revision:
3:6811c0ce95f6
Parent:
0:6661e1395e30
AHRS Klasse mit Mahony filter etc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
altb 0:6661e1395e30 1 /******************************************************************************
altb 0:6661e1395e30 2 LSM9DS1_Types.h
altb 0:6661e1395e30 3 SFE_LSM9DS1 Library - LSM9DS1 Types and Enumerations
altb 0:6661e1395e30 4 Jim Lindblom @ SparkFun Electronics
altb 0:6661e1395e30 5 Original Creation Date: April 21, 2015
altb 0:6661e1395e30 6 https://github.com/sparkfun/LSM9DS1_Breakout
altb 0:6661e1395e30 7
altb 0:6661e1395e30 8 This file defines all types and enumerations used by the LSM9DS1 class.
altb 0:6661e1395e30 9
altb 0:6661e1395e30 10 Development environment specifics:
altb 0:6661e1395e30 11 IDE: Arduino 1.6.0
altb 0:6661e1395e30 12 Hardware Platform: Arduino Uno
altb 0:6661e1395e30 13 LSM9DS1 Breakout Version: 1.0
altb 0:6661e1395e30 14
altb 0:6661e1395e30 15 This code is beerware; if you see me (or any other SparkFun employee) at the
altb 0:6661e1395e30 16 local, and you've found our code helpful, please buy us a round!
altb 0:6661e1395e30 17
altb 0:6661e1395e30 18 Distributed as-is; no warranty is given.
altb 0:6661e1395e30 19 ******************************************************************************/
altb 0:6661e1395e30 20
altb 0:6661e1395e30 21 #ifndef __LSM9DS1_Types_H__
altb 0:6661e1395e30 22 #define __LSM9DS1_Types_H__
altb 0:6661e1395e30 23
altb 0:6661e1395e30 24 #include "LSM9DS1_Registers.h"
altb 0:6661e1395e30 25
altb 0:6661e1395e30 26 // The LSM9DS1 functions over both I2C or SPI. This library supports both.
altb 0:6661e1395e30 27 // But the interface mode used must be sent to the LSM9DS1 constructor. Use
altb 0:6661e1395e30 28 // one of these two as the first parameter of the constructor.
altb 0:6661e1395e30 29 enum interface_mode
altb 0:6661e1395e30 30 {
altb 0:6661e1395e30 31 IMU_MODE_SPI,
altb 0:6661e1395e30 32 IMU_MODE_I2C,
altb 0:6661e1395e30 33 };
altb 0:6661e1395e30 34
altb 0:6661e1395e30 35 // accel_scale defines all possible FSR's of the accelerometer:
altb 0:6661e1395e30 36 enum accel_scale
altb 0:6661e1395e30 37 {
altb 0:6661e1395e30 38 A_SCALE_2G, // 00: 2g
altb 0:6661e1395e30 39 A_SCALE_16G,// 01: 16g
altb 0:6661e1395e30 40 A_SCALE_4G, // 10: 4g
altb 0:6661e1395e30 41 A_SCALE_8G // 11: 8g
altb 0:6661e1395e30 42 };
altb 0:6661e1395e30 43
altb 0:6661e1395e30 44 // gyro_scale defines the possible full-scale ranges of the gyroscope:
altb 0:6661e1395e30 45 enum gyro_scale
altb 0:6661e1395e30 46 {
altb 0:6661e1395e30 47 G_SCALE_245DPS, // 00: 245 degrees per second
altb 0:6661e1395e30 48 G_SCALE_500DPS, // 01: 500 dps
altb 0:6661e1395e30 49 G_SCALE_2000DPS, // 11: 2000 dps
altb 0:6661e1395e30 50 };
altb 0:6661e1395e30 51
altb 0:6661e1395e30 52 // mag_scale defines all possible FSR's of the magnetometer:
altb 0:6661e1395e30 53 enum mag_scale
altb 0:6661e1395e30 54 {
altb 0:6661e1395e30 55 M_SCALE_4GS, // 00: 4Gs
altb 0:6661e1395e30 56 M_SCALE_8GS, // 01: 8Gs
altb 0:6661e1395e30 57 M_SCALE_12GS, // 10: 12Gs
altb 0:6661e1395e30 58 M_SCALE_16GS, // 11: 16Gs
altb 0:6661e1395e30 59 };
altb 0:6661e1395e30 60
altb 0:6661e1395e30 61 // gyro_odr defines all possible data rate/bandwidth combos of the gyro:
altb 0:6661e1395e30 62 enum gyro_odr
altb 0:6661e1395e30 63 {
altb 0:6661e1395e30 64 //! TODO
altb 0:6661e1395e30 65 G_ODR_PD, // Power down (0)
altb 0:6661e1395e30 66 G_ODR_149, // 14.9 Hz (1)
altb 0:6661e1395e30 67 G_ODR_595, // 59.5 Hz (2)
altb 0:6661e1395e30 68 G_ODR_119, // 119 Hz (3)
altb 0:6661e1395e30 69 G_ODR_238, // 238 Hz (4)
altb 0:6661e1395e30 70 G_ODR_476, // 476 Hz (5)
altb 0:6661e1395e30 71 G_ODR_952 // 952 Hz (6)
altb 0:6661e1395e30 72 };
altb 0:6661e1395e30 73 // accel_oder defines all possible output data rates of the accelerometer:
altb 0:6661e1395e30 74 enum accel_odr
altb 0:6661e1395e30 75 {
altb 0:6661e1395e30 76 XL_POWER_DOWN, // Power-down mode (0x0)
altb 0:6661e1395e30 77 XL_ODR_10, // 10 Hz (0x1)
altb 0:6661e1395e30 78 XL_ODR_50, // 50 Hz (0x02)
altb 0:6661e1395e30 79 XL_ODR_119, // 119 Hz (0x3)
altb 0:6661e1395e30 80 XL_ODR_238, // 238 Hz (0x4)
altb 0:6661e1395e30 81 XL_ODR_476, // 476 Hz (0x5)
altb 0:6661e1395e30 82 XL_ODR_952 // 952 Hz (0x6)
altb 0:6661e1395e30 83 };
altb 0:6661e1395e30 84
altb 0:6661e1395e30 85 // accel_abw defines all possible anti-aliasing filter rates of the accelerometer:
altb 0:6661e1395e30 86 enum accel_abw
altb 0:6661e1395e30 87 {
altb 0:6661e1395e30 88 A_ABW_408, // 408 Hz (0x0)
altb 0:6661e1395e30 89 A_ABW_211, // 211 Hz (0x1)
altb 0:6661e1395e30 90 A_ABW_105, // 105 Hz (0x2)
altb 0:6661e1395e30 91 A_ABW_50, // 50 Hz (0x3)
altb 0:6661e1395e30 92 };
altb 0:6661e1395e30 93
altb 0:6661e1395e30 94
altb 0:6661e1395e30 95 // mag_odr defines all possible output data rates of the magnetometer:
altb 0:6661e1395e30 96 enum mag_odr
altb 0:6661e1395e30 97 {
altb 0:6661e1395e30 98 M_ODR_0625, // 0.625 Hz (0)
altb 0:6661e1395e30 99 M_ODR_125, // 1.25 Hz (1)
altb 0:6661e1395e30 100 M_ODR_250, // 2.5 Hz (2)
altb 0:6661e1395e30 101 M_ODR_5, // 5 Hz (3)
altb 0:6661e1395e30 102 M_ODR_10, // 10 Hz (4)
altb 0:6661e1395e30 103 M_ODR_20, // 20 Hz (5)
altb 0:6661e1395e30 104 M_ODR_40, // 40 Hz (6)
altb 0:6661e1395e30 105 M_ODR_80 // 80 Hz (7)
altb 0:6661e1395e30 106 };
altb 0:6661e1395e30 107
altb 0:6661e1395e30 108 enum interrupt_select
altb 0:6661e1395e30 109 {
altb 0:6661e1395e30 110 XG_INT1 = INT1_CTRL,
altb 0:6661e1395e30 111 XG_INT2 = INT2_CTRL
altb 0:6661e1395e30 112 };
altb 0:6661e1395e30 113
altb 0:6661e1395e30 114 enum interrupt_generators
altb 0:6661e1395e30 115 {
altb 0:6661e1395e30 116 INT_DRDY_XL = (1<<0), // Accelerometer data ready (INT1 & INT2)
altb 0:6661e1395e30 117 INT_DRDY_G = (1<<1), // Gyroscope data ready (INT1 & INT2)
altb 0:6661e1395e30 118 INT1_BOOT = (1<<2), // Boot status (INT1)
altb 0:6661e1395e30 119 INT2_DRDY_TEMP = (1<<2),// Temp data ready (INT2)
altb 0:6661e1395e30 120 INT_FTH = (1<<3), // FIFO threshold interrupt (INT1 & INT2)
altb 0:6661e1395e30 121 INT_OVR = (1<<4), // Overrun interrupt (INT1 & INT2)
altb 0:6661e1395e30 122 INT_FSS5 = (1<<5), // FSS5 interrupt (INT1 & INT2)
altb 0:6661e1395e30 123 INT_IG_XL = (1<<6), // Accel interrupt generator (INT1)
altb 0:6661e1395e30 124 INT1_IG_G = (1<<7), // Gyro interrupt enable (INT1)
altb 0:6661e1395e30 125 INT2_INACT = (1<<7), // Inactivity interrupt output (INT2)
altb 0:6661e1395e30 126 };
altb 0:6661e1395e30 127
altb 0:6661e1395e30 128 enum accel_interrupt_generator
altb 0:6661e1395e30 129 {
altb 0:6661e1395e30 130 XLIE_XL = (1<<0),
altb 0:6661e1395e30 131 XHIE_XL = (1<<1),
altb 0:6661e1395e30 132 YLIE_XL = (1<<2),
altb 0:6661e1395e30 133 YHIE_XL = (1<<3),
altb 0:6661e1395e30 134 ZLIE_XL = (1<<4),
altb 0:6661e1395e30 135 ZHIE_XL = (1<<5),
altb 0:6661e1395e30 136 GEN_6D = (1<<6)
altb 0:6661e1395e30 137 };
altb 0:6661e1395e30 138
altb 0:6661e1395e30 139 enum gyro_interrupt_generator
altb 0:6661e1395e30 140 {
altb 0:6661e1395e30 141 XLIE_G = (1<<0),
altb 0:6661e1395e30 142 XHIE_G = (1<<1),
altb 0:6661e1395e30 143 YLIE_G = (1<<2),
altb 0:6661e1395e30 144 YHIE_G = (1<<3),
altb 0:6661e1395e30 145 ZLIE_G = (1<<4),
altb 0:6661e1395e30 146 ZHIE_G = (1<<5)
altb 0:6661e1395e30 147 };
altb 0:6661e1395e30 148
altb 0:6661e1395e30 149 enum mag_interrupt_generator
altb 0:6661e1395e30 150 {
altb 0:6661e1395e30 151 ZIEN = (1<<5),
altb 0:6661e1395e30 152 YIEN = (1<<6),
altb 0:6661e1395e30 153 XIEN = (1<<7)
altb 0:6661e1395e30 154 };
altb 0:6661e1395e30 155
altb 0:6661e1395e30 156 enum h_lactive
altb 0:6661e1395e30 157 {
altb 0:6661e1395e30 158 INT_ACTIVE_HIGH,
altb 0:6661e1395e30 159 INT_ACTIVE_LOW
altb 0:6661e1395e30 160 };
altb 0:6661e1395e30 161
altb 0:6661e1395e30 162 enum pp_od
altb 0:6661e1395e30 163 {
altb 0:6661e1395e30 164 INT_PUSH_PULL,
altb 0:6661e1395e30 165 INT_OPEN_DRAIN
altb 0:6661e1395e30 166 };
altb 0:6661e1395e30 167
altb 0:6661e1395e30 168 enum fifoMode_type
altb 0:6661e1395e30 169 {
altb 0:6661e1395e30 170 FIFO_OFF = 0,
altb 0:6661e1395e30 171 FIFO_THS = 1,
altb 0:6661e1395e30 172 FIFO_CONT_TRIGGER = 3,
altb 0:6661e1395e30 173 FIFO_OFF_TRIGGER = 4,
altb 0:6661e1395e30 174 FIFO_CONT = 5
altb 0:6661e1395e30 175 };
altb 0:6661e1395e30 176
altb 0:6661e1395e30 177 struct gyroSettings
altb 0:6661e1395e30 178 {
altb 0:6661e1395e30 179 // Gyroscope settings:
altb 0:6661e1395e30 180 uint8_t enabled;
altb 0:6661e1395e30 181 uint16_t scale; // Changed this to 16-bit
altb 0:6661e1395e30 182 uint8_t sampleRate;
altb 0:6661e1395e30 183 // New gyro stuff:
altb 0:6661e1395e30 184 uint8_t bandwidth;
altb 0:6661e1395e30 185 uint8_t lowPowerEnable;
altb 0:6661e1395e30 186 uint8_t HPFEnable;
altb 0:6661e1395e30 187 uint8_t HPFCutoff;
altb 0:6661e1395e30 188 uint8_t flipX;
altb 0:6661e1395e30 189 uint8_t flipY;
altb 0:6661e1395e30 190 uint8_t flipZ;
altb 0:6661e1395e30 191 uint8_t orientation;
altb 0:6661e1395e30 192 uint8_t enableX;
altb 0:6661e1395e30 193 uint8_t enableY;
altb 0:6661e1395e30 194 uint8_t enableZ;
altb 0:6661e1395e30 195 uint8_t latchInterrupt;
altb 0:6661e1395e30 196 };
altb 0:6661e1395e30 197
altb 0:6661e1395e30 198 struct deviceSettings
altb 0:6661e1395e30 199 {
altb 0:6661e1395e30 200 uint8_t commInterface; // Can be I2C, SPI 4-wire or SPI 3-wire
altb 0:6661e1395e30 201 uint8_t agAddress; // I2C address or SPI CS pin
altb 0:6661e1395e30 202 uint8_t mAddress; // I2C address or SPI CS pin
altb 0:6661e1395e30 203 };
altb 0:6661e1395e30 204
altb 0:6661e1395e30 205 struct accelSettings
altb 0:6661e1395e30 206 {
altb 0:6661e1395e30 207 // Accelerometer settings:
altb 0:6661e1395e30 208 uint8_t enabled;
altb 0:6661e1395e30 209 uint8_t scale;
altb 0:6661e1395e30 210 uint8_t sampleRate;
altb 0:6661e1395e30 211 // New accel stuff:
altb 0:6661e1395e30 212 uint8_t enableX;
altb 0:6661e1395e30 213 uint8_t enableY;
altb 0:6661e1395e30 214 uint8_t enableZ;
altb 0:6661e1395e30 215 int8_t bandwidth;
altb 0:6661e1395e30 216 uint8_t highResEnable;
altb 0:6661e1395e30 217 uint8_t highResBandwidth;
altb 0:6661e1395e30 218 };
altb 0:6661e1395e30 219
altb 0:6661e1395e30 220 struct magSettings
altb 0:6661e1395e30 221 {
altb 0:6661e1395e30 222 // Magnetometer settings:
altb 0:6661e1395e30 223 uint8_t enabled;
altb 0:6661e1395e30 224 uint8_t scale;
altb 0:6661e1395e30 225 uint8_t sampleRate;
altb 0:6661e1395e30 226 // New mag stuff:
altb 0:6661e1395e30 227 uint8_t tempCompensationEnable;
altb 0:6661e1395e30 228 uint8_t XYPerformance;
altb 0:6661e1395e30 229 uint8_t ZPerformance;
altb 0:6661e1395e30 230 uint8_t lowPowerEnable;
altb 0:6661e1395e30 231 uint8_t operatingMode;
altb 0:6661e1395e30 232 };
altb 0:6661e1395e30 233
altb 0:6661e1395e30 234 struct temperatureSettings
altb 0:6661e1395e30 235 {
altb 0:6661e1395e30 236 // Temperature settings
altb 0:6661e1395e30 237 uint8_t enabled;
altb 0:6661e1395e30 238 };
altb 0:6661e1395e30 239
altb 0:6661e1395e30 240 struct IMUSettings
altb 0:6661e1395e30 241 {
altb 0:6661e1395e30 242 deviceSettings device;
altb 0:6661e1395e30 243
altb 0:6661e1395e30 244 gyroSettings gyro;
altb 0:6661e1395e30 245 accelSettings accel;
altb 0:6661e1395e30 246 magSettings mag;
altb 0:6661e1395e30 247
altb 0:6661e1395e30 248 temperatureSettings temp;
altb 0:6661e1395e30 249 };
altb 0:6661e1395e30 250
altb 0:6661e1395e30 251 #endif