Falcon 3 Flight Controller
The Falcon 3 is a 32-bit, ARM Cortex M4F 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 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 3’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.
32-bit Microcontroller Architecture
The Falcon 3 uses the Atmel SAMD51J20A, 32-bit, ARM Cortex M4F microcontroller running at 120MHz. The SAMD51 is a faster verion of the SAMD21 micro-controller used on the Falcon 1 and 2 boards. The processor core is driven by a 32.768kHz crystal, that’s ramped up to 120MHz using a digital phase locked loop. This microcontroller has 1MB of internal flash memory and 256KB of RAM. The board’s user interface settings are stored in an external, 32KB, SPI based EEPROM. In addition, the SAMD51J is a modern, highly configurable microcontroller that provides excellent scope for future enhancements.
Motion Processing Unit (MPU)
The Falcon 3 employs an Invensense MPU6000, SPI based MPU. This device contains a 3-axis gyroscope and accelerometer. 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. It is possible to view and change the settings of the gyroscope and accelerometer using the Falcon 3’s user interface.
The Falcon 3 uses an on-board STM Electronics LIS3MDL magnetometer. This SPI, 3-axis magnetometer measures the aircraft’s heading (in degrees) for automated flight. It is possible to view and change the settings of the magnetometer using the Falcon 3’s user interface. Furthermore, it is also possible to connect an external LIS3MDL or HMC5983 magnetometer using the Falcon 3’s I2C bus connector.
The Falcon 3 also incorporates a Measurement Specialities MS5611 barometer. This tiny SPI 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. The barometer must be protected with foam, to shield it from wind and sunlight.
The Falcon 3 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 3 has been tested with the uBlox NEO-6M and the NEO-M8N modules.
The Falcon 3 is capable of receiving from either a CPPM, DSM2/DSMX satellite or SBUS reciever. The Falcon 3’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 3’s user interface to determine the maximum rotational speed (rate) or angle for a full transmitter stick throw.
PID Control Loops
The Falcon 3 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.
The Falcon 3’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 3 has 8 hardware outputs: M1 through to M8, using either 400Hz, 490Hz, Oneshot125, Oneshot42, Multishot, DShot150, DShot300, DShot600 (on all 8 motors) or DShot1200 (on the first 4 motors M1..M4) 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, 0.96″ 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 3 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.
I2C & Serial Expansion Ports
The Falcon 3 has both an I2C and three serial expansion ports. The I2C expansion port can be used to connect an (optional) external Honywell HMC5983/HMC5883L or ST Microelectornis LIS3MDL 3-axis magnetometer, instead of using the Falcon 3’s LIS3MDL on-board 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 3’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.
The SWD port allows the SAMD51J20A to be connected to an ICE (In Circuit Emulator) for debugging purposes. Its use is for developers only.
Although externally the Falcon 3’s design takes inspiration from the KK2 board, internally it is actually based on the Arduino Zero and Adafruit Metro M4 boards. As it uses the Metro M4’s bootloader, it is possible to program and upload sketches with the Arduino IDE via the USB cable, just like any other Arduino.
The Falcon 3 uses a new UF2 bootloader. When you plug the Falcon 3 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 3 Specification
Board: FR4 1.6mm, 4 layer PCB, green solder mask, white silkscreen, ENIG (Electroless Nickel Immersion Gold) finish
Board Dimensions: 43.4mm x 43.4mm x 1.6mm
Mounting Holes: diameter 3.2mm, 30.5mm spacing
Processor: RISC 32-bit, 120MHz, Atmel ARM Cortex M4F SAMD51J20A, 64-pin QFN package
Memory: 1MB flash, 256kB RAM, 32k on-board external EEPROM (SPI bus)
Display: 0.96″ monochrome OLED (super fast hardware SPI bus driven)
Gyro/Accel: MPU6000 (SPI bus)
Magnetometer: LIS3MDL (SPI bus)
Barometer: MS5611 (SPI bus)
Inputs: 2 receiver channels throttle and auxiliary (T & 1) + 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, DShot300, DShot600 and DShot1200 (DShot1200 on first four motors only) (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
I2C: I2C expansion port for external HMC5883L/HMC5983 or LIS3MDL magnetometers
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
Modes: Rate, Auto-Level, Air Mode, Heading Free, Altitude Hold, Loiter and Return To Launch
Receivers: CPPM, SBUS, plus DSM2/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