kaashif's blog

Programming, software freedom and Unix

Modding a Sun Ultra 45 fan module


I have a Sun Ultra 45, the last and most powerful Sun SPARC workstation. Even though mine doesn't have both of the two CPU slots filled, the fans are still really loud. Is there a way to control the fans? How could I slow them down?

I first tried to find a software solution on OpenBSD and later had to resort to soldering and adding some resistors to the fans to slow them down.

The Problem

To understand the problem, you just need to know how many fans there are. There's a fan on the CPU heatsink: this one is fairly quiet and I have no problems with it. The loud fans are the three huge monster fans between the motherboard and the hard drive/disc drive bays.

Here's a picture of the three fan module removed with various crap around for scale:

Fan Module

Those fans are huge, they take 12V DC and draw 1.3 Amps! That's a power drain of:

$$3 \times 12 \text{V} \times 1.3 \text{A} = 46.8 \text{W}$$

50W just for fans? No wonder they sound like jet engines!

Software fan control

The first port of call is a software solution: can we use a fan control program to slow the fans? The support for fan control on OpenBSD is already sparse, even on amd64, so this was unlikely.

On amd64, there is generally good fan sensor support: you can view how fast your fans are going. I tried to get this working on sparc64, but couldn't, so I'd have to content myself with knowing my fans were "loud".

If I couldn't control the fans in OpenBSD, could I control them in Solaris? I took a closer look at the fan module to see where it connected to the backplane:

Fan Connector

Using a 12V bench power supply and some crocodile clips, I tested the connections to make sure the wire colours were true to what I knew. They were. Ground was black, 12V was yellow. The other two were clearly fan speed control pins: pulse width modulation (full voltage but pulsed at different speeds to control fan speed) and voltage control (varying voltage to control speed). There are 3 blocks of 4 pins on the connector, one block for each fan. The top two pins are ground and 12V, the bottom two are for speed control.

It seems to me like it might be possible to use PWM to control fan speed, but not out of the box with OpenBSD. I didn't want to try Solaris since every time an Oracle logo appears on my screen, a puppy dies. Next!

Hardware fan "control"

There is one other way to reduce fan speed: reduce the voltage across the fan. The current draw of the fan varies so ideally we'd have a voltage regulator, but I didn't have any on hand.

A workable candidate would've been something like a 7806 regulator to halve the fan voltage to 6V. The 78xx range of linear voltage regulators can provide up to 1.5A of current, so that'd be more than enough. How much is "enough" exactly? Modelling the fan as a resistor (sue me):

$$R = \frac{12 \text{V}}{1.3 \text{A}} = 9.2 \Omega$$

So the current draw at 6V would be:

$$I = \frac{6 \text{V}}{9.2 \Omega} = 0.65 \text{A}$$

We could even get away with the low power versions of the 78xx regulators at that sort of current. The issue is, of course, that I don't have any spare voltage regulators lying around!

My other option was using some power resistors I had lying around. From the earlier calculation, we know the fan is something like a 10 ohm resistor. So to halve the speed I added one 10 ohm resistor in series with each fan. Problem solved.

Power dissipation

Resistors get hot. How hot? To work this out, we need to know the power being dissipated by the resistor. Voltage splits in proportion to resistance, so we can say there are 6V across the resistor, so:

$$P = \frac{(6 \text{V})^2}{10 \Omega} = 3.6 \text{W}$$

Kind of a lot for a resistor, certainly a 1/4 W resistor wouldn't cope. But the resistors I had lying around were 10W, so no problem.

How do we deal with the heat? Well, we are powering fans, so I just thought I could dangle the resistors in front of the fans and cut some holes in the plastic so everything lines up nicely. If that goes badly for me, I'll certainly write a post about it.

Does it work?

So far, yes. Here's a picture of the final fan module:

Modded fan module

I had to cut away some of the plastic for the resistors to fit. A more elegant solution was probably possible, but I'm not going to sell this Ultra 45, so I'm fine with it being a bit damaged aesthetically.

Like I said, the dream solution would be to provide the fans with a regulated 6V, perhaps with a 78xx regulator. As long as the fans work ok with my hack job solution, I probably won't end up going that way though.