1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 12:25:20 +03:00

Merge pull request #6617 from etracer65/gyro_lpf_updates

Disable DLPF EXPERIMENTAL mode for MPU60x0; remove experimental support from F3
This commit is contained in:
Michael Keller 2018-08-23 22:25:48 +12:00 committed by GitHub
commit c12981f732
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 43 additions and 23 deletions

View file

@ -39,12 +39,18 @@
#define MPU_I2C_INSTANCE I2C_DEVICE #define MPU_I2C_INSTANCE I2C_DEVICE
#endif #endif
#define GYRO_HARDWARE_LPF_NORMAL 0 typedef enum {
#define GYRO_HARDWARE_LPF_EXPERIMENTAL 1 GYRO_HARDWARE_LPF_NORMAL,
#define GYRO_HARDWARE_LPF_1KHZ_SAMPLE 2 GYRO_HARDWARE_LPF_1KHZ_SAMPLE,
#ifdef USE_GYRO_DLPF_EXPERIMENTAL
GYRO_HARDWARE_LPF_EXPERIMENTAL
#endif
} gyroHardwareLpf_e;
#define GYRO_32KHZ_HARDWARE_LPF_NORMAL 0 typedef enum {
#define GYRO_32KHZ_HARDWARE_LPF_EXPERIMENTAL 1 GYRO_32KHZ_HARDWARE_LPF_NORMAL,
GYRO_32KHZ_HARDWARE_LPF_EXPERIMENTAL
} gyro32khzHardwareLpf;
typedef enum { typedef enum {
GYRO_RATE_1_kHz, GYRO_RATE_1_kHz,

View file

@ -359,20 +359,27 @@ void mpuGyroInit(gyroDev_t *gyro)
uint8_t mpuGyroDLPF(gyroDev_t *gyro) uint8_t mpuGyroDLPF(gyroDev_t *gyro)
{ {
uint8_t ret; uint8_t ret = 0;
if (gyro->gyroRateKHz > GYRO_RATE_8_kHz) {
ret = 0; // If gyro is in 32KHz mode then the DLPF bits aren't used - set to 0 // If gyro is in 32KHz mode then the DLPF bits aren't used
} else { if (gyro->gyroRateKHz <= GYRO_RATE_8_kHz) {
switch (gyro->hardware_lpf) { switch (gyro->hardware_lpf) {
case GYRO_HARDWARE_LPF_NORMAL: #ifdef USE_GYRO_DLPF_EXPERIMENTAL
ret = 0;
break;
case GYRO_HARDWARE_LPF_EXPERIMENTAL: case GYRO_HARDWARE_LPF_EXPERIMENTAL:
ret = 7; // experimental mode not supported for MPU60x0 family
if ((gyro->gyroHardware != GYRO_MPU6050) && (gyro->gyroHardware != GYRO_MPU6000)) {
ret = 7;
} else {
ret = 0;
}
break; break;
#endif
case GYRO_HARDWARE_LPF_1KHZ_SAMPLE: case GYRO_HARDWARE_LPF_1KHZ_SAMPLE:
ret = 1; ret = 1;
break; break;
case GYRO_HARDWARE_LPF_NORMAL:
default: default:
ret = 0; ret = 0;
break; break;
@ -384,11 +391,15 @@ uint8_t mpuGyroDLPF(gyroDev_t *gyro)
uint8_t mpuGyroFCHOICE(gyroDev_t *gyro) uint8_t mpuGyroFCHOICE(gyroDev_t *gyro)
{ {
if (gyro->gyroRateKHz > GYRO_RATE_8_kHz) { if (gyro->gyroRateKHz > GYRO_RATE_8_kHz) {
#ifdef USE_GYRO_DLPF_EXPERIMENTAL
if (gyro->hardware_32khz_lpf == GYRO_32KHZ_HARDWARE_LPF_EXPERIMENTAL) { if (gyro->hardware_32khz_lpf == GYRO_32KHZ_HARDWARE_LPF_EXPERIMENTAL) {
return FCB_8800_32; return FCB_8800_32;
} else { } else {
return FCB_3600_32; return FCB_3600_32;
} }
#else
return FCB_3600_32;
#endif
} else { } else {
return FCB_DISABLED; // Not in 32KHz mode, set FCHOICE to select 8KHz sampling return FCB_DISABLED; // Not in 32KHz mode, set FCHOICE to select 8KHz sampling
} }

View file

@ -51,7 +51,7 @@ uint32_t gyroSetSampleRate(gyroDev_t *gyro, uint8_t lpf, uint8_t gyroSyncDenomin
{ {
float gyroSamplePeriod; float gyroSamplePeriod;
if (lpf == GYRO_HARDWARE_LPF_NORMAL || lpf == GYRO_HARDWARE_LPF_EXPERIMENTAL) { if (lpf != GYRO_HARDWARE_LPF_1KHZ_SAMPLE) {
if (gyro_use_32khz) { if (gyro_use_32khz) {
gyro->gyroRateKHz = GYRO_RATE_32_kHz; gyro->gyroRateKHz = GYRO_RATE_32_kHz;
gyroSamplePeriod = 31.25f; gyroSamplePeriod = 31.25f;

View file

@ -427,7 +427,7 @@ void validateAndFixGyroConfig(void)
gyroConfigMutable()->gyro_soft_notch_hz_2 = 0; gyroConfigMutable()->gyro_soft_notch_hz_2 = 0;
} }
if (gyroConfig()->gyro_hardware_lpf != GYRO_HARDWARE_LPF_NORMAL && gyroConfig()->gyro_hardware_lpf != GYRO_HARDWARE_LPF_EXPERIMENTAL) { if (gyroConfig()->gyro_hardware_lpf == GYRO_HARDWARE_LPF_1KHZ_SAMPLE) {
pidConfigMutable()->pid_process_denom = 1; // When gyro set to 1khz always set pid speed 1:1 to sampling speed pidConfigMutable()->pid_process_denom = 1; // When gyro set to 1khz always set pid speed 1:1 to sampling speed
gyroConfigMutable()->gyro_sync_denom = 1; gyroConfigMutable()->gyro_sync_denom = 1;
gyroConfigMutable()->gyro_use_32khz = false; gyroConfigMutable()->gyro_use_32khz = false;
@ -458,7 +458,7 @@ void validateAndFixGyroConfig(void)
samplingTime = 0.000125f; samplingTime = 0.000125f;
break; break;
} }
if (gyroConfig()->gyro_hardware_lpf != GYRO_HARDWARE_LPF_NORMAL && gyroConfig()->gyro_hardware_lpf != GYRO_HARDWARE_LPF_EXPERIMENTAL) { if (gyroConfig()->gyro_hardware_lpf == GYRO_HARDWARE_LPF_1KHZ_SAMPLE) {
switch (gyroMpuDetectionResult()->sensor) { switch (gyroMpuDetectionResult()->sensor) {
case ICM_20649_SPI: case ICM_20649_SPI:
samplingTime = 1.0f / 1100.0f; samplingTime = 1.0f / 1100.0f;

View file

@ -229,11 +229,13 @@ static const char * const lookupTableRxSpi[] = {
static const char * const lookupTableGyroHardwareLpf[] = { static const char * const lookupTableGyroHardwareLpf[] = {
"NORMAL", "NORMAL",
"EXPERIMENTAL", "1KHZ_SAMPLING",
"1KHZ_SAMPLING" #ifdef USE_GYRO_DLPF_EXPERIMENTAL
"EXPERIMENTAL"
#endif
}; };
#ifdef USE_32K_CAPABLE_GYRO #if defined(USE_32K_CAPABLE_GYRO) && defined(USE_GYRO_DLPF_EXPERIMENTAL)
static const char * const lookupTableGyro32khzHardwareLpf[] = { static const char * const lookupTableGyro32khzHardwareLpf[] = {
"NORMAL", "NORMAL",
"EXPERIMENTAL" "EXPERIMENTAL"
@ -416,7 +418,7 @@ const lookupTableEntry_t lookupTables[] = {
LOOKUP_TABLE_ENTRY(lookupTableRxSpi), LOOKUP_TABLE_ENTRY(lookupTableRxSpi),
#endif #endif
LOOKUP_TABLE_ENTRY(lookupTableGyroHardwareLpf), LOOKUP_TABLE_ENTRY(lookupTableGyroHardwareLpf),
#ifdef USE_32K_CAPABLE_GYRO #if defined(USE_32K_CAPABLE_GYRO) && defined(USE_GYRO_DLPF_EXPERIMENTAL)
LOOKUP_TABLE_ENTRY(lookupTableGyro32khzHardwareLpf), LOOKUP_TABLE_ENTRY(lookupTableGyro32khzHardwareLpf),
#endif #endif
LOOKUP_TABLE_ENTRY(lookupTableAccHardware), LOOKUP_TABLE_ENTRY(lookupTableAccHardware),
@ -491,7 +493,7 @@ const clivalue_t valueTable[] = {
// PG_GYRO_CONFIG // PG_GYRO_CONFIG
{ "align_gyro", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_ALIGNMENT }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_align) }, { "align_gyro", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_ALIGNMENT }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_align) },
{ "gyro_hardware_lpf", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GYRO_HARDWARE_LPF }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_hardware_lpf) }, { "gyro_hardware_lpf", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GYRO_HARDWARE_LPF }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_hardware_lpf) },
#ifdef USE_32K_CAPABLE_GYRO #if defined(USE_32K_CAPABLE_GYRO) && defined(USE_GYRO_DLPF_EXPERIMENTAL)
{ "gyro_32khz_hardware_lpf", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GYRO_32KHZ_HARDWARE_LPF }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_32khz_hardware_lpf) }, { "gyro_32khz_hardware_lpf", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_GYRO_32KHZ_HARDWARE_LPF }, PG_GYRO_CONFIG, offsetof(gyroConfig_t, gyro_32khz_hardware_lpf) },
#endif #endif
#if defined(USE_GYRO_SPI_ICM20649) #if defined(USE_GYRO_SPI_ICM20649)

View file

@ -52,7 +52,7 @@ typedef enum {
TABLE_RX_SPI, TABLE_RX_SPI,
#endif #endif
TABLE_GYRO_HARDWARE_LPF, TABLE_GYRO_HARDWARE_LPF,
#ifdef USE_32K_CAPABLE_GYRO #if defined(USE_32K_CAPABLE_GYRO) && defined(USE_GYRO_DLPF_EXPERIMENTAL)
TABLE_GYRO_32KHZ_HARDWARE_LPF, TABLE_GYRO_32KHZ_HARDWARE_LPF,
#endif #endif
TABLE_ACC_HARDWARE, TABLE_ACC_HARDWARE,

View file

@ -178,7 +178,7 @@ static void gyroInitLowpassFilterLpf(gyroSensor_t *gyroSensor, int slot, int typ
#define GYRO_OVERFLOW_TRIGGER_THRESHOLD 31980 // 97.5% full scale (1950dps for 2000dps gyro) #define GYRO_OVERFLOW_TRIGGER_THRESHOLD 31980 // 97.5% full scale (1950dps for 2000dps gyro)
#define GYRO_OVERFLOW_RESET_THRESHOLD 30340 // 92.5% full scale (1850dps for 2000dps gyro) #define GYRO_OVERFLOW_RESET_THRESHOLD 30340 // 92.5% full scale (1850dps for 2000dps gyro)
PG_REGISTER_WITH_RESET_TEMPLATE(gyroConfig_t, gyroConfig, PG_GYRO_CONFIG, 4); PG_REGISTER_WITH_RESET_TEMPLATE(gyroConfig_t, gyroConfig, PG_GYRO_CONFIG, 5);
#ifndef GYRO_CONFIG_USE_GYRO_DEFAULT #ifndef GYRO_CONFIG_USE_GYRO_DEFAULT
#define GYRO_CONFIG_USE_GYRO_DEFAULT GYRO_CONFIG_USE_GYRO_1 #define GYRO_CONFIG_USE_GYRO_DEFAULT GYRO_CONFIG_USE_GYRO_1

View file

@ -207,6 +207,7 @@
#define USE_GPS_NMEA #define USE_GPS_NMEA
#define USE_GPS_UBLOX #define USE_GPS_UBLOX
#define USE_GPS_RESCUE #define USE_GPS_RESCUE
#define USE_GYRO_DLPF_EXPERIMENTAL
#define USE_OSD #define USE_OSD
#define USE_OSD_OVER_MSP_DISPLAYPORT #define USE_OSD_OVER_MSP_DISPLAYPORT
#define USE_OSD_ADJUSTMENTS #define USE_OSD_ADJUSTMENTS