Advanced trims

Last updated 6 Sept 2022


It's easy to take your trims for granted, but dig a little deeper and you'll find a lot of hidden power in these humble devices. You can cross them, hide them, turn them into controls, or use them as dumb momentary switches... Read on and learn all the secrets. All screenshots from X9D.

Trim basics

Just like like regular controls, trims they have their own ID's:

Normally, you don't need to know, since the effect of a trim is included in the parent control. Later, we'll see how to decouple a trim from its parent.

Independent or shared

Trims are configured in the FLIGHT MODES menu.

There are three options:

Let's look at some examples:

Example: aileron trim

Aileron trim is normally shared across all flight modes. You can simply leave the aileron trim modes at the default ':0' in all the flight modes. This means that the trim will always read and update the value from flight mode 0.

Example: elevator trim

For the elevator trim, the trim value is normally independent in each flight mode. To do this, set the trim mode to ':n', where n is the flight mode.

Another scheme, is to designate the trim to be relative. To do this, use the relative '+n' form, where n is the reference flight mode. In the screenshot below, the elevator trim values in FM1 and FM2 are relative (added) to the trim in FM0.

Cross trims

Some pilots like 'cross trims', that is using the lever on the opposite side to normal. Cross trims are configured in the INPUTS menu. Screenshot below shows the aileron input using the rudder trim.

Reassigning trims

A trim can be decoupled from its parent control and used to perform other tasks. To decouple a trim from its parent, specify 'no-trim' in mixers where the parent is the source.

In the following example, the rudder trim is reassigned to drive channel 7.


Src=Rudder Trim=No_Trim <-- decouple trim from parent control




You can make the trim do different things in different flight modes. In following example, the rudder trim drives CH7 when FM0 is active, and CH8 when FM1 is active. For this to work, the trims must configured as 'independent' per flight mode.


Src=Rudder Trim=No_Trim FM = FM0,FM1 <- decouple trim from rudder



Src=TrmR, Flightmode=FM0 <- in FM0, rudder trim drives CH7



Src=TrmR, Flightmode=FM1 <- in FM1, rudder trim drives CH8

You can use this technique to implement your own trimming scheme.


Src=Rudder Trim=No_Trim <- decouple trim from rudder

Src=TrmR, wt=?? <- add trim back, you choose the trim rate!

Using a trim to adjust a GVAR

Now here's a really neat feature: a trim lever can be repurposed to 'nudge' the value of a GVAR. This is accomplished using the AdjustGV special function.

In the example below, the rudder trim bumps GV1. Note the use of the special 'ON' switch, so the special function is permanently active.

While the special function is active, normal behaviour of the trim lever is suspended - in other words, the trim ceases to affect on its parent control, and the trim value is held at its last value.

This is easier to understand if you consider a trim to be a 'nudging' device. It can either nudge its Trm value, or it can nudge a GVAR - however can't do both at the same time. This offers some interesting possibilities!

Example: dynamic diff adjustment

In the following example, we'll configure the rudder trim as an adjuster for aileron differential.

We do this in two steps: first, link the rudder trim value to GV1, then link GV1 to diff.

The first step is to link the rudder trim value to a GVAR:

Next, in the MIXERS menu, we set the diff to GV1 in each aileron channel. Here's what the mixer editor looks like:

The left/right ail channels each use the same diff value:

Finally, we set safe limits for the diff adjustment, by setting the Min and Max properties for GV1. (Note: min/max didn't work properly prior to OpenTx 2.2.2).

Switching between different behaviours

In the previous example, we used the special 'ON' virtual switch to permanently activate the special function. We can also specify a physical switch like 'SA' to switch between different behaviours.

The screenshot below shows an example:

Depending on the switch position, the trim behaves as a regular trim, or binds Rud to GV1 or GV2.

How it works :

Note: if you try this in the Companion simulator, make sure to click on the trim arrows (dragging the trim handle doesn't work).

Configuring a trim lever as a momentary switch

In this section, we'll see how to turn a trim into a dumb on/off/on momentary switch. Start by disablng the trim in the Flight Modes menu.

Disabling the trim suppresses the trim's default behaviour, including beeps and repeats. However, as we'll see below, trim clicks can still be captured!

Capturing trim state

Even though the trim is disabled, you can still interrogate its state using any of the following switches:

These switches are not quite as versatile as regular switches like S1, for example they can't be used as mixer sources, and they are not directly readable from a Lua script. In the following section, we'll look at ways of capturing the trim state in a logical switch, high channel and GVAR.

Capturing the trim state...
... using logical switches

This method uses 3 logical switches to store the state. In the example below L1 is elevator trim down, L2 is trim up, and L3 is the middle position.

... using a high channel

Alternatively, you can capture the trim state in a high channel as follows:

Channel returns down=-100, centre=0 and up=100.

... using a GV

Another approach is to store the trim lever state in a single GV. To do this, we update the GV in response to trim clicks using the AdjustGV special function:

OpenTx executes special functions in order from top to bottom during each processing cycle. This results in the following behaviour:

Use in Lua scripts

By capturing the trim state using any of the above methods, a Lua script can access the trim state. Lua scripts can repurpose a trim lever to do interesting things. One example is author's crow aware elevator trim script, which turns the elevator trim into a dynamic curve-bender.

As always with OpenTx, the limit is your imagination!