User manual: Basic assumptions
Table of contents
To provide configuration flexibility I introduced a "variables". This is nothing more but any reading of the stick, switch, knob, the value sent to the servo, the intermediate variable used by mixer, reading a clock, etc. .. In short, virtually everything that can be read or set of point of view of the transmitter is a variable. To use them efficiently, all variables are presented below:
|None||X||No value set, sometimes is used for mark empty setting.||0|
|InpA-InpG||AIL,TRH, ELE,RUD, HPIT,HTHR, AUX2||The read position sticks and knobs||From -100 to 100, a smooth transition, where 0 is the central|
|Sw1-Sw6||TCUT,SAIL, SELE,SRUD, GEAR,TRN||Switch positions on the transmitter.||-100, 100 – only 2 sole values|
|Fmod||X||3-position switch position||
-100 for N
0 for 1
100 for 2
|Fmod1-Fmod3||X||Certain positions of 3-position switch. For example, Fmod1 is for the position N.||100 if the switch is in a certain position, otherwise the -100|
|Tra1-Tra8||X||Readings of the signal from trainer input (PPM). Available only if master/slave mode is running.||Smoothly from -100 to 100 depending on the input signal|
|Var1-Var8||Can be set||Variables set per model which can changed easily, accessible via BASIC-> Model variables||from -100 to 100|
|Mix1-MixA||MAIL, MELE, MTHR, MRUD||Values used by the mixer system. By default, 1-st level Mixers set those variables, that you can use them as inputs to the 2-nd level mixers||from -100 to 100|
|Out1-OutH||X||Outputs, the values sent to the servos||from -100 to 100|
|Tim1-Tim4||X||Quick watches countdown to 0. The change occurs in 1/10 second.||From 0 to 100|
|TriA-TriD||X||Trimmers attached to sticks.||From -50 to 50|
|SwT1-SwT6||X||Changes in the position of the switches. Note that a nonzero value is maintained only by one cycle of calculation!||
0 – no change
-100 – switched to off
100 - switched to on
|FMT1-FMT3||X||change the switch position Fmod1-3||
100 – set certain position
|Clk1-Clk4||X||clocks /Timers/ (counting every 1 second) time that you can compare it to 100 sec. If the clock counts up and there is alarm set, it is also available values from -100 to -1 as defined number of seconds before the alarm.||
0-100 timer value
-100 to -1 number of seconds to alarm
|OMx1-OMxA||X||Mixer variable values from the previous calculation cycle||from -100 to 100|
|Oou1-OOuH||X||The values sent to the servos in the previous calculation cycle||from -100 to 100|
Do not worry about the large number of variables, some of these variables is available only in "expert" and "author" programming modes, others can be selected only in certain places. Example, THR or Sw1 can be only read, never can be written.
Each variable can take values from the interval -100 to 100 This means that if you read the value of stick, then you will get -100 for extreme left or bottom position, 0 for the center, and 100 to right or top position. Readings switches mean: -100 is off (switched to the front), 100 is turned on (switched to your side). Fmod has additional value of 0 - for the central position. Clocks and timers take values from 0 to 100 (counted properly in seconds and tenths of seconds).
On the picture you can see internal names for all sticks, knobs and switches. For default configuration, each of them, however, has assigned a name according to the markings on the transmitter and the setting sticks in mode 2,
- A = AIL
- B = THR
- C = ELE
- D = RUD
- E = HPIT (HOV PIT)
- F = HTHR (HOV THR)
- G = AUX2 (AUX2 / PIT TRIM)
- S1 = TCUT (THR CUT)
- S2 = SAIL (AIL D/R)
- S3 = SELE (ELE D/R)
- S4 = SRUD (RUD D/R)
- S5 = GEAR (GEAR)
- S6 = TRN (TRN)
Conditions and switches (internal state)
In many places, the system will provide the term "condition" that can be set. This condition determines when the mixer / rule / item in the display or timer should be active. The element whose condition is not is true - does not work, or behave as if there no such element! This mechanism allows, for example easy switching between phases of flight, switching dual rate settings, or even whole configuration. Everything is possible at the touch of a button, and even without it!
The "condition" is related to the concept of "virtual switch". In RadioClone there is seven of them, one named Virt.Sw 1 to Virt.Sw 7, or in short numbers from 1 to 7. If the information on the state of these switches is shown briefly, then display the numbers only 1234567 for enabled or 1234567 for disabled switches. To make you lide easied, you can set you own names for this switches, for example start configuration has altered names for three virtual switches: 5,6 i 7 to „Fmode 1”, „Fmode 2” and „Fmode 3”. Sometimes, for brevity, I will use the name "internal state" or in short "state" to describe the position of all switches as full at the moment.
Wirtualne przełączniki spełniają w RadioClone szczególną funkcję. Mogą w sposób bezpośredni wybierać które miksery, reguły i ustawienia są obecnie aktywne (warunek). Można więc określić, że dany mikser (np obsługujący klapy) będzie aktywny tylko i wyłącznie wtedy gdy pierwszy Virtual switches in RadioClone has specific function. They can directly choose which mixers, rules and settings are currently active (condition). So you can specify that the mixer (eg for flaps) will be active only when the first virtual switch is on. To make writing down conditions easier I adopted a convention. Switch number, eg "1" means that the switch should be ON, the number written in inverse: 1 means that the switch should be OFF, while a space or _ means that the switch position is irrelevant for this condition. Here some examples:
- 1______ - A condition which "cause work" if the first switch is turned on (YES)
- 1______ - A condition that will work if the first of the switches is off (NO). This is reverse of the previous condition
- 12__5__ this condition "works" if simultaneously switches 1,2 and 5 will be on (YES)
- 12__5__ this conditions works if simultaneously switches 1,2 and 5 will be off (NO).
WARNING! This condition is not opposite of the previous condition. For example, if 1-st switch is YES and 2-nd NO to the second condition does not work, but previous condition also does not work.
- 12_____ condition will work if a virtual switch No. 1 is YES and simultaneously the switch 2 is NO (so you can freely mix any setting)
- Alw. ON This condition is a special setting, which is always true, regardless of the virtual switches state.
- Disable. This name is displayed when condition is always FALSE (so it will not work).
Because the switches are "virtual" and you can not "touch" them, so you can't change their values directly. To this purpose, state machine was introduced. Anticipating the question, for what purpose to use virtual switches, and complicating everything, since there are real switches on the transmitter? I answer, You can also use real switches (more on this below). Further answers may be some examples:
- You can enable virtual switch when THR is over 50 and switch it off when THR is below -10
- You can set virtual switch ON via TRN switch(mono stable), and set virtual switch again OFF after 3 seconds.
- you can enable virtual switch with one key, and disable it with different key
You also must realize, that most configurations can be achieved at least several different ways. I recommend not to overuse the virtual switches if it is not necessary. There are only 7 of them, but each of them can change the configuration and behavior of whole transmitter! They are the equivalent to flight modes used by other equipment. Their typical use is for example a change of characteristics (curves). For example, just use three virtual switches (5, 6, 7) allows you to configure three flight modes differentiated by the following conditions:
- ____5__ 1-st flight mode
- _____6_ 2-nd flight mode
- ______7 3-th flight mode
Setting the condition for the mixer, the state machine rules, the screen module activation is always done that same way. After selecting a "condition" field press the MENU key and you will get the following screen:
On the left we have another virtual switches (total 7) here already with their own names. On the right side you can see the expected values. Every value can take three different setting:
- Yes – condition will work if the switch is turned on - selected by + key
- No – condition will work if the switch is turned off - selected by - key
- ------- - switch position is irrelevant - selected by MENU key
Additionally, when you are in condition setting mode, you can switch to comparing physical switches mode. You can achieve this by pressing - key (right) when option "Save" or "Always ON" is selected. In that mode you can configure condition as before, but instead of virtual switches you can use real ones.
You can see difference when condition is displayed:
- If only one switch was selected, then its name will be displayed
- if only on switch was selected, but with No setting, then its name will be prefixed with "!"
- If more switches was defined in condition, then it will be displayed like states, but with "s" prefix like: „S1_3___”
In this manual, as a mixer I understand a configurable function which transforms value of input (variable) and write it into output variable. If several mixers points to the same output variable, then their outputs are summed.
To increase flexibility, there exist 10 additional variables - Mixer variables /Mix1-MixA/ (they can be treated as such virtual servo or potentiometers). Each of the mixers can retrieve or set values for these variables. To simplify programing, mixers are grouped into two levels. In normal operation mode, the mixer variables (Mix1-MixA) can be set only by the 1'st level mixers, when only 2nd level mixers can read those variables. Since the 1-st level mixers are calculated first, and after them 2nd level mixers are calculated, you can be sure that your variables are properly set before you can use them.
Example: Stick THR (InpB) 1st lv mixers: Copy 50% THR -> MTHR MTHR (Mix3) 2nd lv mixers: Copy 100% MTHR -> Out3 Out3 (channel 3, engine control)
This approach allows you to collect all the settings that are associated with the construction of the model in one place - 2nd level mixers. You can thing about then as a description of the layout and servo connections in the model. In the classical approach (other transmitters) this information is hidden and described like: "ACRO" "VTAIL GLIDER +" or "HELI". However usually, you can't even see what the manufacturer had in mind, and here you can see everything and even change it in your own way. For example: you can set that: the model has two vertical stabilizers, ailerons controlled by 4 servos, and two engines on the wings of differentiating your speed when model turns.
1st level mixers are equivalent of "classical" approach to mixer setting. You can use them to set dual-rate, expo, or curves. In that option you can easily which mixer has which meaning, because of name redefinition.(you can redefine the names of both inputs and outputs.)
Each mixer has a ability to have a condition which determines when it will work. This condition is nothing other than the previously described "internal state", ie setting the virtual or real switches, which is required for mixer activation. If the condition is not met, this mixer is ignored (as if it was not defined).
The software allows you do define following mixers:
Mixer curve „Cur”:
You can thing about this mixes as a coordinate system, in which points "draws" any curve. X axis is input, Y axis is output. On picture you can see:
red points - curve definition
blue lines - a sample reading (input and output)
Mixer copy/reverse „Cpy”
This mixer copies input to output. Additionally, you can define the scale ("Co%") with a value between -100% to 100%. Depending on the specified value name is displayed as:
-100 Rev from -99 to 99 as chosen value ex: „-75” 100 CpyNext possibility is to define "Expo". For values from 0 to 100 it works like "well know" expo. If you set bellow 0 values - it increase sensitivity near stick center.
Mixer configuration response can be viewed in real time on drawing on left side of the screen.
Mixer delay „Del”
Copy its input to output, but changes can't excess declared change speed.
The time delay can be configured independently, depending on the direction (up / down). Entered values mean time (in tenths of a second) you need to change the output value from 0 to 100
0 – no delay 1 – means 0.1 sec, 10 – 1 sec.
Mixer - proportional „Pro”
This is an extension of copy mixer idea. Instead of fixed values for scaling and expo, we can assign any variable.
„Control variable” – it is „Input%” from copy mixer
„exp var” – it's expo from copy mixer.
This type of mixer is convenient in conjunction with the "model variables". You can configure the mixer, in such way, that EXPO factor will be identical to the elevator and rudder - but it will be easy to change it. You can achieve that by selected single model variable in proportional mixer. Then this model variable could be simply adjusted the menu BASIC-> Model variables.
To make using this kind of mixer easier, there are special variables: -100 , 0 i 100 which directly returns desired values. For example, you can use this mixer only for scaling (D/R) and omit EXPO by selecting "0" variable as "exp var".
This mixer is also useful to set the D/R, eg during the flight, then it can be set to "hook", for example, a potentiometer and try experiments in flight. That setting should be done on the 2nd level mixers because of the need to scale the signal from the potentiometer so it cause only minor changes (eg by using the appropriate curve). Otherwise it will be easy to lose control of the model.
Mixer proportional delay „PDe”
Analogous to the delay mixer, but the delays are not fixed values, but stored in variables.
Complements mixers. It can be used to switch virtual switches (states) or/and to direct setting some variables.
This machine contains rules that can be used by user. Each rule has a definition of "Input state" which is nothing other, than previously described "internal state", ie setting virtual or real switches. Only if this condition is true, additional condition defined by user is checked. It is now possible to use one of four types of conditions:
- (none) rule will be executed
- = selected variable need to be equal to the set value
- < selected variable must be lower than the set value
- > selected variable must be greater that the set value
I mentioned earlier about actions performed by the rules. Currently the system supports 11 different actions:
- State - Changes "internal state". So it enables or disables the virtual switches. You can define which switches should be set ON or OFF. Keep in mind that switches are turned off first, and then turned on. If you set it so that, the switch is should be switched on and off at the same time, it will remain enabled (YES).
- Set - This action set selected variable to fixed value. Of course, you can configure both: variable and the value to be entered. It should be remembered that the state machine is executed after mixers calculation. You need to remember, that here is the most appropriate place to set output values (servos)... For example, rule set OUT3 to -100 is an excellent example Throtle Cut activation. Seting "mixer variables" makes sense if we know that they are not "Overridden" by the 1-st level mixers
- Copy - action similar to "set", with the difference that instead of giving directly a value, it reads it from selected variable. It is possible to use a model variable (Var1-VarA), or any another variable.
- ZReset - action which resets selected clock (timer)(setting it to the initial value). Clock that is counting up, is set to 0:00:00, while the clock counting down to initial value.
- ZGo - action starts selected clock. If the clock is already running, then this action does nothing.
- ZStop - action stops selected clock.
- ZCycle - action starts or stops selected clock, depending on its current condition. If clock is stopped, it start it. If clock is stopped, then it start it.
- Beep - action – emits sound (you can set from 1 to 3 "beeps")
- Slow - action allows you to slow down selected output (OUT or mixer). It limits output change rate to not exceed the set value (in 0.1 seconds). Note the use of this rule for mixer variables makes sense only if they are not assigned to any 1st level mixer!
- TConn (Trim Connection) – assign trim keys to a model internal variable (Var1-VarA)
- TReset (Trim reset) – restore the original trim action
Main Program Loop
During normal operation RadioClone performs the following operations (the main program loop):
- Reading keys (switches, trimmers, the menu key), and performs filtering readings to avoid double "clicks" (debouncing)
- Reads positions of sticks and knobs (position is normalized to the value -100 to 100 according calibration values)
- Checks PPM trainer input, if this is enabled. PPM input is normalized to the value -100 to 100 (according calibration setting)
- All mixer and output variables (Mix1-MixA,Out1-OutI) are set to 0. (Previous values are stored for later use)
- 1-st level mixers are calculated
- If a mixer variable has not been modified, it will be restored to the stored value (before setting it to 0)
- 2-nd level mixers are calculated
- If an output variable has not been modified, it will be restored to the stored value (before setting it to 0)
- "State machine" rules are processed
- Clocks and timers are updated
- Display is updated (only one module at time)
- PPM frame prepared to send is updated (all outputs /servos/ are truncated to limit values)
"State machines" rules are executed after mixer calculation, so they can "override" the output value. This is is the easiest way to do an engine cut-off (throttle cut): You should create a rule that sets -100 to OUT3 when the switch TCUT < 0 (condition "Always On")
The time required to execute main program loop (see the default home screen to see how to read it) is crucial to identify the "delay" between the movement of the stick and shake the servo (latency). We can estimate latency in the following simple way. If we read that the main loop executes 420 times per second, then we can count:
1000 ms / 420 = 2,38 ms.
So the loop execution time is 2.38 milliseconds. Now you can use the following list of RadioClone reaction rate to various events in the multiply of main loop execution time:
- move stick or knob: 1 to 2 (in our example from 2.38 to 4.76 ms))
- switches that are used directly by the mixers or state machine: 2 to 3 (because of the "de-bounce" procedure)
- switches that operate on a virtual switch (state), and these modify the operation of mixers: 3 to 4 (because of the extra cycle required for propagation of settings / state machine is started after mixers/)
If the main loop is executed 300 times per second, the software latency will be from 3.33 to 6.66 ms for sticks and up to 10 ms for controls and to 13.3 ms for the mixers controlled by virtual switches.
Because of flexibility, RadioClone differently from other equipment treats trimmers. Because all channels are identical, and their assignment depends only on the user, trimmers are identical on each channel.
Trimmers can reach values from -100 to 100. Their value is not added directly to the stick reading! They "Pass" whole calculation cycle through mixers, and when PPM frame is generated - trimmers shift the entire range of motion of the servo! Model behave analogical like during using menu function "BASIS → centering servo '
To configure the behavior of the trimmers, mixer are used. In each mixer you can set: if the trimmer need to be added, subtracted, or proportional converted.
- Disable(X) - probably no need to describe
- Add - (+) trimmer assigned to the input mixer (indirectly connection counts) will be transferred to the mixer output unchanged. This is used usually and that is the default setting.
- Subtract (–) trimmer during prescription change its sign (it will be reversed). This configuration is useful (for example) for such setting, when servos have to move on in different directions depending on the channel AIL. One aileron is + and the other on - and thus provide them alternate deflection in response to the trimmer.
- Proportional (P) - Works only with the copy mixer (with a Input%). Trimmer will be passed to the output mixer proportional to factor of the mixer. Its basic behavior is to trim the eCCPM helicopter. When 2nd level mixers describing the eCCPM behavior, swing the trimmer must also be proportionate to mixer factors!
WARNING! If you expect that TRH trimmer will not be moving the servo range (eg, for combustion engine), you can set it (of course). You must turn off the trimmer on the mixer signal serving THR,
then add mixer which adds Tri2 (here choose the right trimmer) to MTHR and set the scaling factor of 20%.
The mixer TRH → MTHR should be modified so that it did not attain the extreme values (eg, flatten the curve
10% / -90 to 90 /, or set the rate at 90%)
Such a configuration would move the servo control of gas by 10% (idle), and THR CUT will be defined always in the same place.