Falcon 2 Flight Controller


Falcon 2 Flight Controller

The Falcon 2 is a 32-bit, ARM Cortex M0+ based flight controller capable of both manual (rate, auto-level and heading free), as well as automated (altitude hold, loiter and return to home) modes when connected to an (optional) external GPS module. It connects to either a standard 8-channel, CPPM, DSM2/DSMX satellite or SBUS receiver and combines this pilot input with gyroscope, accelerometer, magnetometer (compass) and barometer (altitude) sensors. These allow it to stabilise and fly any number of pre-set or custom multi-rotor (drone) configurations through a motor mixer editor. The Falcon 2’s various settings are also configurable “in the field” using its miniature OLED user interface.

For more information about the Falcon Project click here: Falcon Project.


Falcon 2 Layout


32-bit Microcontroller Architecture

Falcon 2 Bottom Side

The Falcon 2 uses the Atmel SAMD21J18A, 32-bit, ARM Cortex M0+ microcontroller running at 48MHz. The larger sibling of the SAMD21G18A used on the Falcon 1. The processor core is driven by a 32.768kHz crystal, that’s ramped up to 48MHz using a digital frequency locked loop. This microcontroller has 256KB of internal flash memory and 32KB of RAM. The board’s user interface settings are stored in an external, 32KB, I2C based EEPROM. In addition, the SAMD21J is a modern, highly configurable microcontroller that provides excellent scope for future enhancements.

Motion Processing Unit (MPU)

The Falcon 2 employs the Invensense MPU9250, I2C based MPU. This device contains a 3-axis gyroscope, accelerometer and magnetometer (compass). The gyroscope measures rotational speed (in degrees per second) and is used to provide basic flight stability, while the accelerometer measures the roll and pitch angle (in degrees) required for auto-level. Furthermore, the magnetometer measures the aircraft’s heading (in degrees) for automated flight. It is possible to view and change the settings of the gyroscope, accelerometer and magnetometer using the Falcon 2’s user interface.


The Falcon 2 also incorporates a Measurement Specialities MS5611 barometer. This tiny barometer device measures the temperature and atmospheric pressure, from which an estimation of altitude (in metres) and rate of climb/descent (metres per second) can be calculated. Through holes either side of the barometer allow for a small cable tie and piece of foam (supplied) to protect it from wind and sunlight.


The Falcon 2 connects to an (optional) external uBlox GPS module. The board auto configures the GPS to communicate using its more efficient, proprietry UBX protocol at 9600bps (bits per second) and at a frequency of 10Hz (times a second). The Falcon 2 has been tested with the uBlox NEO-6M and the NEO-M8N modules.

Receiver Inputs

Falcon 2 RSS

The Falcon 2 is capable of receiving from either a standard 8-channel, CPPM, DSM2/DSMX satellite or SBUS reciever. (Note that the SBUS receiver option requires an additional external inverter). The Falcon 2’s user interface is used to calibrate the receiver data to find the transmitter sticks minimum, maximum and centre points. This raw receiver data is then converted into degrees per second or degrees, depending on the flight mode, (rate or auto-level). Rate and auto-level stick scaling can be also set using the Falcon 2’s user interface to determine the maximum rotational speed (rate) or angle for a full transmitter stick throw.

PID Control Loops

The Falcon 2 takes the pilot’s input from the receiver and sensor data and combines them using a number of PID (Proportional, Integral, Derivative) control loops. The outputs from these control loops are used to drive the motors and servos for the selected multi-rotor (drone) configuration.

Motor/Servo Outputs

Falcon 2 Wired Up

The Falcon 2’s user interface has a motor layout menu (based on the KK2s) that allows you to select the appropriate motor configuration from a list of predefined motor/servo set-ups, for example tricopter, v-tail, quadcopter, etc… This determines how the output PID control loops are divided between the motors and servos. It is also possible to change individual settings using the motor mixer editor to customise the output to your own requirements.

The Falcon 2 has 8 hardware outputs: M1 through to M8, using either 400Hz, 490Hz, Oneshot125, Oneshot42, Multishot, DShot150 or DShot300 protocols for ESCs, with 400Hz for digital servos and 50Hz option for analogue servos. A +5V ESC BEC (Battery Elimniation Circuit) on M1 is used to power the flight controller, while the remaining BECs on the M2 to M8 power bus can be used to drive additional servos.

Miniature User Interface

Communication with the microcontroller is by means of 4 buttons and a super fast SPI driven, miniature, 1.3″ OLED. The menu system is similar in nature to the KK2 board, but has been extended to incorporate addition functionality.

Battery Monitor Input & +5V Buzzer Output

The Falcon 2 has a battery monitor input, capable of measuring LiPo cells up to 6S, (25.2V). A voltage threshold can be set in the user interface that activates a battery low voltage alarm using a +5V buzzer (supplied).

The buzzer can also be used to provide other audible feedback for the pilot, for example lost alarm, which activates after 30 minutes, or motor armed indication that beeps when the motors are armed, but idle.

Tricopter Flight

I2C & Serial Expansion Ports

The Falcon 2 has both an I2C and three serial expansion ports. The I2C expansion port can be used to connect an (optional) auto-detected external HMC5983/HMC5883L/QMC5883L/LIS3MDL 3-axis magnetometer, instead of using the Falcon 2’s internal device. This allows the magnetometer to be positioned away from sources of electromagnetic interference. Serial3 is used for connection to an (optional) external uBlox GPS module, while Serial1 is for One Screen Display (OSD) and Serial2 Taranis radio Smart Port (S-Port) telemetry.

Micro USB Port

The Falcon 2’s micro USB port can be used both as an auxiliary power supply and for uploading the latest firmware updates to the microcontroller, using its bootloader. (A bootloader is a small piece of code that allows the microcontroller to be programmed over the USB port). The USB port is protected from over current by a resettable fuse.

SWD Port

The SWD port allows the SAMD21J18A to be connected to an ICE (In Circuit Emulator) for debugging purposes. Its use is for developers only.

Arduino Compatibility

Arduino IDE Dropdown

Although externally the Falcon 2’s design takes inspiration from the KK2 board, internally it is actually based on the Arduino Zero. As it uses the Zero’s bootloader, it is possible to program and upload sketches with the Arduino IDE via the USB cable, just like any other Arduino.

UF2 Bootloader

The Falcon 2 uses a new UF2 bootloader. When you plug the Falcon 2 into the PC via its USB port it behaves as a mass storage drive, like a memory stick. The UF2 bootloader allows firmware updates to be uploaded by simply dragging ‘n’ dropping a Microsoft *.uf2 file containing the firmware update on to the bootloader drive. This means there is no need to use complex development tools to upload new firmware.


Falcon 2 PDFFalcon 2 Set-Up Guide

Falcon 2 Specification


Rev: 1.0
Board: FR4 1.6mm, double sided PCB, black solder mask, white silkscreen, ENIG (Electroless Nickel Immersion Gold) finish
Board Dimensions: 51.5mm x 51.5mm x 1.6mm
Mounting Holes: diameter 3mm, 45mm spacing
Processor: RISC 32-bit, 48MHz, Atmel ARM Cortex M0+ SAMD21J18A, 64-pin TQFP package
Memory: 256k flash, 32k RAM, 32k on-board external EEPROM
Display: 1.3″ monochrome OLED (super fast hardware SPI bus driven)
Gyro/Accel/Magnetometer: MPU9250
Barometer: MS5611 + cable tie and foam to protect it from wind and sunlight
Inputs: 8 receiver channels (T, A, E, R, G, 1, 2 & 3) + battery voltage monitor input
Outputs: 8, 11-bit resolution PWM channels at 400Hz (motors/digital servos) or 14-bit resolution at 50Hz (analogue servos) or 490Hz, OneShot125, Oneshot42, Multishot, DShot150 and DShot300 (ESCs only) + buzzer output
Serial1: general purpose serial port (OSD) – requires an external I2C level shifter
Serial2: general purpose serial port (S-PORT) – requires an external Tx, Rx inverters
Serial3: general purpose serial port (GPS)
Serial4: DSM2/DSMX satellite or SBUS receiver on the throttle input channel – SBUS requires an external inverter
I2C: I2C expansion port
Firmware updates: via micro USB connector
Off-board GPS: uBlox, automatic configuration, supports UBX binary protocol, 10Hz at 9600bps, connects to general purpose serial port


Version: 1.4.1
Modes: Rate, Auto-Level, Air Mode, Heading Free, Altitude Hold, Loiter and Return To Launch
Receivers: Standard, CPPM, plus DSM2 and DSMX satellite receivers
Mixer modes: 12 channels with the following pre-set configurations – Tricopter, V-Tail, Quadcopter x, Quadcopter +, Hexacopter x, Hexacopter +, Octocopter x, Octocopter +, Singlecopter 1M4S, Singlecopter 2M2S, Dualcopter, Y4, Y6, X8 +, X8 x, H6, H8, V6 and V8
Sub Menus: Radio, PI Editor, Settings, Display, Calibrate, Motor Layout, Factory Reset, Version
Camera Gimbal: 2 axis gimbal option on outputs 7 and 8, standard and SS gimbals supported