USDT Fan Noise Killer

Got a couple of those ultra cute ultra small desktops from HP, DC7900. Intel Core Duo CPU, 4 GB of memory, spinning rust (laptop disk) replaced by a 120 GB SSD. Latest Ubuntu MATE on it and it FLIES! Only drawback is that the CPU fan starts to make noise when on for a little while. Not only that, it starts to whine while alternating between two speeds. This happens when the machine is idle and the CPU heat sink is cold. Highly annoying but apparently typical of this form factor because newer HP USDTs also exhibit this behavior.

So how to trick the fan into behaving itself? At first I thought reducing the PWM control, as specified in Intel's 4-Wire PWM controlled fan spec would fix this. Alas, this proved to be a misconception. The motherboard duly compensates the reduced tacho feedback by increasing the PWM drive. Then it hit me. I was barking up the wrong tree. Changing the feedback to trick the MOBO into thinking the fan runs at a much higher speed would solve this. And it did. Stress testing the CPU showed that the fan still will go into takeoff mode when the CPU heats up but stays quiet when idle.

Kludging together a small PCB with a PIC12F629 and some external components was easy. The ugly code simply doubles the tacho feedback frequency. Because I have several of these USDTs I made the code (asm file, hex file) simpler by losing the pullup resistor at the input (internal weak pullups take care of that) and changing the output to tristate to get rid of the transistor. Worked like a charm. I still need the 78L05 regulator to get the PIC 5V power from the 12V fan supply voltage.

The end result (still with the extra transistor) is acceptable, the small board fits nicely next to the fan baffle:

Finally got to install the other USDTs. Took the opportunity to actually draw the schematic:

and build the remainder of the small boards:

Turned out I forgot I had programmed weak pullups so the pullup resistor at the tacho input (pin #2, GPIO5) should not be necessary. Reinstalled Ubuntu MATE (18.04 LTS) on it, and it still flies. And is relatvely silent. When the CPU is stressed (Prime95) the mobo duly revs up the fan and it starts to scream. Like it should. After all, this is a small form factor with a ditto fan and it has to work hard to produce a useful airflow.

Back to the homepage

Date: 11 June 2017, updated 21 May 2018

This software is licensed under the CC-GNU GPL.