
Quadcopter Flight Controller
Summary
The Atmel-based quadcopter flight controller board was my first PCB design experience. The hardware design was quite simple: an Atmega328P microcontroller at the core, with 6 input PPM channels, 4 output PWM channels, and an I2C interface for the 9 DoF Inertial Measurement Unit.
I started the project in 2014, when I was finishing high school. I had limited funds, so I purchased all board components locally, and etched the PCB myself. Since the board was a simple single-layer design, the process was straightforward. I used the laser printed toner transfer method to create the etch mask.
From the software and control theory perspective, this project was my first deep dive into state estimation and PID control, especially when it comes to implementation in an embedded system. The FCU implemented a Kalman filter to estimate the drone orientation (not its full pose since it was lacking any positional controllers), based on the onboard accelerometer, gyroscope and magnetometer. The FCU then treated the user's control inputs as the desired RPY angles, and implemented a PID controller per rotational axis. The PID outputs were then mixed to get the actual control outputs for each motor.
Gallery

Top view

Bottom view

3D render