mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-20 14:55:21 +03:00
Merge pull request #4702 from martinbudden/bfa_3d_iterm
Reset ITerm on motor reversal
This commit is contained in:
commit
dd3a40f036
5 changed files with 20 additions and 4 deletions
|
@ -421,7 +421,7 @@ void processRx(timeUs_t currentTimeUs)
|
||||||
/* In airmode Iterm should be prevented to grow when Low thottle and Roll + Pitch Centered.
|
/* In airmode Iterm should be prevented to grow when Low thottle and Roll + Pitch Centered.
|
||||||
This is needed to prevent Iterm winding on the ground, but keep full stabilisation on 0 throttle while in air */
|
This is needed to prevent Iterm winding on the ground, but keep full stabilisation on 0 throttle while in air */
|
||||||
if (throttleStatus == THROTTLE_LOW && !airmodeIsActivated) {
|
if (throttleStatus == THROTTLE_LOW && !airmodeIsActivated) {
|
||||||
pidResetErrorGyroState();
|
pidResetITerm();
|
||||||
if (currentPidProfile->pidAtMinThrottle)
|
if (currentPidProfile->pidAtMinThrottle)
|
||||||
pidStabilisationState(PID_STABILISATION_ON);
|
pidStabilisationState(PID_STABILISATION_ON);
|
||||||
else
|
else
|
||||||
|
|
|
@ -541,6 +541,10 @@ static void calculateThrottleAndCurrentMotorEndpoints(void)
|
||||||
motorOutputMin = deadbandMotor3dLow;
|
motorOutputMin = deadbandMotor3dLow;
|
||||||
motorOutputRange = motorOutputLow - deadbandMotor3dLow;
|
motorOutputRange = motorOutputLow - deadbandMotor3dLow;
|
||||||
}
|
}
|
||||||
|
if (motorOutputMixSign != -1) {
|
||||||
|
// reset ITerm on motor reversal
|
||||||
|
pidResetITerm();
|
||||||
|
}
|
||||||
motorOutputMixSign = -1;
|
motorOutputMixSign = -1;
|
||||||
rcThrottlePrevious = rcCommand[THROTTLE];
|
rcThrottlePrevious = rcCommand[THROTTLE];
|
||||||
throttle = rcCommand3dDeadBandLow - rcCommand[THROTTLE];
|
throttle = rcCommand3dDeadBandLow - rcCommand[THROTTLE];
|
||||||
|
@ -551,6 +555,10 @@ static void calculateThrottleAndCurrentMotorEndpoints(void)
|
||||||
motorRangeMax = motorOutputHigh;
|
motorRangeMax = motorOutputHigh;
|
||||||
motorOutputMin = deadbandMotor3dHigh;
|
motorOutputMin = deadbandMotor3dHigh;
|
||||||
motorOutputRange = motorOutputHigh - deadbandMotor3dHigh;
|
motorOutputRange = motorOutputHigh - deadbandMotor3dHigh;
|
||||||
|
if (motorOutputMixSign != 1) {
|
||||||
|
// reset ITerm on motor reversal
|
||||||
|
pidResetITerm();
|
||||||
|
}
|
||||||
motorOutputMixSign = 1;
|
motorOutputMixSign = 1;
|
||||||
rcThrottlePrevious = rcCommand[THROTTLE];
|
rcThrottlePrevious = rcCommand[THROTTLE];
|
||||||
throttle = rcCommand[THROTTLE] - rcCommand3dDeadBandHigh;
|
throttle = rcCommand[THROTTLE] - rcCommand3dDeadBandHigh;
|
||||||
|
@ -568,6 +576,10 @@ static void calculateThrottleAndCurrentMotorEndpoints(void)
|
||||||
motorOutputMin = deadbandMotor3dLow;
|
motorOutputMin = deadbandMotor3dLow;
|
||||||
motorOutputRange = motorOutputLow - deadbandMotor3dLow;
|
motorOutputRange = motorOutputLow - deadbandMotor3dLow;
|
||||||
}
|
}
|
||||||
|
if (motorOutputMixSign != -1) {
|
||||||
|
// reset ITerm on motor reversal
|
||||||
|
pidResetITerm();
|
||||||
|
}
|
||||||
motorOutputMixSign = -1;
|
motorOutputMixSign = -1;
|
||||||
throttle = 0;
|
throttle = 0;
|
||||||
currentThrottleInputRange = rcCommandThrottleRange3dLow;
|
currentThrottleInputRange = rcCommandThrottleRange3dLow;
|
||||||
|
@ -577,6 +589,10 @@ static void calculateThrottleAndCurrentMotorEndpoints(void)
|
||||||
motorRangeMax = motorOutputHigh;
|
motorRangeMax = motorOutputHigh;
|
||||||
motorOutputMin = deadbandMotor3dHigh;
|
motorOutputMin = deadbandMotor3dHigh;
|
||||||
motorOutputRange = motorOutputHigh - deadbandMotor3dHigh;
|
motorOutputRange = motorOutputHigh - deadbandMotor3dHigh;
|
||||||
|
if (motorOutputMixSign != 1) {
|
||||||
|
// reset ITerm on motor reversal
|
||||||
|
pidResetITerm();
|
||||||
|
}
|
||||||
motorOutputMixSign = 1;
|
motorOutputMixSign = 1;
|
||||||
throttle = 0;
|
throttle = 0;
|
||||||
currentThrottleInputRange = rcCommandThrottleRange3dHigh;
|
currentThrottleInputRange = rcCommandThrottleRange3dHigh;
|
||||||
|
|
|
@ -136,7 +136,7 @@ static void pidSetTargetLooptime(uint32_t pidLooptime)
|
||||||
dT = (float)targetPidLooptime * 0.000001f;
|
dT = (float)targetPidLooptime * 0.000001f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pidResetErrorGyroState(void)
|
void pidResetITerm(void)
|
||||||
{
|
{
|
||||||
for (int axis = 0; axis < 3; axis++) {
|
for (int axis = 0; axis < 3; axis++) {
|
||||||
axisPID_I[axis] = 0.0f;
|
axisPID_I[axis] = 0.0f;
|
||||||
|
|
|
@ -127,7 +127,7 @@ extern uint32_t targetPidLooptime;
|
||||||
// PIDweight is a scale factor for PIDs which is derived from the throttle and TPA setting, and 100 = 100% scale means no PID reduction
|
// PIDweight is a scale factor for PIDs which is derived from the throttle and TPA setting, and 100 = 100% scale means no PID reduction
|
||||||
extern uint8_t PIDweight[3];
|
extern uint8_t PIDweight[3];
|
||||||
|
|
||||||
void pidResetErrorGyroState(void);
|
void pidResetITerm(void);
|
||||||
void pidStabilisationState(pidStabilisationState_e pidControllerState);
|
void pidStabilisationState(pidStabilisationState_e pidControllerState);
|
||||||
void pidSetItermAccelerator(float newItermAccelerator);
|
void pidSetItermAccelerator(float newItermAccelerator);
|
||||||
void pidInitFilters(const pidProfile_t *pidProfile);
|
void pidInitFilters(const pidProfile_t *pidProfile);
|
||||||
|
|
|
@ -642,7 +642,7 @@ extern "C" {
|
||||||
void failsafeStartMonitoring(void) {}
|
void failsafeStartMonitoring(void) {}
|
||||||
void failsafeUpdateState(void) {}
|
void failsafeUpdateState(void) {}
|
||||||
bool failsafeIsActive(void) { return false; }
|
bool failsafeIsActive(void) { return false; }
|
||||||
void pidResetErrorGyroState(void) {}
|
void pidResetITerm(void) {}
|
||||||
void updateAdjustmentStates(void) {}
|
void updateAdjustmentStates(void) {}
|
||||||
void processRcAdjustments(controlRateConfig_t *) {}
|
void processRcAdjustments(controlRateConfig_t *) {}
|
||||||
void updateGpsWaypointsAndMode(void) {}
|
void updateGpsWaypointsAndMode(void) {}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue