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