Simulation of flight pitch control with servo sweep.

Dependencies:   mbed Servo mbed-rtos Motor

Committer:
alevale32
Date:
Thu Dec 13 22:02:40 2018 +0000
Revision:
5:8db82a61e052
RTOS pitch control simulation with servo sweep

Who changed what in which revision?

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