惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
罗磊的独立博客
T
The Blog of Author Tim Ferriss
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
Last Week in AI
Last Week in AI
美团技术团队
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
D
Docker
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
月光博客
月光博客
L
LINUX DO - 最新话题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
W
WeLiveSecurity
H
Heimdal Security Blog
Vercel News
Vercel News
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
TaoSecurity Blog
TaoSecurity Blog
T
Troy Hunt's Blog
A
About on SuperTechFans
C
Check Point Blog
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
AI
AI
WordPress大学
WordPress大学
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
博客园_首页
The Last Watchdog
The Last Watchdog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
I
Intezer
K
Kaspersky official blog
M
MIT News - Artificial intelligence
J
Java Code Geeks
G
GRAHAM CLULEY
P
Palo Alto Networks Blog

Bogdan's Blog

Bogdan's Blog – Windows 8 Was Peak Microsoft and I will die on this hill Bogdan's Blog – Stop Using Spreadsheets for Your Manga Collection Bogdan's Blog – Unc Status Revoked: How Science is turning back the clock Bogdan's Blog – About Chat Control Bogdan's Blog – We Optimized the World to Death Bogdan's Blog – Smarttech247 - Just Reddit Drama or Business as Usual? Bogdan's Blog – LinkedIn Interview Scams
Bogdan's Blog – MSI Forgot to Wire My Fans, So I Built My Own Fan Controller
Bogdan · 2026-03-22 · via Bogdan's Blog

March 22, 2026

Links


How it all started

Nostalgia hit me like a ton of bricks recently. The early 2010s were calling out to me. I really wanted to build a retro computer that could run old games, but at the same time, I wanted something that could still be somewhat useful for modern things.

So I've started going to flea markets, asking friends for parts and looking out for good deals. I got a really nice collection going, including a socket 754 motherboard, a Sempron Mobile 3400+ CPU, and some DDR1 ram, but when building the actual PC, this is what I finally settled on:

  • CPU: AMD Phenom II X6 1075T
  • RAM: 2x4GB Corsair 1600MHz + 2x4GB Corsair 1866MHz
  • GPU: NVIDIA GTX 960
  • Motherboard: MSI 970 Gaming (AM3+)

Peak older brother core. Well, except that GTX 960, but it's the newest card that has official drivers for Windows XP, and I wanted to go all out. To be fair, the GTX960 is something that somone would've bought back in 2015 to upgrade their AM3/AM3+ rig, so it still fits the theme.

If you disagree, just know that I'm always up for a fiery debate.


The motherboard

The heart of the build is the MSI 970 Gaming (MS-7693), and on paper, it's pretty solid.

MSI 970 Gaming Motherboard The black PCB, the red accents, full solid capacitors, super ferrite chokes. And MSI's marketing team went hard on it - Military Class 4 components, Killer E2205 NIC for "prioritized gaming traffic", Audio Boost 2 with the Realtek ALC1150, and support for SLI and CrossFire through two PCIe 2.0 x16 slots. MSI 970 Gaming Motherboard IO The VRM can handle overclocking without catching fire, it's got 6 SATA III ports, and it even came with USB 3 at a time when it was only a "nice to have".

For 2014, I think it's pretty impressive, and even today it still feels somewhat modern.


One Small Problem

When I first fired it up and went into the BIOS, I immediately noticed something was off.

BIOS screen showing 255°C and 0 RPM

CPU Temperature: 255°C.
Fan Speed: 0 RPM.

Foreshadowing: 255 is 0xFF, the value you get when you read a register that isn't connected to anything.

I thought it was a bad sensor, a BIOS bug or maybe a setting I missed.

So I did what any reasonable person would do, and searched online.

And that's when I facepalmed so hard, it could power Earth for the next 100 years.

MSI forgot to wire the Super IO chip.

This board has a Fintek F71878AD, a perfectly capable Super IO controller that can read temperatures, control fan PWM, and monitor fan speeds, but MSI just didn't connect it to the board.

The CPU fan header defaults to whatever curve the Super IO chip has hardcoded, which never drops below 50% and only ramps up from there. And the other 4 and 3 pin headers just run at full blast, no matter what.

I genuinely don't understand how this passed QA. Did nobody at MSI plug in a fan during testing? Did they test in a server room where nobody could hear the fans anyway?


What now?!

I looked up products, searched reddit threads and even asked LLMs.

The suggestions were either expensive, proprietary or software solutions that didn't work for my motherboard anyway.

I also found fan controllers with potentiometers that you manually adjust, which were more expensive than I expected.

All of these solutions are subpar. You either pay too much or sacrifice too much functionality - or both. Compatibility can be a problem too.

For example, Corsair iLink is proprietary, and will only run on Windows 10 and above.

What I really wanted was a cheaper Corsair iLink that doesn't require diving into a rabbit hole of proprietary accessories.

Here's what I knew:

  1. An Arduino can generate a 25kHz PWM signal. This is the standard frequency for 4-pin PC fans.
  2. Windows can read CPU temperature directly from the CPU's internal thermal diode, completely bypassing the useless Super IO chip.
  3. A USB serial connection between the two is trivial to manage.

So I came up with a plan:

  1. Read the CPU temp on the PC side
  2. Calculate a fan speed based on a curve
  3. Send the duty cycle to an Arduino over serial
  4. Have the Arduino send the PWM signal to a fan hub

This could help everyone

While working on this project, I realized it fixes a much bigger problem than one botched MSI board.

A ton of older PCs don't have 4-pin fan headers at all. Socket 754, Socket 939, AM2, LGA 775, tons of early AM3 boards; they all shipped with 3-pin headers. Some have voltage control, but most run at fixed 100% speed. And many of these have thermal sensors.

And even without thermal sensors, the arduino could work as a manual fan controller, so I decided to polish everything up and release it in two parts:

Since the spec for the Arduino script is open, you don't even have to use my application, you can just write your own.


The Script

I used a Nano clone for this project. A board that costs about the same as a nice coffee, with the same ATMEGA328P chip as the original.

All nano variants should be supported. If you need it on other models, feel free to contribute or fork the repo.

One output pin (D9) generates a 25kHz phase-correct PWM signal through direct Timer1 register manipulation. Not analogWrite(). Arduino's default PWM runs at ~490Hz, which could make your fans whine.

Two optional input pins: D2 reads the motherboard's own PWM signal, and D3 reads the fan tachometer for RPM reporting.

Wiring is just D9 to your fan hub's PWM wire, ground to ground. Plug the Nano into a USB header or route a cable out the back.

Arduiono wiring diagram

On boot, the fans blast at 100% for 3 seconds, then drop to 50% (I thought it would be cool if it did that, like a little warm-up). From there, a priority system takes over:

  1. PC app connected? Use whatever duty cycle the app sends.
  2. No PC, but motherboard PWM detected? Mirror the motherboard's signal.
  3. Nothing at all? Hold at the current preset speed.

You don't even need the PC app. There's a physical button input on pin D4 that cycles through speed presets: 0% → 25% → 50% → 75% → 100%. If you cannot or do not want to use a control application, you could realistically repurpose your computer's reset button for this.


The Application

The Arduino script is nice for a set-and-forget setup, but I also wanted to do proper fan curves, like every motherboard made after 2014 does out of the box.

That's how DummyFanX came to be. I first built it in Rust with egui. It worked for me, but it would only run on Windows 8 and above. It could also run on Windows 7, but only with some compatibility hacks, and I didn't like that.

Since the whole point of writing an article about this project and bringing awareness to the PWM situation was to make it available for as many people as possible, including people running Windows XP, I rewrote it in C++ with Dear ImGui and DirectX 9. And it now supports, Windows XP through Windows 11.

DummyFanX main screen

Twice a second, the app reads the CPU temp, runs it through a fan curve, and sends the duty cycle to the Arduino. The curve has smoothing built in - hysteresis, rate limiting, and a zero-RPM mode so fans can fully stop at idle. If you've ever tweaked a fan curve in a BIOS, it's exactly that, but more flexible.

For temperature reading, two backends are supported:

  • HWiNFO - if you already run HWiNFO, just tick "Shared Memory Support" in settings and DummyFanX picks up any sensor it can see.

DummyFanX HWiNFO shared memory checkbox


  • PawnIO - a signed kernel driver that reads the CPU's thermal diode directly. Lower overhead, no external app needed. PawnIO's DLL is architecture-specific, so you'll need the 64-bit build of DummyFanX on modern systems.

If neither is available, it still works as a manual fan controller.

DummyFanX manual control slider

It lives in your system tray. Can be configured to start with Windows, connects to the Arduino, does its thing in the background. If the temperature reading ever fails, it defaults to 100%.

Both 32-bit and 64-bit builds are included.


Why's it called DummyFanX?

Well, on one hand, it controls fans. On the other, any dummy can slap an "X" on an app and think they're smart.

Real talk though, I just thought it sounded cool.


Nano clone and a single pin,

fans go quiet, let the fun begin