Jump to content

Spal radiator fan installation with speed control (longish)

The objective of this modification was to install an electric radiator fan with variable speed control.  Specific design goals were as follows:

·        Minimize loss of radiator frontal area

·        Mount fan flush with the radiator

·        Minimize axial motion of the fan assembly under driving conditions

·        Implement high-frequency PWM speed control

·        Control fan speed as a function of radiator outlet temperature


Mounting Brackets

These brackets use the existing radiator mounting bolts.  The image below shows the upper and lower brackets, made of 3/8” thick aluminum.  The upper bracket could also have been shaped like the “batman” lower bracket for even better airflow, but I got lazy.  All fabrication was done with a table saw and hand drill.




The picture below shows the brackets dry-fitted with the radiator removed.



Fan Mounting

The fan I used is the 12” Spal 30102029 pusher.  To attach it to the brackets, I purchased Spal’s 30130010 mounting clips.  This allows the front face of the fan to be completely flat, with no interference from screw heads.  The illustration below from Spal shows the clip.


The fan bolts onto the brackets using the four clips.  Note the use of washers between the clip and bracket in the picture below, to position the fan at the radiator face.



Speed Control

While on/off control will do the job, it is inefficient and puts a lot of stress on the electrical system.  Plus, a fan roaring at full throat is pretty noisy.  I decided to use pulse width modulation (PWM) to vary the speed of the fan.  By monitoring the coolant temperature at the output of the radiator, the PWM can be set up to regulate that temperature automatically.

The challenge with PWM is that aftermarket controllers typically provide a 100 Hz drive frequency, and for good reason.  Making a reliable, high-frequency, high-current driver is expensive and technically challenging.  The Spal fan and many others with brushed motors, like to run at much higher frequencies, around 20 kHz.  When driven this way they run cool, quiet and happy.

To monitor the radiator outflow temperature, I used BMW 12 62 1 288 158 NTC temperature sensor installed in the lower radiator hose, using Ireland Engineering’s adapter.  Many thanks to Chargin on the FAQ for sending me one of these!


The Junkyard Solution

It turns out that in the mid-2000’s, car manufacturers scrambled to install PWM fan control because the EPA gave them a credit on the CAFE requirements, since it reduced fuel consumption.  Their solution was to add a PWM module that accepted a 100 Hz PWM input and put out a 20 kHz drive to run the existing fans.  These were found in several cars, from Ford to GM to Mercedes and look like they came from the same source.  The module is a brute as it can handle the 37 amp load of a C6 Corvette fan.  I used the one from a 2008 Ford Fusion.  Make sure you get the wiring pigtails as well. I mounted mine using the two existing holes in the front apron panel as the holes in the module lined up almost perfectly.


These modules have an interesting PWM input requirement, as the table below shows.  Between an input of 10% and 90% duty cycle, the output varies linearly.

Input Duty Cycle (100 Hz)

Output Duty Cycle (20 kHz)

< 10%






> 90%



To give you an idea of how good the module’s drive waveform is, below are a couple of scope shots at different output duty cycles while driving the Spal.





Controlling the PWM Module

Now that the requirements were understood, the next task was to provide the correct input waveforms.  After much deliberation, I concluded that the easiest way to do this was to use a microcontroller to do all the logic.  The logic is simple:

·        10% duty cycle at 75° C (turn on)

·        90% duty cycle at 90° C (full speed)

·        Linear in between

The circuit also adds a couple of features, such as a switch input to turn the fan on at full speed at any time as well as an LED output for an over-temperature condition (warning light).  Here’s the PCBA, which could be made much smaller and packaged with a sealed connector.  This circuit can be mounted in the engine compartment as the components are rated for automotive use.  I have tucked mine away near the charcoal canister.




This is perhaps the easiest part of the entire project.  The module has five connections:




Fan +


Battery, fused, 30 A

(unit draws less than 50 µA when off)




Fan -


PWM Input (from PCBA)


WARNING: DO NOT connect M- or the fan’s negative terminal to chassis!!



The PCBA also has connections that need to be addressed:

·        Ignition switched 12 volts

·        Chassis

·        Temperature sensor (2 wires)

·        PWM output to Ford module

Since the pigtails I hacked off the donor car were long enough, I could run the wires without splicing.  I used a 30 amp MIDI fuse to feed the fan directly from the battery (I had previously installed an e36 junction box which offered a convenient hook-up point, as shown below.  It was also possible to feed the wires along the existing harness for a clean look.




Does it work?

I am impressed by the performance of the Ford module.  It has built-in soft start and soft shutdown such that it ramps up and down gradually during any speed change command.  Even if asked to go to full speed from a stop, it spins up gradually and keeps the load on the electrical system to a minimum.  I find that the fan rarely needs to come on during normal driving but I haven’t tried it in the heat of summer.  When it does come on, it is so quiet as to be unnoticeable, what I call “whisper mode”.

For those with an EFI controller, the setup is even easier.  Just connect the temperature sensor to a spare analog input and the Ford module to a spare PWM output.  No microcontroller PCBA needed.

I have also attached this document as a pdf that you can download for easier reading.


Spal Fan Installation with PWM.pdf


User Feedback

Recommended Comments

Good article!


What did you use for the Micro-controller?


I'm thinking this may be a great alternative for a on-off only setup that a megasquirt 2 would provide.  (not on a 2002 or even a bmw, but a miata powered locost)



Link to comment
Share on other sites



I used a PIC 16F18324 for this.  If there is interest in this controller, I think it should be changed to be more packaging-friendly,  I've done a PCB layout for an 8-pin Ampseal header and the board fits completely within the footprint of that connector.  This would allow for a small, sealed module that can be placed just about anywhere.


The over-temp warning can be dispensed with because there is a temp gauge in the car anyway.  If there are other features that should be considered, they can be folded in as well.  It all depends on the level of interest and the volume.

Link to comment
Share on other sites

Wow!  I thought that was a purchased product (surface mount components, silk screening, etc)  Very nice end result!


I was planning on doing a micro controller based dash board based on CANBUS data pulled from the Megasquirt, using Arduino type products (build a purpose built board, or one of the offshore nano/mini boards).  Cooling control could be added based on coolant temp that MegaSquirt returns over CANBUS (I'm assuming that's one of the canbus data points on a Megasquirt).  I haven't written C code in a bunch of years, so I stick with the Arduino stuff for the simplicity of the language, availability of libraries (most of which are C, I think) and the large amount of info available on the interwebs.


Now you've got me thinking :)


Let me know what you think a packaged version would be worth.  Keeping cooling on separate hardware from a dash program isn't the worst thing in the world.  Bad code on my part could keep the cooling routines from running and overheat an engine, or set a value rather than compare (== vs =) and overheat an engine. 


I'd rather have something made by someone who knows what they're doing taking care of something important as cooling fan control.


Thanks for the write up!



Link to comment
Share on other sites



Actually, I messed up a little on that silkscreen in the lower left corner, if you notice :D.  I prefer SMD components as it makes things more compact and also more reliable.


As for making a module, I think the biggest question we need to answer is the packaging.  Using a PCB that just has solder points for wires would allow the user to have a pigtail with the connector of their choice.  Since these lines carry minimal current, you don't need much.  If you can find a nice enclosure to put it in, you could potentially seal it and place it underhood.   If you are okay with mounting the board in the cabin, the pigtail approach also works.


The other approach is to use a board mounted header.  The Ampseal connector is around $7 but you also need the mate, so the costs add up.

Link to comment
Share on other sites

Another option is use one of Spal's brushless fans. My wife regularly complained about the noise from the 16" SPAL on her Jeep Grand Wagoneer with a 5.3 LS engine, so I did some research and purchased a SPAL brushless fan. It uses a temperature sender in the radiator to vary the fan speed, while also providing an input for full speed when needed. It does soft start, and should last forever since it doesn't have the brushes to wear. She never mentioned the fan again, and you could usually find it just barely spinning when I would check it.


Two problems: Pricier that a brushed fan, and can be hard to get through normal sources. 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...