Overview
At a high-level, this project monitors emulated āCPU temperatureā, then maps the current temperature to a PWM command that drives a cooling fan, along with other neat Windows Bios features.
Ā
Cooling Algorithm and Hardware
Ā
Before connecting all the hardware to the dev board, we made sure everything worked on an Arduino MCU beforehand. We then began by prototyping the PWM algorithm using a software timer, then a hardware timer, then a hardware timer using interrupts on the rising and falling edge of the signal for CPU efficiency.
Once the PWM algorithm was stable, the next task was to get the temperature sensor calibrated to room temperature, and updating in real-time on the dev boardās ADC, and displaying this value on the 7-segment display.
Ā
The dev board the FPGA is on runs at 3V3 logic with a 100MHz clock, but the fan required a 5V PWM signal at 20KHz. This meant we had to scale the clock speed for our PWM signal, and use a level shifter, but it couldnāt properly drive the fan at 20KHz, as the rising edge time was too long.
Ā
We swapped out the pull up resistors on the level shifter from 10k to a lower value, but it resulted in a lot of ringing. In the end, we ended up removing the level shifter and driving the fan at 3V3, which meant we lost 16% power at max capacity.
VGA, PS2 Keyboard, and Audio
We wanted to go for a Windows 95 aesthetic, which thanks to Annie and the old VGA monitors, turned out pretty realistic. The VGA updates the current CPU temperature, fan speed, and CPU load in real time. The user is able to control the interface using a PS2 keyboard to switch between settings, and if they choose to exit, the program goes into BSOD (Blue Screen of Death) mode.
Ā
Ā