A classic problem in non-linear controls is the ability to levitate a magnet by using a solenoid. While this task has been achieved by others through software implementation , this project implements the control loop, from state estimation to driving a voltage, entirely on an FPGA, to harness a 156 kHz sample rate. The role of the Raspberry Pi is to command a setpoint and linearized PID gains to the FPGA, and facilitate the movement between setpoints by open-loop control. The system was able to stabilize the magnet at setpoints within a 1 cm range and smoothly move between setpoints.
Project Block Diagram
A full technical report is shown below: