From 380ef16f799aca27b819aa9fc8f2a26ebac56d39 Mon Sep 17 00:00:00 2001 From: shota Date: Thu, 10 Aug 2023 01:07:48 +0900 Subject: [PATCH 01/46] trial --- src/main/drivers/pwm_mapping.c | 2 +- src/main/fc/runtime_config.h | 1 + src/main/fc/settings.yaml | 2 +- src/main/flight/mixer.c | 5 +++++ src/main/flight/mixer.h | 3 ++- src/main/flight/mixer_profile.c | 4 ++-- src/main/flight/pid.c | 12 +++++++++++- src/main/flight/servos.c | 2 +- src/main/telemetry/mavlink.c | 3 +++ 9 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/drivers/pwm_mapping.c b/src/main/drivers/pwm_mapping.c index a40faf965cc..c8121830307 100644 --- a/src/main/drivers/pwm_mapping.c +++ b/src/main/drivers/pwm_mapping.c @@ -250,7 +250,7 @@ void pwmBuildTimerOutputList(timMotorServoHardware_t * timOutputs, bool isMixerU } // Determine if timer belongs to motor/servo - if (currentMixerConfig.platformType == PLATFORM_MULTIROTOR || currentMixerConfig.platformType == PLATFORM_TRICOPTER) { + if (currentMixerConfig.platformType == PLATFORM_MULTIROTOR || currentMixerConfig.platformType == PLATFORM_TRICOPTER || currentMixerConfig.platformType == PLATFORM_TAILSITTER) { // Multicopter // Make sure first motorCount outputs get assigned to motor diff --git a/src/main/fc/runtime_config.h b/src/main/fc/runtime_config.h index 16d1b411df8..8764ea9f824 100644 --- a/src/main/fc/runtime_config.h +++ b/src/main/fc/runtime_config.h @@ -139,6 +139,7 @@ typedef enum { FW_HEADING_USE_YAW = (1 << 24), ANTI_WINDUP_DEACTIVATED = (1 << 25), LANDING_DETECTED = (1 << 26), + TAILSITTER = (1 << 27), //offset the pitch angle and swap roll/yaw controls } stateFlags_t; #define DISABLE_STATE(mask) (stateFlags &= ~(mask)) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 80540cc3968..3eb8ac78630 100644 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -111,7 +111,7 @@ tables: values: ["PERCENT", "MAH", "MWH"] enum: smartportFuelUnit_e - name: platform_type - values: ["MULTIROTOR", "AIRPLANE", "HELICOPTER", "TRICOPTER", "ROVER", "BOAT"] + values: ["MULTIROTOR", "AIRPLANE", "HELICOPTER", "TRICOPTER", "ROVER", "BOAT", "TAILSITTER"] - name: output_mode values: ["AUTO", "MOTORS", "SERVOS"] enum: outputMode_e diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index ab8a701bc74..a377b381bda 100644 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -152,6 +152,7 @@ void mixerUpdateStateFlags(void) DISABLE_STATE(BOAT); DISABLE_STATE(AIRPLANE); DISABLE_STATE(MOVE_FORWARD_ONLY); + DISABLE_STATE(TAILSITTER); if (currentMixerConfig.platformType == PLATFORM_AIRPLANE) { ENABLE_STATE(FIXED_WING_LEGACY); @@ -172,6 +173,10 @@ void mixerUpdateStateFlags(void) } else if (currentMixerConfig.platformType == PLATFORM_TRICOPTER) { ENABLE_STATE(MULTIROTOR); ENABLE_STATE(ALTITUDE_CONTROL); + } else if (currentMixerConfig.platformType == PLATFORM_TAILSITTER) { + ENABLE_STATE(MULTIROTOR); + ENABLE_STATE(ALTITUDE_CONTROL); + ENABLE_STATE(TAILSITTER); } else if (currentMixerConfig.platformType == PLATFORM_HELICOPTER) { ENABLE_STATE(MULTIROTOR); ENABLE_STATE(ALTITUDE_CONTROL); diff --git a/src/main/flight/mixer.h b/src/main/flight/mixer.h index 871332447ef..ee7f29686ce 100644 --- a/src/main/flight/mixer.h +++ b/src/main/flight/mixer.h @@ -39,7 +39,8 @@ typedef enum { PLATFORM_TRICOPTER = 3, PLATFORM_ROVER = 4, PLATFORM_BOAT = 5, - PLATFORM_OTHER = 6 + PLATFORM_OTHER = 6, + PLATFORM_TAILSITTER = 7, } flyingPlatformType_e; diff --git a/src/main/flight/mixer_profile.c b/src/main/flight/mixer_profile.c index 044cb027abd..9afd5686355 100644 --- a/src/main/flight/mixer_profile.c +++ b/src/main/flight/mixer_profile.c @@ -200,8 +200,8 @@ bool checkMixerProfileHotSwitchAvalibility(void) #endif uint8_t platform_type0 = mixerConfigByIndex(0)->platformType; uint8_t platform_type1 = mixerConfigByIndex(1)->platformType; - bool platform_type_mc0 = (platform_type0 == PLATFORM_MULTIROTOR) || (platform_type0 == PLATFORM_TRICOPTER); - bool platform_type_mc1 = (platform_type1 == PLATFORM_MULTIROTOR) || (platform_type1 == PLATFORM_TRICOPTER); + bool platform_type_mc0 = (platform_type0 == PLATFORM_MULTIROTOR) || (platform_type0 == PLATFORM_TRICOPTER || (platform_type0 == PLATFORM_TAILSITTER)); + bool platform_type_mc1 = (platform_type1 == PLATFORM_MULTIROTOR) || (platform_type1 == PLATFORM_TRICOPTER || (platform_type1 == PLATFORM_TAILSITTER)); bool is_mcfw_switching = platform_type_mc0 ^ platform_type_mc1; if ((!MCFW_hotswap_available) && is_mcfw_switching) { diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index f8728a3cefd..6d0931742fa 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -1085,8 +1085,18 @@ void FAST_CODE pidController(float dT) } for (int axis = 0; axis < 3; axis++) { + int gyro_axis = axis; + // float noinvert=1.0f; + // if (STATE(TAILSITTER)){ + // if (axis == FD_ROLL) { + // gyro_axis = FD_YAW; + // } else if (axis == FD_YAW) { + // gyro_axis = FD_ROLL; + // noinvert=-1.0f; + // } + // } // Step 1: Calculate gyro rates - pidState[axis].gyroRate = gyro.gyroADCf[axis]; + pidState[axis].gyroRate = gyro.gyroADCf[gyro_axis] * noinvert; // Step 2: Read target float rateTarget; diff --git a/src/main/flight/servos.c b/src/main/flight/servos.c index 4d4bb497d19..485f8d3684b 100755 --- a/src/main/flight/servos.c +++ b/src/main/flight/servos.c @@ -264,7 +264,7 @@ void servoMixer(float dT) // Reverse yaw servo when inverted in 3D mode only for multirotor and tricopter if (feature(FEATURE_REVERSIBLE_MOTORS) && (rxGetChannelValue(THROTTLE) < PWM_RANGE_MIDDLE) && - (currentMixerConfig.platformType == PLATFORM_MULTIROTOR || currentMixerConfig.platformType == PLATFORM_TRICOPTER)) { + (currentMixerConfig.platformType == PLATFORM_MULTIROTOR || currentMixerConfig.platformType == PLATFORM_TRICOPTER || currentMixerConfig.platformType == PLATFORM_TAILSITTER)) { input[INPUT_STABILIZED_YAW] *= -1; } } diff --git a/src/main/telemetry/mavlink.c b/src/main/telemetry/mavlink.c index 30237c28552..a611e6def9d 100644 --- a/src/main/telemetry/mavlink.c +++ b/src/main/telemetry/mavlink.c @@ -684,6 +684,9 @@ void mavlinkSendHUDAndHeartbeat(void) case PLATFORM_TRICOPTER: mavSystemType = MAV_TYPE_TRICOPTER; break; + case PLATFORM_TAILSITTER: + mavSystemType = MAV_TYPE_QUADROTOR; + break; case PLATFORM_AIRPLANE: mavSystemType = MAV_TYPE_FIXED_WING; break; From 20bfb88094637d75c6690a5f3ee36ee6803614ba Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 11 Aug 2023 02:09:09 +0900 Subject: [PATCH 02/46] initial cut on tail sitter support --- src/main/fc/runtime_config.h | 2 +- src/main/fc/settings.yaml | 2 +- src/main/flight/imu.c | 28 ++++++++++++++++++++++++++++ src/main/flight/mixer.h | 4 ++-- src/main/flight/pid.c | 13 +------------ src/main/sensors/boardalignment.c | 8 +++++++- 6 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/main/fc/runtime_config.h b/src/main/fc/runtime_config.h index 8764ea9f824..94eb23bd6a6 100644 --- a/src/main/fc/runtime_config.h +++ b/src/main/fc/runtime_config.h @@ -139,7 +139,7 @@ typedef enum { FW_HEADING_USE_YAW = (1 << 24), ANTI_WINDUP_DEACTIVATED = (1 << 25), LANDING_DETECTED = (1 << 26), - TAILSITTER = (1 << 27), //offset the pitch angle and swap roll/yaw controls + TAILSITTER = (1 << 27), //offset the pitch angle by 90 degrees } stateFlags_t; #define DISABLE_STATE(mask) (stateFlags &= ~(mask)) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 3eb8ac78630..0f1ccc22922 100644 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -1142,7 +1142,7 @@ groups: field: mixer_config.motorDirectionInverted type: bool - name: platform_type - description: "Defines UAV platform type. Allowed values: \"MULTIROTOR\", \"AIRPLANE\", \"HELICOPTER\", \"TRICOPTER\", \"ROVER\", \"BOAT\". Currently only MULTIROTOR, AIRPLANE and TRICOPTER types are implemented" + description: "Defines UAV platform type. Allowed values: \"MULTIROTOR\", \"AIRPLANE\", \"HELICOPTER\", \"TRICOPTER\", \"ROVER\", \"BOAT\", \"TAILSITTER\". Currently only MULTIROTOR, AIRPLANE and TRICOPTER types are implemented" default_value: "MULTIROTOR" field: mixer_config.platformType type: uint8_t diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index c9d0f0aacbf..3ee0d303b6a 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -660,6 +660,33 @@ static void imuCalculateTurnRateacceleration(fpVector3_t *vEstcentrifugalAccelBF lastspeed = currentspeed; } +fpQuaternion_t* getTailSitterQuaternion(bool normal2tail){ + static bool firstRun = true; + static fpQuaternion_t qNormal2Tail; + static fpQuaternion_t qTail2Normal; + if(firstRun){ + fpAxisAngle_t axisAngle; + axisAngle.axis.x = 0; + axisAngle.axis.y = 1; + axisAngle.axis.z = 0; + axisAngle.angle = DEGREES_TO_RADIANS(90); + axisAngleToQuaternion(&qNormal2Tail, &axisAngle); + quaternionConjugate(&qTail2Normal, &qNormal2Tail); + firstRun = false; + } + return normal2tail ? &qNormal2Tail : &qTail2Normal; +} + +void imuUpdateTailSitter(void) +{ + static bool lastTailSitter=false; + if (((bool)STATE(TAILSITTER)) != lastTailSitter){ + fpQuaternion_t* rotation_for_tailsitter= getTailSitterQuaternion(STATE(TAILSITTER)); + quaternionMultiply(&orientation, &orientation, rotation_for_tailsitter); + } + lastTailSitter = STATE(TAILSITTER); +} + static void imuCalculateEstimatedAttitude(float dT) { #if defined(USE_MAG) @@ -766,6 +793,7 @@ static void imuCalculateEstimatedAttitude(float dT) useCOG, courseOverGround, accWeight, magWeight); + imuUpdateTailSitter(); imuUpdateEulerAngles(); } diff --git a/src/main/flight/mixer.h b/src/main/flight/mixer.h index ee7f29686ce..10c1878b3a2 100644 --- a/src/main/flight/mixer.h +++ b/src/main/flight/mixer.h @@ -39,8 +39,8 @@ typedef enum { PLATFORM_TRICOPTER = 3, PLATFORM_ROVER = 4, PLATFORM_BOAT = 5, - PLATFORM_OTHER = 6, - PLATFORM_TAILSITTER = 7, + PLATFORM_TAILSITTER = 6, + PLATFORM_OTHER = 7, } flyingPlatformType_e; diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 6d0931742fa..0a3bcde4b82 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -1085,18 +1085,7 @@ void FAST_CODE pidController(float dT) } for (int axis = 0; axis < 3; axis++) { - int gyro_axis = axis; - // float noinvert=1.0f; - // if (STATE(TAILSITTER)){ - // if (axis == FD_ROLL) { - // gyro_axis = FD_YAW; - // } else if (axis == FD_YAW) { - // gyro_axis = FD_ROLL; - // noinvert=-1.0f; - // } - // } - // Step 1: Calculate gyro rates - pidState[axis].gyroRate = gyro.gyroADCf[gyro_axis] * noinvert; + pidState[axis].gyroRate = gyro.gyroADCf[axis]; // Step 2: Read target float rateTarget; diff --git a/src/main/sensors/boardalignment.c b/src/main/sensors/boardalignment.c index 86e41880f89..d23293dcce6 100644 --- a/src/main/sensors/boardalignment.c +++ b/src/main/sensors/boardalignment.c @@ -28,6 +28,7 @@ #include "config/parameter_group.h" #include "config/parameter_group_ids.h" +#include "fc/runtime_config.h" #include "drivers/sensor.h" @@ -87,7 +88,7 @@ void updateBoardAlignment(int16_t roll, int16_t pitch) void applyBoardAlignment(float *vec) { - if (standardBoardAlignment) { + if (standardBoardAlignment && (!STATE(TAILSITTER))) { return; } @@ -97,6 +98,11 @@ void applyBoardAlignment(float *vec) vec[X] = lrintf(fpVec.x); vec[Y] = lrintf(fpVec.y); vec[Z] = lrintf(fpVec.z); + + if (STATE(TAILSITTER)) { + vec[X] = lrintf(fpVec.z); + vec[Z] = -lrintf(fpVec.x); + } } void FAST_CODE applySensorAlignment(float * dest, float * src, uint8_t rotation) From 34f6690e903d48c10888d785f04eb54e7f19f84f Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 11 Aug 2023 13:21:10 +0900 Subject: [PATCH 03/46] tailsitter support --- src/main/flight/imu.c | 2 +- src/main/flight/pid.c | 5 +++++ src/main/sensors/boardalignment.c | 15 +++++++++------ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index 3ee0d303b6a..939f9c4ee7e 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -669,7 +669,7 @@ fpQuaternion_t* getTailSitterQuaternion(bool normal2tail){ axisAngle.axis.x = 0; axisAngle.axis.y = 1; axisAngle.axis.z = 0; - axisAngle.angle = DEGREES_TO_RADIANS(90); + axisAngle.angle = DEGREES_TO_RADIANS(-90); axisAngleToQuaternion(&qNormal2Tail, &axisAngle); quaternionConjugate(&qTail2Normal, &qNormal2Tail); firstRun = false; diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 0a3bcde4b82..db24091acb6 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -1119,6 +1119,11 @@ void FAST_CODE pidController(float dT) if (FLIGHT_MODE(ANGLE_MODE) || FLIGHT_MODE(HORIZON_MODE) || isFlightAxisAngleOverrideActive(axis)) { //If axis angle override, get the correct angle from Logic Conditions float angleTarget = getFlightAxisAngleOverride(axis, computePidLevelTarget(axis)); + + //apply 45 deg offset for tailsitter when isMixerTransitionMixing is activated + if (STATE(TAILSITTER) && isMixerTransitionMixing && axis == FD_PITCH){ + angleTarget += DEGREES_TO_DECIDEGREES(45); + } //Apply the Level PID controller pidLevel(angleTarget, &pidState[axis], axis, horizonRateMagnitude, dT); diff --git a/src/main/sensors/boardalignment.c b/src/main/sensors/boardalignment.c index d23293dcce6..ccad08163af 100644 --- a/src/main/sensors/boardalignment.c +++ b/src/main/sensors/boardalignment.c @@ -46,6 +46,7 @@ static bool standardBoardAlignment = true; // board orientation correction static fpMat3_t boardRotMatrix; +static fpMat3_t tailRotMatrix; // no template required since defaults are zero PG_REGISTER(boardAlignment_t, boardAlignment, PG_BOARD_ALIGNMENT, 0); @@ -70,6 +71,11 @@ void initBoardAlignment(void) rotationMatrixFromAngles(&boardRotMatrix, &rotationAngles); } + fp_angles_t rotationAngles; + rotationAngles.angles.roll = DECIDEGREES_TO_RADIANS(0); + rotationAngles.angles.pitch = DECIDEGREES_TO_RADIANS(900); + rotationAngles.angles.yaw = DECIDEGREES_TO_RADIANS(0); + rotationMatrixFromAngles(&tailRotMatrix, &rotationAngles); } void updateBoardAlignment(int16_t roll, int16_t pitch) @@ -94,15 +100,12 @@ void applyBoardAlignment(float *vec) fpVector3_t fpVec = { .v = { vec[X], vec[Y], vec[Z] } }; rotationMatrixRotateVector(&fpVec, &fpVec, &boardRotMatrix); - + if (STATE(TAILSITTER)) { + rotationMatrixRotateVector(&fpVec, &fpVec, &tailRotMatrix); + } vec[X] = lrintf(fpVec.x); vec[Y] = lrintf(fpVec.y); vec[Z] = lrintf(fpVec.z); - - if (STATE(TAILSITTER)) { - vec[X] = lrintf(fpVec.z); - vec[Z] = -lrintf(fpVec.x); - } } void FAST_CODE applySensorAlignment(float * dest, float * src, uint8_t rotation) From 084020335c8c4763c8f360982a9898bf0ef2bee0 Mon Sep 17 00:00:00 2001 From: shota Date: Sat, 12 Aug 2023 15:41:10 +0900 Subject: [PATCH 04/46] update tailsitter documents --- docs/MixerProfile.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/MixerProfile.md b/docs/MixerProfile.md index b30753e631a..432861009bf 100644 --- a/docs/MixerProfile.md +++ b/docs/MixerProfile.md @@ -204,6 +204,9 @@ save When `mixer_switch_on_rth`:`OFF` and `mixer_switch_on_land`:`OFF` is set for all mixer_profiles(defaults). Model will not perform automated transition at all. +### TailSitter support +TailSitter is supported by add a 90deg offset to the board alignment. Set the board aliment normally in the mixer_profile for FW mode(`set platform_type = AIRPLANE`), The motor trust axis should be same direction as the airplane nose. Then, in the mixer_profile for takeoff and landing `set platform_type = TAILSITTER`. The `TAILSITTER` platform type is same as `MULTIROTOR` platform type, expect for a 90 deg board alignment offset. In `TAILSITTER` mixer_profile, when motor trust/airplane nose is pointing to the sky, 'airplane bottom'/'multi rotor front' should facing forward in model preview. Set the motor/servo mixer according to multirotor orientation, Model should roll around geography's longitudinal axis, the roll axis of `TAILSITTER` will be yaw axis of `AIRPLANE`. In addition, When `MIXER TRANSITION` input is activated, a 45deg offset will be add to the target angle for angle mode. + ## Happy flying Remember that this is currently an emerging capability: From 378664c322f5eb225d96127b3e67111adc5dd5fe Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 29 Sep 2023 00:09:07 +0900 Subject: [PATCH 05/46] add compass changing aliment --- src/main/sensors/boardalignment.c | 12 +++++++++--- src/main/sensors/boardalignment.h | 4 +++- src/main/sensors/compass.c | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/sensors/boardalignment.c b/src/main/sensors/boardalignment.c index ccad08163af..360ddec4a16 100644 --- a/src/main/sensors/boardalignment.c +++ b/src/main/sensors/boardalignment.c @@ -92,6 +92,14 @@ void updateBoardAlignment(int16_t roll, int16_t pitch) initBoardAlignment(); } +void applyTailSitterAlignment(fpVector3_t *fpVec) +{ + if (!STATE(TAILSITTER)) { + return; + } + rotationMatrixRotateVector(fpVec, fpVec, &tailRotMatrix); +} + void applyBoardAlignment(float *vec) { if (standardBoardAlignment && (!STATE(TAILSITTER))) { @@ -100,9 +108,7 @@ void applyBoardAlignment(float *vec) fpVector3_t fpVec = { .v = { vec[X], vec[Y], vec[Z] } }; rotationMatrixRotateVector(&fpVec, &fpVec, &boardRotMatrix); - if (STATE(TAILSITTER)) { - rotationMatrixRotateVector(&fpVec, &fpVec, &tailRotMatrix); - } + applyTailSitterAlignment(&fpVec); vec[X] = lrintf(fpVec.x); vec[Y] = lrintf(fpVec.y); vec[Z] = lrintf(fpVec.z); diff --git a/src/main/sensors/boardalignment.h b/src/main/sensors/boardalignment.h index 6bf01272650..17cd08e5ff3 100644 --- a/src/main/sensors/boardalignment.h +++ b/src/main/sensors/boardalignment.h @@ -18,6 +18,7 @@ #pragma once #include "config/parameter_group.h" +#include "common/vector.h" typedef struct boardAlignment_s { int16_t rollDeciDegrees; @@ -30,4 +31,5 @@ PG_DECLARE(boardAlignment_t, boardAlignment); void initBoardAlignment(void); void updateBoardAlignment(int16_t roll, int16_t pitch); void applySensorAlignment(float * dest, float * src, uint8_t rotation); -void applyBoardAlignment(float *vec); \ No newline at end of file +void applyBoardAlignment(float *vec); +void applyTailSitterAlignment(fpVector3_t *vec); \ No newline at end of file diff --git a/src/main/sensors/compass.c b/src/main/sensors/compass.c index 23d45ed7879..734a1e98224 100644 --- a/src/main/sensors/compass.c +++ b/src/main/sensors/compass.c @@ -472,7 +472,7 @@ void compassUpdate(timeUs_t currentTimeUs) fpVector3_t rotated; rotationMatrixRotateVector(&rotated, &v, &mag.dev.magAlign.externalRotation); - + applyTailSitterAlignment(&rotated); mag.magADC[X] = rotated.x; mag.magADC[Y] = rotated.y; mag.magADC[Z] = rotated.z; From 1ea7aa7e48b5c9cc059855f44755b1978801b670 Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 8 Oct 2023 00:59:46 +0900 Subject: [PATCH 06/46] moved tailsitter platform type to tailsitter_board_orientation --- src/main/fc/settings.yaml | 9 +++++++-- src/main/flight/mixer.c | 10 ++++++---- src/main/flight/mixer.h | 3 +-- src/main/flight/mixer_profile.c | 1 + src/main/flight/mixer_profile.h | 1 + src/main/flight/servos.c | 2 +- src/main/telemetry/mavlink.c | 3 --- 7 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index bee6149147b..d3723d05af7 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -111,7 +111,7 @@ tables: values: ["PERCENT", "MAH", "MWH"] enum: smartportFuelUnit_e - name: platform_type - values: ["MULTIROTOR", "AIRPLANE", "HELICOPTER", "TRICOPTER", "ROVER", "BOAT", "TAILSITTER"] + values: ["MULTIROTOR", "AIRPLANE", "HELICOPTER", "TRICOPTER", "ROVER", "BOAT"] - name: tz_automatic_dst values: ["OFF", "EU", "USA"] enum: tz_automatic_dst_e @@ -1145,7 +1145,7 @@ groups: field: mixer_config.motorDirectionInverted type: bool - name: platform_type - description: "Defines UAV platform type. Allowed values: \"MULTIROTOR\", \"AIRPLANE\", \"HELICOPTER\", \"TRICOPTER\", \"ROVER\", \"BOAT\", \"TAILSITTER\". Currently only MULTIROTOR, AIRPLANE and TRICOPTER types are implemented" + description: "Defines UAV platform type. Allowed values: \"MULTIROTOR\", \"AIRPLANE\", \"HELICOPTER\", \"TRICOPTER\", \"ROVER\", \"BOAT\". Currently only MULTIROTOR, AIRPLANE and TRICOPTER types are implemented" default_value: "MULTIROTOR" field: mixer_config.platformType type: uint8_t @@ -1182,6 +1182,11 @@ groups: field: mixer_config.switchTransitionTimer min: 0 max: 200 + - name: tailsitter_board_orientation + description: "If switch another mixer_profile is scheduled by mixer_automated_switch or mixer_automated_switch. Activate Mixertransion motor/servo mixing for this many decisecond(0.1s) before the actual mixer_profile switch." + default_value: OFF + field: mixer_config.tailsitterBoardOrientation + type: bool diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index d0d93a3348a..874f48c5c70 100644 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -182,15 +182,17 @@ void mixerUpdateStateFlags(void) } else if (currentMixerConfig.platformType == PLATFORM_TRICOPTER) { ENABLE_STATE(MULTIROTOR); ENABLE_STATE(ALTITUDE_CONTROL); - } else if (currentMixerConfig.platformType == PLATFORM_TAILSITTER) { - ENABLE_STATE(MULTIROTOR); - ENABLE_STATE(ALTITUDE_CONTROL); - ENABLE_STATE(TAILSITTER); } else if (currentMixerConfig.platformType == PLATFORM_HELICOPTER) { ENABLE_STATE(MULTIROTOR); ENABLE_STATE(ALTITUDE_CONTROL); } + if (currentMixerConfig.tailsitterBoardOrientation) { + ENABLE_STATE(TAILSITTER); + } else { + DISABLE_STATE(TAILSITTER); + } + if (currentMixerConfig.hasFlaps) { ENABLE_STATE(FLAPERON_AVAILABLE); } else { diff --git a/src/main/flight/mixer.h b/src/main/flight/mixer.h index ba0a856be6e..9ee6a20654e 100644 --- a/src/main/flight/mixer.h +++ b/src/main/flight/mixer.h @@ -41,8 +41,7 @@ typedef enum { PLATFORM_TRICOPTER = 3, PLATFORM_ROVER = 4, PLATFORM_BOAT = 5, - PLATFORM_TAILSITTER = 6, - PLATFORM_OTHER = 7, + PLATFORM_OTHER = 6 } flyingPlatformType_e; diff --git a/src/main/flight/mixer_profile.c b/src/main/flight/mixer_profile.c index de1cdecb3bd..de347feed3e 100644 --- a/src/main/flight/mixer_profile.c +++ b/src/main/flight/mixer_profile.c @@ -52,6 +52,7 @@ void pgResetFn_mixerProfiles(mixerProfile_t *instance) .PIDProfileLinking = SETTING_MIXER_PID_PROFILE_LINKING_DEFAULT, .automated_switch = SETTING_MIXER_AUTOMATED_SWITCH_DEFAULT, .switchTransitionTimer = SETTING_MIXER_SWITCH_TRANS_TIMER_DEFAULT, + .tailsitterBoardOrientation = SETTING_TAILSITTER_BOARD_ORIENTATION_DEFAULT, }); for (int j = 0; j < MAX_SUPPORTED_MOTORS; j++) { diff --git a/src/main/flight/mixer_profile.h b/src/main/flight/mixer_profile.h index bf52d45c3d9..073e256eb1e 100644 --- a/src/main/flight/mixer_profile.h +++ b/src/main/flight/mixer_profile.h @@ -18,6 +18,7 @@ typedef struct mixerConfig_s { bool PIDProfileLinking; bool automated_switch; int16_t switchTransitionTimer; + bool tailsitterBoardOrientation; } mixerConfig_t; typedef struct mixerProfile_s { mixerConfig_t mixer_config; diff --git a/src/main/flight/servos.c b/src/main/flight/servos.c index 485f8d3684b..4d4bb497d19 100755 --- a/src/main/flight/servos.c +++ b/src/main/flight/servos.c @@ -264,7 +264,7 @@ void servoMixer(float dT) // Reverse yaw servo when inverted in 3D mode only for multirotor and tricopter if (feature(FEATURE_REVERSIBLE_MOTORS) && (rxGetChannelValue(THROTTLE) < PWM_RANGE_MIDDLE) && - (currentMixerConfig.platformType == PLATFORM_MULTIROTOR || currentMixerConfig.platformType == PLATFORM_TRICOPTER || currentMixerConfig.platformType == PLATFORM_TAILSITTER)) { + (currentMixerConfig.platformType == PLATFORM_MULTIROTOR || currentMixerConfig.platformType == PLATFORM_TRICOPTER)) { input[INPUT_STABILIZED_YAW] *= -1; } } diff --git a/src/main/telemetry/mavlink.c b/src/main/telemetry/mavlink.c index a611e6def9d..30237c28552 100644 --- a/src/main/telemetry/mavlink.c +++ b/src/main/telemetry/mavlink.c @@ -684,9 +684,6 @@ void mavlinkSendHUDAndHeartbeat(void) case PLATFORM_TRICOPTER: mavSystemType = MAV_TYPE_TRICOPTER; break; - case PLATFORM_TAILSITTER: - mavSystemType = MAV_TYPE_QUADROTOR; - break; case PLATFORM_AIRPLANE: mavSystemType = MAV_TYPE_FIXED_WING; break; From 4fd677245844eef0bd3bb2153dce8ed3f3af81a1 Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 8 Oct 2023 01:35:46 +0900 Subject: [PATCH 07/46] bug fixes --- docs/Settings.md | 12 +++++++++++- src/main/sensors/boardalignment.c | 29 ++++++++++++----------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/docs/Settings.md b/docs/Settings.md index bb26b36f5fd..74cd5d52b8c 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -4894,7 +4894,7 @@ _// TODO_ ### platform_type -Defines UAV platform type. Allowed values: "MULTIROTOR", "AIRPLANE", "HELICOPTER", "TRICOPTER", "ROVER", "BOAT", "TAILSITTER". Currently only MULTIROTOR, AIRPLANE and TRICOPTER types are implemented +Defines UAV platform type. Allowed values: "MULTIROTOR", "AIRPLANE", "HELICOPTER", "TRICOPTER", "ROVER", "BOAT". Currently only MULTIROTOR, AIRPLANE and TRICOPTER types are implemented | Default | Min | Max | | --- | --- | --- | @@ -5572,6 +5572,16 @@ Delay before disarming when requested by switch (ms) [0-1000] --- +### tailsitter_board_orientation + +If switch another mixer_profile is scheduled by mixer_automated_switch or mixer_automated_switch. Activate Mixertransion motor/servo mixing for this many decisecond(0.1s) before the actual mixer_profile switch. + +| Default | Min | Max | +| --- | --- | --- | +| OFF | OFF | ON | + +--- + ### telemetry_halfduplex S.Port telemetry only: Turn UART into UNIDIR for usage on F1 and F4 target. See Telemetry.md for details diff --git a/src/main/sensors/boardalignment.c b/src/main/sensors/boardalignment.c index 360ddec4a16..1f149faeff6 100644 --- a/src/main/sensors/boardalignment.c +++ b/src/main/sensors/boardalignment.c @@ -58,24 +58,19 @@ static bool isBoardAlignmentStandard(const boardAlignment_t *boardAlignment) void initBoardAlignment(void) { - if (isBoardAlignmentStandard(boardAlignment())) { - standardBoardAlignment = true; - } else { - fp_angles_t rotationAngles; - - standardBoardAlignment = false; - - rotationAngles.angles.roll = DECIDEGREES_TO_RADIANS(boardAlignment()->rollDeciDegrees ); - rotationAngles.angles.pitch = DECIDEGREES_TO_RADIANS(boardAlignment()->pitchDeciDegrees); - rotationAngles.angles.yaw = DECIDEGREES_TO_RADIANS(boardAlignment()->yawDeciDegrees ); - - rotationMatrixFromAngles(&boardRotMatrix, &rotationAngles); - } + standardBoardAlignment=isBoardAlignmentStandard(boardAlignment()); fp_angles_t rotationAngles; - rotationAngles.angles.roll = DECIDEGREES_TO_RADIANS(0); - rotationAngles.angles.pitch = DECIDEGREES_TO_RADIANS(900); - rotationAngles.angles.yaw = DECIDEGREES_TO_RADIANS(0); - rotationMatrixFromAngles(&tailRotMatrix, &rotationAngles); + + rotationAngles.angles.roll = DECIDEGREES_TO_RADIANS(boardAlignment()->rollDeciDegrees ); + rotationAngles.angles.pitch = DECIDEGREES_TO_RADIANS(boardAlignment()->pitchDeciDegrees); + rotationAngles.angles.yaw = DECIDEGREES_TO_RADIANS(boardAlignment()->yawDeciDegrees ); + + rotationMatrixFromAngles(&boardRotMatrix, &rotationAngles); + fp_angles_t tailSitter_rotationAngles; + tailSitter_rotationAngles.angles.roll = DECIDEGREES_TO_RADIANS(0); + tailSitter_rotationAngles.angles.pitch = DECIDEGREES_TO_RADIANS(900); + tailSitter_rotationAngles.angles.yaw = DECIDEGREES_TO_RADIANS(0); + rotationMatrixFromAngles(&tailRotMatrix, &tailSitter_rotationAngles); } void updateBoardAlignment(int16_t roll, int16_t pitch) From b5e3cb28d4a606ac18a9f7d2ab2e74e4ee0c9699 Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 8 Oct 2023 01:38:16 +0900 Subject: [PATCH 08/46] update docs --- docs/Settings.md | 2 +- src/main/fc/settings.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Settings.md b/docs/Settings.md index 74cd5d52b8c..67e4b554652 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -5574,7 +5574,7 @@ Delay before disarming when requested by switch (ms) [0-1000] ### tailsitter_board_orientation -If switch another mixer_profile is scheduled by mixer_automated_switch or mixer_automated_switch. Activate Mixertransion motor/servo mixing for this many decisecond(0.1s) before the actual mixer_profile switch. +Apply a 90 deg pitch offset in sensor aliment for tailsitter flying mode | Default | Min | Max | | --- | --- | --- | diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index d3723d05af7..10d601d8712 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -1183,7 +1183,7 @@ groups: min: 0 max: 200 - name: tailsitter_board_orientation - description: "If switch another mixer_profile is scheduled by mixer_automated_switch or mixer_automated_switch. Activate Mixertransion motor/servo mixing for this many decisecond(0.1s) before the actual mixer_profile switch." + description: "Apply a 90 deg pitch offset in sensor aliment for tailsitter flying mode" default_value: OFF field: mixer_config.tailsitterBoardOrientation type: bool From cfb63dd56a424a27fc5e5939228036aea0387e57 Mon Sep 17 00:00:00 2001 From: shota Date: Mon, 16 Oct 2023 10:52:02 +0900 Subject: [PATCH 09/46] parameter rename --- docs/Settings.md | 2 +- src/main/fc/settings.yaml | 4 ++-- src/main/flight/mixer.c | 2 +- src/main/flight/mixer_profile.c | 2 +- src/main/flight/mixer_profile.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Settings.md b/docs/Settings.md index 67e4b554652..968f2e49f5a 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -5572,7 +5572,7 @@ Delay before disarming when requested by switch (ms) [0-1000] --- -### tailsitter_board_orientation +### tailsitter_orientation_offset Apply a 90 deg pitch offset in sensor aliment for tailsitter flying mode diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 10d601d8712..bc5429b3384 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -1182,10 +1182,10 @@ groups: field: mixer_config.switchTransitionTimer min: 0 max: 200 - - name: tailsitter_board_orientation + - name: tailsitter_orientation_offset description: "Apply a 90 deg pitch offset in sensor aliment for tailsitter flying mode" default_value: OFF - field: mixer_config.tailsitterBoardOrientation + field: mixer_config.tailsitterOrientationOffset type: bool diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index 874f48c5c70..834841e6580 100644 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -187,7 +187,7 @@ void mixerUpdateStateFlags(void) ENABLE_STATE(ALTITUDE_CONTROL); } - if (currentMixerConfig.tailsitterBoardOrientation) { + if (currentMixerConfig.tailsitterOrientationOffset) { ENABLE_STATE(TAILSITTER); } else { DISABLE_STATE(TAILSITTER); diff --git a/src/main/flight/mixer_profile.c b/src/main/flight/mixer_profile.c index de347feed3e..421dff17639 100644 --- a/src/main/flight/mixer_profile.c +++ b/src/main/flight/mixer_profile.c @@ -52,7 +52,7 @@ void pgResetFn_mixerProfiles(mixerProfile_t *instance) .PIDProfileLinking = SETTING_MIXER_PID_PROFILE_LINKING_DEFAULT, .automated_switch = SETTING_MIXER_AUTOMATED_SWITCH_DEFAULT, .switchTransitionTimer = SETTING_MIXER_SWITCH_TRANS_TIMER_DEFAULT, - .tailsitterBoardOrientation = SETTING_TAILSITTER_BOARD_ORIENTATION_DEFAULT, + .tailsitterOrientationOffset = SETTING_TAILSITTER_ORIENTATION_OFFSET_DEFAULT, }); for (int j = 0; j < MAX_SUPPORTED_MOTORS; j++) { diff --git a/src/main/flight/mixer_profile.h b/src/main/flight/mixer_profile.h index 073e256eb1e..a709309685f 100644 --- a/src/main/flight/mixer_profile.h +++ b/src/main/flight/mixer_profile.h @@ -18,7 +18,7 @@ typedef struct mixerConfig_s { bool PIDProfileLinking; bool automated_switch; int16_t switchTransitionTimer; - bool tailsitterBoardOrientation; + bool tailsitterOrientationOffset; } mixerConfig_t; typedef struct mixerProfile_s { mixerConfig_t mixer_config; From 0349bd70fe5164e1cb6299b3b2005a73f40ef55a Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 20 Oct 2023 09:15:03 +0900 Subject: [PATCH 10/46] logic condition RCcommand overide also works for angle mode --- src/main/flight/pid.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 5e7f1edb132..fdea10dc435 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -584,7 +584,11 @@ int16_t angleFreefloatDeadband(int16_t deadband, flight_dynamics_index_t axis) static float computePidLevelTarget(flight_dynamics_index_t axis) { // This is ROLL/PITCH, run ANGLE/HORIZON controllers +#ifdef USE_PROGRAMMING_FRAMEWORK + float angleTarget = pidRcCommandToAngle(getRcCommandOverride(rcCommand, axis), pidProfile()->max_angle_inclination[axis]); +#else float angleTarget = pidRcCommandToAngle(rcCommand[axis], pidProfile()->max_angle_inclination[axis]); +#endif // Automatically pitch down if the throttle is manually controlled and reduced bellow cruise throttle if ((axis == FD_PITCH) && STATE(AIRPLANE) && FLIGHT_MODE(ANGLE_MODE) && !navigationIsControllingThrottle()) { From e17ae02b347799db85c1429d1ad098fe243c99b7 Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 22 Oct 2023 14:21:46 +0900 Subject: [PATCH 11/46] ahrs mag gps fusion --- src/main/flight/imu.c | 65 ++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index ed5cbcbfaa4..a7b61e4819a 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -77,6 +77,7 @@ #define SPIN_RATE_LIMIT 20 #define MAX_ACC_NEARNESS 0.2 // 20% or G error soft-accepted (0.8-1.2G) +#define MAX_MAG_NEARNESS 0.2 // 20% or magnetic field error soft-accepted (0.8-1.2) #define IMU_ROTATION_LPF 3 // Hz FASTRAM fpVector3_t imuMeasuredAccelBF; FASTRAM fpVector3_t imuMeasuredRotationBF; @@ -111,6 +112,8 @@ FASTRAM bool gpsHeadingInitialized; FASTRAM bool imuUpdated = false; +static float imuCalculateAccelerometerWeightNearness(fpVector3_t* accBF); + PG_REGISTER_WITH_RESET_TEMPLATE(imuConfig_t, imuConfig, PG_IMU_CONFIG, 2); PG_RESET_TEMPLATE(imuConfig_t, imuConfig, @@ -326,6 +329,15 @@ bool isGPSTrustworthy(void) return sensors(SENSOR_GPS) && STATE(GPS_FIX) && gpsSol.numSat >= 6; } +static float imuCalculateMcMagCogWeight(void) +{ + float wCoG = imuCalculateAccelerometerWeightNearness(&imuMeasuredAccelBF); + float rotRateMagnitude = fast_fsqrtf(vectorNormSquared(&imuMeasuredRotationBFFiltered)); + const float rateSlopeMax = DEGREES_TO_RADIANS((imuConfig()->acc_ignore_rate + imuConfig()->acc_ignore_slope)) * 4.0f; + wCoG *= scaleRangef(constrainf(rotRateMagnitude, 0.0f, rateSlopeMax), 0.0f, rateSlopeMax, 1.0f, 0.0f); + return wCoG; +} + static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVector3_t * accBF, const fpVector3_t * magBF, bool useCOG, float courseOverGround, float accWScaler, float magWScaler) { STATIC_FASTRAM fpVector3_t vGyroDriftEstimate = { 0 }; @@ -339,11 +351,13 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe /* Step 1: Yaw correction */ // Use measured magnetic field vector if (magBF || useCOG) { - static const fpVector3_t vForward = { .v = { 1.0f, 0.0f, 0.0f } }; - - fpVector3_t vErr = { .v = { 0.0f, 0.0f, 0.0f } }; + float wMag; + float wCoG; + fpVector3_t vMagErr = { .v = { 0.0f, 0.0f, 0.0f } }; + fpVector3_t vCoGErr = { .v = { 0.0f, 0.0f, 0.0f } }; if (magBF && vectorNormSquared(magBF) > 0.01f) { + wMag = bellCurve((vectorNormSquared(magBF) - 1024.0f) / 1024.0f, MAX_MAG_NEARNESS); //TODO check if 1024 is correct fpVector3_t vMag; // For magnetometer correction we make an assumption that magnetic field is perpendicular to gravity (ignore Z-component in EF). @@ -369,13 +383,26 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe // Reference mag field vector heading is Magnetic North in EF. We compute that by rotating True North vector by declination and assuming Z-component is zero // magnetometer error is cross product between estimated magnetic north and measured magnetic north (calculated in EF) - vectorCrossProduct(&vErr, &vMag, &vCorrectedMagNorth); + vectorCrossProduct(&vMagErr, &vMag, &vCorrectedMagNorth); // Rotate error back into body frame - quaternionRotateVector(&vErr, &vErr, &orientation); + quaternionRotateVector(&vMagErr, &vMagErr, &orientation); } } - else if (useCOG) { + if (useCOG) { + fpVector3_t vForward = { .v = { 0.0f, 0.0f, 0.0f } }; + //vForward as trust vector + if STATE(MULTIROTOR){ + vForward.z = 1.0f; + }else{ + vForward.x = 1.0f; + } + + wCoG = scaleRangef(constrainf(gpsSol.groundSpeed, 300, 1200), 300, 1200, 0.0f, 1.0f); + if (STATE(MULTIROTOR)){ + //when multicopter`s orientation or speed is changing rapidly. less weight on gps heading + wCoG *= imuCalculateMcMagCogWeight(); + } fpVector3_t vHeadingEF; // Use raw heading error (from GPS or whatever else) @@ -409,13 +436,16 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe vectorNormalize(&vHeadingEF, &vHeadingEF); // error is cross product between reference heading and estimated heading (calculated in EF) - vectorCrossProduct(&vErr, &vCoG, &vHeadingEF); + vectorCrossProduct(&vCoGErr, &vCoG, &vHeadingEF); // Rotate error back into body frame - quaternionRotateVector(&vErr, &vErr, &orientation); + quaternionRotateVector(&vCoGErr, &vCoGErr, &orientation); } } - + fpVector3_t vErr = { .v = { 0.0f, 0.0f, 0.0f } }; + vectorScale(&vMagErr, &vMagErr, wMag); + vectorScale(&vCoGErr, &vCoGErr, wCoG); + vectorAdd(&vErr, &vMagErr, &vCoGErr); // Compute and apply integral feedback if enabled if (imuRuntimeConfig.dcm_ki_mag > 0.0f) { // Stop integrating if spinning beyond the certain limit @@ -535,10 +565,10 @@ STATIC_UNIT_TESTED void imuUpdateEulerAngles(void) } } -static float imuCalculateAccelerometerWeightNearness(void) +static float imuCalculateAccelerometerWeightNearness(fpVector3_t* accBF) { fpVector3_t accBFNorm; - vectorScale(&accBFNorm, &compansatedGravityBF, 1.0f / GRAVITY_CMSS); + vectorScale(&accBFNorm, accBF, 1.0f / GRAVITY_CMSS); const float accMagnitudeSq = vectorNormSquared(&accBFNorm); const float accWeight_Nearness = bellCurve(fast_fsqrtf(accMagnitudeSq) - 1.0f, MAX_ACC_NEARNESS); return accWeight_Nearness; @@ -672,20 +702,21 @@ static void imuCalculateEstimatedAttitude(float dT) bool useMag = false; bool useCOG = false; #if defined(USE_GPS) - if (STATE(FIXED_WING_LEGACY)) { + if (STATE(FIXED_WING_LEGACY) || STATE(MULTIROTOR)) { bool canUseCOG = isGPSHeadingValid(); - // Prefer compass (if available) + // Use compass (if available) if (canUseMAG) { useMag = true; gpsHeadingInitialized = true; // GPS heading initialised from MAG, continue on GPS if compass fails } - else if (canUseCOG) { + // Use GPS (if available) + if (canUseCOG) { if (gpsHeadingInitialized) { courseOverGround = DECIDEGREES_TO_RADIANS(gpsSol.groundCourse); useCOG = true; } - else { + else if (!canUseMAG) { // Re-initialize quaternion from known Roll, Pitch and GPS heading imuComputeQuaternionFromRPY(attitude.values.roll, attitude.values.pitch, gpsSol.groundCourse); gpsHeadingInitialized = true; @@ -698,7 +729,7 @@ static void imuCalculateEstimatedAttitude(float dT) } } else { - // Multicopters don't use GPS heading + // other platform type don't use GPS heading if (canUseMAG) { useMag = true; } @@ -751,7 +782,7 @@ static void imuCalculateEstimatedAttitude(float dT) } compansatedGravityBF = imuMeasuredAccelBF #endif - float accWeight = imuGetPGainScaleFactor() * imuCalculateAccelerometerWeightNearness(); + float accWeight = imuGetPGainScaleFactor() * imuCalculateAccelerometerWeightNearness(&compansatedGravityBF); accWeight = accWeight * imuCalculateAccelerometerWeightRateIgnore(acc_ignore_slope_multipiler); const bool useAcc = (accWeight > 0.001f); From 69ac08048e83b3e15640e417b312d9288d8767d9 Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 22 Oct 2023 14:29:07 +0900 Subject: [PATCH 12/46] minor fix --- src/main/flight/imu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index a7b61e4819a..e93aac430bb 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -351,8 +351,8 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe /* Step 1: Yaw correction */ // Use measured magnetic field vector if (magBF || useCOG) { - float wMag; - float wCoG; + float wMag = 0.0f; + float wCoG = 0.0f; fpVector3_t vMagErr = { .v = { 0.0f, 0.0f, 0.0f } }; fpVector3_t vCoGErr = { .v = { 0.0f, 0.0f, 0.0f } }; From 8e3ee38e518b51a70714e77fa6e8d1aa8e2cd269 Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 22 Oct 2023 16:51:09 +0900 Subject: [PATCH 13/46] development of posestimator fusion --- src/main/fc/settings.yaml | 4 ++-- src/main/navigation/navigation_pos_estimator.c | 16 +++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 87daf753cf2..c719c4003f0 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2314,13 +2314,13 @@ groups: max: 100 default_value: 2.0 - name: inav_w_z_baro_p - description: "Weight of barometer measurements in estimated altitude and climb rate" + description: "Weight of barometer measurements in estimated altitude and climb rate. Setting is used on both airplanes and multirotors." field: w_z_baro_p min: 0 max: 10 default_value: 0.35 - name: inav_w_z_gps_p - description: "Weight of GPS altitude measurements in estimated altitude. Setting is used only of airplanes" + description: "Weight of GPS altitude measurements in estimated altitude. Setting is used on both airplanes and multirotors." field: w_z_gps_p min: 0 max: 10 diff --git a/src/main/navigation/navigation_pos_estimator.c b/src/main/navigation/navigation_pos_estimator.c index 5c314bfddda..d83836bfb14 100755 --- a/src/main/navigation/navigation_pos_estimator.c +++ b/src/main/navigation/navigation_pos_estimator.c @@ -570,7 +570,10 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) DEBUG_SET(DEBUG_ALTITUDE, 5, posEstimator.gps.vel.z); // GPS vertical speed DEBUG_SET(DEBUG_ALTITUDE, 7, accGetClipCount()); // Clip count - if (ctx->newFlags & EST_BARO_VALID) { + bool correctOK = false; + //use both baro and gps + + if ((ctx->newFlags & EST_BARO_VALID) && (!positionEstimationConfig()->use_gps_no_baro)) { timeUs_t currentTimeUs = micros(); if (!ARMING_FLAG(ARMED)) { @@ -589,7 +592,7 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) } } - // We might be experiencing air cushion effect - use sonar or baro groung altitude to detect it + // We might be experiencing air cushion effect during takeoff - use sonar or baro ground altitude to detect it bool isAirCushionEffectDetected = ARMING_FLAG(ARMED) && (((ctx->newFlags & EST_SURFACE_VALID) && posEstimator.surface.alt < 20.0f && posEstimator.state.isBaroGroundValid) || ((ctx->newFlags & EST_BARO_VALID) && posEstimator.state.isBaroGroundValid && posEstimator.baro.alt < posEstimator.state.baroGroundAlt)); @@ -614,10 +617,9 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) ctx->accBiasCorr.z -= baroAltResidual * sq(positionEstimationConfig()->w_z_baro_p); } - return true; + correctOK = true; } - else if ((STATE(FIXED_WING_LEGACY) || positionEstimationConfig()->use_gps_no_baro) && (ctx->newFlags & EST_GPS_Z_VALID)) { - // If baro is not available - use GPS Z for correction on a plane + if (ctx->newFlags & EST_GPS_Z_VALID) { // Reset current estimate to GPS altitude if estimate not valid if (!(ctx->newFlags & EST_Z_VALID)) { ctx->estPosCorr.z += posEstimator.gps.pos.z - posEstimator.est.pos.z; @@ -637,10 +639,10 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) ctx->accBiasCorr.z -= gpsAltResudual * sq(positionEstimationConfig()->w_z_gps_p); } - return true; + correctOK = true; } - return false; + return correctOK; } static bool estimationCalculateCorrection_XY_GPS(estimationContext_t * ctx) From 00b46bc0d6e5828e55b4e6df6592beec5b267e5d Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 22 Oct 2023 18:16:19 +0900 Subject: [PATCH 14/46] development of posestimator fusion --- src/main/fc/settings.yaml | 4 ++-- src/main/navigation/navigation_pos_estimator.c | 16 +++++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index c719c4003f0..254ad509ec5 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2324,13 +2324,13 @@ groups: field: w_z_gps_p min: 0 max: 10 - default_value: 0.2 + default_value: 0.5 - name: inav_w_z_gps_v description: "Weight of GPS climb rate measurements in estimated climb rate. Setting is used on both airplanes and multirotors." field: w_z_gps_v min: 0 max: 10 - default_value: 0.1 + default_value: 0.5 - name: inav_w_xy_gps_p description: "Weight of GPS coordinates in estimated UAV position and speed." default_value: 1.0 diff --git a/src/main/navigation/navigation_pos_estimator.c b/src/main/navigation/navigation_pos_estimator.c index d83836bfb14..fa0aa5db0c2 100755 --- a/src/main/navigation/navigation_pos_estimator.c +++ b/src/main/navigation/navigation_pos_estimator.c @@ -571,9 +571,10 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) DEBUG_SET(DEBUG_ALTITUDE, 7, accGetClipCount()); // Clip count bool correctOK = false; + + const float gpsBaroResidual = fabsf(posEstimator.gps.pos.z - posEstimator.baro.alt); //ignore baro is deference is too big //use both baro and gps - - if ((ctx->newFlags & EST_BARO_VALID) && (!positionEstimationConfig()->use_gps_no_baro)) { + if ((ctx->newFlags & EST_BARO_VALID) && (!positionEstimationConfig()->use_gps_no_baro) && (gpsBaroResidual < positionEstimationConfig()->max_eph_epv)) { timeUs_t currentTimeUs = micros(); if (!ARMING_FLAG(ARMED)) { @@ -602,14 +603,6 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) ctx->estPosCorr.z += baroAltResidual * positionEstimationConfig()->w_z_baro_p * ctx->dt; ctx->estVelCorr.z += baroAltResidual * sq(positionEstimationConfig()->w_z_baro_p) * ctx->dt; - // If GPS is available - also use GPS climb rate - if (ctx->newFlags & EST_GPS_Z_VALID) { - // Trust GPS velocity only if residual/error is less than 2.5 m/s, scale weight according to gaussian distribution - const float gpsRocResidual = posEstimator.gps.vel.z - posEstimator.est.vel.z; - const float gpsRocScaler = bellCurve(gpsRocResidual, 250.0f); - ctx->estVelCorr.z += gpsRocResidual * positionEstimationConfig()->w_z_gps_v * gpsRocScaler * ctx->dt; - } - ctx->newEPV = updateEPE(posEstimator.est.epv, ctx->dt, posEstimator.baro.epv, positionEstimationConfig()->w_z_baro_p); // Accelerometer bias @@ -629,10 +622,11 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) else { // Altitude const float gpsAltResudual = posEstimator.gps.pos.z - posEstimator.est.pos.z; + const float gpsVelZResudual = posEstimator.gps.vel.z - posEstimator.est.vel.z; ctx->estPosCorr.z += gpsAltResudual * positionEstimationConfig()->w_z_gps_p * ctx->dt; ctx->estVelCorr.z += gpsAltResudual * sq(positionEstimationConfig()->w_z_gps_p) * ctx->dt; - ctx->estVelCorr.z += (posEstimator.gps.vel.z - posEstimator.est.vel.z) * positionEstimationConfig()->w_z_gps_v * ctx->dt; + ctx->estVelCorr.z += gpsVelZResudual * positionEstimationConfig()->w_z_gps_v * ctx->dt; ctx->newEPV = updateEPE(posEstimator.est.epv, ctx->dt, MAX(posEstimator.gps.epv, gpsAltResudual), positionEstimationConfig()->w_z_gps_p); // Accelerometer bias From a4c959943d3b59f3db138e1527674ff3e3ae537c Mon Sep 17 00:00:00 2001 From: shota Date: Mon, 23 Oct 2023 02:12:30 +0900 Subject: [PATCH 15/46] development of posestimator fusion --- src/main/fc/settings.yaml | 2 +- src/main/navigation/navigation_pos_estimator.c | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 254ad509ec5..9d31a1e231d 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2330,7 +2330,7 @@ groups: field: w_z_gps_v min: 0 max: 10 - default_value: 0.5 + default_value: 1.0 - name: inav_w_xy_gps_p description: "Weight of GPS coordinates in estimated UAV position and speed." default_value: 1.0 diff --git a/src/main/navigation/navigation_pos_estimator.c b/src/main/navigation/navigation_pos_estimator.c index fa0aa5db0c2..f8473a354f9 100755 --- a/src/main/navigation/navigation_pos_estimator.c +++ b/src/main/navigation/navigation_pos_estimator.c @@ -572,9 +572,9 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) bool correctOK = false; - const float gpsBaroResidual = fabsf(posEstimator.gps.pos.z - posEstimator.baro.alt); //ignore baro is deference is too big + const float gpsBaroResidual = fabsf(posEstimator.gps.pos.z - posEstimator.baro.alt); //ignore baro if difference is too big, baro is probably wrong //use both baro and gps - if ((ctx->newFlags & EST_BARO_VALID) && (!positionEstimationConfig()->use_gps_no_baro) && (gpsBaroResidual < positionEstimationConfig()->max_eph_epv)) { + if ((ctx->newFlags & EST_BARO_VALID) && (!positionEstimationConfig()->use_gps_no_baro) && (gpsBaroResidual < positionEstimationConfig()->max_eph_epv * 2)) { timeUs_t currentTimeUs = micros(); if (!ARMING_FLAG(ARMED)) { @@ -584,9 +584,7 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) } else { if (posEstimator.est.vel.z > 15) { - if (currentTimeUs > posEstimator.state.baroGroundTimeout) { - posEstimator.state.isBaroGroundValid = false; - } + posEstimator.state.isBaroGroundValid = currentTimeUs > posEstimator.state.baroGroundTimeout ? false: true; } else { posEstimator.state.baroGroundTimeout = currentTimeUs + 250000; // 0.25 sec From 04a9d8cbb8fa230e50dde13837b1be10baadf7e5 Mon Sep 17 00:00:00 2001 From: shota Date: Tue, 24 Oct 2023 10:38:01 +0900 Subject: [PATCH 16/46] modify the weights --- src/main/flight/imu.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index e93aac430bb..08373b6e5d0 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -351,13 +351,13 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe /* Step 1: Yaw correction */ // Use measured magnetic field vector if (magBF || useCOG) { - float wMag = 0.0f; - float wCoG = 0.0f; + float wMag = 1.0f; + float wCoG = 1.0f; fpVector3_t vMagErr = { .v = { 0.0f, 0.0f, 0.0f } }; fpVector3_t vCoGErr = { .v = { 0.0f, 0.0f, 0.0f } }; if (magBF && vectorNormSquared(magBF) > 0.01f) { - wMag = bellCurve((vectorNormSquared(magBF) - 1024.0f) / 1024.0f, MAX_MAG_NEARNESS); //TODO check if 1024 is correct + wMag *= bellCurve((vectorNormSquared(magBF) - 1024.0f) / 1024.0f, MAX_MAG_NEARNESS); //TODO check if 1024 is correct fpVector3_t vMag; // For magnetometer correction we make an assumption that magnetic field is perpendicular to gravity (ignore Z-component in EF). @@ -397,11 +397,11 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe }else{ vForward.x = 1.0f; } - - wCoG = scaleRangef(constrainf(gpsSol.groundSpeed, 300, 1200), 300, 1200, 0.0f, 1.0f); if (STATE(MULTIROTOR)){ //when multicopter`s orientation or speed is changing rapidly. less weight on gps heading wCoG *= imuCalculateMcMagCogWeight(); + //scale accroading to multirotor`s tilt angle + wCoG *= scaleRangef(constrainf(vForward.z, 0.98f, 0.90f), 0.98f, 0.90f, 0.0f, 1.0f); //cos(10deg) and cos(25deg) } fpVector3_t vHeadingEF; @@ -413,6 +413,7 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe // (Rxx; Ryx) - measured (estimated) heading vector (EF) // (-cos(COG), sin(COG)) - reference heading vector (EF) + float airSpeed = gpsSol.groundSpeed; // Compute heading vector in EF from scalar CoG,x axis of accelerometer is pointing backwards. fpVector3_t vCoG = { .v = { -cos_approx(courseOverGround), sin_approx(courseOverGround), 0.0f } }; #if defined(USE_WIND_ESTIMATOR) @@ -422,10 +423,11 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe vectorScale(&vCoG, &vCoG, gpsSol.groundSpeed); vCoG.x += getEstimatedWindSpeed(X); vCoG.y -= getEstimatedWindSpeed(Y); + airSpeed = fast_fsqrtf(vectorNormSquared(&vCoG)); vectorNormalize(&vCoG, &vCoG); } #endif - + wCoG *= scaleRangef(constrainf((airSpeed+gpsSol.groundSpeed)/2, 300, 1200), 300, 1200, 0.0f, 1.0f); // Rotate Forward vector from BF to EF - will yield Heading vector in Earth frame quaternionRotateVectorInv(&vHeadingEF, &vForward, &orientation); vHeadingEF.z = 0.0f; From c1c4b8360a9d8fa582265cb4a0126766ad85064e Mon Sep 17 00:00:00 2001 From: shota Date: Tue, 24 Oct 2023 21:04:01 +0900 Subject: [PATCH 17/46] update the imu heading estimation --- src/main/fc/settings.yaml | 4 ++-- src/main/flight/imu.c | 11 +++++++---- src/main/io/gps.c | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 9d31a1e231d..fe950eca744 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2324,13 +2324,13 @@ groups: field: w_z_gps_p min: 0 max: 10 - default_value: 0.5 + default_value: 0.4 - name: inav_w_z_gps_v description: "Weight of GPS climb rate measurements in estimated climb rate. Setting is used on both airplanes and multirotors." field: w_z_gps_v min: 0 max: 10 - default_value: 1.0 + default_value: 0.8 - name: inav_w_xy_gps_p description: "Weight of GPS coordinates in estimated UAV position and speed." default_value: 1.0 diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index 08373b6e5d0..4f55bad7f4b 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -337,7 +337,8 @@ static float imuCalculateMcMagCogWeight(void) wCoG *= scaleRangef(constrainf(rotRateMagnitude, 0.0f, rateSlopeMax), 0.0f, rateSlopeMax, 1.0f, 0.0f); return wCoG; } - +#define COS10DEG 0.984f +#define COS25DEG 0.906f static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVector3_t * accBF, const fpVector3_t * magBF, bool useCOG, float courseOverGround, float accWScaler, float magWScaler) { STATIC_FASTRAM fpVector3_t vGyroDriftEstimate = { 0 }; @@ -357,7 +358,7 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe fpVector3_t vCoGErr = { .v = { 0.0f, 0.0f, 0.0f } }; if (magBF && vectorNormSquared(magBF) > 0.01f) { - wMag *= bellCurve((vectorNormSquared(magBF) - 1024.0f) / 1024.0f, MAX_MAG_NEARNESS); //TODO check if 1024 is correct + wMag *= bellCurve((fast_fsqrtf(vectorNormSquared(magBF)) - 1024.0f) / 1024.0f, MAX_MAG_NEARNESS); fpVector3_t vMag; // For magnetometer correction we make an assumption that magnetic field is perpendicular to gravity (ignore Z-component in EF). @@ -401,7 +402,8 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe //when multicopter`s orientation or speed is changing rapidly. less weight on gps heading wCoG *= imuCalculateMcMagCogWeight(); //scale accroading to multirotor`s tilt angle - wCoG *= scaleRangef(constrainf(vForward.z, 0.98f, 0.90f), 0.98f, 0.90f, 0.0f, 1.0f); //cos(10deg) and cos(25deg) + wCoG *= scaleRangef(constrainf(vForward.z, COS10DEG, COS25DEG), COS10DEG, COS25DEG, 0.0f, 1.0f); + //for inverted flying, wCoG is lowered by imuCalculateMcMagCogWeight } fpVector3_t vHeadingEF; @@ -839,6 +841,7 @@ void imuUpdateAttitude(timeUs_t currentTimeUs) acc.accADCf[Z] = 0.0f; } } + bool isImuReady(void) { @@ -847,7 +850,7 @@ bool isImuReady(void) bool isImuHeadingValid(void) { - return (sensors(SENSOR_MAG) && STATE(COMPASS_CALIBRATED)) || (STATE(FIXED_WING_LEGACY) && gpsHeadingInitialized); + return (sensors(SENSOR_MAG) && STATE(COMPASS_CALIBRATED)) || gpsHeadingInitialized; } float calculateCosTiltAngle(void) diff --git a/src/main/io/gps.c b/src/main/io/gps.c index 0fae3a7f318..87999e594a0 100755 --- a/src/main/io/gps.c +++ b/src/main/io/gps.c @@ -453,7 +453,7 @@ bool isGPSHealthy(void) bool isGPSHeadingValid(void) { - return sensors(SENSOR_GPS) && STATE(GPS_FIX) && gpsSol.numSat >= 6 && gpsSol.groundSpeed >= 300; + return sensors(SENSOR_GPS) && STATE(GPS_FIX) && gpsSol.numSat >= 6 && gpsSol.groundSpeed >= 500; } #endif From 1c5a42cf4e0968faf4291b6ceb904e6ae8b175aa Mon Sep 17 00:00:00 2001 From: shota Date: Tue, 24 Oct 2023 22:45:11 +0900 Subject: [PATCH 18/46] gps baro mag mix --- src/main/drivers/compass/compass_fake.c | 2 +- src/main/fc/settings.yaml | 5 +++ src/main/flight/imu.c | 55 +++++++++++-------------- src/main/flight/imu.h | 1 + src/main/io/gps.c | 2 +- src/main/target/SITL/sim/realFlight.c | 6 +-- src/main/target/SITL/sim/xplane.c | 6 +-- 7 files changed, 38 insertions(+), 39 deletions(-) diff --git a/src/main/drivers/compass/compass_fake.c b/src/main/drivers/compass/compass_fake.c index a95b3297a5f..2ef8692fd2d 100644 --- a/src/main/drivers/compass/compass_fake.c +++ b/src/main/drivers/compass/compass_fake.c @@ -37,7 +37,7 @@ static bool fakeMagInit(magDev_t *magDev) { UNUSED(magDev); // initially point north - fakeMagData[X] = 4096; + fakeMagData[X] = 1024; fakeMagData[Y] = 0; fakeMagData[Z] = 0; return true; diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index fe950eca744..55ebd811b0f 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -1455,6 +1455,11 @@ groups: default_value: ADAPTIVE field: inertia_comp_method table: imu_inertia_comp_method + - name: ahrs_use_mag_no_gps + description: "Arhs will only use mag when gps is still avaliable" + default_value: OFF + field: use_mag_no_gps + type: bool - name: PG_ARMING_CONFIG type: armingConfig_t diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index 4f55bad7f4b..9425218707f 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -125,7 +125,8 @@ PG_RESET_TEMPLATE(imuConfig_t, imuConfig, .acc_ignore_rate = SETTING_AHRS_ACC_IGNORE_RATE_DEFAULT, .acc_ignore_slope = SETTING_AHRS_ACC_IGNORE_SLOPE_DEFAULT, .gps_yaw_windcomp = SETTING_AHRS_GPS_YAW_WINDCOMP_DEFAULT, - .inertia_comp_method = SETTING_AHRS_INERTIA_COMP_METHOD_DEFAULT + .inertia_comp_method = SETTING_AHRS_INERTIA_COMP_METHOD_DEFAULT, + .use_mag_no_gps = SETTING_AHRS_USE_MAG_NO_GPS_DEFAULT ); STATIC_UNIT_TESTED void imuComputeRotationMatrix(void) @@ -337,7 +338,7 @@ static float imuCalculateMcMagCogWeight(void) wCoG *= scaleRangef(constrainf(rotRateMagnitude, 0.0f, rateSlopeMax), 0.0f, rateSlopeMax, 1.0f, 0.0f); return wCoG; } -#define COS10DEG 0.984f +#define COS5DEG 0.996f #define COS25DEG 0.906f static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVector3_t * accBF, const fpVector3_t * magBF, bool useCOG, float courseOverGround, float accWScaler, float magWScaler) { @@ -402,7 +403,7 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe //when multicopter`s orientation or speed is changing rapidly. less weight on gps heading wCoG *= imuCalculateMcMagCogWeight(); //scale accroading to multirotor`s tilt angle - wCoG *= scaleRangef(constrainf(vForward.z, COS10DEG, COS25DEG), COS10DEG, COS25DEG, 0.0f, 1.0f); + wCoG *= scaleRangef(constrainf(vForward.z, COS5DEG, COS25DEG), COS5DEG, COS25DEG, 0.0f, 1.0f); //for inverted flying, wCoG is lowered by imuCalculateMcMagCogWeight } fpVector3_t vHeadingEF; @@ -429,7 +430,7 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe vectorNormalize(&vCoG, &vCoG); } #endif - wCoG *= scaleRangef(constrainf((airSpeed+gpsSol.groundSpeed)/2, 300, 1200), 300, 1200, 0.0f, 1.0f); + wCoG *= scaleRangef(constrainf((airSpeed+gpsSol.groundSpeed)/2, 400, 1500), 400, 1500, 0.0f, 1.0f); // Rotate Forward vector from BF to EF - will yield Heading vector in Earth frame quaternionRotateVectorInv(&vHeadingEF, &vForward, &orientation); vHeadingEF.z = 0.0f; @@ -706,37 +707,29 @@ static void imuCalculateEstimatedAttitude(float dT) bool useMag = false; bool useCOG = false; #if defined(USE_GPS) - if (STATE(FIXED_WING_LEGACY) || STATE(MULTIROTOR)) { - bool canUseCOG = isGPSHeadingValid(); + bool canUseCOG = isGPSHeadingValid(); - // Use compass (if available) - if (canUseMAG) { - useMag = true; - gpsHeadingInitialized = true; // GPS heading initialised from MAG, continue on GPS if compass fails + // Use compass (if available) + if (canUseMAG) { + useMag = true; + gpsHeadingInitialized = true; // GPS heading initialised from MAG, continue on GPS if compass fails + } + // Use GPS (if available) + if (canUseCOG && (!(imuConfig()->use_mag_no_gps && useMag))) { + if (gpsHeadingInitialized) { + courseOverGround = DECIDEGREES_TO_RADIANS(gpsSol.groundCourse); + useCOG = true; } - // Use GPS (if available) - if (canUseCOG) { - if (gpsHeadingInitialized) { - courseOverGround = DECIDEGREES_TO_RADIANS(gpsSol.groundCourse); - useCOG = true; - } - else if (!canUseMAG) { - // Re-initialize quaternion from known Roll, Pitch and GPS heading - imuComputeQuaternionFromRPY(attitude.values.roll, attitude.values.pitch, gpsSol.groundCourse); - gpsHeadingInitialized = true; + else if (!canUseMAG) { + // Re-initialize quaternion from known Roll, Pitch and GPS heading + imuComputeQuaternionFromRPY(attitude.values.roll, attitude.values.pitch, gpsSol.groundCourse); + gpsHeadingInitialized = true; - // Force reset of heading hold target - resetHeadingHoldTarget(DECIDEGREES_TO_DEGREES(attitude.values.yaw)); - } - } else if (!ARMING_FLAG(ARMED)) { - gpsHeadingInitialized = false; - } - } - else { - // other platform type don't use GPS heading - if (canUseMAG) { - useMag = true; + // Force reset of heading hold target + resetHeadingHoldTarget(DECIDEGREES_TO_DEGREES(attitude.values.yaw)); } + } else if (!ARMING_FLAG(ARMED)) { + gpsHeadingInitialized = false; } imuCalculateFilters(dT); diff --git a/src/main/flight/imu.h b/src/main/flight/imu.h index a3b87e67360..24904b98ba6 100644 --- a/src/main/flight/imu.h +++ b/src/main/flight/imu.h @@ -54,6 +54,7 @@ typedef struct imuConfig_s { uint8_t acc_ignore_slope; uint8_t gps_yaw_windcomp; uint8_t inertia_comp_method; + uint8_t use_mag_no_gps; } imuConfig_t; PG_DECLARE(imuConfig_t, imuConfig); diff --git a/src/main/io/gps.c b/src/main/io/gps.c index 87999e594a0..f71abe897d4 100755 --- a/src/main/io/gps.c +++ b/src/main/io/gps.c @@ -453,7 +453,7 @@ bool isGPSHealthy(void) bool isGPSHeadingValid(void) { - return sensors(SENSOR_GPS) && STATE(GPS_FIX) && gpsSol.numSat >= 6 && gpsSol.groundSpeed >= 500; + return sensors(SENSOR_GPS) && STATE(GPS_FIX) && gpsSol.numSat >= 6 && gpsSol.groundSpeed >= 400; } #endif diff --git a/src/main/target/SITL/sim/realFlight.c b/src/main/target/SITL/sim/realFlight.c index 23e77bcde04..05ee701ddd8 100644 --- a/src/main/target/SITL/sim/realFlight.c +++ b/src/main/target/SITL/sim/realFlight.c @@ -399,9 +399,9 @@ static void exchangeData(void) computeQuaternionFromRPY(&quat, roll_inav, pitch_inav, yaw_inav); transformVectorEarthToBody(&north, &quat); fakeMagSet( - constrainToInt16(north.x * 16000.0f), - constrainToInt16(north.y * 16000.0f), - constrainToInt16(north.z * 16000.0f) + constrainToInt16(north.x * 1024.0f), + constrainToInt16(north.y * 1024.0f), + constrainToInt16(north.z * 1024.0f) ); free(rfValues.m_currentAircraftStatus); diff --git a/src/main/target/SITL/sim/xplane.c b/src/main/target/SITL/sim/xplane.c index 44089117d2e..d629c2130e3 100644 --- a/src/main/target/SITL/sim/xplane.c +++ b/src/main/target/SITL/sim/xplane.c @@ -421,9 +421,9 @@ static void* listenWorker(void* arg) computeQuaternionFromRPY(&quat, roll_inav, pitch_inav, yaw_inav); transformVectorEarthToBody(&north, &quat); fakeMagSet( - constrainToInt16(north.x * 16000.0f), - constrainToInt16(north.y * 16000.0f), - constrainToInt16(north.z * 16000.0f) + constrainToInt16(north.x * 1024.0f), + constrainToInt16(north.y * 1024.0f), + constrainToInt16(north.z * 1024.0f) ); if (!initalized) { From cd0206a48f6a278f141e89f922e3e182c55518d3 Mon Sep 17 00:00:00 2001 From: shota Date: Tue, 24 Oct 2023 22:48:46 +0900 Subject: [PATCH 19/46] gps baro mag mix --- src/main/fc/settings.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 55ebd811b0f..237cf99cfdd 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2323,7 +2323,7 @@ groups: field: w_z_baro_p min: 0 max: 10 - default_value: 0.35 + default_value: 0.4 - name: inav_w_z_gps_p description: "Weight of GPS altitude measurements in estimated altitude. Setting is used on both airplanes and multirotors." field: w_z_gps_p @@ -2335,7 +2335,7 @@ groups: field: w_z_gps_v min: 0 max: 10 - default_value: 0.8 + default_value: 0.6 - name: inav_w_xy_gps_p description: "Weight of GPS coordinates in estimated UAV position and speed." default_value: 1.0 From 4af73a7c85648eb3ba7b14856e11cebfd4dcde32 Mon Sep 17 00:00:00 2001 From: shota Date: Wed, 25 Oct 2023 02:52:49 +0900 Subject: [PATCH 20/46] bug fixes on mag gps mix --- src/main/flight/imu.c | 28 ++++++++++++++------------- src/main/io/gps_fake.c | 1 + src/main/target/SITL/sim/realFlight.c | 16 +++++++-------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index 9425218707f..3d0ce791f2a 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -77,7 +77,9 @@ #define SPIN_RATE_LIMIT 20 #define MAX_ACC_NEARNESS 0.2 // 20% or G error soft-accepted (0.8-1.2G) -#define MAX_MAG_NEARNESS 0.2 // 20% or magnetic field error soft-accepted (0.8-1.2) +#define MAX_MAG_NEARNESS 0.25 // 25% or magnetic field error soft-accepted (0.75-1.25) +#define COS5DEG 0.996f +#define COS20DEG 0.940f #define IMU_ROTATION_LPF 3 // Hz FASTRAM fpVector3_t imuMeasuredAccelBF; FASTRAM fpVector3_t imuMeasuredRotationBF; @@ -330,7 +332,7 @@ bool isGPSTrustworthy(void) return sensors(SENSOR_GPS) && STATE(GPS_FIX) && gpsSol.numSat >= 6; } -static float imuCalculateMcMagCogWeight(void) +static float imuCalculateMcCogWeight(void) { float wCoG = imuCalculateAccelerometerWeightNearness(&imuMeasuredAccelBF); float rotRateMagnitude = fast_fsqrtf(vectorNormSquared(&imuMeasuredRotationBFFiltered)); @@ -338,8 +340,7 @@ static float imuCalculateMcMagCogWeight(void) wCoG *= scaleRangef(constrainf(rotRateMagnitude, 0.0f, rateSlopeMax), 0.0f, rateSlopeMax, 1.0f, 0.0f); return wCoG; } -#define COS5DEG 0.996f -#define COS25DEG 0.906f + static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVector3_t * accBF, const fpVector3_t * magBF, bool useCOG, float courseOverGround, float accWScaler, float magWScaler) { STATIC_FASTRAM fpVector3_t vGyroDriftEstimate = { 0 }; @@ -394,18 +395,11 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe if (useCOG) { fpVector3_t vForward = { .v = { 0.0f, 0.0f, 0.0f } }; //vForward as trust vector - if STATE(MULTIROTOR){ + if (STATE(MULTIROTOR)){ vForward.z = 1.0f; }else{ vForward.x = 1.0f; } - if (STATE(MULTIROTOR)){ - //when multicopter`s orientation or speed is changing rapidly. less weight on gps heading - wCoG *= imuCalculateMcMagCogWeight(); - //scale accroading to multirotor`s tilt angle - wCoG *= scaleRangef(constrainf(vForward.z, COS5DEG, COS25DEG), COS5DEG, COS25DEG, 0.0f, 1.0f); - //for inverted flying, wCoG is lowered by imuCalculateMcMagCogWeight - } fpVector3_t vHeadingEF; // Use raw heading error (from GPS or whatever else) @@ -430,9 +424,17 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe vectorNormalize(&vCoG, &vCoG); } #endif - wCoG *= scaleRangef(constrainf((airSpeed+gpsSol.groundSpeed)/2, 400, 1500), 400, 1500, 0.0f, 1.0f); + wCoG *= scaleRangef(constrainf((airSpeed+gpsSol.groundSpeed)/2, 400, 1200), 400, 1200, 0.0f, 1.0f); // Rotate Forward vector from BF to EF - will yield Heading vector in Earth frame quaternionRotateVectorInv(&vHeadingEF, &vForward, &orientation); + + if (STATE(MULTIROTOR)){ + //when multicopter`s orientation or speed is changing rapidly. less weight on gps heading + wCoG *= imuCalculateMcCogWeight(); + //scale accroading to multirotor`s tilt angle + wCoG *= scaleRangef(constrainf(vHeadingEF.z, COS20DEG, COS5DEG), COS20DEG, COS5DEG, 1.0f, 0.0f); + //for inverted flying, wCoG is lowered by imuCalculateMcCogWeight no additional processing needed + } vHeadingEF.z = 0.0f; // We zeroed out vHeadingEF.z - make sure the whole vector didn't go to zero diff --git a/src/main/io/gps_fake.c b/src/main/io/gps_fake.c index 6d574893436..5b0de8c50b5 100644 --- a/src/main/io/gps_fake.c +++ b/src/main/io/gps_fake.c @@ -31,6 +31,7 @@ #include "platform.h" #include "build/build_config.h" +#include "common/log.h" #if defined(USE_GPS_FAKE) diff --git a/src/main/target/SITL/sim/realFlight.c b/src/main/target/SITL/sim/realFlight.c index 05ee701ddd8..b4e5b9283ab 100644 --- a/src/main/target/SITL/sim/realFlight.c +++ b/src/main/target/SITL/sim/realFlight.c @@ -296,9 +296,9 @@ static void exchangeData(void) //rfValues.m_orientationQuaternion_W = getDoubleFromResponse(response, "m-orientationQuaternion-W"); rfValues.m_aircraftPositionX_MTR = getDoubleFromResponse(response, "m-aircraftPositionX-MTR"); rfValues.m_aircraftPositionY_MTR = getDoubleFromResponse(response, "m-aircraftPositionY-MTR"); - //rfValues.m_velocityWorldU_MPS = getDoubleFromResponse(response, "m-velocityWorldU-MPS"); - //rfValues.m_velocityWorldV_MPS = getDoubleFromResponse(response, "m-velocityWorldV-MPS"); - //rfValues.m_velocityWorldW_MPS = getDoubleFromResponse(response, "m-velocityWorldW-MPS"); + rfValues.m_velocityWorldU_MPS = getDoubleFromResponse(response, "m-velocityWorldU-MPS"); + rfValues.m_velocityWorldV_MPS = getDoubleFromResponse(response, "m-velocityWorldV-MPS"); + rfValues.m_velocityWorldW_MPS = getDoubleFromResponse(response, "m-velocityWorldW-MPS"); //rfValues.m_velocityBodyU_MPS = getDoubleFromResponse(response, "m-velocityBodyU-MPS"); //rfValues.m_velocityBodyV_MPS = getDoubleFromResponse(response, "mm-velocityBodyV-MPS"); //rfValues.m_velocityBodyW_MPS = getDoubleFromResponse(response, "m-velocityBodyW-MPS"); @@ -332,7 +332,7 @@ static void exchangeData(void) float lat, lon; fakeCoords(FAKE_LAT, FAKE_LON, rfValues.m_aircraftPositionX_MTR, -rfValues.m_aircraftPositionY_MTR, &lat, &lon); - int16_t course = (int16_t)roundf(convertAzimuth(rfValues.m_azimuth_DEG) * 10); + int16_t course = (int16_t)roundf(RADIANS_TO_DECIDEGREES(atan2_approx(-rfValues.m_velocityWorldU_MPS,rfValues.m_velocityWorldV_MPS))); int32_t altitude = (int32_t)roundf(rfValues.m_altitudeASL_MTR * 100); gpsFakeSet( GPS_FIX_3D, @@ -342,9 +342,9 @@ static void exchangeData(void) altitude, (int16_t)roundf(rfValues.m_groundspeed_MPS * 100), course, - 0, - 0, - 0, + 0,//(int16_t)roundf(rfValues.m_velocityWorldV_MPS * 100), //not sure about the direction + 0,//(int16_t)roundf(-rfValues.m_velocityWorldU_MPS * 100), + 0,//(int16_t)roundf(rfValues.m_velocityWorldW_MPS * 100), 0 ); @@ -357,7 +357,7 @@ static void exchangeData(void) const int16_t roll_inav = (int16_t)roundf(rfValues.m_roll_DEG * 10); const int16_t pitch_inav = (int16_t)roundf(-rfValues.m_inclination_DEG * 10); - const int16_t yaw_inav = course; + const int16_t yaw_inav = (int16_t)roundf(convertAzimuth(rfValues.m_azimuth_DEG) * 10); if (!useImu) { imuSetAttitudeRPY(roll_inav, pitch_inav, yaw_inav); imuUpdateAttitude(micros()); From 4f518e7f5601d9572f584dff58cf1081fa9b234e Mon Sep 17 00:00:00 2001 From: shota Date: Wed, 25 Oct 2023 03:11:24 +0900 Subject: [PATCH 21/46] minor adjuestments --- src/main/flight/imu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index 3d0ce791f2a..2b13880d0ff 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -336,7 +336,7 @@ static float imuCalculateMcCogWeight(void) { float wCoG = imuCalculateAccelerometerWeightNearness(&imuMeasuredAccelBF); float rotRateMagnitude = fast_fsqrtf(vectorNormSquared(&imuMeasuredRotationBFFiltered)); - const float rateSlopeMax = DEGREES_TO_RADIANS((imuConfig()->acc_ignore_rate + imuConfig()->acc_ignore_slope)) * 4.0f; + const float rateSlopeMax = DEGREES_TO_RADIANS((imuConfig()->acc_ignore_rate)) * 4.0f; wCoG *= scaleRangef(constrainf(rotRateMagnitude, 0.0f, rateSlopeMax), 0.0f, rateSlopeMax, 1.0f, 0.0f); return wCoG; } @@ -424,7 +424,7 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe vectorNormalize(&vCoG, &vCoG); } #endif - wCoG *= scaleRangef(constrainf((airSpeed+gpsSol.groundSpeed)/2, 400, 1200), 400, 1200, 0.0f, 1.0f); + wCoG *= scaleRangef(constrainf((airSpeed+gpsSol.groundSpeed)/2, 400, 1000), 400, 1000, 0.0f, 1.0f); // Rotate Forward vector from BF to EF - will yield Heading vector in Earth frame quaternionRotateVectorInv(&vHeadingEF, &vForward, &orientation); From 9dbbd25f70ffdcd1d3789fc1f22859e8015013b3 Mon Sep 17 00:00:00 2001 From: shota Date: Wed, 25 Oct 2023 03:36:18 +0900 Subject: [PATCH 22/46] adjuestable gps yaw weight --- src/main/fc/settings.yaml | 11 ++++++----- src/main/flight/imu.c | 6 ++++-- src/main/flight/imu.h | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 237cf99cfdd..5d21793c0d3 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -1455,11 +1455,12 @@ groups: default_value: ADAPTIVE field: inertia_comp_method table: imu_inertia_comp_method - - name: ahrs_use_mag_no_gps - description: "Arhs will only use mag when gps is still avaliable" - default_value: OFF - field: use_mag_no_gps - type: bool + - name: ahrs_gps_yaw_weight + description: "Arhs gps yaw weight when mag is avaliable, 0 means no gps yaw, 100 means equal weight as compass" + default_value: 100 + field: gps_yaw_weight + min: 0 + max: 500 - name: PG_ARMING_CONFIG type: armingConfig_t diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index 2b13880d0ff..a5eba967501 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -128,7 +128,7 @@ PG_RESET_TEMPLATE(imuConfig_t, imuConfig, .acc_ignore_slope = SETTING_AHRS_ACC_IGNORE_SLOPE_DEFAULT, .gps_yaw_windcomp = SETTING_AHRS_GPS_YAW_WINDCOMP_DEFAULT, .inertia_comp_method = SETTING_AHRS_INERTIA_COMP_METHOD_DEFAULT, - .use_mag_no_gps = SETTING_AHRS_USE_MAG_NO_GPS_DEFAULT + .gps_yaw_weight = SETTING_AHRS_GPS_YAW_WEIGHT_DEFAULT ); STATIC_UNIT_TESTED void imuComputeRotationMatrix(void) @@ -356,6 +356,8 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe if (magBF || useCOG) { float wMag = 1.0f; float wCoG = 1.0f; + if(magBF){wCoG *= imuConfig()->gps_yaw_weight / 100.0f;} + fpVector3_t vMagErr = { .v = { 0.0f, 0.0f, 0.0f } }; fpVector3_t vCoGErr = { .v = { 0.0f, 0.0f, 0.0f } }; @@ -717,7 +719,7 @@ static void imuCalculateEstimatedAttitude(float dT) gpsHeadingInitialized = true; // GPS heading initialised from MAG, continue on GPS if compass fails } // Use GPS (if available) - if (canUseCOG && (!(imuConfig()->use_mag_no_gps && useMag))) { + if (canUseCOG) { if (gpsHeadingInitialized) { courseOverGround = DECIDEGREES_TO_RADIANS(gpsSol.groundCourse); useCOG = true; diff --git a/src/main/flight/imu.h b/src/main/flight/imu.h index 24904b98ba6..8afcc50e579 100644 --- a/src/main/flight/imu.h +++ b/src/main/flight/imu.h @@ -54,7 +54,7 @@ typedef struct imuConfig_s { uint8_t acc_ignore_slope; uint8_t gps_yaw_windcomp; uint8_t inertia_comp_method; - uint8_t use_mag_no_gps; + uint16_t gps_yaw_weight; } imuConfig_t; PG_DECLARE(imuConfig_t, imuConfig); From 600d0add2f6cb66c9657a1790160a2c818e3b0de Mon Sep 17 00:00:00 2001 From: shota Date: Wed, 25 Oct 2023 03:59:52 +0900 Subject: [PATCH 23/46] update documents --- docs/Settings.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/Settings.md b/docs/Settings.md index e00265306b7..46309f86348 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -242,6 +242,16 @@ Inertial Measurement Unit KP Gain for compass measurements --- +### ahrs_gps_yaw_weight + +Arhs gps yaw weight when mag is avaliable, 0 means no gps yaw, 100 means equal weight as compass + +| Default | Min | Max | +| --- | --- | --- | +| 100 | 0 | 500 | + +--- + ### ahrs_gps_yaw_windcomp Wind compensation in heading estimation from gps groundcourse(fixed wing only) @@ -1934,21 +1944,21 @@ _// TODO_ ### inav_w_z_baro_p -Weight of barometer measurements in estimated altitude and climb rate +Weight of barometer measurements in estimated altitude and climb rate. Setting is used on both airplanes and multirotors. | Default | Min | Max | | --- | --- | --- | -| 0.35 | 0 | 10 | +| 0.4 | 0 | 10 | --- ### inav_w_z_gps_p -Weight of GPS altitude measurements in estimated altitude. Setting is used only of airplanes +Weight of GPS altitude measurements in estimated altitude. Setting is used on both airplanes and multirotors. | Default | Min | Max | | --- | --- | --- | -| 0.2 | 0 | 10 | +| 0.4 | 0 | 10 | --- @@ -1958,7 +1968,7 @@ Weight of GPS climb rate measurements in estimated climb rate. Setting is used o | Default | Min | Max | | --- | --- | --- | -| 0.1 | 0 | 10 | +| 0.6 | 0 | 10 | --- From 195a062d27663ae286634cce81d7c3b1b22b983b Mon Sep 17 00:00:00 2001 From: shota Date: Wed, 25 Oct 2023 11:47:15 +0900 Subject: [PATCH 24/46] minor fix --- src/main/fc/settings.yaml | 2 +- src/main/navigation/navigation_pos_estimator.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 5d21793c0d3..63c0d15693e 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2336,7 +2336,7 @@ groups: field: w_z_gps_v min: 0 max: 10 - default_value: 0.6 + default_value: 0.8 - name: inav_w_xy_gps_p description: "Weight of GPS coordinates in estimated UAV position and speed." default_value: 1.0 diff --git a/src/main/navigation/navigation_pos_estimator.c b/src/main/navigation/navigation_pos_estimator.c index f8473a354f9..e2e6b523045 100755 --- a/src/main/navigation/navigation_pos_estimator.c +++ b/src/main/navigation/navigation_pos_estimator.c @@ -572,7 +572,7 @@ static bool estimationCalculateCorrection_Z(estimationContext_t * ctx) bool correctOK = false; - const float gpsBaroResidual = fabsf(posEstimator.gps.pos.z - posEstimator.baro.alt); //ignore baro if difference is too big, baro is probably wrong + const float gpsBaroResidual = ctx->newFlags & EST_GPS_Z_VALID ? fabsf(posEstimator.gps.pos.z - posEstimator.baro.alt) : 0.0f; //ignore baro if difference is too big, baro is probably wrong //use both baro and gps if ((ctx->newFlags & EST_BARO_VALID) && (!positionEstimationConfig()->use_gps_no_baro) && (gpsBaroResidual < positionEstimationConfig()->max_eph_epv * 2)) { timeUs_t currentTimeUs = micros(); From 4c4a74cdeffbe64f9ffbec32dd8f9b1cb48d1bb0 Mon Sep 17 00:00:00 2001 From: shota Date: Wed, 25 Oct 2023 15:23:33 +0900 Subject: [PATCH 25/46] fix pos estimator acc weight --- .../navigation/navigation_pos_estimator.c | 33 ++++++++++--------- src/main/sensors/acceleration.h | 2 +- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/main/navigation/navigation_pos_estimator.c b/src/main/navigation/navigation_pos_estimator.c index e2e6b523045..2fccdfa980f 100755 --- a/src/main/navigation/navigation_pos_estimator.c +++ b/src/main/navigation/navigation_pos_estimator.c @@ -373,18 +373,19 @@ static bool gravityCalibrationComplete(void) static void updateIMUEstimationWeight(const float dt) { - bool isAccClipped = accIsClipped(); - - // If accelerometer measurement is clipped - drop the acc weight to zero + static float acc_clip_factor = 1.0f; + // If accelerometer measurement is clipped - drop the acc weight to 0.3 // and gradually restore weight back to 1.0 over time - if (isAccClipped) { - posEstimator.imu.accWeightFactor = 0.0f; + if (accIsClipped()) { + acc_clip_factor = 0.5f; } else { const float relAlpha = dt / (dt + INAV_ACC_CLIPPING_RC_CONSTANT); - posEstimator.imu.accWeightFactor = posEstimator.imu.accWeightFactor * (1.0f - relAlpha) + 1.0f * relAlpha; + acc_clip_factor = acc_clip_factor * (1.0f - relAlpha) + 1.0f * relAlpha; } - + // Update accelerometer weight based on vibration levels and clipping + float acc_vibration_factor = scaleRangef(constrainf(accGetVibrationLevel(),1.0f,4.0f),1.0f,2.0f,1.0f,0.3f); // g/s + posEstimator.imu.accWeightFactor = acc_vibration_factor * acc_clip_factor; // DEBUG_VIBE[0-3] are used in IMU DEBUG_SET(DEBUG_VIBE, 4, posEstimator.imu.accWeightFactor * 1000); } @@ -534,13 +535,12 @@ static uint32_t calculateCurrentValidityFlags(timeUs_t currentTimeUs) static void estimationPredict(estimationContext_t * ctx) { - const float accWeight = navGetAccelerometerWeight(); /* Prediction step: Z-axis */ if ((ctx->newFlags & EST_Z_VALID)) { posEstimator.est.pos.z += posEstimator.est.vel.z * ctx->dt; - posEstimator.est.pos.z += posEstimator.imu.accelNEU.z * sq(ctx->dt) / 2.0f * accWeight; - posEstimator.est.vel.z += posEstimator.imu.accelNEU.z * ctx->dt * sq(accWeight); + posEstimator.est.pos.z += posEstimator.imu.accelNEU.z * sq(ctx->dt) / 2.0f; + posEstimator.est.vel.z += posEstimator.imu.accelNEU.z * ctx->dt; } /* Prediction step: XY-axis */ @@ -551,10 +551,10 @@ static void estimationPredict(estimationContext_t * ctx) // If heading is valid, accelNEU is valid as well. Account for acceleration if (navIsHeadingUsable() && navIsAccelerationUsable()) { - posEstimator.est.pos.x += posEstimator.imu.accelNEU.x * sq(ctx->dt) / 2.0f * accWeight; - posEstimator.est.pos.y += posEstimator.imu.accelNEU.y * sq(ctx->dt) / 2.0f * accWeight; - posEstimator.est.vel.x += posEstimator.imu.accelNEU.x * ctx->dt * sq(accWeight); - posEstimator.est.vel.y += posEstimator.imu.accelNEU.y * ctx->dt * sq(accWeight); + posEstimator.est.pos.x += posEstimator.imu.accelNEU.x * sq(ctx->dt) / 2.0f; + posEstimator.est.pos.y += posEstimator.imu.accelNEU.y * sq(ctx->dt) / 2.0f; + posEstimator.est.vel.x += posEstimator.imu.accelNEU.x * ctx->dt; + posEstimator.est.vel.y += posEstimator.imu.accelNEU.y * ctx->dt; } } } @@ -754,7 +754,10 @@ static void updateEstimatedTopic(timeUs_t currentTimeUs) if (!estZCorrectOk || ctx.newEPV > positionEstimationConfig()->max_eph_epv) { ctx.estVelCorr.z = (0.0f - posEstimator.est.vel.z) * positionEstimationConfig()->w_z_res_v * ctx.dt; } - + // Boost the corrections based on accWeight + const float accWeight = navGetAccelerometerWeight(); + vectorScale(&ctx.estPosCorr, &ctx.estPosCorr, 1.0f/accWeight); + vectorScale(&ctx.estVelCorr, &ctx.estVelCorr, 1.0f/accWeight); // Apply corrections vectorAdd(&posEstimator.est.pos, &posEstimator.est.pos, &ctx.estPosCorr); vectorAdd(&posEstimator.est.vel, &posEstimator.est.vel, &ctx.estVelCorr); diff --git a/src/main/sensors/acceleration.h b/src/main/sensors/acceleration.h index d81a83a9084..ff643f4a153 100644 --- a/src/main/sensors/acceleration.h +++ b/src/main/sensors/acceleration.h @@ -27,7 +27,7 @@ #define GRAVITY_CMSS 980.665f #define GRAVITY_MSS 9.80665f -#define ACC_CLIPPING_THRESHOLD_G 7.9f +#define ACC_CLIPPING_THRESHOLD_G 15.9f #define ACC_VIBE_FLOOR_FILT_HZ 5.0f #define ACC_VIBE_FILT_HZ 2.0f From 3978947777666e9decbdf9ac36df916e578a746c Mon Sep 17 00:00:00 2001 From: shota Date: Wed, 25 Oct 2023 15:25:00 +0900 Subject: [PATCH 26/46] update docs --- docs/Settings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Settings.md b/docs/Settings.md index 46309f86348..4007ed1f654 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -1968,7 +1968,7 @@ Weight of GPS climb rate measurements in estimated climb rate. Setting is used o | Default | Min | Max | | --- | --- | --- | -| 0.6 | 0 | 10 | +| 0.8 | 0 | 10 | --- From 8e7cc6bb32c34950d8074c1b47805d986978cd65 Mon Sep 17 00:00:00 2001 From: shota Date: Thu, 26 Oct 2023 00:16:33 +0900 Subject: [PATCH 27/46] fixes display issue in configurator sensors tab --- src/main/fc/fc_msp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/fc/fc_msp.c b/src/main/fc/fc_msp.c index cdaac609baa..c827e07890d 100644 --- a/src/main/fc/fc_msp.c +++ b/src/main/fc/fc_msp.c @@ -477,7 +477,7 @@ static bool mspFcProcessOutCommand(uint16_t cmdMSP, sbuf_t *dst, mspPostProcessF } for (int i = 0; i < 3; i++) { #ifdef USE_MAG - sbufWriteU16(dst, mag.magADC[i]); + sbufWriteU16(dst, lrintf(mag.magADC[i])); #else sbufWriteU16(dst, 0); #endif From 59d1cae1c83589ad84cbe1f37a0ba7722e40b89e Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 10 Sep 2021 20:22:49 +0900 Subject: [PATCH 28/46] add_iflight f7 minor fix added IFLIGHTF7_SXE target updates on custom targets --- src/main/target/IFLIGHTF7_SXE/CMakeLists.txt | 1 + src/main/target/IFLIGHTF7_SXE/target.c | 41 +++++ src/main/target/IFLIGHTF7_SXE/target.h | 146 ++++++++++++++++++ .../target/IFLIGHTF7_SXEMINI/CMakeLists.txt | 1 + src/main/target/IFLIGHTF7_SXEMINI/target.c | 41 +++++ src/main/target/IFLIGHTF7_SXEMINI/target.h | 146 ++++++++++++++++++ 6 files changed, 376 insertions(+) create mode 100644 src/main/target/IFLIGHTF7_SXE/CMakeLists.txt create mode 100644 src/main/target/IFLIGHTF7_SXE/target.c create mode 100644 src/main/target/IFLIGHTF7_SXE/target.h create mode 100644 src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt create mode 100644 src/main/target/IFLIGHTF7_SXEMINI/target.c create mode 100644 src/main/target/IFLIGHTF7_SXEMINI/target.h diff --git a/src/main/target/IFLIGHTF7_SXE/CMakeLists.txt b/src/main/target/IFLIGHTF7_SXE/CMakeLists.txt new file mode 100644 index 00000000000..59b5b32f0c7 --- /dev/null +++ b/src/main/target/IFLIGHTF7_SXE/CMakeLists.txt @@ -0,0 +1 @@ +target_stm32f722xe(IFLIGHTF7_SXE) diff --git a/src/main/target/IFLIGHTF7_SXE/target.c b/src/main/target/IFLIGHTF7_SXE/target.c new file mode 100644 index 00000000000..33bc3741821 --- /dev/null +++ b/src/main/target/IFLIGHTF7_SXE/target.c @@ -0,0 +1,41 @@ +/* +* This file is part of Cleanflight. +* +* Cleanflight is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Cleanflight is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with Cleanflight. If not, see . +*/ + +#include +#include "platform.h" +#include "drivers/bus.h" +#include "drivers/io.h" +#include "drivers/pwm_mapping.h" +#include "drivers/timer.h" +#include "drivers/sensor.h" + +// Board hardware definitions + +timerHardware_t timerHardware[] = { + DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), //RX2 + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), //M1 + DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), //M2 + DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), //M3 + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), //M4 + DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), //M5 + DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), //M6 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), //M7 + DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), //M8 + DEF_TIM(TIM2, CH2, PA1, TIM_USE_LED, 0, 0), //LED STRIP +}; + +const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/IFLIGHTF7_SXE/target.h b/src/main/target/IFLIGHTF7_SXE/target.h new file mode 100644 index 00000000000..5b3d68770d8 --- /dev/null +++ b/src/main/target/IFLIGHTF7_SXE/target.h @@ -0,0 +1,146 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Cleanflight is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cleanflight. If not, see . + */ + +#pragma once + +#define TARGET_BOARD_IDENTIFIER "IF7E" +#define USBD_PRODUCT_STRING "IFLIGHTF7_SXE" + +#define LED0 PC4 +#define BEEPER PC15 +#define BEEPER_INVERTED + +// *************** Gyro & ACC ********************** +#define USE_SPI +#define USE_SPI_DEVICE_1 +#define SPI1_SCK_PIN PA5 +#define SPI1_MISO_PIN PA6 +#define SPI1_MOSI_PIN PA7 + +// MPU6000 +#define USE_IMU_MPU6000 +#define IMU_MPU6000_ALIGN CW180_DEG +#define MPU6000_SPI_BUS BUS_SPI1 +#define MPU6000_EXTI_PIN PA8 +#define MPU6000_CS_PIN PA15 + +#define USE_EXTI +#define USE_MPU_DATA_READY_SIGNAL + +// *************** I2C/Baro/Mag ********************* +#define USE_I2C +#define USE_I2C_DEVICE_2 +#define I2C2_SCL PB10 +#define I2C2_SDA PB11 + +#define USE_BARO +#define BARO_I2C_BUS BUS_I2C2 +#define USE_BARO_BMP280 +#define USE_BARO_DPS310 + +#define USE_MAG +#define MAG_I2C_BUS BUS_I2C2 +#define USE_MAG_HMC5883 +#define USE_MAG_QMC5883 +#define USE_MAG_IST8310 +#define USE_MAG_IST8308 +#define USE_MAG_MAG3110 +#define USE_MAG_LIS3MDL + +#define TEMPERATURE_I2C_BUS BUS_I2C2 + +#define PITOT_I2C_BUS BUS_I2C2 + +#define USE_RANGEFINDER +#define RANGEFINDER_I2C_BUS BUS_I2C2 +#define BNO055_I2C_BUS BUS_I2C2 + +// *************** FLASH ************************** +#define M25P16_CS_PIN PB9 +#define M25P16_SPI_BUS BUS_SPI3 +#define USE_FLASHFS +#define USE_FLASH_M25P16 +#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT + +#define USE_SPI_DEVICE_3 +#define SPI3_SCK_PIN PB3 +#define SPI3_MISO_PIN PB4 +#define SPI3_MOSI_PIN PB5 + +// *************** OSD ***************************** +#define USE_SPI_DEVICE_2 +#define SPI2_SCK_PIN PB13 +#define SPI2_MISO_PIN PB14 +#define SPI2_MOSI_PIN PB15 + +#define USE_MAX7456 +#define MAX7456_SPI_BUS BUS_SPI2 +#define MAX7456_CS_PIN PB12 + +// *************** UART ***************************** +#define USE_VCP + +#define USE_UART1 +#define UART1_RX_PIN PA10 +#define UART1_TX_PIN PA9 + +#define USE_UART2 +#define UART2_RX_PIN PA3 +#define UART2_TX_PIN PA2 + +#define USE_UART4 +#define UART4_RX_PIN PC11 +#define UART4_TX_PIN PC10 + +#define USE_UART5 +#define UART5_RX_PIN PD2 +#define UART5_TX_PIN PC12 + +#define SERIAL_PORT_COUNT 5 + +#define DEFAULT_RX_TYPE RX_TYPE_SERIAL +#define SERIALRX_PROVIDER SERIALRX_SBUS +#define SERIALRX_UART SERIAL_PORT_USART2 + +// *************** ADC ***************************** +#define USE_ADC +#define ADC_INSTANCE ADC1 +#define ADC1_DMA_STREAM DMA2_Stream0 +#define ADC_CHANNEL_1_PIN PC1 +#define ADC_CHANNEL_2_PIN PC2 +#define ADC_CHANNEL_3_PIN PC0 + +#define VBAT_ADC_CHANNEL ADC_CHN_1 +#define CURRENT_METER_ADC_CHANNEL ADC_CHN_2 +#define RSSI_ADC_CHANNEL ADC_CHN_3 + +#define DEFAULT_FEATURES (FEATURE_TX_PROF_SEL | FEATURE_CURRENT_METER | FEATURE_TELEMETRY | FEATURE_VBAT | FEATURE_OSD | FEATURE_BLACKBOX) + +#define USE_LED_STRIP +#define WS2811_PIN PA1 + +#define USE_SERIAL_4WAY_BLHELI_INTERFACE + +#define TARGET_IO_PORTA 0xffff +#define TARGET_IO_PORTB 0xffff +#define TARGET_IO_PORTC 0xffff +#define TARGET_IO_PORTD (BIT(2)) + +#define MAX_PWM_OUTPUT_PORTS 8 + +#define USE_DSHOT +#define USE_ESC_SENSOR diff --git a/src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt b/src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt new file mode 100644 index 00000000000..980598fdbdf --- /dev/null +++ b/src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt @@ -0,0 +1 @@ +target_stm32f722xe(IFLIGHTF7_SXEMINI) diff --git a/src/main/target/IFLIGHTF7_SXEMINI/target.c b/src/main/target/IFLIGHTF7_SXEMINI/target.c new file mode 100644 index 00000000000..33bc3741821 --- /dev/null +++ b/src/main/target/IFLIGHTF7_SXEMINI/target.c @@ -0,0 +1,41 @@ +/* +* This file is part of Cleanflight. +* +* Cleanflight is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Cleanflight is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with Cleanflight. If not, see . +*/ + +#include +#include "platform.h" +#include "drivers/bus.h" +#include "drivers/io.h" +#include "drivers/pwm_mapping.h" +#include "drivers/timer.h" +#include "drivers/sensor.h" + +// Board hardware definitions + +timerHardware_t timerHardware[] = { + DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), //RX2 + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), //M1 + DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), //M2 + DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), //M3 + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), //M4 + DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), //M5 + DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), //M6 + DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), //M7 + DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), //M8 + DEF_TIM(TIM2, CH2, PA1, TIM_USE_LED, 0, 0), //LED STRIP +}; + +const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/IFLIGHTF7_SXEMINI/target.h b/src/main/target/IFLIGHTF7_SXEMINI/target.h new file mode 100644 index 00000000000..11a60a72b52 --- /dev/null +++ b/src/main/target/IFLIGHTF7_SXEMINI/target.h @@ -0,0 +1,146 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Cleanflight is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cleanflight. If not, see . + */ + +#pragma once + +#define TARGET_BOARD_IDENTIFIER "IF7E" +#define USBD_PRODUCT_STRING "IFLIGHTF7_SXEMINI" + +#define LED0 PC4 +#define BEEPER PC15 +#define BEEPER_INVERTED + +// *************** Gyro & ACC ********************** +#define USE_SPI +#define USE_SPI_DEVICE_1 +#define SPI1_SCK_PIN PA5 +#define SPI1_MISO_PIN PA6 +#define SPI1_MOSI_PIN PA7 + +// MPU6000 +#define USE_IMU_MPU6000 +#define IMU_MPU6000_ALIGN CW270_DEG +#define MPU6000_SPI_BUS BUS_SPI1 +#define MPU6000_EXTI_PIN PA8 +#define MPU6000_CS_PIN PA15 + +#define USE_EXTI +#define USE_MPU_DATA_READY_SIGNAL + +// *************** I2C/Baro/Mag ********************* +#define USE_I2C +#define USE_I2C_DEVICE_2 +#define I2C2_SCL PB10 +#define I2C2_SDA PB11 + +#define USE_BARO +#define BARO_I2C_BUS BUS_I2C2 +#define USE_BARO_BMP280 +#define USE_BARO_DPS310 + +#define USE_MAG +#define MAG_I2C_BUS BUS_I2C2 +#define USE_MAG_HMC5883 +#define USE_MAG_QMC5883 +#define USE_MAG_IST8310 +#define USE_MAG_IST8308 +#define USE_MAG_MAG3110 +#define USE_MAG_LIS3MDL + +#define TEMPERATURE_I2C_BUS BUS_I2C2 + +#define PITOT_I2C_BUS BUS_I2C2 + +#define USE_RANGEFINDER +#define RANGEFINDER_I2C_BUS BUS_I2C2 +#define BNO055_I2C_BUS BUS_I2C2 + +// *************** FLASH ************************** +#define M25P16_CS_PIN PB9 +#define M25P16_SPI_BUS BUS_SPI3 +#define USE_FLASHFS +#define USE_FLASH_M25P16 +#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT + +#define USE_SPI_DEVICE_3 +#define SPI3_SCK_PIN PB3 +#define SPI3_MISO_PIN PB4 +#define SPI3_MOSI_PIN PB5 + +// *************** OSD ***************************** +#define USE_SPI_DEVICE_2 +#define SPI2_SCK_PIN PB13 +#define SPI2_MISO_PIN PB14 +#define SPI2_MOSI_PIN PB15 + +#define USE_MAX7456 +#define MAX7456_SPI_BUS BUS_SPI2 +#define MAX7456_CS_PIN PB12 + +// *************** UART ***************************** +#define USE_VCP + +#define USE_UART1 +#define UART1_RX_PIN PA10 +#define UART1_TX_PIN PA9 + +#define USE_UART2 +#define UART2_RX_PIN PA3 +#define UART2_TX_PIN PA2 + +#define USE_UART4 +#define UART4_RX_PIN PC11 +#define UART4_TX_PIN PC10 + +#define USE_UART5 +#define UART5_RX_PIN PD2 +#define UART5_TX_PIN PC12 + +#define SERIAL_PORT_COUNT 5 + +#define DEFAULT_RX_TYPE RX_TYPE_SERIAL +#define SERIALRX_PROVIDER SERIALRX_SBUS +#define SERIALRX_UART SERIAL_PORT_USART2 + +// *************** ADC ***************************** +#define USE_ADC +#define ADC_INSTANCE ADC1 +#define ADC1_DMA_STREAM DMA2_Stream0 +#define ADC_CHANNEL_1_PIN PC1 +#define ADC_CHANNEL_2_PIN PC2 +#define ADC_CHANNEL_3_PIN PC0 + +#define VBAT_ADC_CHANNEL ADC_CHN_1 +#define CURRENT_METER_ADC_CHANNEL ADC_CHN_2 +#define RSSI_ADC_CHANNEL ADC_CHN_3 + +#define DEFAULT_FEATURES (FEATURE_TX_PROF_SEL | FEATURE_CURRENT_METER | FEATURE_TELEMETRY | FEATURE_VBAT | FEATURE_OSD | FEATURE_BLACKBOX) + +#define USE_LED_STRIP +#define WS2811_PIN PA1 + +#define USE_SERIAL_4WAY_BLHELI_INTERFACE + +#define TARGET_IO_PORTA 0xffff +#define TARGET_IO_PORTB 0xffff +#define TARGET_IO_PORTC 0xffff +#define TARGET_IO_PORTD (BIT(2)) + +#define MAX_PWM_OUTPUT_PORTS 8 + +#define USE_DSHOT +#define USE_ESC_SENSOR From eb6634da67b40cd7cb1860e3fbf5944bc9f6ca7d Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 27 Oct 2023 00:56:26 +0900 Subject: [PATCH 29/46] minor fix on cog yaw estimation add acc vibration to blackbox adjustments in imu cog minor fix on blackbox --- src/main/blackbox/blackbox.c | 5 +++++ src/main/flight/imu.c | 7 ++++--- src/main/sensors/acceleration.c | 3 ++- src/main/sensors/acceleration.h | 1 + 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/blackbox/blackbox.c b/src/main/blackbox/blackbox.c index cb12a7a8968..ae64a3e35a2 100644 --- a/src/main/blackbox/blackbox.c +++ b/src/main/blackbox/blackbox.c @@ -310,6 +310,7 @@ static const blackboxDeltaFieldDefinition_t blackboxMainFields[] = { {"accSmooth", 0, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), FLIGHT_LOG_FIELD_CONDITION_ACC}, {"accSmooth", 1, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), FLIGHT_LOG_FIELD_CONDITION_ACC}, {"accSmooth", 2, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), FLIGHT_LOG_FIELD_CONDITION_ACC}, + {"accVib", -1, UNSIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(UNSIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), FLIGHT_LOG_FIELD_CONDITION_ACC}, {"attitude", 0, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), FLIGHT_LOG_FIELD_CONDITION_ATTITUDE}, {"attitude", 1, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), FLIGHT_LOG_FIELD_CONDITION_ATTITUDE}, {"attitude", 2, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(AVERAGE_2), .Pencode = ENCODING(SIGNED_VB), FLIGHT_LOG_FIELD_CONDITION_ATTITUDE}, @@ -487,6 +488,7 @@ typedef struct blackboxMainState_s { int16_t gyroPeaksYaw[DYN_NOTCH_PEAK_COUNT]; int16_t accADC[XYZ_AXIS_COUNT]; + int16_t accVib; int16_t attitude[XYZ_AXIS_COUNT]; int32_t debug[DEBUG32_VALUE_COUNT]; int16_t motor[MAX_SUPPORTED_MOTORS]; @@ -917,6 +919,7 @@ static void writeIntraframe(void) if (testBlackboxCondition(FLIGHT_LOG_FIELD_CONDITION_ACC)) { blackboxWriteSigned16VBArray(blackboxCurrent->accADC, XYZ_AXIS_COUNT); + blackboxWriteUnsignedVB(blackboxCurrent->accVib); } if (testBlackboxCondition(FLIGHT_LOG_FIELD_CONDITION_ATTITUDE)) { @@ -1182,6 +1185,7 @@ static void writeInterframe(void) if (testBlackboxCondition(FLIGHT_LOG_FIELD_CONDITION_ACC)) { blackboxWriteArrayUsingAveragePredictor16(offsetof(blackboxMainState_t, accADC), XYZ_AXIS_COUNT); + blackboxWriteSignedVB(blackboxCurrent->accVib - blackboxLast->accVib); } if (testBlackboxCondition(FLIGHT_LOG_FIELD_CONDITION_ATTITUDE)) { @@ -1601,6 +1605,7 @@ static void loadMainState(timeUs_t currentTimeUs) blackboxCurrent->mcVelAxisOutput[i] = lrintf(nav_pids->vel[i].output_constrained); } } + blackboxCurrent->accVib = lrintf(accGetVibrationLevel() * acc.dev.acc_1G); if (STATE(FIXED_WING_LEGACY)) { diff --git a/src/main/flight/imu.c b/src/main/flight/imu.c index a5eba967501..afdc86e6bf9 100644 --- a/src/main/flight/imu.c +++ b/src/main/flight/imu.c @@ -49,6 +49,7 @@ #include "flight/imu.h" #include "flight/mixer.h" +#include "flight/mixer_profile.h" #include "flight/pid.h" #if defined(USE_WIND_ESTIMATOR) #include "flight/wind_estimator.h" @@ -78,7 +79,7 @@ #define SPIN_RATE_LIMIT 20 #define MAX_ACC_NEARNESS 0.2 // 20% or G error soft-accepted (0.8-1.2G) #define MAX_MAG_NEARNESS 0.25 // 25% or magnetic field error soft-accepted (0.75-1.25) -#define COS5DEG 0.996f +#define COS10DEG 0.985f #define COS20DEG 0.940f #define IMU_ROTATION_LPF 3 // Hz FASTRAM fpVector3_t imuMeasuredAccelBF; @@ -397,7 +398,7 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe if (useCOG) { fpVector3_t vForward = { .v = { 0.0f, 0.0f, 0.0f } }; //vForward as trust vector - if (STATE(MULTIROTOR)){ + if (STATE(MULTIROTOR) && (!isMixerTransitionMixing)){ vForward.z = 1.0f; }else{ vForward.x = 1.0f; @@ -434,7 +435,7 @@ static void imuMahonyAHRSupdate(float dt, const fpVector3_t * gyroBF, const fpVe //when multicopter`s orientation or speed is changing rapidly. less weight on gps heading wCoG *= imuCalculateMcCogWeight(); //scale accroading to multirotor`s tilt angle - wCoG *= scaleRangef(constrainf(vHeadingEF.z, COS20DEG, COS5DEG), COS20DEG, COS5DEG, 1.0f, 0.0f); + wCoG *= scaleRangef(constrainf(vHeadingEF.z, COS20DEG, COS10DEG), COS20DEG, COS10DEG, 1.0f, 0.0f); //for inverted flying, wCoG is lowered by imuCalculateMcCogWeight no additional processing needed } vHeadingEF.z = 0.0f; diff --git a/src/main/sensors/acceleration.c b/src/main/sensors/acceleration.c index f897d7e580a..695f49b00b2 100644 --- a/src/main/sensors/acceleration.c +++ b/src/main/sensors/acceleration.c @@ -576,6 +576,7 @@ void accUpdate(void) // calc difference from this sample and 5hz filtered value, square and filter at 2hz const float accDiff = acc.accADCf[axis] - accFloorFilt; acc.accVibeSq[axis] = pt1FilterApply(&accVibeFilter[axis], accDiff * accDiff); + acc.accVibe = fast_fsqrtf(acc.accVibeSq[X] + acc.accVibeSq[Y] + acc.accVibeSq[Z]); } // Filter acceleration @@ -612,7 +613,7 @@ void accGetVibrationLevels(fpVector3_t *accVibeLevels) float accGetVibrationLevel(void) { - return fast_fsqrtf(acc.accVibeSq[X] + acc.accVibeSq[Y] + acc.accVibeSq[Z]); + return acc.accVibe; } uint32_t accGetClipCount(void) diff --git a/src/main/sensors/acceleration.h b/src/main/sensors/acceleration.h index ff643f4a153..f3385edc6d5 100644 --- a/src/main/sensors/acceleration.h +++ b/src/main/sensors/acceleration.h @@ -58,6 +58,7 @@ typedef struct acc_s { uint32_t accTargetLooptime; float accADCf[XYZ_AXIS_COUNT]; // acceleration in g float accVibeSq[XYZ_AXIS_COUNT]; + float accVibe; uint32_t accClipCount; bool isClipped; acc_extremes_t extremes[XYZ_AXIS_COUNT]; From b911185a881c03e53c0a30d4b2131444fa7405a0 Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 27 Oct 2023 12:03:25 +0900 Subject: [PATCH 30/46] adjustments --- docs/Settings.md | 10 ---------- src/main/fc/settings.yaml | 5 ----- src/main/navigation/navigation.h | 1 - src/main/navigation/navigation_pos_estimator.c | 9 ++++----- 4 files changed, 4 insertions(+), 21 deletions(-) diff --git a/docs/Settings.md b/docs/Settings.md index ca98e074c29..c1a109f3593 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -1922,16 +1922,6 @@ Decay coefficient for estimated velocity when GPS reference for position is lost --- -### inav_w_xyz_acc_p - -_// TODO_ - -| Default | Min | Max | -| --- | --- | --- | -| 1.0 | 0 | 1 | - ---- - ### inav_w_z_baro_p Weight of barometer measurements in estimated altitude and climb rate. Setting is used on both airplanes and multirotors. diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 91292198daf..90e7cff250b 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2366,11 +2366,6 @@ groups: field: w_xy_res_v min: 0 max: 10 - - name: inav_w_xyz_acc_p - field: w_xyz_acc_p - min: 0 - max: 1 - default_value: 1.0 - name: inav_w_acc_bias description: "Weight for accelerometer drift estimation" default_value: 0.01 diff --git a/src/main/navigation/navigation.h b/src/main/navigation/navigation.h index ecc487cc9e7..57f8a192b41 100644 --- a/src/main/navigation/navigation.h +++ b/src/main/navigation/navigation.h @@ -203,7 +203,6 @@ typedef struct positionEstimationConfig_s { float w_xy_res_v; float w_acc_bias; // Weight (cutoff frequency) for accelerometer bias estimation. 0 to disable. - float w_xyz_acc_p; float max_eph_epv; // Max estimated position error acceptable for estimation (cm) float baro_epv; // Baro position error diff --git a/src/main/navigation/navigation_pos_estimator.c b/src/main/navigation/navigation_pos_estimator.c index a18b6abec15..1b561e98810 100755 --- a/src/main/navigation/navigation_pos_estimator.c +++ b/src/main/navigation/navigation_pos_estimator.c @@ -70,8 +70,6 @@ PG_RESET_TEMPLATE(positionEstimationConfig_t, positionEstimationConfig, .max_surface_altitude = SETTING_INAV_MAX_SURFACE_ALTITUDE_DEFAULT, - .w_xyz_acc_p = SETTING_INAV_W_XYZ_ACC_P_DEFAULT, - .w_z_baro_p = SETTING_INAV_W_Z_BARO_P_DEFAULT, .w_z_surface_p = SETTING_INAV_W_Z_SURFACE_P_DEFAULT, @@ -389,7 +387,8 @@ static bool gravityCalibrationComplete(void) return zeroCalibrationIsCompleteS(&posEstimator.imu.gravityCalibration); } - +#define ACC_VIB_FACTOR_S 1.0f +#define ACC_VIB_FACTOR_E 3.0f static void updateIMUEstimationWeight(const float dt) { static float acc_clip_factor = 1.0f; @@ -403,7 +402,7 @@ static void updateIMUEstimationWeight(const float dt) acc_clip_factor = acc_clip_factor * (1.0f - relAlpha) + 1.0f * relAlpha; } // Update accelerometer weight based on vibration levels and clipping - float acc_vibration_factor = scaleRangef(constrainf(accGetVibrationLevel(),1.0f,4.0f),1.0f,2.0f,1.0f,0.3f); // g/s + float acc_vibration_factor = scaleRangef(constrainf(accGetVibrationLevel(),ACC_VIB_FACTOR_S,ACC_VIB_FACTOR_E),ACC_VIB_FACTOR_S,ACC_VIB_FACTOR_E,1.0f,0.3f); // g/s posEstimator.imu.accWeightFactor = acc_vibration_factor * acc_clip_factor; // DEBUG_VIBE[0-3] are used in IMU DEBUG_SET(DEBUG_VIBE, 4, posEstimator.imu.accWeightFactor * 1000); @@ -411,7 +410,7 @@ static void updateIMUEstimationWeight(const float dt) float navGetAccelerometerWeight(void) { - const float accWeightScaled = posEstimator.imu.accWeightFactor * positionEstimationConfig()->w_xyz_acc_p; + const float accWeightScaled = posEstimator.imu.accWeightFactor; DEBUG_SET(DEBUG_VIBE, 5, accWeightScaled * 1000); return accWeightScaled; From a0f353eb49e8d549443abfd3b6155cff69ab9d4e Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 29 Oct 2023 17:04:56 +0900 Subject: [PATCH 31/46] separate the nav climb rate settings for fw and mc --- src/main/cms/cms_menu_navigation.c | 5 ++-- src/main/fc/fc_msp.c | 12 +++++--- src/main/fc/settings.yaml | 30 ++++++++++++-------- src/main/navigation/navigation.c | 5 ++-- src/main/navigation/navigation.h | 5 ++-- src/main/navigation/navigation_fixedwing.c | 2 +- src/main/navigation/navigation_multicopter.c | 16 +++++------ 7 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/main/cms/cms_menu_navigation.c b/src/main/cms/cms_menu_navigation.c index a54843afc40..f5b12301028 100644 --- a/src/main/cms/cms_menu_navigation.c +++ b/src/main/cms/cms_menu_navigation.c @@ -45,8 +45,9 @@ static const OSD_Entry cmsx_menuNavSettingsEntries[] = OSD_SETTING_ENTRY("MC NAV SPEED", SETTING_NAV_AUTO_SPEED), OSD_SETTING_ENTRY("MC MAX NAV SPEED", SETTING_NAV_MAX_AUTO_SPEED), OSD_SETTING_ENTRY("MAX CRUISE SPEED", SETTING_NAV_MANUAL_SPEED), - OSD_SETTING_ENTRY("MAX NAV CLIMB RATE", SETTING_NAV_AUTO_CLIMB_RATE), - OSD_SETTING_ENTRY("MAX AH CLIMB RATE", SETTING_NAV_MANUAL_CLIMB_RATE), + OSD_SETTING_ENTRY("MAX NAV CLIMB RATE", SETTING_NAV_MC_AUTO_CLIMB_RATE), + OSD_SETTING_ENTRY("MAX MC AH CLIMB RATE", SETTING_NAV_MC_MANUAL_CLIMB_RATE), + OSD_SETTING_ENTRY("MAX FW AH CLIMB RATE", SETTING_NAV_FW_MANUAL_CLIMB_RATE), OSD_SETTING_ENTRY("MC MAX BANK ANGLE", SETTING_NAV_MC_BANK_ANGLE), OSD_SETTING_ENTRY("MC ALTHOLD THROT", SETTING_NAV_MC_ALTHOLD_THROTTLE), OSD_SETTING_ENTRY("MC HOVER THR", SETTING_NAV_MC_HOVER_THR), diff --git a/src/main/fc/fc_msp.c b/src/main/fc/fc_msp.c index f504ffb0598..bc260a64935 100644 --- a/src/main/fc/fc_msp.c +++ b/src/main/fc/fc_msp.c @@ -1310,9 +1310,9 @@ static bool mspFcProcessOutCommand(uint16_t cmdMSP, sbuf_t *dst, mspPostProcessF case MSP_NAV_POSHOLD: sbufWriteU8(dst, navConfig()->general.flags.user_control_mode); sbufWriteU16(dst, navConfig()->general.max_auto_speed); - sbufWriteU16(dst, navConfig()->general.max_auto_climb_rate); + sbufWriteU16(dst, navConfig()->mc.max_auto_climb_rate); sbufWriteU16(dst, navConfig()->general.max_manual_speed); - sbufWriteU16(dst, navConfig()->general.max_manual_climb_rate); + sbufWriteU16(dst, mixerConfig()->platformType != PLATFORM_AIRPLANE ? navConfig()->mc.max_manual_climb_rate:navConfig()->fw.max_manual_climb_rate); sbufWriteU8(dst, navConfig()->mc.max_bank_angle); sbufWriteU8(dst, navConfig()->mc.althold_throttle_type); sbufWriteU16(dst, currentBatteryProfile->nav.mc.hover_throttle); @@ -2321,9 +2321,13 @@ static mspResult_e mspFcProcessInCommand(uint16_t cmdMSP, sbuf_t *src) if (dataSize == 13) { navConfigMutable()->general.flags.user_control_mode = sbufReadU8(src); navConfigMutable()->general.max_auto_speed = sbufReadU16(src); - navConfigMutable()->general.max_auto_climb_rate = sbufReadU16(src); + navConfigMutable()->mc.max_auto_climb_rate = sbufReadU16(src); navConfigMutable()->general.max_manual_speed = sbufReadU16(src); - navConfigMutable()->general.max_manual_climb_rate = sbufReadU16(src); + if (mixerConfig()->platformType != PLATFORM_AIRPLANE) { + navConfigMutable()->mc.max_manual_climb_rate = sbufReadU16(src); + }else{ + navConfigMutable()->fw.max_manual_climb_rate = sbufReadU16(src); + } navConfigMutable()->mc.max_bank_angle = sbufReadU8(src); navConfigMutable()->mc.althold_throttle_type = sbufReadU8(src); currentBatteryProfileMutable->nav.mc.hover_throttle = sbufReadU16(src); diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index b1bb61ed091..eb819404267 100755 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -2489,24 +2489,12 @@ groups: field: general.max_auto_speed min: 10 max: 2000 - - name: nav_auto_climb_rate - description: "Maximum climb/descent rate that UAV is allowed to reach during navigation modes. [cm/s]" - default_value: 500 - field: general.max_auto_climb_rate - min: 10 - max: 2000 - name: nav_manual_speed description: "Maximum speed allowed when processing pilot input for POSHOLD/CRUISE control mode [cm/s] [Multirotor only]" default_value: 500 field: general.max_manual_speed min: 10 max: 2000 - - name: nav_manual_climb_rate - description: "Maximum climb/descent rate firmware is allowed when processing pilot input for ALTHOLD control mode [cm/s]" - default_value: 200 - field: general.max_manual_climb_rate - min: 10 - max: 2000 - name: nav_land_minalt_vspd description: "Vertical descent velocity under nav_land_slowdown_minalt during the RTH landing phase. [cm/s]" default_value: 50 @@ -2677,6 +2665,18 @@ groups: field: mc.max_bank_angle min: 15 max: 45 + - name: nav_mc_auto_climb_rate + description: "Maximum climb/descent rate that UAV is allowed to reach during navigation modes. [cm/s]" + default_value: 500 + field: mc.max_auto_climb_rate + min: 10 + max: 2000 + - name: nav_mc_manual_climb_rate + description: "Maximum climb/descent rate firmware is allowed when processing pilot input for ALTHOLD control mode [cm/s]" + default_value: 200 + field: mc.max_manual_climb_rate + min: 10 + max: 2000 - name: nav_auto_disarm_delay description: "Delay before craft disarms when `nav_disarm_on_landing` is set (ms)" default_value: 1000 @@ -2762,6 +2762,12 @@ groups: field: fw.max_bank_angle min: 5 max: 80 + - name: nav_fw_manual_climb_rate + description: "Maximum climb/descent rate firmware is allowed when processing pilot input for ALTHOLD control mode [cm/s]" + default_value: 300 + field: fw.max_manual_climb_rate + min: 10 + max: 2500 - name: nav_fw_climb_angle description: "Max pitch angle when climbing in GPS assisted modes, is also restrained by global max_angle_inclination_pit" default_value: 20 diff --git a/src/main/navigation/navigation.c b/src/main/navigation/navigation.c index cb12579b83d..0eccbc091db 100644 --- a/src/main/navigation/navigation.c +++ b/src/main/navigation/navigation.c @@ -133,9 +133,7 @@ PG_RESET_TEMPLATE(navConfig_t, navConfig, .waypoint_load_on_boot = SETTING_NAV_WP_LOAD_ON_BOOT_DEFAULT, // load waypoints automatically during boot .auto_speed = SETTING_NAV_AUTO_SPEED_DEFAULT, // speed in autonomous modes (3 m/s = 10.8 km/h) .max_auto_speed = SETTING_NAV_MAX_AUTO_SPEED_DEFAULT, // max allowed speed autonomous modes - .max_auto_climb_rate = SETTING_NAV_AUTO_CLIMB_RATE_DEFAULT, // 5 m/s .max_manual_speed = SETTING_NAV_MANUAL_SPEED_DEFAULT, - .max_manual_climb_rate = SETTING_NAV_MANUAL_CLIMB_RATE_DEFAULT, .land_slowdown_minalt = SETTING_NAV_LAND_SLOWDOWN_MINALT_DEFAULT, // altitude in centimeters .land_slowdown_maxalt = SETTING_NAV_LAND_SLOWDOWN_MAXALT_DEFAULT, // altitude in meters .land_minalt_vspd = SETTING_NAV_LAND_MINALT_VSPD_DEFAULT, // centimeters/s @@ -160,6 +158,8 @@ PG_RESET_TEMPLATE(navConfig_t, navConfig, // MC-specific .mc = { .max_bank_angle = SETTING_NAV_MC_BANK_ANGLE_DEFAULT, // degrees + .max_auto_climb_rate = SETTING_NAV_MC_AUTO_CLIMB_RATE_DEFAULT, // 5 m/s + .max_manual_climb_rate = SETTING_NAV_MC_MANUAL_CLIMB_RATE_DEFAULT, #ifdef USE_MR_BRAKING_MODE .braking_speed_threshold = SETTING_NAV_MC_BRAKING_SPEED_THRESHOLD_DEFAULT, // Braking can become active above 1m/s @@ -181,6 +181,7 @@ PG_RESET_TEMPLATE(navConfig_t, navConfig, // Fixed wing .fw = { .max_bank_angle = SETTING_NAV_FW_BANK_ANGLE_DEFAULT, // degrees + .max_manual_climb_rate = SETTING_NAV_FW_MANUAL_CLIMB_RATE_DEFAULT, // 3 m/s .max_climb_angle = SETTING_NAV_FW_CLIMB_ANGLE_DEFAULT, // degrees .max_dive_angle = SETTING_NAV_FW_DIVE_ANGLE_DEFAULT, // degrees .cruise_speed = SETTING_NAV_FW_CRUISE_SPEED_DEFAULT, // cm/s diff --git a/src/main/navigation/navigation.h b/src/main/navigation/navigation.h index ecc487cc9e7..880910bd850 100644 --- a/src/main/navigation/navigation.h +++ b/src/main/navigation/navigation.h @@ -246,9 +246,7 @@ typedef struct navConfig_s { bool waypoint_load_on_boot; // load waypoints automatically during boot uint16_t auto_speed; // autonomous navigation speed cm/sec uint16_t max_auto_speed; // maximum allowed autonomous navigation speed cm/sec - uint16_t max_auto_climb_rate; // max vertical speed limitation cm/sec uint16_t max_manual_speed; // manual velocity control max horizontal speed - uint16_t max_manual_climb_rate; // manual velocity control max vertical speed uint16_t land_minalt_vspd; // Final RTH landing descent rate under minalt uint16_t land_maxalt_vspd; // RTH landing descent rate target at maxalt uint16_t land_slowdown_minalt; // Altitude to stop lowering descent rate during RTH descend @@ -272,6 +270,8 @@ typedef struct navConfig_s { struct { uint8_t max_bank_angle; // multicopter max banking angle (deg) + uint16_t max_auto_climb_rate; // max vertical speed limitation cm/sec + uint16_t max_manual_climb_rate; // manual velocity control max vertical speed #ifdef USE_MR_BRAKING_MODE uint16_t braking_speed_threshold; // above this speed braking routine might kick in @@ -292,6 +292,7 @@ typedef struct navConfig_s { struct { uint8_t max_bank_angle; // Fixed wing max banking angle (deg) + uint16_t max_manual_climb_rate; // manual velocity control max vertical speed uint8_t max_climb_angle; // Fixed wing max banking angle (deg) uint8_t max_dive_angle; // Fixed wing max banking angle (deg) uint16_t cruise_speed; // Speed at cruise throttle (cm/s), used for time/distance left before RTH diff --git a/src/main/navigation/navigation_fixedwing.c b/src/main/navigation/navigation_fixedwing.c index e6084e0972e..8fcbce4b557 100755 --- a/src/main/navigation/navigation_fixedwing.c +++ b/src/main/navigation/navigation_fixedwing.c @@ -116,7 +116,7 @@ bool adjustFixedWingAltitudeFromRCInput(void) if (rcAdjustment) { // set velocity proportional to stick movement - float rcClimbRate = -rcAdjustment * navConfig()->general.max_manual_climb_rate / (500.0f - rcControlsConfig()->alt_hold_deadband); + float rcClimbRate = -rcAdjustment * navConfig()->fw.max_manual_climb_rate / (500.0f - rcControlsConfig()->alt_hold_deadband); updateClimbRateToAltitudeController(rcClimbRate, 0, ROC_TO_ALT_CONSTANT); return true; } diff --git a/src/main/navigation/navigation_multicopter.c b/src/main/navigation/navigation_multicopter.c index 2264d842014..02e3edbb910 100644 --- a/src/main/navigation/navigation_multicopter.c +++ b/src/main/navigation/navigation_multicopter.c @@ -77,9 +77,9 @@ static void updateAltitudeVelocityController_MC(timeDelta_t deltaMicros) float vel_max_z = 0.0f; if (posControl.flags.isAdjustingAltitude) { - vel_max_z = navConfig()->general.max_manual_climb_rate; + vel_max_z = navConfig()->mc.max_manual_climb_rate; } else { - vel_max_z = navConfig()->general.max_auto_climb_rate; + vel_max_z = navConfig()->mc.max_auto_climb_rate; } targetVel = constrainf(targetVel, -vel_max_z, vel_max_z); @@ -151,11 +151,11 @@ bool adjustMulticopterAltitudeFromRCInput(void) // Make sure we can satisfy max_manual_climb_rate in both up and down directions if (rcThrottleAdjustment > 0) { // Scaling from altHoldThrottleRCZero to maxthrottle - rcClimbRate = rcThrottleAdjustment * navConfig()->general.max_manual_climb_rate / (float)(motorConfig()->maxthrottle - altHoldThrottleRCZero - rcControlsConfig()->alt_hold_deadband); + rcClimbRate = rcThrottleAdjustment * navConfig()->mc.max_manual_climb_rate / (float)(motorConfig()->maxthrottle - altHoldThrottleRCZero - rcControlsConfig()->alt_hold_deadband); } else { // Scaling from minthrottle to altHoldThrottleRCZero - rcClimbRate = rcThrottleAdjustment * navConfig()->general.max_manual_climb_rate / (float)(altHoldThrottleRCZero - getThrottleIdleValue() - rcControlsConfig()->alt_hold_deadband); + rcClimbRate = rcThrottleAdjustment * navConfig()->mc.max_manual_climb_rate / (float)(altHoldThrottleRCZero - getThrottleIdleValue() - rcControlsConfig()->alt_hold_deadband); } updateClimbRateToAltitudeController(rcClimbRate, 0, ROC_TO_ALT_CONSTANT); @@ -221,11 +221,11 @@ void resetMulticopterAltitudeController(void) const float maxSpeed = getActiveSpeed(); nav_speed_up = maxSpeed; nav_accel_z = maxSpeed; - nav_speed_down = navConfig()->general.max_auto_climb_rate; + nav_speed_down = navConfig()->mc.max_auto_climb_rate; } else { nav_speed_up = navConfig()->general.max_manual_speed; nav_accel_z = navConfig()->general.max_manual_speed; - nav_speed_down = navConfig()->general.max_manual_climb_rate; + nav_speed_down = navConfig()->mc.max_manual_climb_rate; } sqrtControllerInit( @@ -252,8 +252,8 @@ static void applyMulticopterAltitudeController(timeUs_t currentTimeUs) if (prepareForTakeoffOnReset) { const navEstimatedPosVel_t *posToUse = navGetCurrentActualPositionAndVelocity(); - posControl.desiredState.vel.z = -navConfig()->general.max_manual_climb_rate; - posControl.desiredState.pos.z = posToUse->pos.z - (navConfig()->general.max_manual_climb_rate / posControl.pids.pos[Z].param.kP); + posControl.desiredState.vel.z = -navConfig()->mc.max_manual_climb_rate; + posControl.desiredState.pos.z = posToUse->pos.z - (navConfig()->mc.max_manual_climb_rate / posControl.pids.pos[Z].param.kP); posControl.pids.vel[Z].integrator = -500.0f; pt1FilterReset(&altholdThrottleFilterState, -500.0f); prepareForTakeoffOnReset = false; From edf9ccac236bbe1dbf0125926505d775c4283059 Mon Sep 17 00:00:00 2001 From: shota Date: Sun, 29 Oct 2023 17:22:48 +0900 Subject: [PATCH 32/46] update documents --- docs/Settings.md | 50 +++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/docs/Settings.md b/docs/Settings.md index 15ce74ef384..1eeafb52112 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -2752,16 +2752,6 @@ Craft name --- -### nav_auto_climb_rate - -Maximum climb/descent rate that UAV is allowed to reach during navigation modes. [cm/s] - -| Default | Min | Max | -| --- | --- | --- | -| 500 | 10 | 2000 | - ---- - ### nav_auto_disarm_delay Delay before craft disarms when `nav_disarm_on_landing` is set (ms) @@ -3082,6 +3072,16 @@ PosHold radius. 3000 to 7500 is a good value (30-75m) [cm] --- +### nav_fw_manual_climb_rate + +Maximum climb/descent rate firmware is allowed when processing pilot input for ALTHOLD control mode [cm/s] + +| Default | Min | Max | +| --- | --- | --- | +| 300 | 10 | 2500 | + +--- + ### nav_fw_max_thr Maximum throttle for flying wing in GPS assisted modes @@ -3352,16 +3352,6 @@ Allows immediate landing detection based on G bump at touchdown when set to ON. --- -### nav_manual_climb_rate - -Maximum climb/descent rate firmware is allowed when processing pilot input for ALTHOLD control mode [cm/s] - -| Default | Min | Max | -| --- | --- | --- | -| 200 | 10 | 2000 | - ---- - ### nav_manual_speed Maximum speed allowed when processing pilot input for POSHOLD/CRUISE control mode [cm/s] [Multirotor only] @@ -3412,6 +3402,16 @@ If set to STICK the FC remembers the throttle stick position when enabling ALTHO --- +### nav_mc_auto_climb_rate + +Maximum climb/descent rate that UAV is allowed to reach during navigation modes. [cm/s] + +| Default | Min | Max | +| --- | --- | --- | +| 500 | 10 | 2000 | + +--- + ### nav_mc_bank_angle Maximum banking angle (deg) that multicopter navigation is allowed to set. Machine must be able to satisfy this angle without loosing altitude @@ -3522,6 +3522,16 @@ Multicopter hover throttle hint for altitude controller. Should be set to approx --- +### nav_mc_manual_climb_rate + +Maximum climb/descent rate firmware is allowed when processing pilot input for ALTHOLD control mode [cm/s] + +| Default | Min | Max | +| --- | --- | --- | +| 200 | 10 | 2000 | + +--- + ### nav_mc_pos_deceleration_time Used for stoping distance calculation. Stop position is computed as _speed_ * _nav_mc_pos_deceleration_time_ from the place where sticks are released. Braking mode overrides this setting From c2577e477733ceb602859a9f35baa24925cc9365 Mon Sep 17 00:00:00 2001 From: "Pawel Spychalski (DzikuVx)" Date: Tue, 31 Oct 2023 10:34:49 +0100 Subject: [PATCH 33/46] Put getConfigMixerProfile as the last byte in message --- src/main/fc/fc_msp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/fc/fc_msp.c b/src/main/fc/fc_msp.c index f504ffb0598..fddcde00ebf 100644 --- a/src/main/fc/fc_msp.c +++ b/src/main/fc/fc_msp.c @@ -462,9 +462,9 @@ static bool mspFcProcessOutCommand(uint16_t cmdMSP, sbuf_t *dst, mspPostProcessF sbufWriteU16(dst, packSensorStatus()); sbufWriteU16(dst, averageSystemLoadPercent); sbufWriteU8(dst, (getConfigBatteryProfile() << 4) | getConfigProfile()); - sbufWriteU8(dst, getConfigMixerProfile()); sbufWriteU32(dst, armingFlags); sbufWriteData(dst, &mspBoxModeFlags, sizeof(mspBoxModeFlags)); + sbufWriteU8(dst, getConfigMixerProfile()); } break; From fac64cecbbe768bfdaab09046d6b13e2bf0dd297 Mon Sep 17 00:00:00 2001 From: breadoven <56191411+breadoven@users.noreply.github.com> Date: Tue, 31 Oct 2023 21:41:16 +0000 Subject: [PATCH 34/46] Update navigation.c --- src/main/navigation/navigation.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/navigation/navigation.c b/src/main/navigation/navigation.c index cb12579b83d..c991531f32b 100644 --- a/src/main/navigation/navigation.c +++ b/src/main/navigation/navigation.c @@ -4055,7 +4055,8 @@ bool navigationPositionEstimateIsHealthy(void) navArmingBlocker_e navigationIsBlockingArming(bool *usedBypass) { - const bool navBoxModesEnabled = IS_RC_MODE_ACTIVE(BOXNAVRTH) || IS_RC_MODE_ACTIVE(BOXNAVWP) || IS_RC_MODE_ACTIVE(BOXNAVPOSHOLD) || (STATE(FIXED_WING_LEGACY) && IS_RC_MODE_ACTIVE(BOXNAVALTHOLD)) || (STATE(FIXED_WING_LEGACY) && (IS_RC_MODE_ACTIVE(BOXNAVCOURSEHOLD) || IS_RC_MODE_ACTIVE(BOXNAVCRUISE))); + const bool navBoxModesEnabled = IS_RC_MODE_ACTIVE(BOXNAVRTH) || IS_RC_MODE_ACTIVE(BOXNAVWP) || IS_RC_MODE_ACTIVE(BOXNAVCOURSEHOLD) || + IS_RC_MODE_ACTIVE(BOXNAVCRUISE) || IS_RC_MODE_ACTIVE(BOXNAVPOSHOLD) || (STATE(FIXED_WING_LEGACY) && IS_RC_MODE_ACTIVE(BOXNAVALTHOLD)); if (usedBypass) { *usedBypass = false; From 3a9624ba492c84afb7ff103466aefa017849fc53 Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 3 Nov 2023 21:30:41 +0900 Subject: [PATCH 35/46] sync updateActualHeading with other topic --- .../navigation/navigation_pos_estimator.c | 22 ++++++++----------- .../navigation_pos_estimator_private.h | 1 - 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/main/navigation/navigation_pos_estimator.c b/src/main/navigation/navigation_pos_estimator.c index 1b561e98810..8157fa730cd 100755 --- a/src/main/navigation/navigation_pos_estimator.c +++ b/src/main/navigation/navigation_pos_estimator.c @@ -707,15 +707,10 @@ static bool estimationCalculateCorrection_XY_GPS(estimationContext_t * ctx) static void estimationCalculateGroundCourse(timeUs_t currentTimeUs) { + UNUSED(currentTimeUs); if (STATE(GPS_FIX) && navIsHeadingUsable()) { - static timeUs_t lastUpdateTimeUs = 0; - - if (currentTimeUs - lastUpdateTimeUs >= HZ2US(INAV_COG_UPDATE_RATE_HZ)) { // limit update rate - const float dt = US2S(currentTimeUs - lastUpdateTimeUs); - uint32_t groundCourse = wrap_36000(RADIANS_TO_CENTIDEGREES(atan2_approx(posEstimator.est.vel.y * dt, posEstimator.est.vel.x * dt))); - posEstimator.est.cog = CENTIDEGREES_TO_DECIDEGREES(groundCourse); - lastUpdateTimeUs = currentTimeUs; - } + uint32_t groundCourse = wrap_36000(RADIANS_TO_CENTIDEGREES(atan2_approx(posEstimator.est.vel.y, posEstimator.est.vel.x))); + posEstimator.est.cog = CENTIDEGREES_TO_DECIDEGREES(groundCourse); } } @@ -813,13 +808,14 @@ static void publishEstimatedTopic(timeUs_t currentTimeUs) { static navigationTimer_t posPublishTimer; - /* IMU operates in decidegrees while INAV operates in deg*100 - * Use course over ground when GPS heading valid */ - int16_t cogValue = isGPSHeadingValid() ? posEstimator.est.cog : attitude.values.yaw; - updateActualHeading(navIsHeadingUsable(), DECIDEGREES_TO_CENTIDEGREES(attitude.values.yaw), DECIDEGREES_TO_CENTIDEGREES(cogValue)); - /* Position and velocity are published with INAV_POSITION_PUBLISH_RATE_HZ */ if (updateTimer(&posPublishTimer, HZ2US(INAV_POSITION_PUBLISH_RATE_HZ), currentTimeUs)) { + /* Publish heading update */ + /* IMU operates in decidegrees while INAV operates in deg*100 + * Use course over ground when GPS heading valid */ + int16_t cogValue = isGPSHeadingValid() ? posEstimator.est.cog : attitude.values.yaw; + updateActualHeading(navIsHeadingUsable(), DECIDEGREES_TO_CENTIDEGREES(attitude.values.yaw), DECIDEGREES_TO_CENTIDEGREES(cogValue)); + /* Publish position update */ if (posEstimator.est.eph < positionEstimationConfig()->max_eph_epv) { // FIXME!!!!! diff --git a/src/main/navigation/navigation_pos_estimator_private.h b/src/main/navigation/navigation_pos_estimator_private.h index 40129f844b0..0b19dbb0023 100644 --- a/src/main/navigation/navigation_pos_estimator_private.h +++ b/src/main/navigation/navigation_pos_estimator_private.h @@ -39,7 +39,6 @@ #define INAV_POSITION_PUBLISH_RATE_HZ 50 // Publish position updates at this rate #define INAV_PITOT_UPDATE_RATE 10 -#define INAV_COG_UPDATE_RATE_HZ 20 // ground course update rate #define INAV_GPS_TIMEOUT_MS 1500 // GPS timeout #define INAV_BARO_TIMEOUT_MS 200 // Baro timeout From 3ff9371d623f81e79b4e89a1cbda90264f5a9b64 Mon Sep 17 00:00:00 2001 From: shota Date: Fri, 3 Nov 2023 23:52:48 +0900 Subject: [PATCH 36/46] combine IFLIGHTF7 --- src/main/target/IFLIGHTF7_SXE/CMakeLists.txt | 1 + src/main/target/IFLIGHTF7_SXE/target.h | 9 +- .../target/IFLIGHTF7_SXEMINI/CMakeLists.txt | 1 - src/main/target/IFLIGHTF7_SXEMINI/target.c | 41 ----- src/main/target/IFLIGHTF7_SXEMINI/target.h | 146 ------------------ 5 files changed, 9 insertions(+), 189 deletions(-) delete mode 100644 src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt delete mode 100644 src/main/target/IFLIGHTF7_SXEMINI/target.c delete mode 100644 src/main/target/IFLIGHTF7_SXEMINI/target.h diff --git a/src/main/target/IFLIGHTF7_SXE/CMakeLists.txt b/src/main/target/IFLIGHTF7_SXE/CMakeLists.txt index 59b5b32f0c7..3a4a78ba1a8 100644 --- a/src/main/target/IFLIGHTF7_SXE/CMakeLists.txt +++ b/src/main/target/IFLIGHTF7_SXE/CMakeLists.txt @@ -1 +1,2 @@ target_stm32f722xe(IFLIGHTF7_SXE) +target_stm32f722xe(IFLIGHTF7_SXEMINI) diff --git a/src/main/target/IFLIGHTF7_SXE/target.h b/src/main/target/IFLIGHTF7_SXE/target.h index 5b3d68770d8..99b4fc2ab12 100644 --- a/src/main/target/IFLIGHTF7_SXE/target.h +++ b/src/main/target/IFLIGHTF7_SXE/target.h @@ -18,8 +18,11 @@ #pragma once #define TARGET_BOARD_IDENTIFIER "IF7E" +#ifdef IFLIGHTF7_SXE #define USBD_PRODUCT_STRING "IFLIGHTF7_SXE" - +#elif defined(IFLIGHTF7_SXEMINI) +#define USBD_PRODUCT_STRING "IFLIGHTF7_SXEMINI" +#endif #define LED0 PC4 #define BEEPER PC15 #define BEEPER_INVERTED @@ -33,7 +36,11 @@ // MPU6000 #define USE_IMU_MPU6000 +#ifdef IFLIGHTF7_SXE #define IMU_MPU6000_ALIGN CW180_DEG +#elif defined(IFLIGHTF7_SXEMINI) +#define IMU_MPU6000_ALIGN CW270_DEG +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_EXTI_PIN PA8 #define MPU6000_CS_PIN PA15 diff --git a/src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt b/src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt deleted file mode 100644 index 980598fdbdf..00000000000 --- a/src/main/target/IFLIGHTF7_SXEMINI/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -target_stm32f722xe(IFLIGHTF7_SXEMINI) diff --git a/src/main/target/IFLIGHTF7_SXEMINI/target.c b/src/main/target/IFLIGHTF7_SXEMINI/target.c deleted file mode 100644 index 33bc3741821..00000000000 --- a/src/main/target/IFLIGHTF7_SXEMINI/target.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -* This file is part of Cleanflight. -* -* Cleanflight is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* Cleanflight is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Cleanflight. If not, see . -*/ - -#include -#include "platform.h" -#include "drivers/bus.h" -#include "drivers/io.h" -#include "drivers/pwm_mapping.h" -#include "drivers/timer.h" -#include "drivers/sensor.h" - -// Board hardware definitions - -timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), //RX2 - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), //M1 - DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), //M2 - DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), //M3 - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), //M4 - DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), //M5 - DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), //M6 - DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), //M7 - DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), //M8 - DEF_TIM(TIM2, CH2, PA1, TIM_USE_LED, 0, 0), //LED STRIP -}; - -const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/IFLIGHTF7_SXEMINI/target.h b/src/main/target/IFLIGHTF7_SXEMINI/target.h deleted file mode 100644 index 11a60a72b52..00000000000 --- a/src/main/target/IFLIGHTF7_SXEMINI/target.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This file is part of Cleanflight. - * - * Cleanflight is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Cleanflight is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Cleanflight. If not, see . - */ - -#pragma once - -#define TARGET_BOARD_IDENTIFIER "IF7E" -#define USBD_PRODUCT_STRING "IFLIGHTF7_SXEMINI" - -#define LED0 PC4 -#define BEEPER PC15 -#define BEEPER_INVERTED - -// *************** Gyro & ACC ********************** -#define USE_SPI -#define USE_SPI_DEVICE_1 -#define SPI1_SCK_PIN PA5 -#define SPI1_MISO_PIN PA6 -#define SPI1_MOSI_PIN PA7 - -// MPU6000 -#define USE_IMU_MPU6000 -#define IMU_MPU6000_ALIGN CW270_DEG -#define MPU6000_SPI_BUS BUS_SPI1 -#define MPU6000_EXTI_PIN PA8 -#define MPU6000_CS_PIN PA15 - -#define USE_EXTI -#define USE_MPU_DATA_READY_SIGNAL - -// *************** I2C/Baro/Mag ********************* -#define USE_I2C -#define USE_I2C_DEVICE_2 -#define I2C2_SCL PB10 -#define I2C2_SDA PB11 - -#define USE_BARO -#define BARO_I2C_BUS BUS_I2C2 -#define USE_BARO_BMP280 -#define USE_BARO_DPS310 - -#define USE_MAG -#define MAG_I2C_BUS BUS_I2C2 -#define USE_MAG_HMC5883 -#define USE_MAG_QMC5883 -#define USE_MAG_IST8310 -#define USE_MAG_IST8308 -#define USE_MAG_MAG3110 -#define USE_MAG_LIS3MDL - -#define TEMPERATURE_I2C_BUS BUS_I2C2 - -#define PITOT_I2C_BUS BUS_I2C2 - -#define USE_RANGEFINDER -#define RANGEFINDER_I2C_BUS BUS_I2C2 -#define BNO055_I2C_BUS BUS_I2C2 - -// *************** FLASH ************************** -#define M25P16_CS_PIN PB9 -#define M25P16_SPI_BUS BUS_SPI3 -#define USE_FLASHFS -#define USE_FLASH_M25P16 -#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT - -#define USE_SPI_DEVICE_3 -#define SPI3_SCK_PIN PB3 -#define SPI3_MISO_PIN PB4 -#define SPI3_MOSI_PIN PB5 - -// *************** OSD ***************************** -#define USE_SPI_DEVICE_2 -#define SPI2_SCK_PIN PB13 -#define SPI2_MISO_PIN PB14 -#define SPI2_MOSI_PIN PB15 - -#define USE_MAX7456 -#define MAX7456_SPI_BUS BUS_SPI2 -#define MAX7456_CS_PIN PB12 - -// *************** UART ***************************** -#define USE_VCP - -#define USE_UART1 -#define UART1_RX_PIN PA10 -#define UART1_TX_PIN PA9 - -#define USE_UART2 -#define UART2_RX_PIN PA3 -#define UART2_TX_PIN PA2 - -#define USE_UART4 -#define UART4_RX_PIN PC11 -#define UART4_TX_PIN PC10 - -#define USE_UART5 -#define UART5_RX_PIN PD2 -#define UART5_TX_PIN PC12 - -#define SERIAL_PORT_COUNT 5 - -#define DEFAULT_RX_TYPE RX_TYPE_SERIAL -#define SERIALRX_PROVIDER SERIALRX_SBUS -#define SERIALRX_UART SERIAL_PORT_USART2 - -// *************** ADC ***************************** -#define USE_ADC -#define ADC_INSTANCE ADC1 -#define ADC1_DMA_STREAM DMA2_Stream0 -#define ADC_CHANNEL_1_PIN PC1 -#define ADC_CHANNEL_2_PIN PC2 -#define ADC_CHANNEL_3_PIN PC0 - -#define VBAT_ADC_CHANNEL ADC_CHN_1 -#define CURRENT_METER_ADC_CHANNEL ADC_CHN_2 -#define RSSI_ADC_CHANNEL ADC_CHN_3 - -#define DEFAULT_FEATURES (FEATURE_TX_PROF_SEL | FEATURE_CURRENT_METER | FEATURE_TELEMETRY | FEATURE_VBAT | FEATURE_OSD | FEATURE_BLACKBOX) - -#define USE_LED_STRIP -#define WS2811_PIN PA1 - -#define USE_SERIAL_4WAY_BLHELI_INTERFACE - -#define TARGET_IO_PORTA 0xffff -#define TARGET_IO_PORTB 0xffff -#define TARGET_IO_PORTC 0xffff -#define TARGET_IO_PORTD (BIT(2)) - -#define MAX_PWM_OUTPUT_PORTS 8 - -#define USE_DSHOT -#define USE_ESC_SENSOR From 6f1ad0a9f3302e01046f8c93eddf3227f5fff8ed Mon Sep 17 00:00:00 2001 From: shota Date: Sat, 4 Nov 2023 02:01:29 +0900 Subject: [PATCH 37/46] add more gps dynamic model --- docs/Settings.md | 4 ++-- src/main/fc/settings.yaml | 6 +++--- src/main/io/gps.h | 2 ++ src/main/io/gps_ublox.c | 10 ++++++++-- src/main/io/gps_ublox.h | 2 ++ 5 files changed, 17 insertions(+), 7 deletions(-) diff --git a/docs/Settings.md b/docs/Settings.md index cb760e312ab..1f0fe29c419 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -1484,11 +1484,11 @@ Enable automatic configuration of UBlox GPS receivers. ### gps_dyn_model -GPS navigation model: Pedestrian, Air_1g, Air_4g. Default is AIR_1G. Use pedestrian with caution, can cause flyaways with fast flying. +GPS navigation model: Pedestrian, Automotive, Air<1g, Air<2g, Air<4g. Default is AIR_2G. Use pedestrian/Automotive with caution, can cause flyaways with fast flying. | Default | Min | Max | | --- | --- | --- | -| AIR_1G | | | +| AIR_2G | | | --- diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 9fb1c051a94..eed0f699744 100644 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -50,7 +50,7 @@ tables: values: ["AUTO", "EGNOS", "WAAS", "MSAS", "GAGAN", "SPAN", "NONE"] enum: sbasMode_e - name: gps_dyn_model - values: ["PEDESTRIAN", "AIR_1G", "AIR_4G"] + values: ["PEDESTRIAN","AUTOMOTIVE", "AIR_1G", "AIR_2G", "AIR_4G"] enum: gpsDynModel_e - name: reset_type values: ["NEVER", "FIRST_ARM", "EACH_ARM"] @@ -1614,8 +1614,8 @@ groups: table: gps_sbas_mode type: uint8_t - name: gps_dyn_model - description: "GPS navigation model: Pedestrian, Air_1g, Air_4g. Default is AIR_1G. Use pedestrian with caution, can cause flyaways with fast flying." - default_value: "AIR_1G" + description: "GPS navigation model: Pedestrian, Automotive, Air<1g, Air<2g, Air<4g. Default is AIR_2G. Use pedestrian/Automotive with caution, can cause flyaways with fast flying." + default_value: "AIR_2G" field: dynModel table: gps_dyn_model type: uint8_t diff --git a/src/main/io/gps.h b/src/main/io/gps.h index 199652a3a24..3e9d073c54c 100755 --- a/src/main/io/gps.h +++ b/src/main/io/gps.h @@ -76,7 +76,9 @@ typedef enum { typedef enum { GPS_DYNMODEL_PEDESTRIAN = 0, + GPS_DYNMODEL_AUTOMOTIVE, GPS_DYNMODEL_AIR_1G, + GPS_DYNMODEL_AIR_2G, GPS_DYNMODEL_AIR_4G, } gpsDynModel_e; diff --git a/src/main/io/gps_ublox.c b/src/main/io/gps_ublox.c index d03c3390776..a9455e003ba 100755 --- a/src/main/io/gps_ublox.c +++ b/src/main/io/gps_ublox.c @@ -800,10 +800,16 @@ STATIC_PROTOTHREAD(gpsConfigure) case GPS_DYNMODEL_PEDESTRIAN: configureNAV5(UBX_DYNMODEL_PEDESTRIAN, UBX_FIXMODE_AUTO); break; - case GPS_DYNMODEL_AIR_1G: // Default to this - default: + case GPS_DYNMODEL_AUTOMOTIVE: + configureNAV5(UBX_DYNMODEL_AUTOMOVITE, UBX_FIXMODE_AUTO); + break; + case GPS_DYNMODEL_AIR_1G: configureNAV5(UBX_DYNMODEL_AIR_1G, UBX_FIXMODE_AUTO); break; + case GPS_DYNMODEL_AIR_2G: // Default to this + default: + configureNAV5(UBX_DYNMODEL_AIR_2G, UBX_FIXMODE_AUTO); + break; case GPS_DYNMODEL_AIR_4G: configureNAV5(UBX_DYNMODEL_AIR_4G, UBX_FIXMODE_AUTO); break; diff --git a/src/main/io/gps_ublox.h b/src/main/io/gps_ublox.h index 00b42eeb2b7..8ec9be16d09 100644 --- a/src/main/io/gps_ublox.h +++ b/src/main/io/gps_ublox.h @@ -34,7 +34,9 @@ extern "C" { #define GPS_CAPA_INTERVAL 5000 #define UBX_DYNMODEL_PEDESTRIAN 3 +#define UBX_DYNMODEL_AUTOMOVITE 4 #define UBX_DYNMODEL_AIR_1G 6 +#define UBX_DYNMODEL_AIR_2G 7 #define UBX_DYNMODEL_AIR_4G 8 #define UBX_FIXMODE_2D_ONLY 1 From 52579eb84bb45e21d5b38aef50fa1cabaa0acd5c Mon Sep 17 00:00:00 2001 From: Jonathan Hudson Date: Sun, 5 Nov 2023 09:40:11 +0000 Subject: [PATCH 38/46] [GPS] fix GPS discovery for M6 and earlier --- src/main/io/gps_ublox.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/io/gps_ublox.c b/src/main/io/gps_ublox.c index d03c3390776..8fa8366a23c 100755 --- a/src/main/io/gps_ublox.c +++ b/src/main/io/gps_ublox.c @@ -1042,12 +1042,14 @@ STATIC_PROTOTHREAD(gpsProtocolStateThread) gpsState.autoConfigStep = 0; ubx_capabilities.supported = ubx_capabilities.enabledGnss = ubx_capabilities.defaultGnss = 0; - do { - pollGnssCapabilities(); - gpsState.autoConfigStep++; - ptWaitTimeout((ubx_capabilities.capMaxGnss != 0), GPS_CFG_CMD_TIMEOUT_MS); - } while (gpsState.autoConfigStep < GPS_VERSION_RETRY_TIMES && ubx_capabilities.capMaxGnss == 0); - + // M6 and earlier will never get pass this step, so skip it (#9440) + if (gpsState.hwVersion > UBX_HW_VERSION_UBLOX6) { + do { + pollGnssCapabilities(); + gpsState.autoConfigStep++; + ptWaitTimeout((ubx_capabilities.capMaxGnss != 0), GPS_CFG_CMD_TIMEOUT_MS); + } while (gpsState.autoConfigStep < GPS_VERSION_RETRY_TIMES && ubx_capabilities.capMaxGnss == 0); + } // Configure GPS module if enabled if (gpsState.gpsConfig->autoConfig) { // Configure GPS From d135f3ece75de508035a7bf2edb1661457534a3b Mon Sep 17 00:00:00 2001 From: Jonathan Hudson Date: Sun, 5 Nov 2023 10:23:47 +0000 Subject: [PATCH 39/46] [GPS] update discovery fix for M7N as well --- src/main/io/gps_ublox.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/io/gps_ublox.c b/src/main/io/gps_ublox.c index 8fa8366a23c..da0f54dd2fb 100755 --- a/src/main/io/gps_ublox.c +++ b/src/main/io/gps_ublox.c @@ -1042,8 +1042,9 @@ STATIC_PROTOTHREAD(gpsProtocolStateThread) gpsState.autoConfigStep = 0; ubx_capabilities.supported = ubx_capabilities.enabledGnss = ubx_capabilities.defaultGnss = 0; - // M6 and earlier will never get pass this step, so skip it (#9440) - if (gpsState.hwVersion > UBX_HW_VERSION_UBLOX6) { + // M7 and earlier will never get pass this step, so skip it (#9440). + // UBLOX documents that this is M8N and later + if (gpsState.hwVersion > UBX_HW_VERSION_UBLOX7) { do { pollGnssCapabilities(); gpsState.autoConfigStep++; From 50930eee9a9693c51fe0d03ae00dcc447c260e05 Mon Sep 17 00:00:00 2001 From: Marcelo Bezerra <23555060+mmosca@users.noreply.github.com> Date: Mon, 6 Nov 2023 10:42:53 +0100 Subject: [PATCH 40/46] Add DPS310 and SPL06 to FLYWOOF745 target This was requested by flywoo support. Also add other baros to match their internal target. --- src/main/target/FLYWOOF745/target.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/target/FLYWOOF745/target.h b/src/main/target/FLYWOOF745/target.h index 3b57ccc4fa2..c2b1937c611 100644 --- a/src/main/target/FLYWOOF745/target.h +++ b/src/main/target/FLYWOOF745/target.h @@ -140,6 +140,10 @@ #define USE_BARO #define USE_BARO_BMP280 +#define USE_BARO_MS5611 +#define USE_BARO_BMP085 +#define USE_BARO_DPS310 +#define USE_BARO_SPL06 #define BARO_I2C_BUS BUS_I2C1 #define USE_MAG From 9783a7b176c9ea40d6c2ebd4fce9f84a9490a035 Mon Sep 17 00:00:00 2001 From: Marcelo Bezerra <23555060+mmosca@users.noreply.github.com> Date: Mon, 6 Nov 2023 21:21:31 +0100 Subject: [PATCH 41/46] Remove PPM entry with conflicting timer. Fixes #9442 --- src/main/target/KAKUTEF7/target.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/target/KAKUTEF7/target.c b/src/main/target/KAKUTEF7/target.c index 53ae9359deb..ce7c14e9474 100755 --- a/src/main/target/KAKUTEF7/target.c +++ b/src/main/target/KAKUTEF7/target.c @@ -29,7 +29,6 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH3, PE13, TIM_USE_PPM, 0, 1), // PPM, DMA2_ST6 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // M1 , DMA1_ST7 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // M2 , DMA1_ST2 @@ -37,8 +36,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 1), // M4 , DMA2_ST4 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // M5 , DMA2_ST7 DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // M6 , DMA1_ST1 + // + //DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 1), // PPM/M7, DMA2_ST6 - DEF_TIM(TIM4, CH1, PD12, TIM_USE_LED, 0, 0), // LED_STRIP, DMA1_ST0 + DEF_TIM(TIM4, CH1, PD12, TIM_USE_LED, 0, 0), // LED_STRIP, DMA1_ST0 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); From 1f597089d4935aa5af65b0006120f675b215c94e Mon Sep 17 00:00:00 2001 From: Marcelo Bezerra <23555060+mmosca@users.noreply.github.com> Date: Mon, 6 Nov 2023 21:25:40 +0100 Subject: [PATCH 42/46] cleanup --- src/main/target/KAKUTEF7/target.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 src/main/target/KAKUTEF7/target.c diff --git a/src/main/target/KAKUTEF7/target.c b/src/main/target/KAKUTEF7/target.c old mode 100755 new mode 100644 index ce7c14e9474..19d524dc710 --- a/src/main/target/KAKUTEF7/target.c +++ b/src/main/target/KAKUTEF7/target.c @@ -36,7 +36,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH2, PE11, TIM_USE_OUTPUT_AUTO, 0, 1), // M4 , DMA2_ST4 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // M5 , DMA2_ST7 DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // M6 , DMA1_ST1 - // + //DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 1), // PPM/M7, DMA2_ST6 DEF_TIM(TIM4, CH1, PD12, TIM_USE_LED, 0, 0), // LED_STRIP, DMA1_ST0 From 3ef172dacdde07a73a4ab25c504c1c007b572b6b Mon Sep 17 00:00:00 2001 From: "Pawel Spychalski (DzikuVx)" Date: Mon, 6 Nov 2023 21:55:00 +0100 Subject: [PATCH 43/46] Various PWM output changes. Mainly to get rid of potential conflicts with new timer allocation --- .vscode/settings.json | 3 ++- src/main/target/AIRBOTF4/target.c | 13 ++++----- src/main/target/ALIENFLIGHTF4/target.c | 10 +++---- src/main/target/ALIENFLIGHTNGF7/target.c | 2 +- src/main/target/ANYFC/target.c | 12 ++++----- src/main/target/ANYFCF7/target.c | 13 ++++----- src/main/target/ANYFCM7/target.c | 12 ++++----- src/main/target/AOCODARCF405AIO/target.c | 2 +- src/main/target/AOCODARCF4V2/target.c | 2 +- src/main/target/AOCODARCF722AIO/target.c | 2 +- src/main/target/AOCODARCF7DUAL/target.c | 2 +- src/main/target/AOCODARCF7MINI/target.c | 2 +- src/main/target/AXISFLYINGF7PRO/target.c | 2 +- src/main/target/BEEROTORF4/target.c | 2 +- src/main/target/BETAFLIGHTF4/target.c | 2 +- src/main/target/BETAFPVF722/target.c | 2 +- src/main/target/BLACKPILL_F411/target.c | 2 +- src/main/target/BLUEJAYF4/target.c | 2 +- src/main/target/CLRACINGF4AIR/target.c | 4 +-- src/main/target/COLIBRI/target.c | 16 +++++------ src/main/target/DALRCF405/target.c | 2 +- src/main/target/DALRCF722DUAL/target.c | 2 +- src/main/target/F4BY/target.c | 16 +++++------ src/main/target/FF_F35_LIGHTNING/target.c | 10 +++---- src/main/target/FF_FORTINIF4/target.c | 2 +- src/main/target/FIREWORKSV2/target.c | 2 +- src/main/target/FISHDRONEF4/target.c | 12 ++++----- src/main/target/FLYWOOF405PRO/target.c | 2 +- src/main/target/FLYWOOF411/target.c | 2 +- src/main/target/FLYWOOF745/target.c | 2 +- src/main/target/FLYWOOF7DUAL/target.c | 2 +- src/main/target/FOXEERF405/target.c | 2 +- src/main/target/FOXEERF722DUAL/target.c | 2 +- src/main/target/FURYF4OSD/target.c | 2 +- src/main/target/GEPRCF405/target.c | 6 +---- src/main/target/GEPRCF722/target.c | 2 +- src/main/target/GEPRCF722_BT_HD/target.c | 4 +-- src/main/target/GEPRC_F722_AIO/target.c | 2 +- src/main/target/HAKRCF405D/target.c | 8 +++--- src/main/target/HAKRCF411D/target.c | 2 +- src/main/target/HAKRCKD722/target.c | 2 +- src/main/target/HGLRCF722/target.c | 4 +-- src/main/target/IFLIGHTF4_SUCCEXD/target.c | 2 +- src/main/target/IFLIGHTF4_TWING/target.c | 2 +- src/main/target/IFLIGHTF7_TWING/target.c | 2 +- src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c | 2 +- src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c | 2 +- src/main/target/IFLIGHT_JBF7PRO/target.c | 2 +- src/main/target/KAKUTEF4/target.c | 2 +- src/main/target/KAKUTEF7/target.c | 2 +- src/main/target/KAKUTEF7MINIV3/target.c | 2 +- src/main/target/KROOZX/target.c | 2 +- src/main/target/MAMBAF405US/target.c | 2 +- src/main/target/MAMBAF722/target.c | 2 +- src/main/target/MAMBAF722_2022A/target.c | 2 +- src/main/target/MAMBAF722_X8/target.c | 2 +- src/main/target/MATEKF405/target.c | 2 +- src/main/target/MATEKF405CAN/target.c | 2 +- src/main/target/MATEKF405SE/target.c | 2 +- src/main/target/MATEKF405TE/target.c | 2 +- src/main/target/MATEKF411/target.c | 2 +- src/main/target/MATEKF722/target.c | 2 +- src/main/target/MATEKF722PX/target.c | 7 +++-- src/main/target/MATEKF722SE/target.c | 4 +-- src/main/target/MATEKF765/target.c | 4 +-- src/main/target/MATEKH743/target.c | 8 +++--- src/main/target/NEUTRONRCF435SE/target.c | 27 +++++++++---------- src/main/target/NOX/target.c | 5 ++-- src/main/target/OMNIBUSF4/target.c | 24 +++++++++-------- src/main/target/OMNIBUSF7NXT/target.c | 2 +- src/main/target/PIXRACER/target.c | 2 +- src/main/target/RADIX/target.c | 2 +- src/main/target/REVO/target.c | 12 ++++----- src/main/target/SAGEATF4/target.c | 6 ++--- src/main/target/SKYSTARSF405HD/target.c | 2 +- src/main/target/SKYSTARSF722HD/target.c | 2 +- src/main/target/SPARKY2/target.c | 10 +++---- src/main/target/SPEEDYBEEF4/target.c | 2 +- src/main/target/SPEEDYBEEF7/target.c | 2 +- src/main/target/SPEEDYBEEF7MINI/target.c | 2 +- src/main/target/SPEEDYBEEF7V2/target.c | 2 +- src/main/target/SPRACINGF4EVO/target.c | 4 +-- src/main/target/SPRACINGF7DUAL/target.c | 4 +-- src/main/target/TMOTORF7/target.c | 2 +- src/main/target/TMOTORF7V2/target.c | 2 +- src/main/target/YUPIF4/target.c | 2 +- src/main/target/YUPIF7/target.c | 2 +- 87 files changed, 188 insertions(+), 190 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 2cece3ee127..f95df72f1fa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,8 @@ "files.associations": { "chrono": "c", "cmath": "c", - "ranges": "c" + "ranges": "c", + "platform.h": "c" }, "editor.tabSize": 4, "editor.insertSpaces": true, diff --git a/src/main/target/AIRBOTF4/target.c b/src/main/target/AIRBOTF4/target.c index 988543aa321..9273b3dff7f 100644 --- a/src/main/target/AIRBOTF4/target.c +++ b/src/main/target/AIRBOTF4/target.c @@ -32,12 +32,13 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_OUT DEF_TIM(TIM4, CH1, PB6, TIM_USE_LED | TIM_USE_ANY, 0, 0), // LED D1_ST0, n/a on older AIRBOTF4 - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // PPM (5th pin on FlexiIO port) - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // S2_IN - DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S3_IN - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S4_IN - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S5_IN - DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S6_IN + //Airbot F4 don't have those outputs, they exist only in the original Revo + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // PPM (5th pin on FlexiIO port) + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // S2_IN + // DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S3_IN + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S4_IN + // DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S5_IN + // DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S6_IN }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/ALIENFLIGHTF4/target.c b/src/main/target/ALIENFLIGHTF4/target.c index e7ee4cf5520..7c6fd6ed84a 100644 --- a/src/main/target/ALIENFLIGHTF4/target.c +++ b/src/main/target/ALIENFLIGHTF4/target.c @@ -23,11 +23,10 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH1, PA8, TIM_USE_PWM | TIM_USE_PPM, 0, 1), // PWM1 - PA8 RC1 - DMA2_ST1 - DEF_TIM(TIM3, CH3, PB0, TIM_USE_PWM, 0, 0), // PWM2 - PB0 RC2 - DMA1_ST5 - DEF_TIM(TIM3, CH4, PB1, TIM_USE_PWM, 0, 0), // PWM3 - PB1 RC3 - DMA1_ST7 - DEF_TIM(TIM1, CH2, PB14, TIM_USE_PWM, 0, 1), // PWM4 - PA14 RC4 - DMA2_ST2 - DEF_TIM(TIM1, CH3, PB15, TIM_USE_PWM | TIM_USE_LED, 0, 0), // PWM5 - PA15 RC5 - DMA2_ST6 + // DEF_TIM(TIM1, CH1, PA8, TIM_USE_PWM | TIM_USE_PPM, 0, 1), // PWM1 - PA8 RC1 - DMA2_ST1 + // DEF_TIM(TIM3, CH3, PB0, TIM_USE_PWM, 0, 0), // PWM2 - PB0 RC2 - DMA1_ST5 + // DEF_TIM(TIM3, CH4, PB1, TIM_USE_PWM, 0, 0), // PWM3 - PB1 RC3 - DMA1_ST7 + // DEF_TIM(TIM1, CH2, PB14, TIM_USE_PWM, 0, 1), // PWM4 - PA14 RC4 - DMA2_ST2 DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM6 - PB8 OUT1 - DMA1_ST7 DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM7 - PB9 OUT2 - DMA_NONE DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM8 - PA0 OUT3 - DMA1_ST2 @@ -36,6 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM11 - PC7 OUT6 - DMA2_ST3 DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1), // PWM13 - PC8 OUT7 - DMA2_ST4 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM13 - PC9 OUT8 - DMA2_ST7 + DEF_TIM(TIM1, CH3, PB15, TIM_USE_LED, 0, 0), // PWM5 - PA15 RC5 - DMA2_ST6 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/ALIENFLIGHTNGF7/target.c b/src/main/target/ALIENFLIGHTNGF7/target.c index 455747923ef..ba8ab6111c3 100644 --- a/src/main/target/ALIENFLIGHTNGF7/target.c +++ b/src/main/target/ALIENFLIGHTNGF7/target.c @@ -23,7 +23,6 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH1, PA8, TIM_USE_PPM | TIM_USE_LED, 0, 1), // PPM - DMA2_ST1 DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM1 - DMA2_ST2 DEF_TIM(TIM3, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM2 - DMA1_ST5 DEF_TIM(TIM8, CH2N, PB14, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM3 - DMA2_ST3 @@ -36,6 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH3N, PB15, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM10 - DMA2_ST6 DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM11 - DMA1_ST7 DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0), // PWM12 - DMA_NONE + DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 1), // PPM - DMA2_ST1 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/ANYFC/target.c b/src/main/target/ANYFC/target.c index 5353b589110..a8adb8578e3 100644 --- a/src/main/target/ANYFC/target.c +++ b/src/main/target/ANYFC/target.c @@ -23,12 +23,12 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // S1_IN - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // S2_IN - DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM, 0, 0), // S3_IN - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM, 0, 0), // S4_IN - DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM, 0, 0), // S6_IN - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0), // S5_IN + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // S1_IN + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // S2_IN + // DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM, 0, 0), // S3_IN + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM, 0, 0), // S4_IN + // DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM, 0, 0), // S6_IN + // DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0), // S5_IN DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S10_OUT 16 DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_OUT 12 diff --git a/src/main/target/ANYFCF7/target.c b/src/main/target/ANYFCF7/target.c index 65f807d7984..dc523f4c780 100644 --- a/src/main/target/ANYFCF7/target.c +++ b/src/main/target/ANYFCF7/target.c @@ -23,12 +23,8 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // S1_IN - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S2_IN - DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_IN DMA2_ST2 DMA2_ST2 - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_IN DMA2_ST3 DMA2_ST2 - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_IN DMA2_ST4 DMA2_ST2 - DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_IN DMA2_ST7 + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // S1_IN + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S2_IN DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S10_OUT 1 DMA1_ST7 DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_OUT 2 DMA1_ST0 @@ -40,6 +36,11 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S7_OUT DMA1_ST2 DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO | TIM_USE_LED, 0, 0 ), // S8_OUT DMA1_ST6 DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S9_OUT DMA1_ST4 + + DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_IN DMA2_ST2 DMA2_ST2 + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_IN DMA2_ST3 DMA2_ST2 + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_IN DMA2_ST4 DMA2_ST2 + DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_IN DMA2_ST7 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/ANYFCM7/target.c b/src/main/target/ANYFCM7/target.c index fb69d60a43b..7dd30d2250b 100644 --- a/src/main/target/ANYFCM7/target.c +++ b/src/main/target/ANYFCM7/target.c @@ -26,12 +26,12 @@ #define TIM_EN_N TIMER_OUTPUT_ENABLED | TIMER_OUTPUT_N_CHANNEL timerHardware_t timerHardware[] = { - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // S1_IN - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S2_IN - DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM, 0, 0 ), // S3_IN DMA2_ST2 DMA2_ST2 - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM, 0, 0 ), // S4_IN DMA2_ST3 DMA2_ST2 - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0 ), // S5_IN DMA2_ST4 DMA2_ST2 - DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM, 0, 0 ), // S6_IN DMA2_ST7 + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // S1_IN + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S2_IN + // DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM, 0, 0 ), // S3_IN DMA2_ST2 DMA2_ST2 + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM, 0, 0 ), // S4_IN DMA2_ST3 DMA2_ST2 + // DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0 ), // S5_IN DMA2_ST4 DMA2_ST2 + // DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM, 0, 0 ), // S6_IN DMA2_ST7 DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S10_OUT 1 DMA1_ST7 DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_OUT 2 DMA1_ST1 diff --git a/src/main/target/AOCODARCF405AIO/target.c b/src/main/target/AOCODARCF405AIO/target.c index be225da1bf6..d2f3d67c427 100644 --- a/src/main/target/AOCODARCF405AIO/target.c +++ b/src/main/target/AOCODARCF405AIO/target.c @@ -28,7 +28,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU65 BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM2, CH2, PA10, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM2, CH2, PA10, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM3, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 diff --git a/src/main/target/AOCODARCF4V2/target.c b/src/main/target/AOCODARCF4V2/target.c index 8581cc5bf11..eccd2f06d8c 100644 --- a/src/main/target/AOCODARCF4V2/target.c +++ b/src/main/target/AOCODARCF4V2/target.c @@ -25,7 +25,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S1 DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S2 diff --git a/src/main/target/AOCODARCF722AIO/target.c b/src/main/target/AOCODARCF722AIO/target.c index 90d21bbf2f6..038b4121b48 100644 --- a/src/main/target/AOCODARCF722AIO/target.c +++ b/src/main/target/AOCODARCF722AIO/target.c @@ -27,7 +27,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PB4, TIM_USE_MOTOR, 0, 0), // S1 DEF_TIM(TIM3, CH2, PB5, TIM_USE_MOTOR, 0, 0), // S2 diff --git a/src/main/target/AOCODARCF7DUAL/target.c b/src/main/target/AOCODARCF7DUAL/target.c index d09fafeda21..2e7de30b5d8 100644 --- a/src/main/target/AOCODARCF7DUAL/target.c +++ b/src/main/target/AOCODARCF7DUAL/target.c @@ -30,7 +30,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), //PPM + // DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), //PPM DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 D(2, 2, 7) DEF_TIM(TIM3, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 D(2, 3, 7) diff --git a/src/main/target/AOCODARCF7MINI/target.c b/src/main/target/AOCODARCF7MINI/target.c index 34360bbc033..f01d2c73e81 100644 --- a/src/main/target/AOCODARCF7MINI/target.c +++ b/src/main/target/AOCODARCF7MINI/target.c @@ -37,7 +37,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), // PPM, RX1 + // DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), // PPM, RX1 DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 D(1, 4, 5) DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 D(1, 5, 4) diff --git a/src/main/target/AXISFLYINGF7PRO/target.c b/src/main/target/AXISFLYINGF7PRO/target.c index 8d4b966b69c..e6ad7b071f2 100644 --- a/src/main/target/AXISFLYINGF7PRO/target.c +++ b/src/main/target/AXISFLYINGF7PRO/target.c @@ -33,7 +33,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH4, PB11, TIM_USE_OUTPUT_AUTO, 0, 1), // S7 DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0), // LED STRIP - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM12, CH2, PB15, TIM_USE_ANY, 0, 0), // CAM CONTROL }; diff --git a/src/main/target/BEEROTORF4/target.c b/src/main/target/BEEROTORF4/target.c index 28e6a77402a..aa4d4893bf1 100644 --- a/src/main/target/BEEROTORF4/target.c +++ b/src/main/target/BEEROTORF4/target.c @@ -24,7 +24,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM IN + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM IN DEF_TIM(TIM1, CH2N, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // M1 - DMAR: DMA2_ST5 DEF_TIM(TIM1, CH3N, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // M2 - diff --git a/src/main/target/BETAFLIGHTF4/target.c b/src/main/target/BETAFLIGHTF4/target.c index 0e10cdbf59d..67d8f260adc 100755 --- a/src/main/target/BETAFLIGHTF4/target.c +++ b/src/main/target/BETAFLIGHTF4/target.c @@ -24,7 +24,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM4, CH3, PB8, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM4, CH3, PB8, TIM_USE_PPM, 0, 0), // PPM // Motors DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT D1_ST7 diff --git a/src/main/target/BETAFPVF722/target.c b/src/main/target/BETAFPVF722/target.c index e24689c0ca9..d44324cd7ce 100755 --- a/src/main/target/BETAFPVF722/target.c +++ b/src/main/target/BETAFPVF722/target.c @@ -25,7 +25,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH3, PB0, TIM_USE_MOTOR, 0, 0), // S1 D(1, 4, 5) DEF_TIM(TIM3, CH4, PB1, TIM_USE_MOTOR, 0, 0), // S2 D(2, 3, 7) diff --git a/src/main/target/BLACKPILL_F411/target.c b/src/main/target/BLACKPILL_F411/target.c index d36b8c19c24..18c0d2edf6a 100644 --- a/src/main/target/BLACKPILL_F411/target.c +++ b/src/main/target/BLACKPILL_F411/target.c @@ -35,7 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM11, CH1, PB9, TIM_USE_ANY, 0, 0), //ST1 pad -softserial_tx1 - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), //RX2 Pad -PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), //RX2 Pad -PPM }; diff --git a/src/main/target/BLUEJAYF4/target.c b/src/main/target/BLUEJAYF4/target.c index 0b968380cf0..ba48551f76c 100644 --- a/src/main/target/BLUEJAYF4/target.c +++ b/src/main/target/BLUEJAYF4/target.c @@ -23,7 +23,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT - DMA1_ST2 DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT - DMA1_ST4 diff --git a/src/main/target/CLRACINGF4AIR/target.c b/src/main/target/CLRACINGF4AIR/target.c index 54fa14c7097..beca9ba67ec 100644 --- a/src/main/target/CLRACINGF4AIR/target.c +++ b/src/main/target/CLRACINGF4AIR/target.c @@ -21,8 +21,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0), - DEF_TIM(TIM4, CH3, PB8, TIM_USE_LED, 0, 0), + // DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0), #if defined(CLRACINGF4AIRV2) || defined(CLRACINGF4AIRV3) DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), @@ -39,6 +38,7 @@ DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 0), #endif + DEF_TIM(TIM4, CH3, PB8, TIM_USE_LED, 0, 0), }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/COLIBRI/target.c b/src/main/target/COLIBRI/target.c index 932188992bc..7affcc4936c 100755 --- a/src/main/target/COLIBRI/target.c +++ b/src/main/target/COLIBRI/target.c @@ -24,14 +24,14 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH3, PA10, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // S1_IN - DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM, 0, 0), // S2_IN - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM, 0, 0), // S3_IN - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0), // S4_IN - DEF_TIM(TIM2, CH1, PA15, TIM_USE_PWM, 0, 0), // S5_IN - DEF_TIM(TIM2, CH2, PB3, TIM_USE_PWM, 0, 0), // S6_IN - DEF_TIM(TIM5, CH1, PA0, TIM_USE_PWM, 0, 0), // S7_IN - DEF_TIM(TIM5, CH2, PA1, TIM_USE_PWM, 0, 0), // S8_IN + // DEF_TIM(TIM1, CH3, PA10, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // S1_IN + // DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM, 0, 0), // S2_IN + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM, 0, 0), // S3_IN + // DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0), // S4_IN + // DEF_TIM(TIM2, CH1, PA15, TIM_USE_PWM, 0, 0), // S5_IN + // DEF_TIM(TIM2, CH2, PB3, TIM_USE_PWM, 0, 0), // S6_IN + // DEF_TIM(TIM5, CH1, PA0, TIM_USE_PWM, 0, 0), // S7_IN + // DEF_TIM(TIM5, CH2, PA1, TIM_USE_PWM, 0, 0), // S8_IN DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT diff --git a/src/main/target/DALRCF405/target.c b/src/main/target/DALRCF405/target.c index e1cddea2613..816ad3cdeca 100644 --- a/src/main/target/DALRCF405/target.c +++ b/src/main/target/DALRCF405/target.c @@ -22,7 +22,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 (1,7) DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 (2,2) diff --git a/src/main/target/DALRCF722DUAL/target.c b/src/main/target/DALRCF722DUAL/target.c index 286c00539a3..8c4fa74475e 100644 --- a/src/main/target/DALRCF722DUAL/target.c +++ b/src/main/target/DALRCF722DUAL/target.c @@ -28,7 +28,7 @@ #define TIM_EN_N TIMER_OUTPUT_ENABLED | TIMER_OUTPUT_N_CHANNEL timerHardware_t timerHardware[] = { - DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM ,0, 0), + // DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM ,0, 0), DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO,0,0), //S1 DMA2_ST2 T8CH1 DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO,0,0), //S2 DMA2_ST3 T8CH2 diff --git a/src/main/target/F4BY/target.c b/src/main/target/F4BY/target.c index 37d9db89418..8d1b4622f69 100644 --- a/src/main/target/F4BY/target.c +++ b/src/main/target/F4BY/target.c @@ -6,14 +6,14 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM3, CH4, PC9, TIM_USE_PPM | TIM_USE_PWM, 0, 0), // S1_IN - DEF_TIM(TIM3, CH3, PC8, TIM_USE_PWM, 0, 0), // S2_IN - DEF_TIM(TIM3, CH1, PC6, TIM_USE_PWM, 0, 0), // S3_IN - DEF_TIM(TIM3, CH2, PC7, TIM_USE_PWM, 0, 0), // S4_IN - DEF_TIM(TIM4, CH4, PD15, TIM_USE_PWM, 0, 0), // S5_IN - DEF_TIM(TIM4, CH3, PD14, TIM_USE_PWM, 0, 0), // S6_IN - DEF_TIM(TIM4, CH2, PD13, TIM_USE_PWM, 0, 0), // S7_IN - DEF_TIM(TIM4, CH1, PD12, TIM_USE_PWM, 0, 0), // S8_IN + // DEF_TIM(TIM3, CH4, PC9, TIM_USE_PPM | TIM_USE_PWM, 0, 0), // S1_IN + // DEF_TIM(TIM3, CH3, PC8, TIM_USE_PWM, 0, 0), // S2_IN + // DEF_TIM(TIM3, CH1, PC6, TIM_USE_PWM, 0, 0), // S3_IN + // DEF_TIM(TIM3, CH2, PC7, TIM_USE_PWM, 0, 0), // S4_IN + // DEF_TIM(TIM4, CH4, PD15, TIM_USE_PWM, 0, 0), // S5_IN + // DEF_TIM(TIM4, CH3, PD14, TIM_USE_PWM, 0, 0), // S6_IN + // DEF_TIM(TIM4, CH2, PD13, TIM_USE_PWM, 0, 0), // S7_IN + // DEF_TIM(TIM4, CH1, PD12, TIM_USE_PWM, 0, 0), // S8_IN DEF_TIM(TIM2, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT DEF_TIM(TIM2, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT diff --git a/src/main/target/FF_F35_LIGHTNING/target.c b/src/main/target/FF_F35_LIGHTNING/target.c index 83d75497e4d..617c085a925 100644 --- a/src/main/target/FF_F35_LIGHTNING/target.c +++ b/src/main/target/FF_F35_LIGHTNING/target.c @@ -33,11 +33,11 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), DEF_TIM(TIM5, CH4, PA3, TIM_USE_ANY, 0, 0), -#ifdef WINGFC - DEF_TIM(TIM2, CH4, PB11, TIM_USE_PPM, 0, 0), // UART3 RX -#else - DEF_TIM(TIM2, CH3, PB10, TIM_USE_PPM, 0, 0), // UART3 TX -#endif +// #ifdef WINGFC +// DEF_TIM(TIM2, CH4, PB11, TIM_USE_PPM, 0, 0), // UART3 RX +// #else +// DEF_TIM(TIM2, CH3, PB10, TIM_USE_PPM, 0, 0), // UART3 TX +// #endif }; diff --git a/src/main/target/FF_FORTINIF4/target.c b/src/main/target/FF_FORTINIF4/target.c index 5853bc31391..54aae5ce4e6 100644 --- a/src/main/target/FF_FORTINIF4/target.c +++ b/src/main/target/FF_FORTINIF4/target.c @@ -27,7 +27,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 1, 0 ), // S2_OUT - DMA1_ST2 DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 1, 1 ), // S3_OUT - DMA1_ST6 DEF_TIM(TIM2, CH3, PA2, TIM_USE_OUTPUT_AUTO, 1, 0 ), // S4_OUT - DMA1_ST1 - DEF_TIM(TIM4, CH4, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM4, CH4, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM4, CH2, PB7, TIM_USE_LED, 0, 0), // LED - DMA1_ST3 }; diff --git a/src/main/target/FIREWORKSV2/target.c b/src/main/target/FIREWORKSV2/target.c index 8e7cdb95754..7f96e097145 100644 --- a/src/main/target/FIREWORKSV2/target.c +++ b/src/main/target/FIREWORKSV2/target.c @@ -44,7 +44,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_2_mpu6000, DEVHW_MPU6000, IMU_2_SPI_BUS, IMU_ BUSDEV_REGISTER_SPI_TAG(busdev_2_mpu6500, DEVHW_MPU6500, IMU_2_SPI_BUS, IMU_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_2_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM10, CH1, PB8, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM10, CH1, PB8, TIM_USE_PPM, 0, 0), // PPM // Motor output 1: use different set of timers for MC and FW //DEF_TIM(TIM3, CH3, PB0, TIM_USE_MOTOR | TIM _USE_SERVO, 1, 0), // S1_OUT D(1,7) diff --git a/src/main/target/FISHDRONEF4/target.c b/src/main/target/FISHDRONEF4/target.c index b0aec49bc4d..93354b51758 100644 --- a/src/main/target/FISHDRONEF4/target.c +++ b/src/main/target/FISHDRONEF4/target.c @@ -23,12 +23,12 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH1, PA0, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // PPM IN - DEF_TIM(TIM5, CH2, PA1, TIM_USE_PWM, 0, 0 ), - DEF_TIM(TIM3, CH3, PB0, TIM_USE_PWM, 0, 0 ), - DEF_TIM(TIM2, CH3, PB10, TIM_USE_PWM, 0, 0 ), - DEF_TIM(TIM2, CH4, PB11, TIM_USE_PWM, 0, 0 ), - DEF_TIM(TIM1, CH1, PA8, TIM_USE_PWM, 0, 0 ), + // DEF_TIM(TIM5, CH1, PA0, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM5, CH2, PA1, TIM_USE_PWM, 0, 0 ), + // DEF_TIM(TIM3, CH3, PB0, TIM_USE_PWM, 0, 0 ), + // DEF_TIM(TIM2, CH3, PB10, TIM_USE_PWM, 0, 0 ), + // DEF_TIM(TIM2, CH4, PB11, TIM_USE_PWM, 0, 0 ), + // DEF_TIM(TIM1, CH1, PA8, TIM_USE_PWM, 0, 0 ), DEF_TIM(TIM12, CH1, PB14, TIM_USE_OUTPUT_AUTO, 0, 0 ), DEF_TIM(TIM12, CH2, PB15, TIM_USE_OUTPUT_AUTO, 0, 0 ), diff --git a/src/main/target/FLYWOOF405PRO/target.c b/src/main/target/FLYWOOF405PRO/target.c index f61d06ca0e1..c0f1c4eec2d 100644 --- a/src/main/target/FLYWOOF405PRO/target.c +++ b/src/main/target/FLYWOOF405PRO/target.c @@ -34,7 +34,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH2, PA9, TIM_USE_LED, 0, 0), //2812LED D(1,5,3) - DEF_TIM(TIM10, CH1, PB8, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM10, CH1, PB8, TIM_USE_PPM, 0, 0), // PPM }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/FLYWOOF411/target.c b/src/main/target/FLYWOOF411/target.c index 965974162b0..3946ad0b404 100644 --- a/src/main/target/FLYWOOF411/target.c +++ b/src/main/target/FLYWOOF411/target.c @@ -25,7 +25,7 @@ timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH1, PA2, TIM_USE_PPM, 0, 0), // PPM IN + // DEF_TIM(TIM9, CH1, PA2, TIM_USE_PPM, 0, 0), // PPM IN #ifdef FLYWOOF411_V2 DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 1), // S1 - D(2,1) DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 - D(1,6) diff --git a/src/main/target/FLYWOOF745/target.c b/src/main/target/FLYWOOF745/target.c index 879b66d01fa..7c79d1f6a52 100644 --- a/src/main/target/FLYWOOF745/target.c +++ b/src/main/target/FLYWOOF745/target.c @@ -30,7 +30,7 @@ #include "drivers/pinio.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH3, PE13, TIM_USE_PPM, 0, 1), // PPM, DMA2_ST6 + // DEF_TIM(TIM1, CH3, PE13, TIM_USE_PPM, 0, 1), // PPM, DMA2_ST6 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // M1 , DMA1_ST7 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // M2 , DMA1_ST2 diff --git a/src/main/target/FLYWOOF7DUAL/target.c b/src/main/target/FLYWOOF7DUAL/target.c index d9d5482e3a5..28d5a2ee471 100644 --- a/src/main/target/FLYWOOF7DUAL/target.c +++ b/src/main/target/FLYWOOF7DUAL/target.c @@ -38,7 +38,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_2, DEVHW_MPU6000, GYRO_2_SPI_BUS, GYRO BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_2, DEVHW_MPU6500, GYRO_2_SPI_BUS, GYRO_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, GYRO_2_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH1, PC6, TIM_USE_PPM, 0, 0), // PPM&SBUS + // DEF_TIM(TIM8, CH1, PC6, TIM_USE_PPM, 0, 0), // PPM&SBUS DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 - D(1,2) DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 - D(1,4) diff --git a/src/main/target/FOXEERF405/target.c b/src/main/target/FOXEERF405/target.c index 1ad827bb5ca..ca6ebe3507e 100644 --- a/src/main/target/FOXEERF405/target.c +++ b/src/main/target/FOXEERF405/target.c @@ -22,7 +22,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 (1,7) DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 (1,4) diff --git a/src/main/target/FOXEERF722DUAL/target.c b/src/main/target/FOXEERF722DUAL/target.c index 1933a5134ee..fe34e0a45d4 100644 --- a/src/main/target/FOXEERF722DUAL/target.c +++ b/src/main/target/FOXEERF722DUAL/target.c @@ -29,7 +29,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, #endif timerHardware_t timerHardware[] = { - DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM, 0, 0), // PPM&SBUS + // DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM, 0, 0), // PPM&SBUS DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1), // S1 - D(2, 1, 6) #if defined(FOXEERF722V2) diff --git a/src/main/target/FURYF4OSD/target.c b/src/main/target/FURYF4OSD/target.c index c820d0c378f..ef414db35e4 100644 --- a/src/main/target/FURYF4OSD/target.c +++ b/src/main/target/FURYF4OSD/target.c @@ -23,7 +23,7 @@ timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH4, PC9, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM8, CH4, PC9, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM2, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S1_OUT - D(1, 6, 3) DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT - D(1, 7, 5) DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_OUT - D(1, 2, 5) diff --git a/src/main/target/GEPRCF405/target.c b/src/main/target/GEPRCF405/target.c index 68a900898c1..c5f5791a92d 100644 --- a/src/main/target/GEPRCF405/target.c +++ b/src/main/target/GEPRCF405/target.c @@ -24,12 +24,8 @@ #include "drivers/timer.h" #include "drivers/timer_def.h" - - - - timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 1), DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1), diff --git a/src/main/target/GEPRCF722/target.c b/src/main/target/GEPRCF722/target.c index 851ae376a54..7061c09ffc5 100644 --- a/src/main/target/GEPRCF722/target.c +++ b/src/main/target/GEPRCF722/target.c @@ -27,7 +27,7 @@ timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), diff --git a/src/main/target/GEPRCF722_BT_HD/target.c b/src/main/target/GEPRCF722_BT_HD/target.c index d1f902eb698..e7a6f1b332d 100644 --- a/src/main/target/GEPRCF722_BT_HD/target.c +++ b/src/main/target/GEPRCF722_BT_HD/target.c @@ -25,10 +25,8 @@ #include "drivers/timer.h" #include "drivers/sensor.h" - - timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), diff --git a/src/main/target/GEPRC_F722_AIO/target.c b/src/main/target/GEPRC_F722_AIO/target.c index a8ee276fce0..60b6b359e89 100644 --- a/src/main/target/GEPRC_F722_AIO/target.c +++ b/src/main/target/GEPRC_F722_AIO/target.c @@ -27,7 +27,7 @@ timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), DEF_TIM(TIM8, CH4, PC9, TIM_USE_MOTOR, 0, 0), DEF_TIM(TIM8, CH3, PC8, TIM_USE_MOTOR, 0, 0), diff --git a/src/main/target/HAKRCF405D/target.c b/src/main/target/HAKRCF405D/target.c index 664db476332..0679523028c 100644 --- a/src/main/target/HAKRCF405D/target.c +++ b/src/main/target/HAKRCF405D/target.c @@ -30,7 +30,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU600 timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1), // S2 @@ -41,9 +41,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH1, PB8, TIM_USE_LED, 0, 0), // LED STRIP(2,6) - DEF_TIM(TIM5, CH1, PA0, TIM_USE_PWM, 0, 0), // PWM1 - DEF_TIM(TIM5, CH2, PA1, TIM_USE_PWM, 0, 0), // PWM2 - DEF_TIM(TIM9, CH1, PA2, TIM_USE_PWM, 0, 0), // PWM3 + // DEF_TIM(TIM5, CH1, PA0, TIM_USE_PWM, 0, 0), // PWM1 + // DEF_TIM(TIM5, CH2, PA1, TIM_USE_PWM, 0, 0), // PWM2 + // DEF_TIM(TIM9, CH1, PA2, TIM_USE_PWM, 0, 0), // PWM3 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/HAKRCF411D/target.c b/src/main/target/HAKRCF411D/target.c index 1423d2d1992..f4fddb456ac 100644 --- a/src/main/target/HAKRCF411D/target.c +++ b/src/main/target/HAKRCF411D/target.c @@ -23,7 +23,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM IN + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM IN DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 diff --git a/src/main/target/HAKRCKD722/target.c b/src/main/target/HAKRCKD722/target.c index 16757ff6416..e114f4410bf 100644 --- a/src/main/target/HAKRCKD722/target.c +++ b/src/main/target/HAKRCKD722/target.c @@ -30,7 +30,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42 BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 diff --git a/src/main/target/HGLRCF722/target.c b/src/main/target/HGLRCF722/target.c index 1ebbbf63373..e0e4a73e2ad 100644 --- a/src/main/target/HGLRCF722/target.c +++ b/src/main/target/HGLRCF722/target.c @@ -47,8 +47,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), // S8 UP1-6 D(1, 3, 2) DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 2), // LED D(2, 6, 0) - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM, RX2 - DEF_TIM(TIM5, CH3, PA2, TIM_USE_PWM, 0, 0), // TX2 & softserial1 + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM, RX2 + // DEF_TIM(TIM5, CH3, PA2, TIM_USE_PWM, 0, 0), // TX2 & softserial1 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/IFLIGHTF4_SUCCEXD/target.c b/src/main/target/IFLIGHTF4_SUCCEXD/target.c index ad9ab68c9ea..b79bc160750 100644 --- a/src/main/target/IFLIGHTF4_SUCCEXD/target.c +++ b/src/main/target/IFLIGHTF4_SUCCEXD/target.c @@ -24,7 +24,7 @@ #include "drivers/pinio.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), DEF_TIM(TIM5, CH1, PA0, TIM_USE_MOTOR, 0, 0), DEF_TIM(TIM2, CH3, PB10, TIM_USE_MOTOR, 0, 0), diff --git a/src/main/target/IFLIGHTF4_TWING/target.c b/src/main/target/IFLIGHTF4_TWING/target.c index 87227cf3b04..fcf8b09a85d 100644 --- a/src/main/target/IFLIGHTF4_TWING/target.c +++ b/src/main/target/IFLIGHTF4_TWING/target.c @@ -30,7 +30,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_imu0, DEVHW_MPU6500, MPU6500_0_SPI_BUS, MPU6 BUSDEV_REGISTER_SPI_TAG(busdev_imu1, DEVHW_MPU6500, MPU6500_1_SPI_BUS, MPU6500_1_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_1_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM // Motors DEF_TIM(TIM1, CH2N, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT D2_ST6 diff --git a/src/main/target/IFLIGHTF7_TWING/target.c b/src/main/target/IFLIGHTF7_TWING/target.c index 6876f07b204..b04f6ee8d32 100644 --- a/src/main/target/IFLIGHTF7_TWING/target.c +++ b/src/main/target/IFLIGHTF7_TWING/target.c @@ -30,7 +30,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_imu0, DEVHW_MPU6500, MPU6500_0_SPI_BUS, MPU6 BUSDEV_REGISTER_SPI_TAG(busdev_imu1, DEVHW_MPU6500, MPU6500_1_SPI_BUS, MPU6500_1_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_1_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), diff --git a/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c b/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c index 54ba97a4905..e46c36e0507 100644 --- a/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c +++ b/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.c @@ -30,7 +30,7 @@ //BUSDEV_REGISTER_SPI_TAG(busdev_icm42605, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM2, CH2, PB3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM2, CH2, PB3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PB4, TIM_USE_MOTOR, 0, 0), // S1 DEF_TIM(TIM3, CH3, PB0, TIM_USE_MOTOR, 0, 0), // S2 diff --git a/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c b/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c index b4b6f6de0fb..664ff354b4c 100644 --- a/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c +++ b/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c @@ -30,7 +30,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_ BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 1), // S1 DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 diff --git a/src/main/target/IFLIGHT_JBF7PRO/target.c b/src/main/target/IFLIGHT_JBF7PRO/target.c index 676c3d6dae3..dcf7ae64385 100644 --- a/src/main/target/IFLIGHT_JBF7PRO/target.c +++ b/src/main/target/IFLIGHT_JBF7PRO/target.c @@ -25,7 +25,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 diff --git a/src/main/target/KAKUTEF4/target.c b/src/main/target/KAKUTEF4/target.c index bf58e5bdca8..ba47d09ffec 100755 --- a/src/main/target/KAKUTEF4/target.c +++ b/src/main/target/KAKUTEF4/target.c @@ -29,7 +29,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // PPM IN + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // PPM IN DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT - DMA1_ST7 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT - DMA1_ST2 diff --git a/src/main/target/KAKUTEF7/target.c b/src/main/target/KAKUTEF7/target.c index 53ae9359deb..e8ea4230120 100755 --- a/src/main/target/KAKUTEF7/target.c +++ b/src/main/target/KAKUTEF7/target.c @@ -29,7 +29,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH3, PE13, TIM_USE_PPM, 0, 1), // PPM, DMA2_ST6 + // DEF_TIM(TIM1, CH3, PE13, TIM_USE_PPM, 0, 1), // PPM, DMA2_ST6 DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // M1 , DMA1_ST7 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // M2 , DMA1_ST2 diff --git a/src/main/target/KAKUTEF7MINIV3/target.c b/src/main/target/KAKUTEF7MINIV3/target.c index 095038960de..864c1de5204 100644 --- a/src/main/target/KAKUTEF7MINIV3/target.c +++ b/src/main/target/KAKUTEF7MINIV3/target.c @@ -38,7 +38,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // S5 DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), // S6 DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0), // LED STRIP - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // RX2 + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // RX2 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/KROOZX/target.c b/src/main/target/KROOZX/target.c index c77a77aaed5..a445a9656f6 100755 --- a/src/main/target/KROOZX/target.c +++ b/src/main/target/KROOZX/target.c @@ -23,7 +23,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // PPM IN + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // PPM IN DEF_TIM(TIM5, CH2, PA1, TIM_USE_MOTOR, 0, 0), // PWM4 DEF_TIM(TIM5, CH4, PA3, TIM_USE_MOTOR, 0, 0), // PWM2 diff --git a/src/main/target/MAMBAF405US/target.c b/src/main/target/MAMBAF405US/target.c index 1781a047e3f..19ba5944c20 100644 --- a/src/main/target/MAMBAF405US/target.c +++ b/src/main/target/MAMBAF405US/target.c @@ -25,7 +25,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN #ifdef MAMBAF405US_I2C DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1 ), // S1 pin A9: DMA2 Stream 6 Channel 0 diff --git a/src/main/target/MAMBAF722/target.c b/src/main/target/MAMBAF722/target.c index b97969e57bf..e1afa9b221f 100644 --- a/src/main/target/MAMBAF722/target.c +++ b/src/main/target/MAMBAF722/target.c @@ -25,7 +25,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT – D(2, 4, 7) DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT – D(2, 7, 7) diff --git a/src/main/target/MAMBAF722_2022A/target.c b/src/main/target/MAMBAF722_2022A/target.c index 9b51f139453..4d371135963 100644 --- a/src/main/target/MAMBAF722_2022A/target.c +++ b/src/main/target/MAMBAF722_2022A/target.c @@ -25,7 +25,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2 diff --git a/src/main/target/MAMBAF722_X8/target.c b/src/main/target/MAMBAF722_X8/target.c index 9b51f139453..4d371135963 100644 --- a/src/main/target/MAMBAF722_X8/target.c +++ b/src/main/target/MAMBAF722_X8/target.c @@ -25,7 +25,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM11, CH1, PB9, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2 diff --git a/src/main/target/MATEKF405/target.c b/src/main/target/MATEKF405/target.c index 254707887b2..1706954b7f9 100644 --- a/src/main/target/MATEKF405/target.c +++ b/src/main/target/MATEKF405/target.c @@ -22,7 +22,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1), // S2 UP(2,1) diff --git a/src/main/target/MATEKF405CAN/target.c b/src/main/target/MATEKF405CAN/target.c index 2ab40de1dc4..406a74ecd86 100644 --- a/src/main/target/MATEKF405CAN/target.c +++ b/src/main/target/MATEKF405CAN/target.c @@ -36,7 +36,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH1, PA15, TIM_USE_LED, 0, 0), //2812LED D(1,5,3) - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), //RX2 + DEF_TIM(TIM9, CH2, PA3, TIM_USE_ANY, 0, 0), //RX2 DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), //TX2 softserial1_Tx }; diff --git a/src/main/target/MATEKF405SE/target.c b/src/main/target/MATEKF405SE/target.c index ef6fceaca94..6aa586e68ae 100644 --- a/src/main/target/MATEKF405SE/target.c +++ b/src/main/target/MATEKF405SE/target.c @@ -35,7 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH1, PA15, TIM_USE_LED, 0, 0), //2812LED D(1,5,3) - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), //RX2 + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), //RX2 DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), //TX2 softserial1_Tx }; diff --git a/src/main/target/MATEKF405TE/target.c b/src/main/target/MATEKF405TE/target.c index 79f6269a528..2240915365a 100644 --- a/src/main/target/MATEKF405TE/target.c +++ b/src/main/target/MATEKF405TE/target.c @@ -42,7 +42,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH4, PB1, TIM_USE_LED, 0, 0), // 2812LED D(1,2,5) DEF_TIM(TIM11, CH1, PB9, TIM_USE_BEEPER, 0, 0), // BEEPER PWM - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), //RX2 + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), //RX2 DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), //TX2 softserial1_Tx }; diff --git a/src/main/target/MATEKF411/target.c b/src/main/target/MATEKF411/target.c index fb2ccde3f14..9a15bfd8d1a 100755 --- a/src/main/target/MATEKF411/target.c +++ b/src/main/target/MATEKF411/target.c @@ -35,7 +35,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM2, CH1, PA15, TIM_USE_OUTPUT_AUTO, 0, 0), // S7 D(1,5,3) - clash with S2 DEF_TIM(TIM1, CH1, PA8, TIM_USE_ANY, 0, 0), //softserial_tx2 - 2812LED TIM_USE_LED D(2,1,6) - DEF_TIM(TIM5, CH1, PA0, TIM_USE_PPM, 0, 0), //use rssi pad for PPM/softserial_tx1 + DEF_TIM(TIM5, CH1, PA0, TIM_USE_ANY, 0, 0), //use rssi pad for PPM/softserial_tx1 //DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), // TX2 }; diff --git a/src/main/target/MATEKF722/target.c b/src/main/target/MATEKF722/target.c index d2575f42f2d..eb4275d39f8 100644 --- a/src/main/target/MATEKF722/target.c +++ b/src/main/target/MATEKF722/target.c @@ -25,7 +25,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 D(1, 4, 5) DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 D(2, 3, 7) diff --git a/src/main/target/MATEKF722PX/target.c b/src/main/target/MATEKF722PX/target.c index 170b67d9514..da31a68e42d 100755 --- a/src/main/target/MATEKF722PX/target.c +++ b/src/main/target/MATEKF722PX/target.c @@ -40,10 +40,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 2), // LED D(2, 3, 6) - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // RX2, PPM - DEF_TIM(TIM5, CH3, PA2, TIM_USE_PWM, 0, 0), // TX2, softserial1_tx - - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // Cam_ctrl reserved + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // RX2, PPM + DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), // TX2, softserial1_tx + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // Cam_ctrl reserved }; diff --git a/src/main/target/MATEKF722SE/target.c b/src/main/target/MATEKF722SE/target.c index 6e469dfff3a..585f3bb3994 100644 --- a/src/main/target/MATEKF722SE/target.c +++ b/src/main/target/MATEKF722SE/target.c @@ -43,9 +43,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 2), // LED D(2, 6, 0) - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM, RX2 + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM, RX2 - DEF_TIM(TIM5, CH3, PA2, TIM_USE_PWM, 0, 0), // TX2 & softserial1 + DEF_TIM(TIM5, CH3, PA2, TIM_USE_ANY, 0, 0), // TX2 & softserial1 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/MATEKF765/target.c b/src/main/target/MATEKF765/target.c index 712beb4c8c9..6d0599a29f9 100644 --- a/src/main/target/MATEKF765/target.c +++ b/src/main/target/MATEKF765/target.c @@ -52,8 +52,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0), // LED_2812 D(2,6,0) - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // RX6 PPM - DEF_TIM(TIM8, CH1, PC6, TIM_USE_ANY, 0, 0), // TX6 + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // RX6 PPM + DEF_TIM(TIM8, CH1, PC6, TIM_USE_ANY, 0, 0), // TX6 and SoftwareSerial DEF_TIM(TIM11, CH1, PB9, TIM_USE_BEEPER, 0, 0), // BEEPER PWM for MATEKF765SE }; diff --git a/src/main/target/MATEKH743/target.c b/src/main/target/MATEKH743/target.c index 1923e6623a1..bc2fb01558a 100644 --- a/src/main/target/MATEKH743/target.c +++ b/src/main/target/MATEKH743/target.c @@ -51,10 +51,10 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 9), // LED_2812 DEF_TIM(TIM2, CH1, PA15, TIM_USE_BEEPER, 0, 0), // BEEPER PWM - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // RX6 PPM - DEF_TIM(TIM8, CH1, PC6, TIM_USE_ANY, 0, 0), // TX6 - DEF_TIM(TIM16, CH1, PB8, TIM_USE_ANY, 0, 0), // RX4 - DEF_TIM(TIM17, CH1, PB9, TIM_USE_ANY, 0, 0), // TX4 + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PPM, 0, 0), // RX6 PPM + DEF_TIM(TIM8, CH1, PC6, TIM_USE_ANY, 0, 0), // TX6 SoftwareSerial + // DEF_TIM(TIM16, CH1, PB8, TIM_USE_ANY, 0, 0), // RX4 + // DEF_TIM(TIM17, CH1, PB9, TIM_USE_ANY, 0, 0), // TX4 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/NEUTRONRCF435SE/target.c b/src/main/target/NEUTRONRCF435SE/target.c index 3a8848911fa..54c4932ebe1 100644 --- a/src/main/target/NEUTRONRCF435SE/target.c +++ b/src/main/target/NEUTRONRCF435SE/target.c @@ -26,20 +26,19 @@ timerHardware_t timerHardware[] = { - DEF_TIM(TMR5, CH1, PA0, TIM_USE_ANY, 0, 13), // TIM_USE_CAMERA_CONTROL - DEF_TIM(TMR5, CH2, PA1, TIM_USE_ANY |TIM_USE_LED, 0,7), // PWM1 - LED MCO1 DMA1 CH2 - DEF_TIM(TMR2, CH4, PA3, TIM_USE_ANY |TIM_USE_PPM, 0,6), // PWM2 - PPM DMA1 CH6 - - DEF_TIM(TMR8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0,0), // motor1 DMA2 CH7 - DEF_TIM(TMR8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0,2), // motor2 DMA2 CH6 - DEF_TIM(TMR3, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0,1), // motor3 DMA2 CH5 - DEF_TIM(TMR3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0,3), // motor4 DMA2 CH4 - - DEF_TIM(TMR4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0,11), // PWM1 - OUT5 DMA1 CH7 - DEF_TIM(TMR4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0,10), // PWM2 - OUT6 DMA2 CH1 - DEF_TIM(TMR3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0,9), // PWM3 - OUT7 DMA2 CH2 - DEF_TIM(TMR3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0,8), // PWM4 - OUT8 DMA2 CH3 - + DEF_TIM(TMR8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0,0), // motor1 DMA2 CH7 + DEF_TIM(TMR8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0,2), // motor2 DMA2 CH6 + DEF_TIM(TMR3, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0,1), // motor3 DMA2 CH5 + DEF_TIM(TMR3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0,3), // motor4 DMA2 CH4 + + DEF_TIM(TMR4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0,11), // PWM1 - OUT5 DMA1 CH7 + DEF_TIM(TMR4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0,10), // PWM2 - OUT6 DMA2 CH1 + DEF_TIM(TMR3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0,9), // PWM3 - OUT7 DMA2 CH2 + DEF_TIM(TMR3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0,8), // PWM4 - OUT8 DMA2 CH3 + + // DEF_TIM(TMR5, CH1, PA0, TIM_USE_ANY, 0, 13), // TIM_USE_CAMERA_CONTROL + DEF_TIM(TMR5, CH2, PA1, TIM_USE_LED, 0,7), // PWM1 - LED MCO1 DMA1 CH2 + // DEF_TIM(TMR2, CH4, PA3, TIM_USE_ANY |TIM_USE_PPM, 0,6), // PWM2 - PPM DMA1 CH6 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/NOX/target.c b/src/main/target/NOX/target.c index e2651956e1c..647c77bfa11 100755 --- a/src/main/target/NOX/target.c +++ b/src/main/target/NOX/target.c @@ -24,8 +24,6 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM2, CH3, PB10, TIM_USE_PPM, 0, 0), //PPM - DEF_TIM(TIM2, CH1, PA0, TIM_USE_LED, 0, 0), //2812LED DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT DEF_TIM(TIM1, CH1N, PA7, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT @@ -34,6 +32,9 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM9, CH1, PA2, TIM_USE_ANY, 0, 0), //UART2 TX DEF_TIM(TIM9, CH2, PA3, TIM_USE_ANY, 0, 0), //UART2 RX + + // DEF_TIM(TIM2, CH3, PB10, TIM_USE_PPM, 0, 0), //PPM + DEF_TIM(TIM2, CH1, PA0, TIM_USE_LED, 0, 0), //2812LED }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/OMNIBUSF4/target.c b/src/main/target/OMNIBUSF4/target.c index 81b30e11f25..86485aa49fc 100644 --- a/src/main/target/OMNIBUSF4/target.c +++ b/src/main/target/OMNIBUSF4/target.c @@ -24,17 +24,6 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { -#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3) - DEF_TIM(TIM10, CH1, PB8, TIM_USE_PPM, 0, 0), // PPM - DEF_TIM(TIM4, CH4, PB9, TIM_USE_ANY, 0, 0), // S2_IN -#else - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PPM, 0, 0), // PPM - DEF_TIM(TIM12, CH2, PB15, TIM_USE_ANY, 0, 0), // S2_IN -#endif - DEF_TIM(TIM8, CH1, PC6, TIM_USE_ANY, 0, 0), // S3_IN, UART6_TX - DEF_TIM(TIM8, CH2, PC7, TIM_USE_ANY, 0, 0), // S4_IN, UART6_RX - DEF_TIM(TIM8, CH3, PC8, TIM_USE_ANY, 0, 0), // S5_IN // pad labelled CH5 on OMNIBUSF4PRO - DEF_TIM(TIM8, CH4, PC9, TIM_USE_ANY, 0, 0), // S6_IN // pad labelled CH6 on OMNIBUSF4PRO DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT D1_ST7 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT D1_ST2 @@ -63,6 +52,19 @@ timerHardware_t timerHardware[] = { #if (defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3)) && !defined(OMNIBUSF4PRO_LEDSTRIPM5) DEF_TIM(TIM4, CH1, PB6, TIM_USE_LED, 0, 0), // LED strip for F4 V2 / F4-Pro-0X and later (RCD_CS for F4) #endif + +#if defined(OMNIBUSF4PRO) || defined(OMNIBUSF4V3) + // DEF_TIM(TIM10, CH1, PB8, TIM_USE_PPM, 0, 0), // PPM + DEF_TIM(TIM4, CH4, PB9, TIM_USE_ANY, 0, 0), // S2_IN +#else + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PPM, 0, 0), // PPM + DEF_TIM(TIM12, CH2, PB15, TIM_USE_ANY, 0, 0), // S2_IN +#endif + DEF_TIM(TIM8, CH1, PC6, TIM_USE_ANY, 0, 0), // S3_IN, UART6_TX + DEF_TIM(TIM8, CH2, PC7, TIM_USE_ANY, 0, 0), // S4_IN, UART6_RX + DEF_TIM(TIM8, CH3, PC8, TIM_USE_ANY, 0, 0), // S5_IN // pad labelled CH5 on OMNIBUSF4PRO + DEF_TIM(TIM8, CH4, PC9, TIM_USE_ANY, 0, 0), // S6_IN // pad labelled CH6 on OMNIBUSF4PRO + }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/OMNIBUSF7NXT/target.c b/src/main/target/OMNIBUSF7NXT/target.c index b1eb7332dca..573c3e1bcd0 100644 --- a/src/main/target/OMNIBUSF7NXT/target.c +++ b/src/main/target/OMNIBUSF7NXT/target.c @@ -36,7 +36,7 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); timerHardware_t timerHardware[] = { - DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM, 0, 0), // PPM / UART1_RX + // DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM, 0, 0), // PPM / UART1_RX // OUTPUT 1-4 DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 1, 0), // D(1, 5, 5) diff --git a/src/main/target/PIXRACER/target.c b/src/main/target/PIXRACER/target.c index 73c9d6937a0..2364e60aec5 100755 --- a/src/main/target/PIXRACER/target.c +++ b/src/main/target/PIXRACER/target.c @@ -37,7 +37,7 @@ BUSDEV_REGISTER_I2C_TAG(busdev_mag3110, DEVHW_MAG3110, MAG_I2C_BUS, BUSDEV_REGISTER_SPI_TAG(busdev_hmc5983_spi, DEVHW_HMC5883, MPU9250_SPI_BUS, PE15, NONE, 1, DEVFLAGS_NONE, 0); timerHardware_t timerHardware[] = { - DEF_TIM(TIM3, CH3, PB0, TIM_USE_PPM, 0, 0), // PPM shared uart6 pc7 + // DEF_TIM(TIM3, CH3, PB0, TIM_USE_PPM, 0, 0), // PPM shared uart6 pc7 DEF_TIM(TIM1, CH4, PE14, TIM_USE_OUTPUT_AUTO, 0, 0), // S1_OUT DEF_TIM(TIM1, CH3, PE13, TIM_USE_OUTPUT_AUTO, 0, 0), // S2_OUT diff --git a/src/main/target/RADIX/target.c b/src/main/target/RADIX/target.c index db78409cdaf..ba10f018188 100644 --- a/src/main/target/RADIX/target.c +++ b/src/main/target/RADIX/target.c @@ -25,7 +25,7 @@ /* TIMERS */ timerHardware_t timerHardware[] = { - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PPM, 0, 0), // PPM In + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PPM, 0, 0), // PPM In DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 DEF_TIM(TIM1, CH3, PA10, TIM_USE_OUTPUT_AUTO, 0, 0), // S3 diff --git a/src/main/target/REVO/target.c b/src/main/target/REVO/target.c index d1203adadc5..e1a2c2e8418 100644 --- a/src/main/target/REVO/target.c +++ b/src/main/target/REVO/target.c @@ -41,12 +41,12 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO | TIM_USE_ANY, 0, 0), // S5_OUT / LED DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_OUT D1_ST2 - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // PPM (5th pin on FlexiIO port) - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // S2_IN - DEF_TIM(TIM8, CH1, PC6, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S3_IN - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S4_IN - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S5_IN - DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM | TIM_USE_OUTPUT_AUTO, 0, 0), // S6_IN + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0), // PPM (5th pin on FlexiIO port) + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0), // S2_IN + DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S3_IN + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S4_IN + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S5_IN + DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // S6_IN }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/SAGEATF4/target.c b/src/main/target/SAGEATF4/target.c index 48875414672..dd0f274b9f4 100644 --- a/src/main/target/SAGEATF4/target.c +++ b/src/main/target/SAGEATF4/target.c @@ -26,9 +26,7 @@ timerHardware_t timerHardware[] = { - DEF_TIM(TMR5, CH4, PA3, TIM_USE_PPM, 0, 4), // PPM UART2_RX_PIN DMA1 CH5 - DEF_TIM(TMR2, CH3, PB10, TIM_USE_ANY | TIM_USE_LED, 0,5), // PWM1 - LED MCO1 DMA1 CH6 - DEF_TIM(TMR2, CH4, PB11, TIM_USE_ANY | TIM_USE_BEEPER, 0,6), // PWM2 - BB DMA1 CH7 + // DEF_TIM(TMR5, CH4, PA3, TIM_USE_PPM, 0, 4), // PPM UART2_RX_PIN DMA1 CH5 DEF_TIM(TMR4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0,0), // motor1 DMA1 CH1 DEF_TIM(TMR4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0,1), // motor2 DMA1 CH2 @@ -40,6 +38,8 @@ timerHardware_t timerHardware[] = { DEF_TIM(TMR3, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0,10), // PWM3 - OUT7 DMA2 CH4 DEF_TIM(TMR3, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0,11), // PWM4 - OUT8 DMA2 CH5 + DEF_TIM(TMR2, CH3, PB10, TIM_USE_ANY | TIM_USE_LED, 0,5), // PWM1 - LED MCO1 DMA1 CH6 + DEF_TIM(TMR2, CH4, PB11, TIM_USE_ANY | TIM_USE_BEEPER, 0,6), // PWM2 - BB DMA1 CH7 }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]); diff --git a/src/main/target/SKYSTARSF405HD/target.c b/src/main/target/SKYSTARSF405HD/target.c index 40ab18015af..3da0f45db92 100644 --- a/src/main/target/SKYSTARSF405HD/target.c +++ b/src/main/target/SKYSTARSF405HD/target.c @@ -22,7 +22,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM1, CH1, PA8, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM1, CH1, PA8, TIM_USE_PPM, 0, 0), DEF_TIM(TIM4, CH2, PB7, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), diff --git a/src/main/target/SKYSTARSF722HD/target.c b/src/main/target/SKYSTARSF722HD/target.c index 72ac8974552..bee870243af 100644 --- a/src/main/target/SKYSTARSF722HD/target.c +++ b/src/main/target/SKYSTARSF722HD/target.c @@ -22,7 +22,7 @@ #include "drivers/timer.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM3, CH1, PB4, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM3, CH1, PB4, TIM_USE_PPM, 0, 0), DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // TIM3_CH3 / TIM8_CH3 DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0), // TIM3_CH4 / TIM8_CH4 diff --git a/src/main/target/SPARKY2/target.c b/src/main/target/SPARKY2/target.c index b4b4b295047..9364f231c54 100644 --- a/src/main/target/SPARKY2/target.c +++ b/src/main/target/SPARKY2/target.c @@ -24,11 +24,11 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // PPM IN - DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM, 0, 0 ), // S2_IN - DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S3_IN - GPIO_PartialRemap_TIM3 - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0 ), // S4_IN - DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM, 0, 0 ), // S5_IN + // DEF_TIM(TIM8, CH2, PC7, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM, 0, 0 ), // S2_IN + // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S3_IN - GPIO_PartialRemap_TIM3 + // DEF_TIM(TIM8, CH3, PC8, TIM_USE_PWM, 0, 0 ), // S4_IN + // DEF_TIM(TIM8, CH4, PC9, TIM_USE_PWM, 0, 0 ), // S5_IN DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT diff --git a/src/main/target/SPEEDYBEEF4/target.c b/src/main/target/SPEEDYBEEF4/target.c index b45c517bfaa..075640d0f05 100644 --- a/src/main/target/SPEEDYBEEF4/target.c +++ b/src/main/target/SPEEDYBEEF4/target.c @@ -24,7 +24,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 UP(1,2) DEF_TIM(TIM3, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 UP(2,1) diff --git a/src/main/target/SPEEDYBEEF7/target.c b/src/main/target/SPEEDYBEEF7/target.c index 78821f52594..ac38530b84e 100644 --- a/src/main/target/SPEEDYBEEF7/target.c +++ b/src/main/target/SPEEDYBEEF7/target.c @@ -24,7 +24,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 diff --git a/src/main/target/SPEEDYBEEF7MINI/target.c b/src/main/target/SPEEDYBEEF7MINI/target.c index 32b5792dda2..2b0777ab573 100644 --- a/src/main/target/SPEEDYBEEF7MINI/target.c +++ b/src/main/target/SPEEDYBEEF7MINI/target.c @@ -46,7 +46,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_LED, 0, 0), // LED D(2, 6, 0) - DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), // PPM, RX1 + // DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), // PPM, RX1 DEF_TIM(TIM5, CH3, PA2, TIM_USE_PWM, 0, 0), // TX2 & softserial1 }; diff --git a/src/main/target/SPEEDYBEEF7V2/target.c b/src/main/target/SPEEDYBEEF7V2/target.c index 0914224a05b..abf06021a14 100644 --- a/src/main/target/SPEEDYBEEF7V2/target.c +++ b/src/main/target/SPEEDYBEEF7V2/target.c @@ -27,7 +27,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM4, CH2, PB7, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM1, CH1, PA8, TIM_USE_OUTPUT_AUTO, 0, 1), // S1 DEF_TIM(TIM1, CH2, PA9, TIM_USE_OUTPUT_AUTO, 0, 1), // S2 diff --git a/src/main/target/SPRACINGF4EVO/target.c b/src/main/target/SPRACINGF4EVO/target.c index deabe8665d6..5b108168c1e 100755 --- a/src/main/target/SPRACINGF4EVO/target.c +++ b/src/main/target/SPRACINGF4EVO/target.c @@ -23,8 +23,8 @@ timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM | TIM_USE_PWM, 0, 0), // PPM / PWM1 / UART2 RX - DEF_TIM(TIM9, CH1, PA2, TIM_USE_PWM, 0, 0), // PPM / PWM2 / UART2 TX + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM | TIM_USE_PWM, 0, 0), // PPM / PWM1 / UART2 RX + // DEF_TIM(TIM9, CH1, PA2, TIM_USE_PWM, 0, 0), // PPM / PWM2 / UART2 TX DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 1), // ESC 1 DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 1), // ESC 2 diff --git a/src/main/target/SPRACINGF7DUAL/target.c b/src/main/target/SPRACINGF7DUAL/target.c index f47d1a08355..e94835b93c2 100644 --- a/src/main/target/SPRACINGF7DUAL/target.c +++ b/src/main/target/SPRACINGF7DUAL/target.c @@ -35,8 +35,8 @@ BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_2, DEVHW_MPU6500, MPU6500_2_SPI_ timerHardware_t timerHardware[] = { - DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM | TIM_USE_PWM, 0, 0), // PPM / PWM1 / UART2 RX - DEF_TIM(TIM9, CH1, PA2, TIM_USE_PWM, 0, 0), // PPM / PWM2 / UART2 TX + // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM | TIM_USE_PWM, 0, 0), // PPM / PWM1 / UART2 RX + // DEF_TIM(TIM9, CH1, PA2, TIM_USE_PWM, 0, 0), // PPM / PWM2 / UART2 TX #if (SPRACINGF7DUAL_REV <= 1) DEF_TIM(TIM8, CH2, PC7, TIM_USE_MOTOR, 0, 0), // ESC 1 diff --git a/src/main/target/TMOTORF7/target.c b/src/main/target/TMOTORF7/target.c index 2f96517ba15..0af36aa68ce 100644 --- a/src/main/target/TMOTORF7/target.c +++ b/src/main/target/TMOTORF7/target.c @@ -37,7 +37,7 @@ timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0), - DEF_TIM(TIM2, CH1, PA15, TIM_USE_PPM, 0, 0), + // DEF_TIM(TIM2, CH1, PA15, TIM_USE_PPM, 0, 0), DEF_TIM(TIM11, CH1, PB9, TIM_USE_ANY, 0, 0), DEF_TIM(TIM1, CH1, PA8, TIM_USE_LED, 0, 0) diff --git a/src/main/target/TMOTORF7V2/target.c b/src/main/target/TMOTORF7V2/target.c index 606ac8819dc..c21b0f0229a 100644 --- a/src/main/target/TMOTORF7V2/target.c +++ b/src/main/target/TMOTORF7V2/target.c @@ -24,7 +24,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM + // DEF_TIM(TIM5, CH4, PA3, TIM_USE_PPM, 0, 0), // PPM DEF_TIM(TIM3, CH3, PB0, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S2 diff --git a/src/main/target/YUPIF4/target.c b/src/main/target/YUPIF4/target.c index 310ab66b0aa..837647a89b6 100644 --- a/src/main/target/YUPIF4/target.c +++ b/src/main/target/YUPIF4/target.c @@ -24,7 +24,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PPM, 0, 0 ), // PPM IN + // DEF_TIM(TIM8, CH3, PC8, TIM_USE_PPM, 0, 0 ), // PPM IN DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT - DMA1_ST2 DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT - DMA1_ST4 diff --git a/src/main/target/YUPIF7/target.c b/src/main/target/YUPIF7/target.c index cd6a17ee683..3587a8bc4bc 100644 --- a/src/main/target/YUPIF7/target.c +++ b/src/main/target/YUPIF7/target.c @@ -24,7 +24,7 @@ #include "drivers/bus.h" timerHardware_t timerHardware[] = { - DEF_TIM(TIM8, CH3, PC8, TIM_USE_PPM, 0, 1 ), // PPM IN + // DEF_TIM(TIM8, CH3, PC8, TIM_USE_PPM, 0, 1 ), // PPM IN DEF_TIM(TIM2, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT - DMA1_ST2 DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT - DMA1_ST4 DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_OUT - DMA1_ST1 From a47afe2187f7120ef2462b049ab21f7817595c3e Mon Sep 17 00:00:00 2001 From: Darren Lines Date: Mon, 6 Nov 2023 21:49:20 +0000 Subject: [PATCH 44/46] Show system message when linear descent begins --- src/main/io/osd.c | 17 ++++++++++++++--- src/main/io/osd.h | 1 + src/main/navigation/navigation.c | 5 +++++ src/main/navigation/navigation_private.h | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 1662094cabb..89ee0642a48 100644 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -154,8 +154,9 @@ #define OSD_MIN_FONT_VERSION 3 -static timeMs_t notify_settings_saved = 0; -static bool savingSettings = false; +static timeMs_t linearDescentMessageMs = 0; +static timeMs_t notify_settings_saved = 0; +static bool savingSettings = false; static unsigned currentLayout = 0; static int layoutOverride = -1; @@ -1011,7 +1012,13 @@ static const char * navigationStateMessage(void) if (posControl.flags.rthTrackbackActive) { return OSD_MESSAGE_STR(OSD_MSG_RTH_TRACKBACK); } else { - return OSD_MESSAGE_STR(OSD_MSG_HEADING_HOME); + if (posControl.rthState.rthLinearDescentActive && (linearDescentMessageMs == 0 || linearDescentMessageMs > millis())) { + if (linearDescentMessageMs == 0) + linearDescentMessageMs = millis() + 5000; // Show message for 5 seconds. + + return OSD_MESSAGE_STR(OSD_MSG_RTH_LINEAR_DESCENT); + } else + return OSD_MESSAGE_STR(OSD_MSG_HEADING_HOME); } case MW_NAV_STATE_HOLD_INFINIT: // Used by HOLD flight modes. No information to add. @@ -1052,6 +1059,10 @@ static const char * navigationStateMessage(void) // Not used break; } + + if (!posControl.rthState.rthLinearDescentActive && linearDescentMessageMs != 0) + linearDescentMessageMs = 0; + return NULL; } diff --git a/src/main/io/osd.h b/src/main/io/osd.h index f09c9d049b3..18851c5d804 100644 --- a/src/main/io/osd.h +++ b/src/main/io/osd.h @@ -93,6 +93,7 @@ #define OSD_MSG_RTH_CLIMB "ADJUSTING RTH ALTITUDE" #define OSD_MSG_RTH_TRACKBACK "RTH BACK TRACKING" #define OSD_MSG_HEADING_HOME "EN ROUTE TO HOME" +#define OSD_MSG_RTH_LINEAR_DESCENT "BEGIN LINEAR DESCENT" #define OSD_MSG_WP_FINISHED "WP END>HOLDING POSITION" #define OSD_MSG_WP_LANDED "WP END>LANDED" #define OSD_MSG_PREPARE_NEXT_WP "PREPARING FOR NEXT WAYPOINT" diff --git a/src/main/navigation/navigation.c b/src/main/navigation/navigation.c index c991531f32b..db04d38bd70 100644 --- a/src/main/navigation/navigation.c +++ b/src/main/navigation/navigation.c @@ -1432,6 +1432,7 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_RTH_HEAD_HOME(navigatio if (homeDistance <= METERS_TO_CENTIMETERS(navConfig()->general.rth_linear_descent_start_distance)) { posControl.rthState.rthFinalAltitude = posControl.rthState.homePosition.pos.z + navConfig()->general.rth_home_altitude; + posControl.rthState.rthLinearDescentActive = true; } } @@ -1442,6 +1443,10 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_RTH_HEAD_HOME(navigatio if (isWaypointReached(tmpHomePos, 0)) { // Successfully reached position target - update XYZ-position setDesiredPosition(tmpHomePos, posControl.rthState.homePosition.heading, NAV_POS_UPDATE_XY | NAV_POS_UPDATE_Z | NAV_POS_UPDATE_HEADING); + + if (navConfig()->general.flags.rth_use_linear_descent) + posControl.rthState.rthLinearDescentActive = false; + return NAV_FSM_EVENT_SUCCESS; // NAV_STATE_RTH_HOVER_PRIOR_TO_LANDING } else { setDesiredPosition(tmpHomePos, 0, NAV_POS_UPDATE_Z | NAV_POS_UPDATE_XY); diff --git a/src/main/navigation/navigation_private.h b/src/main/navigation/navigation_private.h index c408f109c9b..776eca78ea3 100644 --- a/src/main/navigation/navigation_private.h +++ b/src/main/navigation/navigation_private.h @@ -350,6 +350,7 @@ typedef struct { float rthInitialDistance; // Distance when starting flight home fpVector3_t homeTmpWaypoint; // Temporary storage for home target fpVector3_t originalHomePosition; // the original rth home - save it, since it could be replaced by safehome or HOME_RESET + bool rthLinearDescentActive; // Activation status of Linear Descent } rthState_t; typedef enum { From 62d78ae7c2e6b8ed72e9651ca5aa4b24d62ea76b Mon Sep 17 00:00:00 2001 From: Darren Lines Date: Tue, 7 Nov 2023 08:13:35 +0000 Subject: [PATCH 45/46] Bug fix Multiple RTH and early exit from RTH fixed. Message would only be displayed for first RTH. --- src/main/io/osd.c | 6 +++--- src/main/navigation/navigation.c | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 89ee0642a48..a178d5b55f1 100644 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -1001,6 +1001,9 @@ static const char * divertingToSafehomeMessage(void) static const char * navigationStateMessage(void) { + if (!posControl.rthState.rthLinearDescentActive && linearDescentMessageMs != 0) + linearDescentMessageMs = 0; + switch (NAV_Status.state) { case MW_NAV_STATE_NONE: break; @@ -1060,9 +1063,6 @@ static const char * navigationStateMessage(void) break; } - if (!posControl.rthState.rthLinearDescentActive && linearDescentMessageMs != 0) - linearDescentMessageMs = 0; - return NULL; } diff --git a/src/main/navigation/navigation.c b/src/main/navigation/navigation.c index db04d38bd70..94014e86c48 100644 --- a/src/main/navigation/navigation.c +++ b/src/main/navigation/navigation.c @@ -1227,6 +1227,9 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_RTH_INITIALIZE(navigati { UNUSED(previousState); + if (navConfig()->general.flags.rth_use_linear_descent && posControl.rthState.rthLinearDescentActive) + posControl.rthState.rthLinearDescentActive = false; + if ((posControl.flags.estHeadingStatus == EST_NONE) || (posControl.flags.estAltStatus == EST_NONE) || !STATE(GPS_FIX_HOME)) { // Heading sensor, altitude sensor and HOME fix are mandatory for RTH. If not satisfied - switch to emergency landing // Relevant to failsafe forced RTH only. Switched RTH blocked in selectNavEventFromBoxModeInput if sensors unavailable. @@ -1444,7 +1447,7 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_RTH_HEAD_HOME(navigatio // Successfully reached position target - update XYZ-position setDesiredPosition(tmpHomePos, posControl.rthState.homePosition.heading, NAV_POS_UPDATE_XY | NAV_POS_UPDATE_Z | NAV_POS_UPDATE_HEADING); - if (navConfig()->general.flags.rth_use_linear_descent) + if (navConfig()->general.flags.rth_use_linear_descent && posControl.rthState.rthLinearDescentActive) posControl.rthState.rthLinearDescentActive = false; return NAV_FSM_EVENT_SUCCESS; // NAV_STATE_RTH_HOVER_PRIOR_TO_LANDING From c6d15733e289e53f4ae5510c8ccbfa90bc0a8c1a Mon Sep 17 00:00:00 2001 From: "Pawel Spychalski (DzikuVx)" Date: Tue, 7 Nov 2023 10:56:04 +0100 Subject: [PATCH 46/46] change to ANYFCF7 --- src/main/target/ANYFCF7/target.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/main/target/ANYFCF7/target.c b/src/main/target/ANYFCF7/target.c index dc523f4c780..b5ef1f12c4a 100644 --- a/src/main/target/ANYFCF7/target.c +++ b/src/main/target/ANYFCF7/target.c @@ -26,21 +26,23 @@ timerHardware_t timerHardware[] = { // DEF_TIM(TIM12, CH1, PB14, TIM_USE_PWM | TIM_USE_PPM, 0, 0 ), // S1_IN // DEF_TIM(TIM12, CH2, PB15, TIM_USE_PWM, 0, 0 ), // S2_IN - DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S10_OUT 1 DMA1_ST7 - DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_OUT 2 DMA1_ST0 - DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_OUT - DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT 4 DMA1_ST1 DMA1_ST3 - DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT 3 DMA1_ST4 - DEF_TIM(TIM9, CH2, PE6, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_OUT - DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_OUT DMA1_ST5 - DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S7_OUT DMA1_ST2 - DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO | TIM_USE_LED, 0, 0 ), // S8_OUT DMA1_ST6 - DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S9_OUT DMA1_ST4 + DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_IN DMA2_ST2 DMA2_ST2 + DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_IN DMA2_ST3 DMA2_ST2 + DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_IN DMA2_ST4 DMA2_ST2 + DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_IN DMA2_ST7 + + DEF_TIM(TIM4, CH3, PB8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S10_OUT 1 DMA1_ST7 + DEF_TIM(TIM5, CH3, PA2, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_OUT 2 DMA1_ST0 + DEF_TIM(TIM4, CH4, PB9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_OUT + DEF_TIM(TIM5, CH4, PA3, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S1_OUT 4 DMA1_ST1 DMA1_ST3 + DEF_TIM(TIM5, CH2, PA1, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S2_OUT 3 DMA1_ST4 + DEF_TIM(TIM9, CH2, PE6, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_OUT + DEF_TIM(TIM3, CH2, PB5, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_OUT DMA1_ST5 + DEF_TIM(TIM5, CH1, PA0, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S7_OUT DMA1_ST2 + DEF_TIM(TIM2, CH2, PB3, TIM_USE_OUTPUT_AUTO | TIM_USE_LED, 0, 0 ), // S8_OUT DMA1_ST6 + DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S9_OUT DMA1_ST4 - DEF_TIM(TIM8, CH1, PC6, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S3_IN DMA2_ST2 DMA2_ST2 - DEF_TIM(TIM8, CH2, PC7, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S4_IN DMA2_ST3 DMA2_ST2 - DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S5_IN DMA2_ST4 DMA2_ST2 - DEF_TIM(TIM8, CH4, PC9, TIM_USE_OUTPUT_AUTO, 0, 0 ), // S6_IN DMA2_ST7 + }; const int timerHardwareCount = sizeof(timerHardware) / sizeof(timerHardware[0]);