Skip to main content

Mixer

Betaflight supports a number of mixing configurations as well as custom mixing. Mixer configurations determine how the servos and motors work together to control the aircraft.

Airframe Type​

To select a built-in airframe mixer, use the Betaflight App. It includes diagrams of mixer types to assist with correct wiring.

You can also use the CLI:

  1. Use mixer list to see all supported types
  2. Select a type — e.g. mixer TRI
  3. Run save to apply

Supported Airframe Types​

NameDescriptionMotorsServos
TRITricopterM1-M3S1
QUADPQuadcopter-PlusM1-M4None
QUADXQuadcopter-XM1-M4None
BIBicopter (left/right)M1-M2S1, S2
GIMBALGimbal controlN/AS1, S2
Y6Y6-copterM1-M6None
HEX6Hexacopter-PlusM1-M6None
FLYING_WINGFixed wing; elevonsM1S1, S2
Y4Y4-copterM1-M4None
HEX6XHexacopter-XM1-M6None
OCTOX8Octocopter-X (over/under)M1-M8None
OCTOFLATPOctocopter-FlatPlusM1-M8None
OCTOFLATXOctocopter-FlatXM1-M8None
AIRPLANEFixed wing; Ax2, R, EM1S1, S2, S3, S4
HELI_120_CCPM3D-capable HelicopterM1S1, S2, S3, S4
HELI_90_DEG
VTAIL4Quadcopter with V-TailM1-M4N/A
HEX6HHexacopter-HM1-M6None
PPM_TO_SERVO
DUALCOPTERDualcopterM1-M2S1, S2
SINGLECOPTERConventional helicopterM1S1
ATAIL4Quadcopter with A-TailM1-M4N/A
CUSTOMUser-defined
CUSTOM AIRPLANEUser-defined airplaneM1-M2S1-S8
CUSTOM TRICOPTERUser-defined tricopter
note

In firmware 2025.12, the CUSTOM AIRPLANE mixer model now requires at least one motor.


Mixer Algorithm (mixer_type)​

The mixer_type setting controls how the PID outputs and throttle are combined when a motor is at its authority limit. All graphs below show scenarios with AIRMODE enabled; with AIRMODE disabled, standard mixer clipping occurs at low throttle.

LEGACY​

set mixer_type = LEGACY — enabled by default

Mixer Type: LEGACY graph showing throttle vs motor output with sharp clipping at authority limits

LINEAR​

set mixer_type = LINEAR

Mixer Type: LINEAR graph showing gradual throttle adjustment to prevent steep transitions at authority limits

DYNAMIC​

set mixer_type = DYNAMIC

Mixer Type: DYNAMIC graph showing adaptive throttle response based on combined PIDsum from multiple axes

Note: The above graph shows the ideal scenario. Actual behaviour depends on PIDsum contributions from all axes; if only one axis requests full authority, the result is identical to LINEAR. Optimal results occur when multiple axes request authority simultaneously.

EZLANDING​

set mixer_type = EZLANDING

See the Betaflight 4.5 Release Notes for EzLanding settings.

Summary​

TypeBehaviour
LEGACYKeeps requested throttle position as long as possible, then drastically changes throttle to maintain authority. Causes a sharper transition at the limit.
LINEARStarts changing throttle earlier to prevent steep transitions at the end, smoothing out thrust increase/decrease for the desired correction.
DYNAMICSimilar to LINEAR but adaptive. When PIDsum comes from a single axis it behaves like LINEAR; when PIDsum is combined from multiple axes, it adapts to stay closer to the requested throttle level.

Servo Configuration​

The servo CLI command defines settings for servo outputs. The smix command controls how the mixer maps FC data (RC input, PID output, channel forwarding) to those outputs.

Channel Forwarding​

Channel Forwarding lets you forward AUX channels to servos over PWM pins. Enable it in the Betaflight App (Features), or via CLI: feature CHANNEL_FORWARDING.

servo Command​

servo <min> <max> <middle> <angleMin> <angleMax> <rate> <forwardFromChannel>

ParameterDescription
<min>, <max>Limit servo travel in µs
<middle>Mid value when not forwarding; servo mixer value is added to this
<angleMin>, <angleMax>Unused
<rate>Scale for value from servo mixer or gimbal input, -100% to 100%
<forwardFromChannel>Use an RC channel value as reference instead of <middle>. Servo follows that RC channel with possible correction from servo mixer. <min> / <max> are still honored.

Servo Filtering​

A low-pass filter can be enabled to avoid exciting structural modes in the airframe (e.g. tail boom resonance on a tricopter).

Configuration (CLI only):

  1. set servo_lowpass_freq = nnn — cutoff frequency, valid range 10–400 Hz (second-order filter)
  2. set servo_lowpass_enable = ON

Tuning the cutoff:

  1. Allow the vehicle to move freely in the affected axis (e.g. support a tricopter so it can yaw).
  2. Tap the vehicle or command the servo directly.
  3. If oscillations persist for several seconds, halve servo_lowpass_freq and repeat.
  4. Stop when oscillations damp within roughly one second. Run save.

Custom Motor Mixing​

Custom motor mixing allows completely customised motor configurations. Each motor is defined with its contribution to throttle, roll, pitch, and yaw.

Setup:

  1. mixer custom — enable custom mixing
  2. mmix reset — erase existing custom mix
  3. Optionally mmix load <name> — load a built-in mix as a starting point
  4. Issue one mmix statement per motor

Syntax: mmix n THROTTLE ROLL PITCH YAW

ParameterDescription
nMotor index (0-based)
THROTTLEThrottle contribution. Typically 1.0 for all active motors; 0.0 for unused.
ROLLRoll authority, nominally -1.0 to 1.0
PITCHPitch authority, nominally -1.0 to 1.0
YAWRotation direction: 1.0 = CCW, -1.0 = CW
note

mmix may display a mix that is not currently active — custom motor mixes only apply when a custom mixer is selected. Motor indices must be defined consecutively starting from 0; the table stops at the first entry with THROTTLE = 0.


Custom Servo Mixing​

Custom servo mixing rules map FC data sources to servo outputs. Rules are applied in definition order.

smix Commands​

CommandDescription
smixPrint current servo mixer
smix resetErase custom servo mix and servo reversals in the current profile
smix load <name>Load servo portion of a named configuration

Rule syntax: smix <rule> <servo> <source> <rate> <speed> <min> <max> <box>

<servo> IDs:

IDServo slot
0GIMBAL PITCH
1GIMBAL ROLL
2ELEVATOR / SINGLECOPTER_4
3FLAPPERON 1 (LEFT) / SINGLECOPTER_1
4FLAPPERON 2 (RIGHT) / BICOPTER_LEFT / DUALCOPTER_LEFT / SINGLECOPTER_2
5RUDDER / BICOPTER_RIGHT / DUALCOPTER_RIGHT / SINGLECOPTER_3
6THROTTLE (first motor output only)
7FLAPS

Only some servo channels are connected to output based on mixer mode. For custom modes: RUDDER for CUSTOM_TRI; ELEVATOR through FLAPS for CUSTOM_AIRPLANE; no servos for CUSTOM. GIMBAL handling is hard-coded and ignores mmix rules.

<source> IDs:

IDSource
0Stabilized ROLL
1Stabilized PITCH
2Stabilized YAW
3Stabilized THROTTLE (first motor output only)
4RC ROLL
5RC PITCH
6RC YAW
7RC THROTTLE
8RC AUX 1
9RC AUX 2
10RC AUX 3
11RC AUX 4
12GIMBAL PITCH
13GIMBAL ROLL

Stabilized ROLL/PITCH/YAW is taken directly from RC command in PASSTHRU mode.

Other parameters:

  • <rate> — scale the source, -100% to 100%. Zero terminates the smix table.
  • <speed> — limit source change rate per loop (1 ms default). Zero = unlimited.
  • <min>, <max> — value range as a percentage of full servo travel (0% = min, 50% = center, 100% = max).
  • <box> — rule only applies when this is 0 or the corresponding SERVOx mode is enabled.

Servo Reversal​

smix reverse — print current reversal configuration

smix reverse <servo> <source> r|n — reverse (r) or normalise (n) a source for a given servo. Nearly equivalent to a negative <rate>, but <min>/<max> limits are applied before reversing.

smix reverse is a per-profile setting — configure it for each profile as needed.

Example — reverse tail servo on a tricopter (TRI mixer):

smix reverse 5 2 r

Examples​

Example 1: KK2.0 Wired Motor Setup​

X-configuration quad with KK board motor numbering:

1CW 2CCW
\ /
KK
/ \
4CCW 3CW
mixer custom
mmix reset
mmix 0 1.0, 1.0, -1.0, -1.0 # Front Left — positive roll, negative pitch, CW
mmix 1 1.0, -1.0, -1.0, 1.0 # Front Right — negative roll, negative pitch, CCW
mmix 2 1.0, -1.0, 1.0, -1.0 # Rear Right — negative roll, positive pitch, CW
mmix 3 1.0, 1.0, 1.0, 1.0 # Rear Left — positive roll, positive pitch, CCW

Example 2: HEX-U Copter​

U-shaped hex. Motors 1 and 6 are closer to the roll axis so they have half the roll authority of the outer motors.

.4........3.
............
.5...FC...2.
............
...6....1...
mixer custom
mmix reset
mmix 0 1.0, -0.5, 1.0, -1.0 # half negative roll, full positive pitch, CW
mmix 1 1.0, -1.0, 0.0, 1.0 # full negative roll, no pitch, CCW
mmix 2 1.0, -1.0, -1.0, -1.0 # full negative roll, full negative pitch, CW
mmix 3 1.0, 1.0, -1.0, 1.0 # full positive roll, full negative pitch, CCW
mmix 4 1.0, 1.0, 0.0, -1.0 # full positive roll, no pitch, CW
mmix 5 1.0, 0.5, 1.0, 1.0 # half positive roll, full positive pitch, CCW

Example 3: Custom Tricopter​

mixer CUSTOMTRI
mmix reset
mmix 0 1.000 0.000 1.333 0.000
mmix 1 1.000 -1.000 -0.667 0.000
mmix 2 1.000 1.000 -0.667 0.000
smix reset
smix 0 5 2 100 0 0 100 0
profile 0
smix reverse 5 2 r
profile 1
smix reverse 5 2 r
profile 2
smix reverse 5 2 r

Example 4: Custom Airplane with Differential Thrust​

Twin-engine plane with differential thrust. Motors on outputs 1–2; servos on the slots defined in the servo ID table above. Yaw influence is set to 0.3 — adjust for more or less differential.

PinOutput
1Left Engine
2Right Engine
3Pitch / Elevator
4Roll / Aileron
5Roll / Aileron
6Yaw / Rudder
mixer CUSTOMAIRPLANE
mmix reset
mmix 0 1.0 0.0 0.0 0.3 # Left Engine
mmix 1 1.0 0.0 0.0 -0.3 # Right Engine

smix reset
# Rule Servo Source Rate Speed Min Max Box
smix 0 3 0 100 0 0 100 0 # Roll / Aileron
smix 1 4 0 100 0 0 100 0 # Roll / Aileron
smix 2 5 2 100 0 0 100 0 # Yaw / Rudder
smix 3 2 1 100 0 0 100 0 # Pitch / Elevator

Example 5: Skip a Broken Motor Output​

To use outputs 0, 1, 2, 4 (skipping broken output 3), add a dummy mmix entry for motor 3 with zero PID contributions so the table doesn't terminate early.

mixer custom
mmix reset
mmix 0 1.0, -1.0, 1.0, -1.0
mmix 1 1.0, -1.0, -1.0, 1.0
mmix 2 1.0, 1.0, 1.0, 1.0
mmix 3 1.0, 0.0, 0.0, 0.0 # dummy — keeps table alive for motor 4
mmix 4 1.0, 1.0, -1.0, -1.0
save

Octo X8 Emulation​

mixer custom
mmix reset
mmix 0 1.000 -1.000 1.000 -1.000
mmix 1 1.000 -1.000 -1.000 1.000
mmix 2 1.000 1.000 1.000 1.000
mmix 3 1.000 1.000 -1.000 -1.000
mmix 4 1.000 -1.000 1.000 1.000
mmix 5 1.000 -1.000 -1.000 -1.000
mmix 6 1.000 1.000 1.000 -1.000
mmix 7 1.000 1.000 -1.000 1.000

PPM to SERVO Emulation​

Direct channel mapping example:

mixer customairplane
smix reset
smix 0 0 4 100 0 0 100 0
smix 1 1 5 100 0 0 100 0
smix 2 2 6 100 0 0 100 0
smix 3 3 7 100 0 0 100 0
smix 4 4 8 100 0 0 100 0
smix 5 5 9 100 0 0 100 0
smix 6 6 10 100 0 0 100 0
smix 7 7 11 100 0 0 100 0

To create an mmix/smix for any built-in mixer configuration, refer to the corresponding lines in src/main/flight/mixer.c and src/main/flight/servos.c in the firmware source.


Legacy Support Matrix​

note

This matrix reflects firmware versions 3.x. F1 and F3 targets are no longer supported in current firmware. Provided for historical reference only.

MixerF1F3F4 & F7Note
QUADXooo
QUADX 1234ooo
QUAD+ooo
Tricopterooo
Gimbalooo
Hex +xxo
Hex Xooo
Hex Hxxo
Octo Flat +xxo
Octo Flat Xxxo
Flying Wingooo
AirplaneoooSingle prop
Heli 120xxxNo code
Heli 90xxxNo code
Single CopterxxxInsufficient code (no mmix)
Dual Copterxxo
Bicopterxxo
V-tail Quadooo
A-tail Quadooo
Y4ooo
Y6xxo
Octo X8xxoCan be emulated with mmix (see Examples)
PPM to SERVOxxxCan be emulated with smix (see Examples)
Customooo
Custom Airplaneooo
Custom Tricopterooo