2010-12-28 19:41:00 -04:00
|
|
|
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
|
|
|
|
|
|
|
|
/// @file AP_IMU_Oilpan.h
|
|
|
|
/// @brief IMU driver for the APM oilpan
|
|
|
|
|
|
|
|
#ifndef AP_IMU_Oilpan_h
|
|
|
|
#define AP_IMU_Oilpan_h
|
|
|
|
|
|
|
|
#include "IMU.h"
|
|
|
|
|
|
|
|
#include <AP_Math.h>
|
|
|
|
#include <AP_ADC.h>
|
|
|
|
#include <inttypes.h>
|
|
|
|
|
|
|
|
class AP_IMU_Oilpan : public IMU
|
|
|
|
{
|
|
|
|
|
|
|
|
public:
|
|
|
|
AP_IMU_Oilpan(AP_ADC *adc, uint16_t address) :
|
|
|
|
_adc(adc),
|
|
|
|
_address(address)
|
|
|
|
{}
|
|
|
|
|
|
|
|
virtual void init(Start_style style = COLD_START);
|
|
|
|
virtual void init_accel(Start_style style = COLD_START);
|
|
|
|
virtual void init_gyro(Start_style style = COLD_START);
|
|
|
|
virtual bool update(void);
|
|
|
|
|
|
|
|
// XXX backwards compat hacks
|
|
|
|
void zero_accel(void);
|
|
|
|
|
|
|
|
void print_accel_offsets(void); ///< XXX debug hack
|
|
|
|
void print_gyro_offsets(void); ///< XXX debug hack
|
|
|
|
|
2011-01-16 16:42:11 -04:00
|
|
|
int ax() { return _adc_offset[3]; }
|
|
|
|
int ay() { return _adc_offset[4]; }
|
|
|
|
int az() { return _adc_offset[5]; }
|
|
|
|
|
2010-12-28 19:41:00 -04:00
|
|
|
void ax(const int v) { _adc_offset[3] = v; }
|
|
|
|
void ay(const int v) { _adc_offset[4] = v; }
|
|
|
|
void az(const int v) { _adc_offset[5] = v; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
float _gyro_temp_comp(int i, int temp) const;
|
|
|
|
void _save_gyro_cal(void);
|
|
|
|
void _save_accel_cal(void);
|
|
|
|
|
|
|
|
float _gyro_in(uint8_t channel, int temperature);
|
|
|
|
float _accel_in(uint8_t channel);
|
|
|
|
|
|
|
|
AP_ADC *_adc; // Analog to digital converter pointer
|
|
|
|
uint16_t _address; // EEPROM start address for saving/retrieving offsets
|
|
|
|
float _adc_offset[6]; // Array that store the Offset of the gyros and accelerometers
|
|
|
|
|
|
|
|
// XXX should not be implementing these here
|
|
|
|
float read_EE_float(int address);
|
|
|
|
void write_EE_float(float value, int address);
|
|
|
|
|
|
|
|
// constants
|
|
|
|
static const uint8_t _sensors[6];
|
|
|
|
static const int8_t _sensor_signs[6];
|
|
|
|
static const uint8_t _gyro_temp_ch = 3; // The ADC channel reading the gyro temperature
|
|
|
|
static const float _gyro_temp_curve[3][3];
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|