A custom-designed flight control stick for the Falcon Aircraft project — designing both hardware and firmware for force sensing, CAN communication, and USB HID joystick interfacing.
The Falcon Flight Stick is a force-sensing joystick that measures user input via strain gauges and communicates with the aircraft’s control system through CAN bus or to a computer host via USB-C.
This project demonstrates my ability to proficiently design, route, and program an embedded system from the ground up — including power delivery, signal integrity, and firmware architecture.
- MCU Core: STM32F103CBU6 managing all board-level events with an external 8Mhz Oscillator
- Sensing System: Three strain gauges read via a precision Texas Instruments ADS131M03IRUK ADC (32-bit SPI interface)
- Connectivity:
- USB-C (HID joystick or virtual COM port)
- CAN bus daisy-chain communication
- Memory: 1×128-byte EEPROM for calibration data
- Power System:
- TI TPS62177 step-down converter for higher current ditial power
- ADI LT1962 LDO (3.3V) for low noise, low current analog power
- Automatic protection between USB-C and LiPo (12V) sources
- PCB Stackup: 4-layer board with separated analog/digital planes for signal integrity
- Breakout Button Matrix:
- button matrix allowing for a hotswappable and fully customizable button interface on the joystick
- Up to 25 individual buttons, all allowable for interrupts
The latest hardware version is Falcon Flight Stick Rev5.
Previous revisions were experimental or undocumented.
The STM32 MCU is programmed through ST-LinkV3 (SWD) and communicates via UART for debug and development.
Differential USB data lines enable HID or COM functionality, depending on firmware.
Strain gauge signals are processed through a TI ADC, which triggers SPI reads via a DRDY interrupt.
Processed values are sent to the servo controller board (via CAN) or USB interface.
The power subsystem ensures stable operation from multiple sources:
- 12V LiPo (CAN chain) or 5V USB-C
- Both inputs are protected from backfeed
- Outputs:
- 3.3V Digital (MCU, logic)
- 3.3V Analog (ADC, strain gauge front-end)
These rails are physically isolated to minimize noise and ground-reference drift.
- 4-layer stackup for power and noise isolation
- Separated analog/digital ground and power planes
- Power trace widths sized by current draw
- Labelled parts for developer readability
Example outline:
- USB HID joystick emulation via STM32 HAL
- CAN message handling for actuator control
- ADC data acquisition and digital filtering
- EEPROM calibration storage
- KiCad 8.0 – PCB and schematic design
- STM32CubeIDE – Firmware development & MCU pinout planning
- JLCPCB – Fabrication and assembly
- SolidWorks – 3D mechanical integration
- GitHub / Git – Version control





