Safe motor arming system
Powerful motors can cause serious injury! (Okay, so it's the prop that does the damage, but you get my drift...).
In this article I'll demonstrate a framework for creating arming systems which are (a) super safe and (b) avoid the need for switch checks at startup. Along the way you'll learn about the clever Sticky switch provided by EdgeTX and OpenTX. So join me as we explore how to do it.
Definitions
I'll use the following terms in the text:
- Arming: an action which allows the motor to run.
- Disarming: an action which prevents the motor from running, and stops it if already running.
- Gesture: a user action which involves moving switches and/or sticks in a particular sequence.
The Sticky logical switch
The heart of an arming system is the 'Sticky' logical switch. Think of a sticky as an on/off switch where the 'on' and 'off' actions can be customised via parameters V1 and V2
V1 and V2 may be physical or logical switches. As we'll see, using logical switches allows us to program simple gestures like 'stick in corner' - these are the heart of an arming system!
In the context of an arming system, V1 is the condition for arming, while V2 is for disarming.
How to guarantee that the motor is disarmed at startup
One great bonus of a sticky switch: we can ensure that the motor is always disarmed at startup without the need for switch checks.
To take advantage of this, we must ensure that the sticky evaluates to False (disarmed) at startup. That in turn means that the V1 parameter cannot be a standard physical switch (since we cannot guarantee its position). Instead V1 should represent a particular user action, like moving a stick to the corner or pulling a momentary switch.
Example 1: safe arming system
Okay, so that's the theory, now to the practice! We'll program a real arming system, with the emphasis on safety.
For this kind of system, (a) arming should be difficult and (b) disarming should be easy (but not so easy as to do it accidentallly whilst flying the model). So we'll use the following gestures:
Arm:
- Throttle to idle
- Elevator stick back
- Pull momentary switch briefly
- Pull and hold momentary for 2 secs
Implementation
The logical switches are shown in the Companion screenshot below. SH is a momentary switch.
How it works:
- L3 is the Sticky switch for arming and disarming the motor. L1 is the arming gesture, and L5 is the disarm gesture.
- L1 is the arming gesture: throttle to idle + elevator fully back + pull SH.
- L5 is the disarm gesture:
- L5 goes True briefly, after L4 has been true for 2 seconds.
- L4 is true while SH is pulled, but not while arming ('!L1')
Note that 'Thr' and 'Ele' refer to sticks (not inputs). In the mixer menu, inputs are prefixed with 'I', sticks have no prefix.
Example 2: 'smart' arming switch
Many pilots like to use a simple 2-position switch for arming. The problem is that switch checks are necessary to ensure the switch starts in the disarmed position. However, by making it 'smart', we can do away with switch checks, by making it report 'Off' at startup, regardless of the actual position of the switch.
Here's the code, using switch SF.
SF↑ = Off and SF↓ is On.
L2: Edge SF↑ [0, infinite]
L3: Sticky (L2, SF↑)
The first line, L2, triggers a brief True pulse when SF transitions from Off to On. If SF starts in the On position, it will need to be moved Off then On. Therefore, regardless of the position of SF, L3 will always be False at startup.
Control the motor state
With the arming logic done, we can apply it to the motor channel. The method is the same regardless of the arming logic.
In the following example. CH7 is the motor channel. Two mixers are used:
CH7:Motor
Source=MAX Weight (−100%)
Source=Thr Weight (+100%) Switch (L3) Multiplex=REPLACE
How it works:
- The mix first line ('MAX') sets the motor to motor off. This is the default state.
- The second line ('Thr') passes control to the throttle stick when arming switch L3 is True. In the mixer menu, the 'multiplex' option must be set to 'Replace', so that it over-rides the first line.
Using Channel Override special function
In theory, you could use a Channel Override special function to turn off the motor. However there are some drawbacks:
- It will not be possible to determine if the motor is running via a logical switch
- It's more difficult to debug.
- There is some data duplication.
I don't recommend this approach.
Download
Arming/kill switch demo
Requirements
- For OpenTX 2.2 and above
Files
- MotorArmKill.otx (arming/kill switch operating on CH3)
Safety first!
- Remember to set the failsafe, so motor goes to idle on loss of signal
- Use the channel monitor to test operation before connecting up the motor
- Test, test and test again