1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 20:35:33 +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
#endif
#define GYRO_HARDWARE_LPF_NORMAL 0
#define GYRO_HARDWARE_LPF_EXPERIMENTAL 1
#define GYRO_HARDWARE_LPF_1KHZ_SAMPLE 2
typedef enum {
GYRO_HARDWARE_LPF_NORMAL,
GYRO_HARDWARE_LPF_1KHZ_SAMPLE,
#ifdef USE_GYRO_DLPF_EXPERIMENTAL
GYRO_HARDWARE_LPF_EXPERIMENTAL
#endif
} gyroHardwareLpf_e;
#define GYRO_32KHZ_HARDWARE_LPF_NORMAL 0
#define GYRO_32KHZ_HARDWARE_LPF_EXPERIMENTAL 1
typedef enum {
GYRO_32KHZ_HARDWARE_LPF_NORMAL,
GYRO_32KHZ_HARDWARE_LPF_EXPERIMENTAL
} gyro32khzHardwareLpf;
typedef enum {
GYRO_RATE_1_kHz,

View file

@ -359,20 +359,27 @@ void mpuGyroInit(gyroDev_t *gyro)
uint8_t mpuGyroDLPF(gyroDev_t *gyro)
{
uint8_t ret;
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
} else {
uint8_t ret = 0;
// If gyro is in 32KHz mode then the DLPF bits aren't used
if (gyro->gyroRateKHz <= GYRO_RATE_8_kHz) {
switch (gyro->hardware_lpf) {
case GYRO_HARDWARE_LPF_NORMAL:
ret = 0;
break;
#ifdef USE_GYRO_DLPF_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;
#endif
case GYRO_HARDWARE_LPF_1KHZ_SAMPLE:
ret = 1;
break;
case GYRO_HARDWARE_LPF_NORMAL:
default:
ret = 0;
break;
@ -384,11 +391,15 @@ uint8_t mpuGyroDLPF(gyroDev_t *gyro)
uint8_t mpuGyroFCHOICE(gyroDev_t *gyro)
{
if (gyro->gyroRateKHz > GYRO_RATE_8_kHz) {
#ifdef USE_GYRO_DLPF_EXPERIMENTAL
if (gyro->hardware_32khz_lpf == GYRO_32KHZ_HARDWARE_LPF_EXPERIMENTAL) {
return FCB_8800_32;
} else {
return FCB_3600_32;
}
#else
return FCB_3600_32;
#endif
} else {
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;
if (lpf == GYRO_HARDWARE_LPF_NORMAL || lpf == GYRO_HARDWARE_LPF_EXPERIMENTAL) {
if (lpf != GYRO_HARDWARE_LPF_1KHZ_SAMPLE) {
if (gyro_use_32khz) {
gyro->gyroRateKHz = GYRO_RATE_32_kHz;
gyroSamplePeriod = 31.25f;

View file

@ -427,7 +427,7 @@ void validateAndFixGyroConfig(void)
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
gyroConfigMutable()->gyro_sync_denom = 1;
gyroConfigMutable()->gyro_use_32khz = false;
@ -458,7 +458,7 @@ void validateAndFixGyroConfig(void)
samplingTime = 0.000125f;
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) {
case ICM_20649_SPI:
samplingTime = 1.0f / 1100.0f;

View file

@ -229,11 +229,13 @@ static const char * const lookupTableRxSpi[] = {
static const char * const lookupTableGyroHardwareLpf[] = {
"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[] = {
"NORMAL",
"EXPERIMENTAL"
@ -416,7 +418,7 @@ const lookupTableEntry_t lookupTables[] = {
LOOKUP_TABLE_ENTRY(lookupTableRxSpi),
#endif
LOOKUP_TABLE_ENTRY(lookupTableGyroHardwareLpf),
#ifdef USE_32K_CAPABLE_GYRO
#if defined(USE_32K_CAPABLE_GYRO) && defined(USE_GYRO_DLPF_EXPERIMENTAL)
LOOKUP_TABLE_ENTRY(lookupTableGyro32khzHardwareLpf),
#endif
LOOKUP_TABLE_ENTRY(lookupTableAccHardware),
@ -491,7 +493,7 @@ const clivalue_t valueTable[] = {
// PG_GYRO_CONFIG
{ "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) },
#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) },
#endif
#if defined(USE_GYRO_SPI_ICM20649)

View file

@ -52,7 +52,7 @@ typedef enum {
TABLE_RX_SPI,
#endif
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,
#endif
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_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
#define GYRO_CONFIG_USE_GYRO_DEFAULT GYRO_CONFIG_USE_GYRO_1

View file

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