Nicolas Borla
/
BBR_1Ebene
BBR 1 Ebene
IMU.h
- Committer:
- borlanic
- Date:
- 2018-05-14
- Revision:
- 0:fbdae7e6d805
File content as of revision 0:fbdae7e6d805:
/* * IMU.h * Copyright (c) 2018, ZHAW * All rights reserved. */ #ifndef IMU_H_ #define IMU_H_ #include <cstdlib> #include <stdint.h> #include "mbed.h" #include "LowpassFilter.h" #include "Signal.h" #include "SerialCom.h" /** * This is a device driver class for the ST LSM9DS1 inertial measurement unit. */ class IMU { public: IMU(SPI& spi, DigitalOut& csAG, DigitalOut& csM); virtual ~IMU(); float readGyroX(); float readGyroY(); float readGyroZ(); float readAccelerationX(); float readAccelerationY(); float readAccelerationZ(); float readMagnetometerX(); float readMagnetometerY(); float readMagnetometerZ(); // Nick ================= float getGammaX(); float getGammaY(); float getGammaZ(); float getDGammaX(); float getDGammaY(); float getDGammaZ(); private: static const uint8_t WHO_AM_I = 0x0F; static const uint8_t CTRL_REG1_G = 0x10; static const uint8_t CTRL_REG2_G = 0x11; static const uint8_t CTRL_REG3_G = 0x12; static const uint8_t OUT_X_L_G = 0x18; static const uint8_t OUT_X_H_G = 0x19; static const uint8_t OUT_Y_L_G = 0x1A; static const uint8_t OUT_Y_H_G = 0x1B; static const uint8_t OUT_Z_L_G = 0x1C; static const uint8_t OUT_Z_H_G = 0x1D; static const uint8_t CTRL_REG4 = 0x1E; static const uint8_t CTRL_REG5_XL = 0x1F; static const uint8_t CTRL_REG6_XL = 0x20; static const uint8_t CTRL_REG7_XL = 0x21; static const uint8_t CTRL_REG8 = 0x22; static const uint8_t CTRL_REG9 = 0x23; static const uint8_t CTRL_REG10 = 0x24; static const uint8_t OUT_X_L_XL = 0x28; static const uint8_t OUT_X_H_XL = 0x29; static const uint8_t OUT_Y_L_XL = 0x2A; static const uint8_t OUT_Y_H_XL = 0x2B; static const uint8_t OUT_Z_L_XL = 0x2C; static const uint8_t OUT_Z_H_XL = 0x2D; static const uint8_t WHO_AM_I_M = 0x0F; static const uint8_t CTRL_REG1_M = 0x20; static const uint8_t CTRL_REG2_M = 0x21; static const uint8_t CTRL_REG3_M = 0x22; static const uint8_t CTRL_REG4_M = 0x23; static const uint8_t CTRL_REG5_M = 0x24; static const uint8_t OUT_X_L_M = 0x28; static const uint8_t OUT_X_H_M = 0x29; static const uint8_t OUT_Y_L_M = 0x2A; static const uint8_t OUT_Y_H_M = 0x2B; static const uint8_t OUT_Z_L_M = 0x2C; static const uint8_t OUT_Z_H_M = 0x2D; static const float M_PI; static const float SAMPLE_TIME; static const float STD_ALPHA; static const float STD_OMEGA; static const uint32_t STACK_SIZE = 4096; // stack size of thread, given in [bytes] float gammaX; // angle in X from kalman-Filter float gammaY; // angle in Y from kalman-Filter float gammaZ; // angle in Z from kalman-Filter float d_gammaX; // angular velocity in X from kalman-Filter float d_gammaY; // angular velocity in Y from kalman-Filter float d_gammaZ; // angular velocity in Z from kalman-Filter LowpassFilter gammaXFilter; LowpassFilter gammaYFilter; LowpassFilter d_gammaXFilter; LowpassFilter d_gammaYFilter; Signal signal; Thread thread; Ticker ticker; Mutex mutex; // mutex to lock critical sections void sendSignal(); void kalman(); SPI& spi; DigitalOut& csAG; DigitalOut& csM; void writeRegister(DigitalOut& cs, uint8_t address, uint8_t value); uint8_t readRegister(DigitalOut& cs, uint8_t address); }; #endif /* IMU_H_ */