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

Moved accelerometerTrims into accelerometerConfig()

This commit is contained in:
Martin Budden 2016-12-07 11:48:29 +00:00
parent a562b8fa12
commit ee8a1676c4
11 changed files with 21 additions and 32 deletions

View file

@ -128,8 +128,6 @@ typedef struct master_s {
imuConfig_t imuConfig; imuConfig_t imuConfig;
rollAndPitchTrims_t accelerometerTrims; // accelerometer trim
pidConfig_t pidConfig; pidConfig_t pidConfig;
uint8_t debug_mode; // Processing denominator for PID controller vs gyro sampling rate uint8_t debug_mode; // Processing denominator for PID controller vs gyro sampling rate

View file

@ -746,7 +746,7 @@ void createDefaultConfig(master_t *config)
resetProfile(&config->profile[0]); resetProfile(&config->profile[0]);
resetRollAndPitchTrims(&config->accelerometerTrims); resetRollAndPitchTrims(&config->accelerometerConfig.accelerometerTrims);
config->compassConfig.mag_declination = 0; config->compassConfig.mag_declination = 0;
config->accelerometerConfig.acc_lpf_hz = 10.0f; config->accelerometerConfig.acc_lpf_hz = 10.0f;

View file

@ -908,8 +908,8 @@ static bool mspFcProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProcessFn
// Additional commands that are not compatible with MultiWii // Additional commands that are not compatible with MultiWii
case MSP_ACC_TRIM: case MSP_ACC_TRIM:
sbufWriteU16(dst, masterConfig.accelerometerTrims.values.pitch); sbufWriteU16(dst, accelerometerConfig()->accelerometerTrims.values.pitch);
sbufWriteU16(dst, masterConfig.accelerometerTrims.values.roll); sbufWriteU16(dst, accelerometerConfig()->accelerometerTrims.values.roll);
break; break;
case MSP_UID: case MSP_UID:
@ -1289,8 +1289,8 @@ static mspResult_e mspFcProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
#endif #endif
break; break;
case MSP_SET_ACC_TRIM: case MSP_SET_ACC_TRIM:
masterConfig.accelerometerTrims.values.pitch = sbufReadU16(src); accelerometerConfig()->accelerometerTrims.values.pitch = sbufReadU16(src);
masterConfig.accelerometerTrims.values.roll = sbufReadU16(src); accelerometerConfig()->accelerometerTrims.values.roll = sbufReadU16(src);
break; break;
case MSP_SET_ARMING_CONFIG: case MSP_SET_ARMING_CONFIG:
armingConfig()->auto_disarm_delay = sbufReadU8(src); armingConfig()->auto_disarm_delay = sbufReadU8(src);

View file

@ -91,7 +91,7 @@ static void taskUpdateAccelerometer(timeUs_t currentTimeUs)
{ {
UNUSED(currentTimeUs); UNUSED(currentTimeUs);
imuUpdateAccelerometer(&masterConfig.accelerometerTrims); accUpdate(&accelerometerConfig()->accelerometerTrims);
} }
static void taskHandleSerial(timeUs_t currentTimeUs) static void taskHandleSerial(timeUs_t currentTimeUs)

View file

@ -103,8 +103,8 @@ float rcInput[3];
void applyAndSaveAccelerometerTrimsDelta(rollAndPitchTrims_t *rollAndPitchTrimsDelta) void applyAndSaveAccelerometerTrimsDelta(rollAndPitchTrims_t *rollAndPitchTrimsDelta)
{ {
masterConfig.accelerometerTrims.values.roll += rollAndPitchTrimsDelta->values.roll; accelerometerConfig()->accelerometerTrims.values.roll += rollAndPitchTrimsDelta->values.roll;
masterConfig.accelerometerTrims.values.pitch += rollAndPitchTrimsDelta->values.pitch; accelerometerConfig()->accelerometerTrims.values.pitch += rollAndPitchTrimsDelta->values.pitch;
saveConfigAndNotify(); saveConfigAndNotify();
} }
@ -679,7 +679,7 @@ void subTaskPidController(void)
pidController( pidController(
&currentProfile->pidProfile, &currentProfile->pidProfile,
pidConfig()->max_angle_inclination, pidConfig()->max_angle_inclination,
&masterConfig.accelerometerTrims, &accelerometerConfig()->accelerometerTrims,
rxConfig()->midrc rxConfig()->midrc
); );
if (debugMode == DEBUG_PIDLOOP || debugMode == DEBUG_SCHEDULER) {debug[1] = micros() - startTime;} if (debugMode == DEBUG_PIDLOOP || debugMode == DEBUG_SCHEDULER) {debug[1] = micros() - startTime;}

View file

@ -65,7 +65,6 @@ float fc_acc;
float smallAngleCosZ = 0; float smallAngleCosZ = 0;
float magneticDeclination = 0.0f; // calculated at startup from config float magneticDeclination = 0.0f; // calculated at startup from config
static bool isAccelUpdatedAtLeastOnce = false;
static imuRuntimeConfig_t imuRuntimeConfig; static imuRuntimeConfig_t imuRuntimeConfig;
static pidProfile_t *pidProfile; static pidProfile_t *pidProfile;
@ -406,17 +405,9 @@ static void imuCalculateEstimatedAttitude(timeUs_t currentTimeUs)
imuCalculateAcceleration(deltaT); // rotate acc vector into earth frame imuCalculateAcceleration(deltaT); // rotate acc vector into earth frame
} }
void imuUpdateAccelerometer(rollAndPitchTrims_t *accelerometerTrims)
{
if (sensors(SENSOR_ACC)) {
updateAccelerationReadings(accelerometerTrims);
isAccelUpdatedAtLeastOnce = true;
}
}
void imuUpdateAttitude(timeUs_t currentTimeUs) void imuUpdateAttitude(timeUs_t currentTimeUs)
{ {
if (sensors(SENSOR_ACC) && isAccelUpdatedAtLeastOnce) { if (sensors(SENSOR_ACC) && acc.isAccelUpdatedAtLeastOnce) {
imuCalculateEstimatedAttitude(currentTimeUs); imuCalculateEstimatedAttitude(currentTimeUs);
} else { } else {
acc.accSmooth[X] = 0; acc.accSmooth[X] = 0;

View file

@ -98,8 +98,6 @@ void imuConfigure(
float getCosTiltAngle(void); float getCosTiltAngle(void);
void calculateEstimatedAltitude(timeUs_t currentTimeUs); void calculateEstimatedAltitude(timeUs_t currentTimeUs);
union rollAndPitchTrims_u;
void imuUpdateAccelerometer(union rollAndPitchTrims_u *accelerometerTrims);
void imuUpdateAttitude(timeUs_t currentTimeUs); void imuUpdateAttitude(timeUs_t currentTimeUs);
float calculateThrottleAngleScale(uint16_t throttle_correction_angle); float calculateThrottleAngleScale(uint16_t throttle_correction_angle);
int16_t calculateThrottleAngleCorrection(uint8_t throttle_correction_value); int16_t calculateThrottleAngleCorrection(uint8_t throttle_correction_value);
@ -109,5 +107,4 @@ union u_fp_vector;
int16_t imuCalculateHeading(union u_fp_vector *vec); int16_t imuCalculateHeading(union u_fp_vector *vec);
void imuResetAccelerationSum(void); void imuResetAccelerationSum(void);
void imuUpdateAcc(union rollAndPitchTrims_u *accelerometerTrims);
void imuInit(void); void imuInit(void);

View file

@ -883,8 +883,8 @@ const clivalue_t valueTable[] = {
{ "accxy_deadband", VAR_UINT8 | MASTER_VALUE, &imuConfig()->accDeadband.xy, .config.minmax = { 0, 100 } }, { "accxy_deadband", VAR_UINT8 | MASTER_VALUE, &imuConfig()->accDeadband.xy, .config.minmax = { 0, 100 } },
{ "accz_deadband", VAR_UINT8 | MASTER_VALUE, &imuConfig()->accDeadband.z, .config.minmax = { 0, 100 } }, { "accz_deadband", VAR_UINT8 | MASTER_VALUE, &imuConfig()->accDeadband.z, .config.minmax = { 0, 100 } },
{ "acc_unarmedcal", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &imuConfig()->acc_unarmedcal, .config.lookup = { TABLE_OFF_ON } }, { "acc_unarmedcal", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &imuConfig()->acc_unarmedcal, .config.lookup = { TABLE_OFF_ON } },
{ "acc_trim_pitch", VAR_INT16 | MASTER_VALUE, &masterConfig.accelerometerTrims.values.pitch, .config.minmax = { -300, 300 } }, { "acc_trim_pitch", VAR_INT16 | MASTER_VALUE, &accelerometerConfig()->accelerometerTrims.values.pitch, .config.minmax = { -300, 300 } },
{ "acc_trim_roll", VAR_INT16 | MASTER_VALUE, &masterConfig.accelerometerTrims.values.roll, .config.minmax = { -300, 300 } }, { "acc_trim_roll", VAR_INT16 | MASTER_VALUE, &accelerometerConfig()->accelerometerTrims.values.roll, .config.minmax = { -300, 300 } },
#ifdef BARO #ifdef BARO
{ "baro_tab_size", VAR_UINT8 | MASTER_VALUE, &barometerConfig()->baro_sample_count, .config.minmax = { 0, BARO_SAMPLE_COUNT_MAX } }, { "baro_tab_size", VAR_UINT8 | MASTER_VALUE, &barometerConfig()->baro_sample_count, .config.minmax = { 0, BARO_SAMPLE_COUNT_MAX } },

View file

@ -377,11 +377,12 @@ static void applyAccelerationTrims(const flightDynamicsTrims_t *accelerationTrim
acc.accSmooth[Z] -= accelerationTrims->raw[Z]; acc.accSmooth[Z] -= accelerationTrims->raw[Z];
} }
void updateAccelerationReadings(rollAndPitchTrims_t *rollAndPitchTrims) void accUpdate(rollAndPitchTrims_t *rollAndPitchTrims)
{ {
if (!acc.dev.read(&acc.dev)) { if (!acc.dev.read(&acc.dev)) {
return; return;
} }
acc.isAccelUpdatedAtLeastOnce = true;
for (int axis = 0; axis < XYZ_AXIS_COUNT; axis++) { for (int axis = 0; axis < XYZ_AXIS_COUNT; axis++) {
DEBUG_SET(DEBUG_ACCELEROMETER, axis, acc.dev.ADCRaw[axis]); DEBUG_SET(DEBUG_ACCELEROMETER, axis, acc.dev.ADCRaw[axis]);

View file

@ -39,6 +39,7 @@ typedef struct acc_s {
accDev_t dev; accDev_t dev;
uint32_t accSamplingInterval; uint32_t accSamplingInterval;
int32_t accSmooth[XYZ_AXIS_COUNT]; int32_t accSmooth[XYZ_AXIS_COUNT];
bool isAccelUpdatedAtLeastOnce;
} acc_t; } acc_t;
extern acc_t acc; extern acc_t acc;
@ -59,13 +60,14 @@ typedef struct accelerometerConfig_s {
sensor_align_e acc_align; // acc alignment sensor_align_e acc_align; // acc alignment
uint8_t acc_hardware; // Which acc hardware to use on boards with more than one device uint8_t acc_hardware; // Which acc hardware to use on boards with more than one device
flightDynamicsTrims_t accZero; flightDynamicsTrims_t accZero;
rollAndPitchTrims_t accelerometerTrims;
} accelerometerConfig_t; } accelerometerConfig_t;
bool accInit(const accelerometerConfig_t *accelerometerConfig, uint32_t gyroTargetLooptime); bool accInit(const accelerometerConfig_t *accelerometerConfig, uint32_t gyroTargetLooptime);
bool isAccelerationCalibrationComplete(void); bool isAccelerationCalibrationComplete(void);
void accSetCalibrationCycles(uint16_t calibrationCyclesRequired); void accSetCalibrationCycles(uint16_t calibrationCyclesRequired);
void resetRollAndPitchTrims(rollAndPitchTrims_t *rollAndPitchTrims); void resetRollAndPitchTrims(rollAndPitchTrims_t *rollAndPitchTrims);
void updateAccelerationReadings(rollAndPitchTrims_t *rollAndPitchTrims); void accUpdate(rollAndPitchTrims_t *rollAndPitchTrims);
union flightDynamicsTrims_u; union flightDynamicsTrims_u;
void setAccelerationTrims(union flightDynamicsTrims_u *accelerationTrimsToUse); void setAccelerationTrims(union flightDynamicsTrims_u *accelerationTrimsToUse);
void setAccelerationFilter(uint16_t initialAccLpfCutHz); void setAccelerationFilter(uint16_t initialAccLpfCutHz);

View file

@ -837,8 +837,8 @@ static bool bstSlaveProcessFeedbackCommand(uint8_t bstRequest)
// Additional commands that are not compatible with MultiWii // Additional commands that are not compatible with MultiWii
case BST_ACC_TRIM: case BST_ACC_TRIM:
bstWrite16(masterConfig.accelerometerTrims.values.pitch); bstWrite16(accelerometerConfig()->accelerometerTrims.values.pitch);
bstWrite16(masterConfig.accelerometerTrims.values.roll); bstWrite16(accelerometerConfig()->accelerometerTrims.values.roll);
break; break;
case BST_UID: case BST_UID:
@ -1033,8 +1033,8 @@ static bool bstSlaveProcessWriteCommand(uint8_t bstWriteCommand)
} }
} }
case BST_SET_ACC_TRIM: case BST_SET_ACC_TRIM:
masterConfig.accelerometerTrims.values.pitch = bstRead16(); accelerometerConfig()->accelerometerTrims.values.pitch = bstRead16();
masterConfig.accelerometerTrims.values.roll = bstRead16(); accelerometerConfig()->accelerometerTrims.values.roll = bstRead16();
break; break;
case BST_SET_ARMING_CONFIG: case BST_SET_ARMING_CONFIG:
armingConfig()->auto_disarm_delay = bstRead8(); armingConfig()->auto_disarm_delay = bstRead8();