Falcon 1 Flight Controller
The Falcon 1 is a manual (rate and auto-level only), 32-bit, ARM Cortex M0+ based flight controller running at 48MHz. It connects to either a standard 5-channel, CPPM, DSM2/DSMX satellite or SBUS receiver and combines this pilot input with gyroscope and accelerometer sensors. These sensors allow the computer to stabilise and fly any number of pre-set or custom multi-rotor (drone) configurations through a motor mixer editor. The Falcon 1’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 1 uses the Atmel SAMD21G18A, 32-bit, ARM Cortex M0+ microcontroller running at 48MHz. The smaller sibling of the SAMD21J18A used on the Falcon 2. 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, 16KB, I2C based EEPROM. In addition, the SAMD21G is a modern, highly configurable microcontroller that provides excellent scope for future enhancements.
Motion Processing Unit (MPU)
The Falcon 1 employs the Invensense MPU6050, I2C 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 1’s user interface.
The Falcon 1 is capable of receiving from either a standard 5-channel, 7-channel DSM2/DSMX satellite, 8-channel CPPM or SBUS reciever. (Note that the SBUS receiver option requires an additional external inverter). The Falcon 1’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 1’s user interface to determine the maximum rotational speed (rate) or angle for a full transmitter stick throw.
PID Control Loops
The Falcon 1 takes the pilot’s input from the receiver and gyroscope/accelerometer 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 1’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 1 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 1 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 1 has both an I2C and a single serial expansion port. The I2C port is reserved for future use. The serial port on the other hand is used for On Screen Display (OSD) communications with a Minim/Micro Minim OSD board. Note that is connection requires an additional I2C level shifter.
Micro USB Port & SWD Ports
The Falcon 1’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 SAMD21G18A to be connected to an ICE (In Circuit Emulator) for debugging purposes. Its use is for developers only.
Although externally the Falcon 1’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.
The Falcon 1 uses a new UF2 bootloader. When you plug the Falcon 1 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 1 Specification
Board: FR4 1.6mm, double sided PCB, green 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
Power: +5V (+6V max.) on M1 connector or auxiliary micro USB, +3.3V current 500mA max.
Processor: RISC 32-bit 48MHz Atmel Arm Cortex M0+ SAMD21G18A, 48 pin TQFP package
Memory: 256k flash, 32k RAM, 16k external EEPROM
Display: 1.3” monochrome OLED (super fast hardware SPI bus driven)
Gyro/Accel: MPU6050 (I2C bus)
Inputs: 5 receiver channels (T, A, E, R & 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 and DShot300 (ESCs only) + buzzer output
Serial1: general purpose serial port (OSD) – requires an external I2C level shifter
Serial2: DSM2/DSMX satellite or SBUS receiver on the throttle input channel – SBUS requires an external inverter
I2C: I2C expansion port
Micro USB: auxiliary power and firmware updates
SWD: Debug port
Modes: Rate, Auto-Level and Air Mode
Receivers: currently Standard, CPPM, DSM2/DSMX satellite and SBUS receivers – note that SBUS receiver option requires an additional external inverter
Mixer modes: 8 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, On Screen Display (OSD), Factory Reset, Version
Camera Gimbal: 2-axis gimbal option on outputs 7 and 8, standard and SS gimbals supported