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

Add support for custom tricopter mixer.

See #606.
This commit is contained in:
Dominic Clifton 2015-06-28 23:08:06 +01:00
parent ea6a6ccb3d
commit 7a1d071efb
5 changed files with 14 additions and 9 deletions

View file

@ -326,7 +326,7 @@ static bool testBlackboxConditionUncached(FlightLogFieldCondition condition)
return motorCount >= condition - FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_MOTORS_1 + 1; return motorCount >= condition - FLIGHT_LOG_FIELD_CONDITION_AT_LEAST_MOTORS_1 + 1;
case FLIGHT_LOG_FIELD_CONDITION_TRICOPTER: case FLIGHT_LOG_FIELD_CONDITION_TRICOPTER:
return masterConfig.mixerMode == MIXER_TRI; return masterConfig.mixerMode == MIXER_TRI || masterConfig.mixerMode == MIXER_CUSTOM_TRI;
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0: case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0:
case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_1: case FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_1:

View file

@ -268,7 +268,8 @@ const mixer_t mixers[] = {
{ 1, 1, NULL }, // MIXER_SINGLECOPTER { 1, 1, NULL }, // MIXER_SINGLECOPTER
{ 4, 0, mixerAtail4 }, // MIXER_ATAIL4 { 4, 0, mixerAtail4 }, // MIXER_ATAIL4
{ 0, 0, NULL }, // MIXER_CUSTOM { 0, 0, NULL }, // MIXER_CUSTOM
{ 1, 1, NULL }, // MIXER_CUSTOM_PLANE { 1, 1, NULL }, // MIXER_CUSTOM_AIRPLANE
{ 3, 1, NULL }, // MIXER_CUSTOM_TRI
}; };
#endif #endif
@ -347,6 +348,7 @@ const mixerRules_t servoMixers[] = {
{ 0, NULL }, // MULTITYPE_ATAIL4 { 0, NULL }, // MULTITYPE_ATAIL4
{ 0, NULL }, // MULTITYPE_CUSTOM { 0, NULL }, // MULTITYPE_CUSTOM
{ 0, NULL }, // MULTITYPE_CUSTOM_PLANE { 0, NULL }, // MULTITYPE_CUSTOM_PLANE
{ 0, NULL }, // MULTITYPE_CUSTOM_TRI
}; };
static servoMixer_t *customServoMixers; static servoMixer_t *customServoMixers;
@ -445,7 +447,7 @@ void mixerUsePWMOutputConfiguration(pwmOutputConfiguration_t *pwmOutputConfigura
servoCount = pwmOutputConfiguration->servoCount; servoCount = pwmOutputConfiguration->servoCount;
if (currentMixerMode == MIXER_CUSTOM) { if (currentMixerMode == MIXER_CUSTOM || currentMixerMode == MIXER_CUSTOM_TRI) {
// load custom mixer into currentMixer // load custom mixer into currentMixer
for (i = 0; i < MAX_SUPPORTED_MOTORS; i++) { for (i = 0; i < MAX_SUPPORTED_MOTORS; i++) {
// check if done // check if done
@ -493,6 +495,9 @@ void mixerUsePWMOutputConfiguration(pwmOutputConfiguration_t *pwmOutputConfigura
loadCustomServoMixer(); loadCustomServoMixer();
} }
} else { } else {
if (currentMixerMode == MIXER_CUSTOM_TRI) {
loadCustomServoMixer();
}
DISABLE_STATE(FIXED_WING); DISABLE_STATE(FIXED_WING);
} }
@ -595,6 +600,7 @@ void writeServos(void)
break; break;
case MIXER_TRI: case MIXER_TRI:
case MIXER_CUSTOM_TRI:
if (mixerConfig->tri_unarmed_servo) { if (mixerConfig->tri_unarmed_servo) {
// if unarmed flag set, we always move servo // if unarmed flag set, we always move servo
pwmWriteServo(servoIndex++, servo[SERVO_RUDDER]); pwmWriteServo(servoIndex++, servo[SERVO_RUDDER]);
@ -718,9 +724,6 @@ static void servoMixer(void)
input[INPUT_GIMBAL_PITCH] = scaleRange(inclination.values.pitchDeciDegrees, -1800, 1800, -500, +500); input[INPUT_GIMBAL_PITCH] = scaleRange(inclination.values.pitchDeciDegrees, -1800, 1800, -500, +500);
input[INPUT_GIMBAL_ROLL] = scaleRange(inclination.values.rollDeciDegrees, -1800, 1800, -500, +500); input[INPUT_GIMBAL_ROLL] = scaleRange(inclination.values.rollDeciDegrees, -1800, 1800, -500, +500);
debug[0] = input[INPUT_GIMBAL_PITCH];
debug[1] = input[INPUT_GIMBAL_ROLL];
input[INPUT_THROTTLE] = motor[0]; input[INPUT_THROTTLE] = motor[0];
// center the RC input value around the RC middle value // center the RC input value around the RC middle value
@ -801,6 +804,7 @@ void mixTable(void)
case MIXER_FLYING_WING: case MIXER_FLYING_WING:
case MIXER_AIRPLANE: case MIXER_AIRPLANE:
case MIXER_BI: case MIXER_BI:
case MIXER_CUSTOM_TRI:
case MIXER_TRI: case MIXER_TRI:
case MIXER_DUALCOPTER: case MIXER_DUALCOPTER:
case MIXER_SINGLECOPTER: case MIXER_SINGLECOPTER:

View file

@ -49,7 +49,8 @@ typedef enum mixerMode
MIXER_SINGLECOPTER = 21, MIXER_SINGLECOPTER = 21,
MIXER_ATAIL4 = 22, MIXER_ATAIL4 = 22,
MIXER_CUSTOM = 23, MIXER_CUSTOM = 23,
MIXER_CUSTOM_AIRPLANE = 24 MIXER_CUSTOM_AIRPLANE = 24,
MIXER_CUSTOM_TRI = 25
} mixerMode_e; } mixerMode_e;
// Custom mixer data per motor // Custom mixer data per motor

View file

@ -152,7 +152,7 @@ static const char * const mixerNames[] = {
"FLYING_WING", "Y4", "HEX6X", "OCTOX8", "OCTOFLATP", "OCTOFLATX", "FLYING_WING", "Y4", "HEX6X", "OCTOX8", "OCTOFLATP", "OCTOFLATX",
"AIRPLANE", "HELI_120_CCPM", "HELI_90_DEG", "VTAIL4", "AIRPLANE", "HELI_120_CCPM", "HELI_90_DEG", "VTAIL4",
"HEX6H", "PPM_TO_SERVO", "DUALCOPTER", "SINGLECOPTER", "HEX6H", "PPM_TO_SERVO", "DUALCOPTER", "SINGLECOPTER",
"ATAIL4", "CUSTOM", "CUSTOMAIRPLANE", NULL "ATAIL4", "CUSTOM", "CUSTOMAIRPLANE", "CUSTOMTRI", NULL
}; };
#endif #endif

View file

@ -769,7 +769,7 @@ void loop(void)
// Allow yaw control for tricopters if the user wants the servo to move even when unarmed. // Allow yaw control for tricopters if the user wants the servo to move even when unarmed.
if (isUsingSticksForArming() && rcData[THROTTLE] <= masterConfig.rxConfig.mincheck if (isUsingSticksForArming() && rcData[THROTTLE] <= masterConfig.rxConfig.mincheck
#ifndef USE_QUAD_MIXER_ONLY #ifndef USE_QUAD_MIXER_ONLY
&& !(masterConfig.mixerMode == MIXER_TRI && masterConfig.mixerConfig.tri_unarmed_servo) && !((masterConfig.mixerMode == MIXER_TRI || masterConfig.mixerMode == MIXER_CUSTOM_TRI) && masterConfig.mixerConfig.tri_unarmed_servo)
&& masterConfig.mixerMode != MIXER_AIRPLANE && masterConfig.mixerMode != MIXER_AIRPLANE
&& masterConfig.mixerMode != MIXER_FLYING_WING && masterConfig.mixerMode != MIXER_FLYING_WING
#endif #endif