In this lab for CprE-488, we were tasked with designing an interfacing and control platform for a simple quadcopter UAV. Building a system for autonomous flight involves solving challenges in multiple engineering domains, including signal processing, controls, and real-time embedded systems. Our goal was to increase our exposure to three different aspects of embedded system design:
- Interfacing – Reverse engineer an RC transmitter to gain an understanding of the trainer interface and format.
- Finite State Machine design – you will design and implement an FSM-based hardware module to record and transmit PPM data.
- IP core design and integration – Xilinx tools to generate an AMBA AXI4-compliant IP core that you will integrate into an existing XPS project.
First, we practiced flying the quadcopter using a Hobby King 2.4 Ghz 6 channel mode 2 transmitter. This transmitter had a trainer port on the back, which uses a 3-pin serial interface to transmit the Pulse Position Modulation (PPM) data. More info on PPM can be found in this post Guide to PWM and PPM
A typical usage scenario of a trainer port is to have two people share control of an RC aircraft: the input (student) transmitter directly sends PPM data over the trainer port to a second output (instructor) transmitter, which copies this data over the RF link to the receiver on the aircraft.
Finite State Machine
We studied the trainer port on the transmitter and designed an FSM-based hardware module to record and transmit PPM data. This hardware module allowed us to control the quadcopter using PPM data generated by our hardware.
IP core design and integration
Next, we used the Xilinx tools to generate an AMBA AXI4-compliant IP core and integrated it into an existing XPS project. This allowed us to control the quadcopter using PPM data generated by our hardware module.
After completing the design and implementation of our interfacing and control platform, we demonstrated its effectiveness by successfully flying the quadcopter using the PPM data generated by our hardware module.
Overall, this lab allowed us to gain valuable exposure to three different aspects of embedded system design: interfacing, IP core design and integration, and FSM design. It provided a glimpse into the complexities of building an autonomous flight system and the challenges involved in signal processing, controls, and real-time embedded systems. My main focus of the project was to create a finite state machine using Verilog to decipher and relay PPM data signals between the quadcopter and the controller. This project was enjoyable for the group, especially for those who enjoyed working with Verilog such as myself.
The project can be found on my github.