Can’t Stand Your Noisy Fan? Here’s a Plan, Man

[Brian] adores his GW Instek GPC-1850D power supply, but it’s annoyingly loud and disruptive to his audio projects. The thing works great, so he decided to regulate the fan’s speed based on usage level to save his sanity.

Once [Brian] got under the hood, he found that it actually has four separate heatsinks: one for the bridge rectifiers and one for each power transistor on the three output channels. The heatsinks are electrically and thermally isolated from each other and change temperature based on the channel being used.

[Brian] and his associates had several Microchip MCP9803 temperature sensors kicking around the lab from previous projects, so they put one on each heatsink. The great thing about these is their address selection pins which let all four of them sit together on the I²C bus to Arduinoville. Each sensor is insulated and clamped to its heatsink with a piece of meccano and a dab of thermal paste.

[Brian] used an Arduino Mini and built the circuit on stripboard. The fan runs at 24V, so he’s sharing that with the Arduino through a 7805. He controls the speed of the fan with PWM from the Arduino fed through a MOSFET. The Arduino reads from each sensor and determines which one is hottest. [Brian] wanted the fan to run at all times, so he set a base speed of 20%. When the heatsinks reach 30°C/86°F, the fan speed is increased to 40%. After that, the speed increases at 5°C/9°F intervals until it reaches max speed at 65°C/149°F.

You can grab the code and schematic from [Brian]’s repo. If you want to study your heatsinks, build this heatsink tester first.

28 thoughts on “Can’t Stand Your Noisy Fan? Here’s a Plan, Man

  1. Unfortunately most fans stall when the speed is below 30% – even if it spins currently now at 20% there’s a high chance that wear and tear will cause it to spin down and eventually stall at some point.

    From experience I would set the minimum speed at 35% or otherwise use a PWM controlled fan which usually has a minimum stall speed of 5-10% of its rating RPM

      1. Tony,
        Please show me a BOM for a working design OPAMP circuit to substantiate your claim. Make sure that your design can detect fan failures which is important for the application. You don’t need to include the driver etc as the TC652 part doesn’t have it either.

        Please include the price of said opamp(s), thermistor (or temperature sensor you choice), all passives, voltage reference (if any) and trim pots for QTY 1 from the usual mail order place.

        Your price target to beat is $1.80 vs the TC652 part.

        1. Your price calculations are a fail as you don’t account for the cost of the unnecessary Arduino.

          Your specifications are wrong as the project in question doesn’t detect fan failure (which is why 3-wire fans were invented).

          Moving on…

          Futurlec have the LM741CN for 22 cents and thermistors for 35 cents. Spend a few more cents for resistors & caps and you’re done. Oh, the ‘driver’ can be a DB135 power transistor for 20 cents.

          Price: Under $1.

          Since your Google is broken here: is one of thousands of pages describing the old-as-dirt circuit (picked as it has a video).

        2. Oh, if you want to detect a fan failure then a 555 (1-shot mode) will do the job nicely (though I can hear the old guys grumbling about RC circuits & current detection).

          555 & RC work by detecting the RPM pulse from a 3-wire fan. Current detect is just that, you monitor the power going to the fan and will work on 2-wire fans.

          Zero current is a broken wire or something, if the fan stalls you get maximum current.

          If you use a fuse then you don’t need to detect max current, just monitor the fuse (ie zero current).

          You can also detect air flow, but that’s a bit much. Maybe. For instance you don’t need the thermistor, you can do temperature detection with two diodes. Put one on the hot part, the other on the board to measure ambient temperature. Their forward voltage will change depending on heat. (There, that’s another 30 cents off the BOM.)

          Same method can be use to detect air flow, one diode goes in front of the fan. When its forward voltage is the same as the ambient one, the fan has stopped.

          This is often called ‘hot wire’ detection.

    1. It’s a cool chip, but the temperature it monitors is fixed. If you want to change the temperature you need to buy a different chip. This stops you from finding the optimum temperature/fan speed/fan noise setting.

  2. I discovered something about PWM’ing fans with an external controller: if the system is counting on getting pulses off a rotation sensor, PWM’ing the fan will mess that up (because you’re also PWM’ing the supply to the rotation sensor circuit).

    Guess how I know this? If the fan is 4-wire and has a PWM control input, you’re probably OK, but those fans cost more and not as available…

    1. In my personal experience, unless the fan has an exotic size or manufacturer, the 4-wire version costs the same/even less then the 3-wire version, since most of them use the same controller ;-)

  3. I admire the dedication to the art in doing it this way. I had exactly the same issue with a power supply but didn’t have time or resources to do a full-up digital solution like this. Instead I used NTC thermistors on the heatsinks, and a TO-220 darlington for the fan, olde-skool analog. Silent at idle, it ramps smoothly to hurricane-force at full load, and slows down again when it cools down. It’s actually a nice audible indication of how hard the power supply is working, and doesn’t depend on the quality of my coding :-).

  4. Be careful running PWM on anything but the cheapest low current computer fans or fans supporting it.

    High power fans often break after a few weeks of running on PWM since as Peter notes, the fan has an internal controller that isn’t expecting it.

    I have killed a couple of brand new fans from a good manufacturer in seconds running them on PWM and a company i did some work for had 2 out of a set of 3 expensive ($80) EBM/PAPST break down completely (circuit boards black, bad smell in the room) after running them on 20kHz 30% PWM for only a couple of months.

  5. But what if you scored a box of twenty NIDEC BETA V TA450DC B34262-57A 119x38mm at $1 per fan? ;)
    Those babies are 12V, 9.6W, 4000 RPM, 130 CFM!!!!, 53.5 dBA :(((. They start ok’ish at 6V, and run reasonably quiet at 5V, a little annoying at 6V, helicopter pad at 12V.

    Internally they use UNISONIC TECHNOLOGIES SK6406 and a pair of STD1802 transistors.
    Looking at the datasheet the part that can influence rpm is CT capacitor, but on a block diagram its only connected to “lock protection” block.
    On the other hand Nidek sells same fan with different speeds (1900-4050 rpm).
    so there must be a way to regulate speed.

    Hmm im gonna swap that capacitor and see what happens.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.