mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-26 01:35:41 +03:00
4.4 work and minor bug fixes for afterburner
This commit is contained in:
parent
5b42e11157
commit
1ed1db4acc
9 changed files with 439 additions and 22 deletions
26
build.sh
Normal file
26
build.sh
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check if the input file was provided
|
||||||
|
if [ -z dos2unix "$1" ]; then
|
||||||
|
echo "Usage: $0 <input-file>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert line endings of the script file to LF
|
||||||
|
dos2unix "$0" >/dev/null 2>&1
|
||||||
|
|
||||||
|
# Loop through each line in the input file
|
||||||
|
while read -r line; do
|
||||||
|
# Extract the device name from the current line
|
||||||
|
device=$(echo "$line" | cut -d',' -f1)
|
||||||
|
|
||||||
|
# Skip the header row
|
||||||
|
if [ "$device" == "DEVICE_NAME" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run the make command for the current device
|
||||||
|
echo "Building firmware for $device"
|
||||||
|
make "$device" EXTRA_FLAGS="-D'RELEASE_NAME=4.4.1' -DCLOUD_BUILD -DUSE_DSHOT -DUSE_GPS -DUSE_GPS_PLUS_CODES -DUSE_LED_STRIP -DUSE_OSD -DUSE_OSD_HD -DUSE_OSD_SD -DUSE_PINIO -DUSE_SERIALRX -DUSE_SERIALRX_CRSF -DUSE_SERIALRX_DEFAULT -DUSE_SERIALRX_GHST -DUSE_SERIALRX_SBUS -DUSE_SERIALRX_SRXL2 -DUSE_SERIALRX_SPEKTRUM -DUSE_TELEMETRY -DUSE_TELEMETRY_CRSF -DUSE_TELEMETRY_GHST -DUSE_VTX"
|
||||||
|
|
||||||
|
done < "$1"
|
6
common-devices.csv
Normal file
6
common-devices.csv
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
OMNIBUSF4SD
|
||||||
|
AIKONF4
|
||||||
|
AIKONF7
|
||||||
|
HOBBYWING_XROTORF4G3
|
||||||
|
HOBBYWING_XROTORF7CONV
|
||||||
|
CRAZYBEEF4SX1280
|
|
365
devices.csv
Normal file
365
devices.csv
Normal file
|
@ -0,0 +1,365 @@
|
||||||
|
ALIENFLIGHTF4
|
||||||
|
ALIENFLIGHTNGF7
|
||||||
|
ALIENFLIGHTNGF7_DUAL
|
||||||
|
ALIENFLIGHTNGF7_ELRS
|
||||||
|
ALIENFLIGHTNGF7_RX
|
||||||
|
AIKONF4
|
||||||
|
AIKONF7
|
||||||
|
AG3XF4
|
||||||
|
AG3XF7
|
||||||
|
AIRBOTF4
|
||||||
|
AIRBOTF4SD
|
||||||
|
AIRBOTF4V2
|
||||||
|
AIRBOTF7
|
||||||
|
AIRBOTF7HDV
|
||||||
|
HELSEL_STRIKERF7
|
||||||
|
NOX
|
||||||
|
OMNIBUSF4
|
||||||
|
OMNIBUSF4FW
|
||||||
|
OMNIBUSF4NANOV7
|
||||||
|
OMNIBUSF4SD
|
||||||
|
OMNIBUSF4V6
|
||||||
|
OMNIBUSF7
|
||||||
|
OMNIBUSF7NANOV7
|
||||||
|
OMNIBUSF7V2
|
||||||
|
AIRB-OMNINXT4
|
||||||
|
AIRB-OMNINXT7
|
||||||
|
ALIENWHOOPF4
|
||||||
|
MERCURYG4
|
||||||
|
APEXF7
|
||||||
|
AXISFLYINGF7
|
||||||
|
AXISFLYINGF7PRO
|
||||||
|
BETAFPVF405
|
||||||
|
BETAFPVF411
|
||||||
|
BETAFPVF411RX
|
||||||
|
BETAFPVF4SX1280
|
||||||
|
BETAFPVF722
|
||||||
|
BETAFPVH743
|
||||||
|
BLUEJAYF4
|
||||||
|
NERO
|
||||||
|
MATEKF405STD_CLONE
|
||||||
|
CLRACINGF4
|
||||||
|
CLRACINGF7
|
||||||
|
RUSRACE_F4
|
||||||
|
RUSRACE_F7
|
||||||
|
SIRMIXALOT
|
||||||
|
CYCLONEF405_PRO
|
||||||
|
CYCLONEF722_PRO
|
||||||
|
DARWINF411
|
||||||
|
DARWINF4SX1280HD
|
||||||
|
DARWINF722HD
|
||||||
|
DAKEFPVF405
|
||||||
|
DAKEFPVF411
|
||||||
|
DAKEFPVF722
|
||||||
|
DALRCF405
|
||||||
|
DALRCF722DUAL
|
||||||
|
SOULF4
|
||||||
|
DFR_F722_DUAL_HD
|
||||||
|
FURYF4
|
||||||
|
FURYF4OSD
|
||||||
|
MAMBAF405US
|
||||||
|
MAMBAF405US_I2C
|
||||||
|
MAMBAF405_2022A
|
||||||
|
MAMBAF405_2022B
|
||||||
|
MAMBAF411
|
||||||
|
MAMBAF722
|
||||||
|
MAMBAF722_2022A
|
||||||
|
MAMBAF722_2022B
|
||||||
|
MAMBAF722_I2C
|
||||||
|
MAMBAF722_X8
|
||||||
|
MAMBAG4
|
||||||
|
MAMBAH743
|
||||||
|
MAMBAH743_2022B
|
||||||
|
ELINF405
|
||||||
|
ELINF722
|
||||||
|
DYSF44530D
|
||||||
|
DYSF4PRO
|
||||||
|
EACHINEF411_AIO
|
||||||
|
EACHINEF722
|
||||||
|
EACHINEF722_AIO
|
||||||
|
EMAX_BABYHAWK_II_HD
|
||||||
|
EMAX_TINYHAWKF4SX1280
|
||||||
|
EMAX_TINYHAWK_F411RX
|
||||||
|
EXF722DUAL
|
||||||
|
EXUAVF4PRO
|
||||||
|
FF_FORTINIF4
|
||||||
|
FF_FORTINIF4_REV03
|
||||||
|
FF_PIKOF4
|
||||||
|
FF_PIKOF4OSD
|
||||||
|
FF_RACEPIT
|
||||||
|
FF_RACEPITF7
|
||||||
|
FF_RACEPITF7_MINI
|
||||||
|
FF_RACEPIT_MINI
|
||||||
|
FLYCOLORF7
|
||||||
|
FLYCOLORF7_AIO
|
||||||
|
KIWIF4
|
||||||
|
KIWIF4V2
|
||||||
|
PLUMF4
|
||||||
|
GRAVITYF7
|
||||||
|
REVOLT
|
||||||
|
REVOLTOSD
|
||||||
|
FLYWOOF405
|
||||||
|
FLYWOOF405NANO
|
||||||
|
FLYWOOF405PRO
|
||||||
|
FLYWOOF405S_AIO
|
||||||
|
FLYWOOF411
|
||||||
|
FLYWOOF411EVO_HD
|
||||||
|
FLYWOOF411HEX
|
||||||
|
FLYWOOF411V2
|
||||||
|
FLYWOOF411_5IN1_AIO
|
||||||
|
FLYWOOF745
|
||||||
|
FLYWOOF745NANO
|
||||||
|
FLYWOOF7DUAL
|
||||||
|
ANYFCF7
|
||||||
|
ANYFCM7
|
||||||
|
DRONIUSF7
|
||||||
|
F4BY
|
||||||
|
FENIX_F405
|
||||||
|
SPARKY2
|
||||||
|
WORMFC
|
||||||
|
FOXEERF405
|
||||||
|
FOXEERF722DUAL
|
||||||
|
FOXEERF722V2
|
||||||
|
FOXEERF722V3
|
||||||
|
FOXEERF722V4
|
||||||
|
FOXEERF745V2_AIO
|
||||||
|
FOXEERF745V3_AIO
|
||||||
|
FOXEERF745V4_AIO
|
||||||
|
FOXEERF745_AIO
|
||||||
|
FOXEERH743
|
||||||
|
BETAFLIGHTF4
|
||||||
|
FPVM_BETAFLIGHTF7
|
||||||
|
XRACERF4
|
||||||
|
FRSKYF4
|
||||||
|
GEELANGF411
|
||||||
|
XILOF4
|
||||||
|
GEPRCF405
|
||||||
|
GEPRCF411
|
||||||
|
GEPRCF411SX1280
|
||||||
|
GEPRCF411_AIO
|
||||||
|
GEPRCF411_PRO
|
||||||
|
GEPRCF722
|
||||||
|
GEPRCF722BT
|
||||||
|
GEPRCF722_BT_HD
|
||||||
|
GEPRCF745_BT_HD
|
||||||
|
GEPRCG4AIO
|
||||||
|
GEPRC_F722_AIO
|
||||||
|
GEP_F405_VTX_V3
|
||||||
|
GEMEF411
|
||||||
|
GEMEF722
|
||||||
|
CRAZYBEEF4DX
|
||||||
|
CRAZYBEEF4DXS
|
||||||
|
CRAZYBEEF4FR
|
||||||
|
CRAZYBEEF4FS
|
||||||
|
CRAZYBEEF4SX1280
|
||||||
|
HAKRCF405
|
||||||
|
HAKRCF405D
|
||||||
|
HAKRCF405V2
|
||||||
|
HAKRCF411
|
||||||
|
HAKRCF411D
|
||||||
|
HAKRCF722
|
||||||
|
HAKRCF722D
|
||||||
|
HAKRCF722MINI
|
||||||
|
HAKRCF722V2
|
||||||
|
HAKRCF7230D
|
||||||
|
KD722
|
||||||
|
KAKUTEF4
|
||||||
|
KAKUTEF4V2
|
||||||
|
KAKUTEF7
|
||||||
|
KAKUTEF7HDV
|
||||||
|
KAKUTEF7MINI
|
||||||
|
KAKUTEF7MINIV3
|
||||||
|
KAKUTEF7V2
|
||||||
|
KAKUTEH7
|
||||||
|
KAKUTEH7MINI
|
||||||
|
KAKUTEH7V2
|
||||||
|
TALONF4V2
|
||||||
|
TALONF7DJIHD
|
||||||
|
TALONF7FUSION
|
||||||
|
TALONF7V2
|
||||||
|
HIFIONRCF7
|
||||||
|
HGLRCF405
|
||||||
|
HGLRCF405AS
|
||||||
|
HGLRCF411
|
||||||
|
HGLRCF411SX1280
|
||||||
|
HGLRCF411SX1280_15A
|
||||||
|
HGLRCF722
|
||||||
|
HGLRCF722E
|
||||||
|
HGLRCF745
|
||||||
|
ZEUSF4EVO
|
||||||
|
ZEUSF4FR
|
||||||
|
ZEUSF722_AIO
|
||||||
|
NIDICI_F4
|
||||||
|
HOBBYWING_XROTORF4G3
|
||||||
|
HOBBYWING_XROTORF7CONV
|
||||||
|
IFLIGHT_BLITZ_F405
|
||||||
|
IFLIGHT_BLITZ_F411RX
|
||||||
|
IFLIGHT_BLITZ_F722
|
||||||
|
IFLIGHT_BLITZ_F722_X1
|
||||||
|
IFLIGHT_BLITZ_F7_AIO
|
||||||
|
IFLIGHT_BLITZ_F7_PRO
|
||||||
|
IFLIGHT_F405_AIO
|
||||||
|
IFLIGHT_F405_TWING
|
||||||
|
IFLIGHT_F411_AIO32
|
||||||
|
IFLIGHT_F411_PRO
|
||||||
|
IFLIGHT_F4SX1280
|
||||||
|
IFLIGHT_F722_TWING
|
||||||
|
IFLIGHT_F745_AIO
|
||||||
|
IFLIGHT_F745_AIO_V2
|
||||||
|
IFLIGHT_H743_AIO_V2
|
||||||
|
IFLIGHT_H7_TWING
|
||||||
|
IFLIGHT_SUCCEX_E_F4
|
||||||
|
IFLIGHT_SUCCEX_E_F7
|
||||||
|
JBF7
|
||||||
|
JBF7_DJI
|
||||||
|
JBF7_V2
|
||||||
|
JHEF405
|
||||||
|
JHEF405PRO
|
||||||
|
JHEF411
|
||||||
|
JHEF745
|
||||||
|
JHEF7DUAL
|
||||||
|
JHEH743_AIO
|
||||||
|
SYNERGYF4
|
||||||
|
LDARC_F411
|
||||||
|
ELLE0
|
||||||
|
FISHDRONEF4
|
||||||
|
KROOZX
|
||||||
|
PIRXF4
|
||||||
|
PODIUMF4
|
||||||
|
STACKX
|
||||||
|
VRRACE
|
||||||
|
LUXAIO
|
||||||
|
LUXF4OSD
|
||||||
|
LUXF7HDV
|
||||||
|
LUXMINIF7
|
||||||
|
MERAKRCF405
|
||||||
|
MERAKRCF722
|
||||||
|
MLTEMPF4
|
||||||
|
MLTYPHF4
|
||||||
|
MATEKF405AIO
|
||||||
|
MATEKF405CTR
|
||||||
|
MATEKF405MINI
|
||||||
|
MATEKF405SE
|
||||||
|
MATEKF405STD
|
||||||
|
MATEKF405TE
|
||||||
|
MATEKF405TE_SD
|
||||||
|
MATEKF411
|
||||||
|
MATEKF411RX
|
||||||
|
MATEKF411SE
|
||||||
|
MATEKF722
|
||||||
|
MATEKF722HD
|
||||||
|
MATEKF722MINI
|
||||||
|
MATEKF722SE
|
||||||
|
MATEKH743
|
||||||
|
NBD_CRICKETF7
|
||||||
|
NBD_CRICKETF7V2
|
||||||
|
NBD_GALAXYAIO255
|
||||||
|
NBD_INFINITY200RS
|
||||||
|
NBD_INFINITYAIO
|
||||||
|
NBD_INFINITYAIOV2
|
||||||
|
NBD_INFINITYAIOV2PRO
|
||||||
|
NBD_INFINITYF4
|
||||||
|
FLOWBOX
|
||||||
|
FLOWBOXV2
|
||||||
|
HYBRIDG4
|
||||||
|
NEUTRONRCF407
|
||||||
|
NEUTRONRCF411AIO
|
||||||
|
NEUTRONRCF411SX1280
|
||||||
|
NEUTRONRCF722AIO
|
||||||
|
NEUTRONRCF7AIO
|
||||||
|
NEUTRONRCG4AIO
|
||||||
|
NEUTRONRCH743AIO
|
||||||
|
NEUTRONRCH7BT
|
||||||
|
UAVPNG030MINI
|
||||||
|
REVO
|
||||||
|
REVONANO
|
||||||
|
PYRODRONEF4
|
||||||
|
PYRODRONEF4PDB
|
||||||
|
PYRODRONEF7
|
||||||
|
AIRF7
|
||||||
|
MINI_H743_HD
|
||||||
|
ARESF7
|
||||||
|
BEEROTORF4
|
||||||
|
BLADE_F7
|
||||||
|
BLADE_F7_HD
|
||||||
|
RUSHCORE7
|
||||||
|
RUSHF7AIO
|
||||||
|
AOCODAF405
|
||||||
|
AOCODAF405V2MPU6000
|
||||||
|
AOCODAF405V2MPU6500
|
||||||
|
AOCODAF722BLE
|
||||||
|
AOCODAF722MINI
|
||||||
|
AOCODARCF411_AIO
|
||||||
|
AOCODARCF722_AIO
|
||||||
|
AOCODARCF7DUAL
|
||||||
|
AOCODARCH7DUAL
|
||||||
|
SKYSTARSF405
|
||||||
|
SKYSTARSF405AIO
|
||||||
|
SKYSTARSF411
|
||||||
|
SKYSTARSF7HD
|
||||||
|
SKYSTARSF7HDPRO
|
||||||
|
SKYSTARSH7HD
|
||||||
|
ATOMRCF405
|
||||||
|
ATOMRCF411
|
||||||
|
ATOMRCF722
|
||||||
|
SKYZONEF405
|
||||||
|
SPEEDYBEEF4
|
||||||
|
SPEEDYBEEF405V3
|
||||||
|
SPEEDYBEEF7
|
||||||
|
SPEEDYBEEF7MINI
|
||||||
|
SPEEDYBEEF7MINIV2
|
||||||
|
SPEEDYBEEF7V2
|
||||||
|
SPEEDYBEEF7V3
|
||||||
|
SPEEDYBEE_F745_AIO
|
||||||
|
SPCMAKERF411
|
||||||
|
SPEDIXF4
|
||||||
|
SPRACINGF4EVO
|
||||||
|
SPRACINGF4NEO
|
||||||
|
SPRACINGF7DUAL
|
||||||
|
SPRACINGH7EXTREME
|
||||||
|
SPRACINGH7NANO
|
||||||
|
SPRACINGH7RF
|
||||||
|
NUCLEOF722
|
||||||
|
STM32F411DISCOVERY
|
||||||
|
STM32F4DISCOVERY
|
||||||
|
SUB250F411
|
||||||
|
MODULARF4
|
||||||
|
TCMMF411
|
||||||
|
TCMMF7
|
||||||
|
COLIBRI
|
||||||
|
PODRACERAIO
|
||||||
|
TMH7
|
||||||
|
TMOTORF4
|
||||||
|
TMOTORF411
|
||||||
|
TMOTORF4SX1280
|
||||||
|
TMOTORF7
|
||||||
|
TMOTORF722SE
|
||||||
|
TMOTORF7V2
|
||||||
|
TMOTORF7_AIO
|
||||||
|
TMOTORH743
|
||||||
|
TMOTORVELOXF7V2
|
||||||
|
TMPACERF7
|
||||||
|
TMPACERF7MINI
|
||||||
|
TMVELOXF411
|
||||||
|
TMVELOXF7
|
||||||
|
TRANSTECF405HD
|
||||||
|
TRANSTECF411
|
||||||
|
TRANSTECF411AIO
|
||||||
|
TRANSTECF411HD
|
||||||
|
TRANSTECF7
|
||||||
|
TRANSTECF7HD
|
||||||
|
FPVCYCLEF401
|
||||||
|
TUNERCF405
|
||||||
|
VGOODF722DUAL
|
||||||
|
VGOODRCF4
|
||||||
|
VGOODRCF405_DJI
|
||||||
|
VGOODRCF411_DJI
|
||||||
|
VGOODRCF722_DJI
|
||||||
|
VIVAF4AIO
|
||||||
|
WIZZF7HD
|
||||||
|
YUPIF4
|
||||||
|
YUPIF7
|
||||||
|
ZEEZF7
|
||||||
|
ZEEZF7V2
|
||||||
|
ZEEZF7V3
|
||||||
|
ZEEZWHOOP
|
|
|
@ -108,5 +108,6 @@ const char * const debugModeNames[DEBUG_COUNT] = {
|
||||||
"VTX_MSP",
|
"VTX_MSP",
|
||||||
"GPS_DOP",
|
"GPS_DOP",
|
||||||
"FAILSAFE",
|
"FAILSAFE",
|
||||||
"DSHOT_TELEMETRY_COUNTS"
|
"DSHOT_TELEMETRY_COUNTS",
|
||||||
|
"RPM_LIMITER"
|
||||||
};
|
};
|
||||||
|
|
|
@ -107,6 +107,7 @@ typedef enum {
|
||||||
DEBUG_GPS_DOP,
|
DEBUG_GPS_DOP,
|
||||||
DEBUG_FAILSAFE,
|
DEBUG_FAILSAFE,
|
||||||
DEBUG_DSHOT_TELEMETRY_COUNTS,
|
DEBUG_DSHOT_TELEMETRY_COUNTS,
|
||||||
|
DEBUG_RPM_LIMITER,
|
||||||
DEBUG_COUNT
|
DEBUG_COUNT
|
||||||
} debugType_e;
|
} debugType_e;
|
||||||
|
|
||||||
|
|
|
@ -361,7 +361,7 @@ static void applyRPMLimiter(void)
|
||||||
//if drone is armed
|
//if drone is armed
|
||||||
if (ARMING_FLAG(ARMED)) {
|
if (ARMING_FLAG(ARMED)) {
|
||||||
//if the afterburner switch is enguaged
|
//if the afterburner switch is enguaged
|
||||||
if(IS_RC_MODE_ACTIVE(BOXUSER4)) {
|
if(IS_RC_MODE_ACTIVE(BOXBEEPERON)) {
|
||||||
//if the afterburner isn't initiated
|
//if the afterburner isn't initiated
|
||||||
if(mixerRuntime.afterburnerInitiated == false) {
|
if(mixerRuntime.afterburnerInitiated == false) {
|
||||||
//if there's charge in the tank
|
//if there's charge in the tank
|
||||||
|
@ -382,8 +382,10 @@ static void applyRPMLimiter(void)
|
||||||
//if the tank is empty, reset
|
//if the tank is empty, reset
|
||||||
if(mixerRuntime.afterburnerTankPercent<=0.0f) {
|
if(mixerRuntime.afterburnerTankPercent<=0.0f) {
|
||||||
mixerRuntime.afterburnerInitiated = false;
|
mixerRuntime.afterburnerInitiated = false;
|
||||||
mixerRuntime.afterburnerTankPercent = 100.0f;
|
|
||||||
mixerRuntime.afterburnerTanksRemaining -= 1;
|
mixerRuntime.afterburnerTanksRemaining -= 1;
|
||||||
|
if(mixerRuntime.afterburnerTanksRemaining>0) {
|
||||||
|
mixerRuntime.afterburnerTankPercent = 100.0f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,15 +427,15 @@ static void applyRPMLimiter(void)
|
||||||
|
|
||||||
//get the rpm averaged across the motors
|
//get the rpm averaged across the motors
|
||||||
bool motorsSaturated = false;
|
bool motorsSaturated = false;
|
||||||
//bool motorsDesaturated = false;
|
bool motorsDesaturated = false;
|
||||||
for (int i = 0; i < getMotorCount(); i++) {
|
for (int i = 0; i < getMotorCount(); i++) {
|
||||||
averageRPM += getDshotTelemetry(i);
|
averageRPM += getDshotTelemetry(i);
|
||||||
if (motor[i] >= motorConfig()->maxthrottle) {
|
if (motor[i] >= motorConfig()->maxthrottle) {
|
||||||
motorsSaturated = true;
|
motorsSaturated = true;
|
||||||
}
|
}
|
||||||
/*if (motor[i] <= motorConfig()->minthrottle) {
|
if (motor[i] <= motorConfig()->minthrottle) {
|
||||||
motorsDesaturated = true;
|
motorsDesaturated = false;
|
||||||
}*/
|
}
|
||||||
}
|
}
|
||||||
averageRPM = 100 * averageRPM / (getMotorCount()*mixerRuntime.motorPoleCount/2.0f);
|
averageRPM = 100 * averageRPM / (getMotorCount()*mixerRuntime.motorPoleCount/2.0f);
|
||||||
|
|
||||||
|
@ -459,13 +461,15 @@ static void applyRPMLimiter(void)
|
||||||
|
|
||||||
//don't let I term wind up if throttle is below the motor idle
|
//don't let I term wind up if throttle is below the motor idle
|
||||||
if (rcCommandThrottle < motorConfig()->digitalIdleOffsetValue / 10000.0f) {
|
if (rcCommandThrottle < motorConfig()->digitalIdleOffsetValue / 10000.0f) {
|
||||||
//mixerRuntime.govenorI *= 1.0f/(1.0f+(pidGetDT()*10.0f)); //slowly ramp down i term instead of resetting to avoid throttle pulsing cheats
|
mixerRuntime.govenorI *= 1.0f/(1.0f+(pidGetDT()*10.0f)); //slowly ramp down i term
|
||||||
mixerRuntime.govenorI = 0.0f;
|
//mixerRuntime.govenorI = 0.0f;
|
||||||
} else {
|
} else {
|
||||||
//don't let I term wind up if motors are saturated. Otherwise, motors may stay at high throttle even after low throttle is commanded
|
//don't let I term wind up if motors are saturated. Otherwise, motors may stay at high throttle even after low throttle is commanded
|
||||||
if(!motorsSaturated)
|
if(!motorsSaturated && !motorsDesaturated)
|
||||||
{
|
{
|
||||||
mixerRuntime.govenorI += smoothedRPMError * mixerRuntime.govenorIGain; // + when overspeed
|
mixerRuntime.govenorI += smoothedRPMError * mixerRuntime.govenorIGain; // + when overspeed
|
||||||
|
}else{
|
||||||
|
mixerRuntime.govenorI *= 1.0f/(1.0f+(pidGetDT()*10.0f)); //slowly ramp down i term
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -488,13 +492,18 @@ static void applyRPMLimiter(void)
|
||||||
PIDOutput = MAX(PIDOutput,0.0f);
|
PIDOutput = MAX(PIDOutput,0.0f);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (mixerRuntime.govenor_init) {
|
if (motorConfig()->dev.useDshotTelemetry) {
|
||||||
if (mixerRuntime.rpmLinearization) {
|
if (mixerRuntime.govenor_init) {
|
||||||
throttle = constrainf(-PIDOutput, 0.0f, 1.0f);
|
if (mixerRuntime.rpmLinearization) {
|
||||||
} else {
|
throttle = constrainf(-PIDOutput, 0.0f, 1.0f);
|
||||||
throttle = constrainf(throttle-PIDOutput, 0.0f, 1.0f);
|
} else {
|
||||||
|
throttle = constrainf(throttle-PIDOutput, 0.0f, 1.0f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else { //if dshot telemetry isn't enabled. Keep the throttle at zero
|
||||||
|
throttle = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
mixerRuntime.govenor_init = true;
|
mixerRuntime.govenor_init = true;
|
||||||
|
|
||||||
//update previous values for next loop
|
//update previous values for next loop
|
||||||
|
|
|
@ -60,7 +60,7 @@ PG_RESET_TEMPLATE(mixerConfig_t, mixerConfig,
|
||||||
.govenor_acceleration_limit = 60,
|
.govenor_acceleration_limit = 60,
|
||||||
.govenor_deceleration_limit = 60,
|
.govenor_deceleration_limit = 60,
|
||||||
.govenor_rpm_limit = 130,
|
.govenor_rpm_limit = 130,
|
||||||
.govenor_rpm_afterburner = 20,
|
.govenor_rpm_afterburner = 15,
|
||||||
.govenor_rpm_afterburner_duration = 5,
|
.govenor_rpm_afterburner_duration = 5,
|
||||||
.govenor_rpm_afterburner_reset = true,
|
.govenor_rpm_afterburner_reset = true,
|
||||||
.govenor_rpm_afterburner_hold_to_use = false,
|
.govenor_rpm_afterburner_hold_to_use = false,
|
||||||
|
|
|
@ -100,7 +100,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT] = {
|
||||||
{ .boxId = BOXMSPOVERRIDE, .boxName = "MSP OVERRIDE", .permanentId = 50},
|
{ .boxId = BOXMSPOVERRIDE, .boxName = "MSP OVERRIDE", .permanentId = 50},
|
||||||
{ .boxId = BOXSTICKCOMMANDDISABLE, .boxName = "STICK COMMANDS DISABLE", .permanentId = 51},
|
{ .boxId = BOXSTICKCOMMANDDISABLE, .boxName = "STICK COMMANDS DISABLE", .permanentId = 51},
|
||||||
{ .boxId = BOXBEEPERMUTE, .boxName = "BEEPER MUTE", .permanentId = 52},
|
{ .boxId = BOXBEEPERMUTE, .boxName = "BEEPER MUTE", .permanentId = 52},
|
||||||
{ .boxId = BOXREADY, .boxName = "READY", .permanentId = 53}
|
{ .boxId = BOXREADY, .boxName = "READY", .permanentId = 53},
|
||||||
};
|
};
|
||||||
|
|
||||||
// mask of enabled IDs, calculated on startup based on enabled features. boxId_e is used as bit index
|
// mask of enabled IDs, calculated on startup based on enabled features. boxId_e is used as bit index
|
||||||
|
|
|
@ -146,6 +146,7 @@
|
||||||
#include "flight/position.h"
|
#include "flight/position.h"
|
||||||
#include "flight/imu.h"
|
#include "flight/imu.h"
|
||||||
#include "flight/mixer.h"
|
#include "flight/mixer.h"
|
||||||
|
#include "flight/mixer_init.h"
|
||||||
#include "flight/pid.h"
|
#include "flight/pid.h"
|
||||||
|
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
|
@ -1270,10 +1271,13 @@ static void osdElementMainBatteryUsage(osdElementParms_t *element)
|
||||||
{
|
{
|
||||||
uint8_t remainingCapacityBars = 0;
|
uint8_t remainingCapacityBars = 0;
|
||||||
|
|
||||||
if (batteryConfig()->batteryCapacity) {
|
//if (batteryConfig()->batteryCapacity) {
|
||||||
const float batteryRemaining = constrain(batteryConfig()->batteryCapacity - displayBasis, 0, batteryConfig()->batteryCapacity);
|
//const float batteryRemaining = constrain(batteryConfig()->batteryCapacity - displayBasis, 0, batteryConfig()->batteryCapacity);
|
||||||
remainingCapacityBars = ceilf((batteryRemaining / (batteryConfig()->batteryCapacity / MAIN_BATT_USAGE_STEPS)));
|
//remainingCapacityBars = ceilf((batteryRemaining / (batteryConfig()->batteryCapacity / MAIN_BATT_USAGE_STEPS)));
|
||||||
}
|
const float maxBoost = 100.0f;
|
||||||
|
const float batteryRemaining = constrain(mixerRuntime.afterburnerTankPercent, 0, maxBoost);
|
||||||
|
remainingCapacityBars = ceilf((batteryRemaining / (maxBoost / MAIN_BATT_USAGE_STEPS)));
|
||||||
|
//}
|
||||||
|
|
||||||
// Create empty battery indicator bar
|
// Create empty battery indicator bar
|
||||||
element->buff[0] = SYM_PB_START;
|
element->buff[0] = SYM_PB_START;
|
||||||
|
@ -1284,7 +1288,12 @@ static void osdElementMainBatteryUsage(osdElementParms_t *element)
|
||||||
if (remainingCapacityBars > 0 && remainingCapacityBars < MAIN_BATT_USAGE_STEPS) {
|
if (remainingCapacityBars > 0 && remainingCapacityBars < MAIN_BATT_USAGE_STEPS) {
|
||||||
element->buff[1 + remainingCapacityBars] = SYM_PB_END;
|
element->buff[1 + remainingCapacityBars] = SYM_PB_END;
|
||||||
}
|
}
|
||||||
element->buff[MAIN_BATT_USAGE_STEPS+2] = '\0';
|
//tfp_sprintf(element->buff, element->buff+"%d", mixerRuntime.afterburnerTanksRemaining);
|
||||||
|
char tanksRemainingStr[1];
|
||||||
|
tfp_sprintf(tanksRemainingStr, "%d", mixerRuntime.afterburnerTanksRemaining);
|
||||||
|
element->buff[MAIN_BATT_USAGE_STEPS+2] = tanksRemainingStr[0];
|
||||||
|
element->buff[MAIN_BATT_USAGE_STEPS+3] = '\0';
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue