More about mixers
Introduction
In this section, we'll look at mixers in more detail (for a primer, please see Key concepts first). We'll explore offset, expo, diff, functions and curves.
Mixer offsets
The Offset parameter is used to shift the mixer output up or down. Offset is applied after weight:
Mixer value = (Source * weight) + Offset
Offsets are useful when the mix's starts from one end of stick travel instead of the centre.
Example: motor compensation
Motors often produce an upward pitching moment. To compensate for this, it's common to add a 'motor compensation' mix to the elevator channel.
The mixer output must be zero when the throttle is fully back (idle). We achieve this by setting offset = weight. The output will then vary between 0 and (2* weight) as the throttle stick is moved upwards.
In this example, the compensation mix generates up to 40% elevator movement:
CH2:elevator
Src=Thr, wt=20%, offset=20 -- motor compensation mix
Mixer curves (diff, expo, functions and curves)
In addition to weight and offset, OpenTx offers one additional parameter from the following list of choices:
- Diff - reduces the effect in one direction
- Expo - applies an expo curve
- Function - e.g. 'x > 0'
- Curve - between 2 and 17 points
The first three options can in fact all be represented as curves - think of them as short cuts to particular curve types.
Including/excluding trims
By default, trim values are included in sources. You can exclude trims on a per-mixer basis by unchecking "Include Trim" in the mixer dialog.
Order of processing
When processing a mixer, OpenTx first applies the function (function, curve, expo), followed by weight, then offset is added, and finally the trim value. The exception to this rule is diff which is applied last. Order may be important when combining operations especially where offsets are involved.
How to set aileron differential
Setting aileron differential in OpenTX/EdgeTX can be a little confusing. You'll notice that there is a 'diff' parameter in both the Inputs and Mixer menus. So which should you use to implement aileron diff? Let's see first what happens if diff is specified in the input. We'll use a value of 20%:
[I1]Ail
Src=Ail, wt=90%, expo=10, diff=20
It looks good, but there's a big problem: the diff is applied to the aileron stick. If you try this, the diff will actually be zero. Instead, you'll get 20% less aileron travel when moving the stick on one side compared to the other. Clearly that's not what's wanted!
The correct way is to apply diff separately to each aileron mix:
[I1]Ail
Src=Ail, wt=90%, expo=10, diff=0
CH1:right elevon
Src = [I1], wt=100%, diff=20%
CH2:left elevon
Src = [I1], wt=−100%, diff=20%
To summarise: Do not specify diff at the Input level. Specify diff separately for each aileron mix!
Default mixer settings
When you create a new mix, the initial settings are weight=100% and offset=0, diff/expo=0 and no curve. The source value is therefore passed through unchanged.
Mixer best practice
A couple of tips:
- Your mixer is about the control logic, not geometry. Design your mixers without consideration of linkages or servos. Weights on the left and right mixers should be identical in magnitude (and often 100%), regardless of mechanical differences. Any adjustments for mechanical differences should be done in the Outputs menu.
- The logic must be self consistent, so adopt a convention. The one I use is: +ve mixer values = up/right, -ve = down/left. By adopting a convention, it's easy to check the validity of your mixer setup in the Companion simulator.