Skip to main content
Firmware Stable

FALCON: first settings, the throttle input, then motor identification

Applies to​

A motor controller running FALCON (swid contains _FALCON_), the application for RC models. The controller communicates with emGUI over USB and is wired as in step 9 of the getting started playbook (motor, motor sensor, battery), which hands over here. The order:

  1. FALCON's first settings (steps 1-3);
  2. the throttle input: one path per input, with its wiring, its settings and a first check (steps 4-5);
  3. the motor identification playbook (step 6), which hands back here;
  4. enable FALCON, calibrate the throttle and test it (steps 7-9).

To change only the throttle input later, run steps 4, 5 and 8.

Before you start​

  • The rules of the general method apply. This is a setup playbook: propose each step that changes the device, say what it does, and run it only after the user's yes. Check every write by reading the value back.
  • Levels: parameter writes, save -y, stop and reboot need Allow writes; run needs Allow dangerous commands. If emGUI refuses reboot, the user switches the controller off and on instead (battery first, USB second).
  • The motor does not move before step 7. FALCON keeps itself disarmed while /configured is 0 (/mode 10, MODE_NOCONFIG), whatever the throttle does. Set it to 1 only in step 7, after the motor identification.
  • The controller is not a BEC. Tell the user plainly before any wiring: the controller powers neither the receiver nor the servos nor a flight controller. They need their own power source - a BEC or a receiver battery. The + (red) wire of a servo cable stays unconnected at the controller, except on the optocoupler PWM inputs of the AM, AX and TX (step 5A), where the receiver's + drives the input.
  • Propeller off, wheels off the ground from step 7 on.
  • After reboot or a power cycle the device address can be stale: list_devices, and search_devices if the device is missing.
  • The serial RC links use the UART COM connector. While one is on, emGUI cannot talk through that connector. The normal connection is USB; if emgui_status shows a UART interface on the COM connector, the user changes to USB before step 5C or 5D.

Steps​

1. State​

list_devices: name, serial number, hwid, swid. /driver/error 0. Read:

  • /configured: 0 on a new controller (FALCON off until the setup is done). 1: FALCON was set up before - ask the user whether to start over; then set it to 0 for the time of this setup. -1: a Quick-setup pad task is running; wait until it ends.
  • /mode: 10 while /configured is 0 (state machine).
  • /rc/protocol: if the path exists, the firmware has the RC link (serial receivers and DShot, step 5C and 5D). If it does not, those inputs need a newer FALCON firmware (firmware upgrade); PWM, analog and CAN work as they are.
  • On a used controller: list_variables (kind: param, include_defaults: false) for /, /io, /pwm_input, /analog_input, /csc and /rc. Show the non-default values and ask which to keep; the steps below assume the defaults.

2. The use: function preset​

Ask what the model is and how the throttle should act, and pick one row (function presets, control modes):

UseSettings
Aircraft, boat, anything one-directionalthe defaults: /ctl_mode 3 (voltage with freewheel), /pwm_input/center 0
RC car with brake and reverse/drvopts 3 (bit 0 combined brake and reverse, bit 1 invalid signal E-stop), /ctl_mode 2, /ctl_reverse_mode 3, centre (below)
Bidirectional, torque/ctl_mode 2, centre
Bidirectional, voltage/ctl_mode 1, centre
Bidirectional, speed loop/ctl_mode 17, centre
Multirotor on DShot/ctl_mode 1 or 3 (voltage); bidirectional (3D) is a DShot option in step 5D

"Centre" is the neutral of a bidirectional throttle: /pwm_input/center 1500 µs for a receiver (servo PWM and the serial RC links), /analog_input/center 2500 mV for an analog throttle. Step 8 replaces these by measured values. Write the row after the user's yes, then save -y.

3. Safety and the optional features​

  • Keep /safetyopts 3: FALCON arms only after the throttle has been valid and at zero, and disarms on an invalid signal or an error (safety). Keep bit 1 of /drvopts (an invalid signal triggers the E-stop).
  • Ask whether the model needs any of these; set them up only on request, each from its page: an E-stop input or prop docking (E-stop), a motor temperature sensor (motor temperature; also needed for the motor temperature in the telemetry), battery temperature sensors (battery temperature), the fan (fan), automatic restart of the driver after an error, for aircraft (automatic re-initialization).
  • save -y after any change.

4. Choose the throttle input​

Ask how the throttle reaches the controller and follow one path:

The throttle comes fromPath
a servo output of any RC receiver (servo cable)5A
an analog throttle: potentiometer, thumb or foot throttle, 0-5 V5B
an RC receiver with a serial bus: ExpressLRS / CRSF, Futaba S.BUS / S.BUS2, Spektrum SRXL2, FrSky F.Port or S.Port, JETI EX or EX Bus, Graupner HoTT or SUMD, JR XBus or DMSS, FlySky iBUS5C
a flight controller's motor output (DShot)5D
a flight controller or a control unit over CAN5E

In 5C, the telemetry-only links (S.Port, JETI EX, HoTT, JR DMSS, iBUS sensor) carry no throttle: they take 5A as well.

FALCON uses the servo PWM (or the RC link) when it is valid and falls back to the analog input when it is not. So disable the inputs that are not used, or a lost receiver signal reads as a valid zero from the unconnected analog input and the invalid-signal reaction (E-stop, disarm) never happens: /io/in_analog 0,0 disables the analog input (default 8,0, GPIO0), /io/in_ppm_ch -1 disables the servo PWM input (input configuration).

5A. Servo PWM​

Wiring (power off): a servo cable from the receiver's throttle output to the PWM input of the controller. The inputs are of two kinds, wired differently:

  • SX, SL, SC: S (signal) to the PWM input, − to the ground of that input, + not connected.
  • AM, AX, TX, optically isolated inputs (ODIN): + to ODIN+, S to ODIN−, − not connected. The input needs more voltage than a receiver signal has, so the receiver's own supply drives it and the signal pulls ODIN− low. This works only with the optically isolated inputs; the receiver keeps its own BEC.

Which pin is the PWM input depends on the controller and its hardware variant; decode_hwid and the "PWM/PPM capture input pins" table of its I/O page (SX, SL, SC, AM, AX, TX) decide:

ControllerConnect/io/in_ppm_chNeeds
SXS to GPIO4 pin 31, − to pin 345connectivity variant "p"
SXS to MSENS_5 (DIN2) pin 19, − to MSENS_GND pin 31motor sensor variant "p" for 3.3 V and 5 V signals
SLS to GPIO4 pin 21, − to IOGND pin 105communication variant "p"
SLS to ENCB/DATA pin 25, − to HALL_GND pin 151the motor sensor pin free (not isolated)
SCControl I/O 2: S to GPIO4 pin 2, − to IOGND pin 65connectivity variant "p"
SCDigital IN1: S to ENCB/DATA pin 2, − to HALLGND pin 11not isolated
AM+ to DIN1+, S to DIN1− (DIN2: in_ppm_ch 1)2DIN1 in differential mode (isolated)
AX, TX+ to ODIN3+ pin 12, S to ODIN3− pin 13 (ODIN4: pins 15 / 14, in_ppm_ch 1)2-

On the AM the PWM input works only with the digital input in differential mode, without the internal pull-up or pull-down jumpers; AM controllers ordered for drones are delivered that way. With jumpers (another internal hardware configuration, see the AM pinout) the AM cannot take the RC PWM: the user contacts siliXcon.

GPIO4 also needs /common/ioconf4 3, the FALCON default.

Settings: /io/in_ppm_ch from the table; /io/in_analog 0,0; if /rc/protocol exists and is not 0 (and the RC link is not a telemetry-only one from 5C), set it to 0. save -y, then reboot if /rc/protocol changed.

Check: FALCON reads the servo signal only once it is enabled, so the check is in step 8.

5B. Analog throttle​

Wiring (power off): the throttle on GPIO0 with its +5 V and GND, as in the typical wiring of the controller (step 9 of the getting started playbook).

Settings: /io/in_analog 8,0 (GPIO0, the default); /io/in_ppm_ch -1 when no receiver is connected; /rc/protocol 0 if it exists. save -y, then reboot if /rc/protocol changed.

Check: /common/gpio0 (mV) must follow the throttle: read it released and at full throttle; the two must be clearly apart. Equal values: the wiring or the throttle's +5 V.

What it needs. The receiver port and the settings of each system:

SystemReceiver port/rc/protocol/rc/rcoptsacs-rcbusThrottle
ExpressLRS / TBS Crossfire (CRSF)UART pads GND, TX, RX10no jumperschannel 3
Futaba S.BUS2 (with telemetry)S.BUS220B + Bchannel 3
S.BUS without telemetry (Futaba, FrSky, ...)S.BUS21not neededchannel 3
Spektrum SRXL2SRXL230A + 3V3channel 1
FrSky F.Port (v1)F.Port / S.Port pad40B + Bchannel 3
FrSky S.Port telemetryS.Port110B + Bservo PWM (5A)
JETI EX telemetryExt., set to JETIBOX/EX50A + 3V3servo PWM (5A)
JETI EX Busoutput set to EX Bus120A + 3V3channel 3
Graupner HoTT telemetryT (telemetry)60A + 3V3servo PWM (5A)
Graupner SUMDa servo output set to SUMD130not neededchannel 1
JR XBus (mode A)XBus70not neededchannel 1
JR DMSS telemetrysensor port80 (32: motor instead of controller temperature)A + 3V3servo PWM (5A)
FlySky iBUSSERVO140not neededchannel 3
FlySky iBUS sensorSENS150A + 3V3servo PWM (5A)

PowerBox P²BUS is not supported: PowerBox systems use servo PWM (5A).

The acs-rcbus (board). The controller has separate TX and RX wires; most receivers talk on one wire, some inverted, and ExpressLRS receivers need 3.3 V. The acs-rcbus adapter does the matching; its five solder jumpers on the bottom side (printed B A B and 5V 3V3) choose the circuit. To close one, bridge its two pads with solder. The links marked "not needed" only send to the controller: they need no acs-rcbus, the receiver's cable goes straight to the controller.

  • Close the jumpers of the table, nothing else. The setting depends only on the RC link: it is the same on every controller (3V3 gives the line its pull-up, which the AM does not have on COMRXD).
  • Never A together with B. Never 5V: no RC link uses it; with 3V3 it joins two supplies, and on a controller with 10 V on its COM connector (AM, and AX / TX ordered with 10 V) it puts 10 V on the line.

Wiring (power off):

  • acs-rcbus J1 to the controller's UART COM. It plugs straight into the UART COM connector of the SC and AM (JST JWPF, 4 pins). Elsewhere make a cable: SX pins 33 COMTXD, 32 COMRXD, 34 GND; SL pins 27 TXD, 16 RXD, 10 IOGND; AX and TX pins 34 COMTXD, 33 COMRXD, 36 COMGND. J1 pins: 1 GND, 2 controller TX, 3 controller RX, 4 COM+5V.
  • The receiver to J2 (G, V, T, R as seen from the receiver). A servo cable plugs onto G V T: black or brown on G, signal on T; its + lands on V, which stays unconnected. ExpressLRS / CRSF: 3 wires, receiver GND to G, TX to T, RX to R; the receiver's 5 V comes from its own BEC.
  • No acs-rcbus (the links marked "not needed"): the receiver's signal to COMRXD and its ground to COMGND of the UART COM, the + wire not connected. On the SC and AM the UART COM is a JST JWPF connector: a short cable from it to the servo plug.
  • The receiver has its own power source (BEC or receiver battery).

For the links that need the acs-rcbus, a user without one can build the matching circuit; tell them only the one for their system:

  • A: a small Schottky diode (BAT54, BAT43, 1N5819) from the line to COMTXD, its band (cathode) at COMTXD; the line goes straight to COMRXD and to the receiver's signal. On the AM also 15 kΩ from COM+10V and 10 kΩ to COMGND on the line (it has no pull-up of its own).
  • B: COMTXD to the diode's anode, its cathode through 680 Ω to the line; 2.2 kΩ from the line to COMGND; the line to COMRXD and to the receiver's signal.
  • ExpressLRS / CRSF: receiver TX to COMRXD; COMTXD through 1 kΩ to the receiver RX, with 2.2 kΩ from the receiver RX to COMGND.
  • Ground to COMGND in every case.

Settings: /rc/protocol and /rc/rcopts from the table, /rc/thr_ch 0 (the protocol's usual throttle channel; 1-16 for another one), /io/in_analog 0,0. Then, only if the user needs them: /rc/srxl2_unit (several controllers on one SRXL2 bus: 0, 1, 2 ...), /rc/sport_id (another S.Port sensor uses id 18), /rc/sbus2_slot (S.BUS2 slots other than 24, 2, 1, 30). save -y, then reboot: the RC link starts with the controller, so it needs the restart. Telemetry-only links: path 5A for the throttle as well (keep its in_ppm_ch).

Receiver and transmitter, per system:

  • ExpressLRS: serial protocol CRSF at 420 000 baud (the defaults); telemetry on in the TX module, ratio e.g. 1:16 to 1:64.
  • Futaba S.BUS2: register in the transmitter's Sensor menu SBS-01C (current, 3 slots) at slot 24, SBS-01RM (rpm) at 2, SBS-01T (controller temperature) at 1, SBS-01T (motor temperature) at 30.
  • Spektrum: bind with the controller powered so the receiver registers it; enter the motor's pole count in the transmitter's ESC telemetry.
  • FrSky F.Port: F.Port, not F.Port 2. FrSky F.Port and S.Port: after "Discover new sensors", set the unit of Fuel to mAh.
  • JETI: the Ext. port to JETIBOX/EX, or the output to EX Bus (125 or 250 kbaud, detected); the transmitter finds the sensor "siliXcon ESC".
  • HoTT: the telemetry menu, sensor "ESC". SUMD: one servo output set to SUMD.
  • JR: XBus in mode A (mode B is not supported).
  • FlySky iBUS sensor: the controller is the first (or the only) sensor on SENS and is powered no later than the receiver.

Check (works now, before the motor identification): transmitter and receiver on, then /rc/status 2 (ok); 1 no signal - the wiring, the jumpers, the receiver port setting; 3 the receiver reports failsafe; -2 this firmware does not have that link. /rc/errors must not keep growing. For the links that carry the throttle, /rc/thr_in (µs) follows the stick. The telemetry shows on the transmitter after its sensor discovery.

5D. DShot from a flight controller​

Which DShot (DShot 150, 300 or 600, not 1200):

Kind/rc/protocol/rc/rcoptsacs-rcbusWires
DShot100not neededmotor output straight to COMRXD, GND to COMGND
Bidirectional DShot (rpm for the RPM filter)102A + 3V3motor output to T, GND to G
DShot with KISS telemetry108no jumpersmotor output to T, GND to G, R to a free UART RX of the flight controller

Add 16 to rcopts for 3D (bidirectional throttle), 4 for extended telemetry (EDT, with bidirectional DShot). Where the acs-rcbus is used, its J1 goes to the UART COM as in 5C; the flight controller has its own supply. Without an acs-rcbus, bidirectional DShot needs the diode of A and 2.2 kΩ from the signal to the flight controller's 3.3 V, KISS the 1 kΩ / 2.2 kΩ divider of CRSF from COMTXD to the flight controller's UART RX, besides the motor signal to COMRXD.

Settings: as in the table, /rc/thr_ch 0, /io/in_analog 0,0. save -y, reboot. The function preset for a multirotor is in step 2.

Flight controller (Betaflight; others by the same names): motor_pwm_protocol DSHOT300 (or 150, 600); bidirectional: dshot_bidir ON and motor_poles; KISS: ESC sensor on the UART wired to R, and feature ESC_SENSOR.

Check: flight controller powered and connected: /rc/status 2; /rc/thr_in 0 while it is disarmed (it sends "motor stop").

5E. CAN​

Wiring: CANH to CANH, CANL to CANL, ground to ground, as a twisted pair; 120 Ω between CANH and CANL at both ends of the bus, unless built in. The CAN pins are on the controller's I/O page.

Settings: /rc/protocol 0 if it exists. The bit rate and the address of the controller: CAN interface. The sender sends the FALCON control message, ID 0x5F0 + address, with a 200 ms timeout; an active control message takes over from the PWM and analog throttle (control message). After the timeout the throttle stays invalid (E-stop). If a receiver or an analog throttle is the backup, add 8 to /safetyopts (RC fallback on CAN timeout): that input is used again until the next control message; keep its settings. If CAN is the only input, /io/in_ppm_ch -1 and /io/in_analog 0,0. save -y, reboot if /rc/protocol changed.

Check: in step 8, with the sender running.

6. Motor identification​

Tell the user: next the motor driver is set up for this motor; FALCON stays off meanwhile (/configured 0). Continue with the motor identification playbook. It ends with a power cycle and hands back here, to step 7.

7. Enable FALCON​

After the identification and its power cycle: /driver/error 0 and /driver/motor/Rt not 0. Tell the user: from now on the throttle drives the motor once FALCON is armed - propeller off, wheels off the ground. After their yes: /configured 1, save -y. /mode leaves 10.

8. Throttle range and test​

Skip the range for DShot (the value is used directly) and for CAN (the sender scales its command).

  1. stop - the motor stays still while the throttle moves; FALCON still reads the input.
  2. Servo PWM and the RC links with a throttle: read /pwm_input/in (µs) two or three times at low throttle and at full throttle (bidirectional: also at neutral). Analog: /analog_input/in (mV) the same way.
  3. Propose them for min, max (and center, bidirectional only) under /pwm_input or /analog_input. The low and the full value must be clearly apart; nearly equal values mean the input does not see the throttle: never write them. ExpressLRS sends about 988-2012 µs, Futaba about 1100-1940 µs.
  4. save -y.
  5. Release stop: a power cycle (battery first, USB second), or run with Allow dangerous commands.
  6. Throttle at zero: FALCON arms, /disarm_reason 0 (disarm reasons). The user opens the throttle gently: the motor turns, /sig_throttle follows. Wrong direction: the motor identification playbook's phase swap. DShot: the flight controller's motor test (props off). CAN: /can/sig_can follows the sender's command and /can/control_mode is 3.
  7. Signal loss: the user switches the transmitter off (or stops the flight controller or the CAN sender): the motor must stop, /mode 90 (invalid signal) or 95 (E-stop).

9. Hand back​

save -y once more. The user switches the controller off and on (battery first, USB second); then /configured 1, /driver/error 0, and for an RC link /rc/status 2 again.

Report​

  1. Device: name, serial number, hwid, swid.
  2. The use (preset) and the settings written in steps 2-3.
  3. The throttle input: the path, its wiring (pins, acs-rcbus jumpers or the adapter built), the /io and /rc settings, the check results.
  4. The motor identification result (its own report).
  5. The throttle range, the arming and signal-loss tests; what was saved; what the user still has to do.

Escalate​

  • /rc/status stays 1 although wiring, jumpers and receiver settings are right, or /rc/errors keeps growing: a diagnostic report to siliXcon with the system, the receiver type and the jumpers.
  • The throttle does not drive the motor after step 7: /mode and /disarm_reason (state machine); a driver problem: the motor driver playbook.