Better speed control for case fans

Most desktop motherboards nowadays like to speed control the case fans based on "motherboard temperature".

bios screen on ASUS B350M-A

But I think this is silly. I think the case fan's job is not to cool the motherboard, but to ventilate the case. Modern motherboards don't really make much heat anyway.

What I care about is that when my GPU or CPU coolers are pumping loads of hot air into the case then the case fans are removing that hot air.

So I decided to build a fan controller, that fits into a 5.25" bay, to speed control my fans based on the temperature difference between intake and exhaust. This is because I think this is the best way to estimate how well ventilated the case is.

The idea is that if the air at the exhaust is a similar temperature to the air at the intake, then the circuit knows the case is well ventilated and runs the fans slowly. But if there's a big temperature difference, it runs the fans faster.

The circuit design

I like to make my circuits as crudely as I can get away with, avoiding high-tech chips or micro-controllers where possible. My circuit will use a pair of thermistors to measure temperature, and will have two fan speeds, fast and slow. The only integrated circuit I use will be a 1978 op-amp, the TL072. Here's the circuit diagram:

See, in orange, the temperature detection stage. This uses two 5K thermistors playing tug-of-war with each-other. Thermistors are resistors who's resistance decreases with temperature. One will be zip-tied to the intake fan, and one to exhaust.

This is actually the second version of the design. In the first prototype, there was one thermistor for each of the op-amp inputs, but there were thermal runaway problems. Once the exhaust thermistor got hot, more current flowed through it, causing it to stay hot. This newer design solves this problem because the two thermistors are in series, so the same amount of current always flows through them.

The potentiometer allows me to tune exactly when the fans switch to high speed. There's also an override switch for testing.

See, in green, the timer stage. The purpose of this is to keep the fans running fast for an extra 30 seconds after the temperature difference drops below the threshold. This is to prevent annoying oscillating behaviour (the fans going fast-slow-fast-slow repeatedly).

Timer works because the op-amp can charge the capacitor quickly through the diode, but must discharge it slowly through high-value resistor.

You might notice that, because the cap is connected up to +V, the fans all go in fast-mode for 30 seconds when the device is first powered up. This is deliberate, and gives a blast of noise when I start the machine so I know the fans work :).

See in purple, the driver stage. This provides the two states for each of the three case fans and the indicator LED:

low temp diff high temp diff LED off on front intake fan 56Ω @ 12V 0Ω @ 12V side intake fan 150Ω @ 12V 0Ω @ 12V exhaust fan 150Ω @ 12V 0Ω @ 12V

Those resistance values are chosen such that the fans run nice and quietly when at low speed.

If you're wondering what the 2V7 zener is doing there, it's because the TL072's idea of low voltage is not really very low, and it was activating the transistors slightly when they were supposed to be off.

Making it

Now I show you an avalanche of photos of me making it.

Here is my prototype on a breadboard. Thermistors are green. With this prototype I was able to get the fan to turn on either by holding my finger on the exhaust thermistor, or an ice-cube to the intake thermister, proving it measures a temperature difference.

I was so amazed when I realised I had everything I needed to make it just lying around, including three fan extension cables and a 5.25" dummy panel ready for drilling!

Spent quite a lot of time making cables. See my thermistors on the end of cables now:

Let's start making the circuit board!

Bit more done:

On the bottom of the board are the components that will peek through the panel! A trim pot, an LED and a makeshift 3-way switch. I didn't have a real 3-way switch so I'm using a bit of socket and a wire that I can plug into one of the three holes. This switch is not in the circuit diagram, it's purpose is to allow me to choose which of the three fan's speedos goes to the motherboard's fan header. This way I can measure how fast the fans are spinning when I'm testing it.

Below; the finished circuit in all it's glory. Cables from left to right:

molex connector for power connector for two temperature sensors will be soldered onto override switch that forces fans on 3-pin fan 3-pin fan 3-pin fan goes to motherboard's fan header to give speed reading.

I obliterated some appropriately shaped and positioned holes in the dummy panel, and installed the override switch:

Then I stuck the circuit into the panel with loads of epoxy-resin glue, using mutilated bits of fibreboard for spacing. Here is the finished product, ready to be installed:

Attaching the thermistors to the exhaust and intake fans:

I installed it, plugged everything in and it works!

Conclusions

Now when I compile LineageOS all 3 of my Noctua case-fans suddenly go bonkers and it sounds like a jet trying to take off!

By switching the makeshift three-way switch with the BIOS open, I can see the fan speeds of the three fans, and have confirmed that all three of them run slowly in normal condition and fast in fast condition.

I think it's a great creation, but if Maplin hadn't closed I could have gone and bought a 3-way switch which would have made it look a bit more professional.

It's a great design and you should definitely make one!