Advanced trims

Last updated 28 March 2021


It's easy to take your trims for granted, but dig a little deeper and you'll find a lot of hidden power in those humble little controls. 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

Like the regular controls, trims they have their own id's:

By default, the trim value is included in the parent control. Later, we'll see later to decouple it so it can be used for something else.

Independent or shared

Trims are configured in the FLIGHT MODES menu.

There are three options for each trim/flight mode combination:

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, which I mention in passing, is to designate one flight mode as the 'base', and for the trims in other flight modes to be relative. To do this, use the relative '+n' form. In the screenshot below, the trims in FM1 and FM2 are relative to 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. 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 even make the trim do different things in different flight modes. In following example, the rudder trim drives CH7 in FM0, or CH8 in FM1. For this to work, the trim values must configured as independent.


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

Using the AdjustGV special function, a trim lever can be made to update a GVAR. In this example, the rudder trim updates GV1. Note the use of the special 'ON' switch, so the special function is permanently active.

While the AdjustGV special function is active, normal behaviour of the trim lever is suspended - in other words, the trim ceases to affect on its parent control. Try it in the Companion sim: nudging the trim arrows alters the value of GV1, while the rudder position remains unchanged.

This is easier to understand if you consider a trim to be a 'bumping' device. It can either bump its native Trm value, or it can bump 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. (This is useful on F3X models where the rudder trim is not really needed as much as adjustable diff). We have do this in two steps: first, link GV1 to the rudder trim, then we'll link diff to GV1.

The first step is to link the rudder trim value to a GVAR (as in the previous example).

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 linked the rudder trim to a GVAR, using the 'ON' switch. We can specify a regular 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, the trim position 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, 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. They can also handle repeats and beeps. 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!