mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 08:15:30 +03:00
Replaced use of power function
This commit is contained in:
parent
0b6ff0de10
commit
9e2fd0e51c
3 changed files with 4 additions and 4 deletions
|
@ -20,6 +20,7 @@
|
||||||
#ifndef sq
|
#ifndef sq
|
||||||
#define sq(x) ((x)*(x))
|
#define sq(x) ((x)*(x))
|
||||||
#endif
|
#endif
|
||||||
|
#define power3(x) ((x)*(x)*(x))
|
||||||
|
|
||||||
// Undefine this for use libc sinf/cosf. Keep this defined to use fast sin/cos approximations
|
// Undefine this for use libc sinf/cosf. Keep this defined to use fast sin/cos approximations
|
||||||
#define FAST_MATH // order 9 approximation
|
#define FAST_MATH // order 9 approximation
|
||||||
|
|
|
@ -147,7 +147,6 @@ bool isCalibrating()
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RC_RATE_INCREMENTAL 14.54f
|
#define RC_RATE_INCREMENTAL 14.54f
|
||||||
#define RC_EXPO_POWER 3
|
|
||||||
|
|
||||||
void calculateSetpointRate(int axis, int16_t rc) {
|
void calculateSetpointRate(int axis, int16_t rc) {
|
||||||
float angleRate, rcRate, rcSuperfactor, rcCommandf;
|
float angleRate, rcRate, rcSuperfactor, rcCommandf;
|
||||||
|
@ -167,7 +166,7 @@ void calculateSetpointRate(int axis, int16_t rc) {
|
||||||
|
|
||||||
if (rcExpo) {
|
if (rcExpo) {
|
||||||
float expof = rcExpo / 100.0f;
|
float expof = rcExpo / 100.0f;
|
||||||
rcCommandf = rcCommandf * powerf(rcInput[axis], RC_EXPO_POWER) * expof + rcCommandf * (1-expof);
|
rcCommandf = rcCommandf * power3(rcInput[axis]) * expof + rcCommandf * (1-expof);
|
||||||
}
|
}
|
||||||
|
|
||||||
angleRate = 200.0f * rcRate * rcCommandf;
|
angleRate = 200.0f * rcRate * rcCommandf;
|
||||||
|
|
|
@ -263,10 +263,10 @@ void pidController(const pidProfile_t *pidProfile, uint16_t max_angle_inclinatio
|
||||||
dynC = c[axis];
|
dynC = c[axis];
|
||||||
if (setpointRate[axis] > 0) {
|
if (setpointRate[axis] > 0) {
|
||||||
if ((setpointRate[axis] - previousSetpoint[axis]) < previousSetpoint[axis])
|
if ((setpointRate[axis] - previousSetpoint[axis]) < previousSetpoint[axis])
|
||||||
dynC = dynC * powerf(rcInput[axis], 2) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]);
|
dynC = dynC * sq(rcInput[axis]) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]);
|
||||||
} else if (setpointRate[axis] < 0) {
|
} else if (setpointRate[axis] < 0) {
|
||||||
if ((setpointRate[axis] - previousSetpoint[axis]) > previousSetpoint[axis])
|
if ((setpointRate[axis] - previousSetpoint[axis]) > previousSetpoint[axis])
|
||||||
dynC = dynC * powerf(rcInput[axis], 2) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]);
|
dynC = dynC * sq(rcInput[axis]) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const float rD = dynC * setpointRate[axis] - PVRate; // cr - y
|
const float rD = dynC * setpointRate[axis] - PVRate; // cr - y
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue