Got a couple of those cute ultra small desktops from HP, DC7900. Intel Core Duo CPU, 4 GB of memory, spinning rust (laptop disk) replaced by an 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) 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:
Back to the homepage
Date: 11 June 2017
This software is licensed under the CC-GNU GPL.