• Welcome to Overclockers Forums! Join us to reply in threads, receive reduced ads, and to customize your site experience!

manual PWM fan control server HP-ProLiant

Overclockers is supported by our readers. When you click a link to make a purchase, we may earn a commission. Learn More.
Look up "sensorless FOC" for the details of how it works.

You could use an Arduino or other microcontroller to intercept the signal. You'll have to learn some programming but Arduino is designed to be easy. As for capturing the input signal, you certainly could set up a gated counter but it's easier to use a RC filter and one of the ADC channels. (I suggest 10k and 10uF to start with.)
 
Look up "sensorless FOC" for the details of how it works.

You could use an Arduino or other microcontroller to intercept the signal. You'll have to learn some programming but Arduino is designed to be easy. As for capturing the input signal, you certainly could set up a gated counter but it's easier to use a RC filter and one of the ADC channels. (I suggest 10k and 10uF to start with.)

:eh?::eh?::eh?:
ok, probably you are underestimating how much I am noob about electronics in general...I mean, I know more or less what Arduino is, and I have to say that when I heard about it I got curious, right because of the simplicity of the concept, but I still lack of a lot of basic electronics knowledge..for example, until a couple of days ago for me pwm was just a more efficient way to control the speed of a fan, but I had no idea on how it really works..now you are telling me that actually is not even simply pwm, but a kind of programmed system,so I need some time to get digest all of this :)

edit: yes, how I was thinking, I just gave a quick look at FOC page at wikipedia and I haven't understood much, even because I'm tired (it's 4am in the uk and i'm going to sleep) and I wouldn't be able to understand it even if they'd write a book "advanced speed fan control for noob dummies" (or dunnoobies :)), looks like I have to spend some time in studying and trying, as definetively I have to find a way to silence down this monster while his 16 (soon 24) cores are running all at 100% grinding rendering and simulations...
 
Last edited:
Where the confusion comes from is that PWM is indeed used to control the speed of DC motors. But PC fan motors aren't really DC motors, they're actually small 3 phase synchronous motors with built in inverters to let them operate from DC. The inverter's PWM input merely emulates the operation of a DC motor and controller. The DSP that drives the inverter in Delta fans does a lot of advanced computation to synthesize the sine waves (using its own PWM!) that drive the motor, which might as well be called "Cindy Wu black magic".

But let's abstract that out. We supply the fan with 12V and give it a PWM signal. Increase the duty cycle of the PWM signal and the motor runs faster. Decrease the duty cycle and it runs slower. You can use an Arduino to generate that PWM signal.

Now let's try using the Arduino to sense the incoming PWM from the motherboard. Connect a 4k7 resistor from 5V to PWM, then connect a 10k resistor from PWM to an Arduino analog input. Also connect a 10uF capacitor from the analog input to ground. Now just get an analog voltage reading and it will be proportional to the incoming PWM duty cycle.

Then put the two together with whatever mapping (input vs. output curve) you want and there you have it!
 
Where the confusion comes from is that PWM is indeed used to control the speed of DC motors. But PC fan motors aren't really DC motors, they're actually small 3 phase synchronous motors with built in inverters to let them operate from DC. The inverter's PWM input merely emulates the operation of a DC motor and controller. The DSP that drives the inverter in Delta fans does a lot of advanced computation to synthesize the sine waves (using its own PWM!) that drive the motor, which might as well be called "Cindy Wu black magic".

But let's abstract that out. We supply the fan with 12V and give it a PWM signal. Increase the duty cycle of the PWM signal and the motor runs faster. Decrease the duty cycle and it runs slower. You can use an Arduino to generate that PWM signal.

Now let's try using the Arduino to sense the incoming PWM from the motherboard. Connect a 4k7 resistor from 5V to PWM, then connect a 10k resistor from PWM to an Arduino analog input. Also connect a 10uF capacitor from the analog input to ground. Now just get an analog voltage reading and it will be proportional to the incoming PWM duty cycle.

Then put the two together with whatever mapping (input vs. output curve) you want and there you have it!

:p in this way looks like more understandable for my ignorant ears, even if in the first part after a while the discussion starts to become more and more gobbledygook (I don't know if it's the best word to express it as English is not my mothertongue, but what I mean is: WTH is a Cindy Wu black magic?)
anyway, the discussion is very interesting and deserves more time, but sadly at the moment I can't afford to spend time (to study Arduino,I really need it to barely understand something) and money (I know Arduino is designed to be cheap, but if I start dealing with it I won't be happy until I'll have all the accessories that I might need, even stuff I'll use like once or twice in my life!), so I'll move towards the direction of fan replacement/tricking the the system check:
I suspect it's gonna be enough if I just cut the wires of the fans' plugs and make an adapter 5pin->3pin classic, and after I use a simple controller to drive any fan I want...

but this is something I'll do on my next day off, as today has ended up differently: infact this morning I've finally got delivered my 4 new (just to say) E7450 hexacore :bday::bday::bday:
so I've spent almost the whole day playing with a 4 for the price of one (literally) 35kgs build :attn:
right now I've just finished to test everything and I'm fuxxxxnly happy to see that this 300£ power hungry coffin scores almost 1400 with cinebench r15! :D I know it's nothing too special, but for me it's a great result, as Cinema 4D is one of the software I use, and until now I couldn't go above the 850 of my o.c.ed 4770K..I mean, I've never seen so many buckets in a system of mine! ...this is giving me the idea to make a nice and detailed benchmarked thread, comparing properly this two systems, as when I was planning to buy the server HP i got almost crazy because I couldn't find any useful benchmark about the e7330 (or e7450)...I put it in the list of the things to do :rolleyes:

edit:added a couple of pictures, soon I'll edit the first post adding detailed pictures of the fans and relative circuitry, temps with occt, and I'll organize it with a summary of the potential solutions for the noise/heat problem
sorry for the long post and some OT
 
Last edited:
"Black magic" refers to something that works but isn't well understood by most. Cindy Wu is the firmware engineer who created the specific FOC algorithm used in Delta fans. Motor control is getting very sophisticated nowadays.

You don't need any "shields" for the Arduino in this case. Just the Arduino itself is enough for your application.

Another solution is to make one of those DIY 555 PWM drivers and use it to control the fans. You'll have to watch the temps to make sure they don't go too high. A buck converter can apparently be made to work, but it's not the recommended way to do it and it's more expensive than the 555 circuit.
 
You don't need any "shields" for the Arduino in this case. Just the Arduino itself is enough for your application.

Another solution is to make one of those DIY 555 PWM drivers and use it to control the fans. You'll have to watch the temps to make sure they don't go too high. A buck converter can apparently be made to work, but it's not the recommended way to do it and it's more expensive than the 555 circuit.

I'm starting to consider to order an Arduino, now I'm editing the first post to give an order to this messy (my bad :-/) thread
 
Getting the correct frequency PWM output from an arduino is more difficult than you're being led to believe.
Actually almost everything you've been told by mike is rather more difficult than you're being led to believe.

Mike, give us some code for an arduino and a 25kHz PWM frequency, then suggest people use it :D
 
http://playground.arduino.cc/Main/TimerPWMCheatsheet
Using pin 3, 9, 10, or 11 with the divisor set to 1 gives about 31kHz PWM frequency, close enough. For this case, only one PWM output is needed. It should be able to drive the fans directly, but a MOSFET is cheap and can even be salvaged from an old motherboard.

Motor control DSPs like the dsPIC and C2000 (what's used in the Delta fans!) have better PWM peripherals, but are also more difficult to program. I have to admit that I don't actually use the Arduino very much, but then again, I'm getting pretty far into embedded programming. My favorite embedded microcontroller/DSP is the dsPIC since it's quite capable yet prototype-friendly.
 
I've tried it at 31kHz. The fans I used didn't like it very much though it did work.
Might want to try things before you recommend them.

The arduino can source/sink 40ma/pin, Intel spec limits the fan's PWM pin pullup to ~5ma. You should know this, if you're going to try to be Mr. Guru.
 
The Deltas are fine with 31kHz. That's close to the frequency I happen to run them at in my hybrid air conditioner project. (The reason it runs at that frequency is because the motor control PWMs on the dsPIC are grouped. On one group, I had two fans running off two of the output channels, but the third ran a buck converter for the water pump.)

It is indeed possible to get 25kHz out of an Arduino by playing with the registers.
http://forum.arduino.cc/index.php?PHPSESSID=j8tmd75f1qka130ejtdlviosg7&/topic,18742.0.html
 
Oh it's possible if you only want one output, by playing with the AVR registers and departing from normal Arduinoland, and you're suggesting this to someone who is a self described electronics noob. Not real helpful.
 
One output is enough for this application. I presume there's not much point running the fans at different speeds (from each other) in this application.

Or you can go with the 555 and skip all programming, with the caveat that you must watch the temps.
 
guys, please don't argue! I'll put the use of arduino in the first post as potential solution (anyway, soon or late I'll buy it, indipendently from the fact that i'll use it for speed control or not).
Nonetheless I still havent understood what's the difference from using a pwm fan controller like this one (I think is the one Mike is talking about when he says 555 chip) and using arduino to control the pwm signal...more accuracy maybe?

edit: edited the first post, added pictures and summarized the solutions (quite enough, thanks to everyone), now I only have to find the time to do some trial and error...
 
Last edited:
Yes, that 555 circuit will work. A 555 has loads of drive capability so it will easily handle all 6 fans. But it's a manual control so you have to watch the temps.

The Arduino solution is a lot more complex, but it also lets you automate stuff. What I suggested was to use the Arduino to intercept the PWM signal in order to remap it.

Also see if the BIOS has fan control options. I know Dell has a setting that forces the fans to run at least 50% for using (GP)GPUs. It's a workaround for the fan controller being unaware of the GPU temperature. (Personally, if I were designing the system, I would put the PCIe slots and auxiliary PCIe power through a current sensor, so it will automatically rev up the fans on GPU load and therefore avoid the chance of a customer not reading directions and complaining that his GPUs keep overheating.)
 
Yes, that 555 circuit will work. A 555 has loads of drive capability so it will easily handle all 6 fans. But it's a manual control so you have to watch the temps.
Well, that is mandatory, but I'm more worried for the ram (peak of 80C with OCCT linpack with default cooling,I wonder if it's normal)),as for the cpus (that are already quite cool)I could add some fans straight on the heatsinks
The Arduino solution is a lot more complex, but it also lets you automate stuff. What I suggested was to use the Arduino to intercept the PWM signal in order to remap it.
Interesting, but definitely out of my grasp now, and you can't image how much I envy you (both) because I don't have neither arduino nor the minimum knowledge to use it, definitely another things to add in the list of the things to do :rolleyes:
Also see if the BIOS has fan control options. I know Dell has a setting that forces the fans to run at least 50% for using (GP)GPUs. It's a workaround for the fan controller being unaware of the GPU temperature. (Personally, if I were designing the system, I would put the PCIe slots and auxiliary PCIe power through a current sensor, so it will automatically rev up the fans on GPU load and therefore avoid the chance of a customer not reading directions and complaining that his GPUs keep overheating.)
I've given a look but I have found nothing about fans in the bios, and when I say nothing I mean not even the reading of the temps...
Also, I've read somewhere that some model (or firmware version) of the Proliant Servers basically increase progressively the speed of the fans according on how many pci-ex slots are populated, but it can't be changed...luckely I don't need to add any card for now (even if thanks to this forum recently I'm getting interested about bitmining and having 4 slot pci-ex 2.0 16x/8x free makes me think bad things...)
 
Contacted the hp support an officially there's no way to control the fans via software, not with an HP software anyway, so I can cut the solution number 1 in the first post.
Now I'm going with the fan replacement, as I don't have neither a 555 pwm controller, nor a voltage controller nor Arduino.

the plug coming from the mobo has 6 wires (5 pins male, two wires are linked together), the connector of the delta fan has got 4 wires (5 pin female, one of the wires is bridged to the ground wire) so I've taken a corsair fan (h80 stock) 3 pin and
attempt 1
connected the 12v (from the fan) to the red wire, and the ground to both the black wires
result: the system start at max speed and after POST gives the message system healt degraded,redundant fan missing, and all the fans (corsair included) keep on running at max speed
attempt 2
same as above, plus I've connected the tach wire from the fan to the yellow wire
result:same as above, but W/OUT redundant fan missing message (so the fan is recognized) and the fans alternate between running at max speed and slowing down a little bit,after a few seconds again:max speed,slowing down (like 5000rpm<->4000rpm), the corsair fan probably runs at max speed for all the time (I can't understand if it reduces the speed because there's too much noise)
 
Last edited:
The new fan you put in is not variable speed so it will just run full speed.

Yes, I guess that fan can just be driven with a voltage controller or an external pwm controller, but I don't care much at the moment as I'm still testing...Also, considering the weird behaviour of the second result, I guess the server checks the speed of the fans, so to avoid system health error I have to find a way to send a pulsed signal that emulates the speed wire at around 5000rpm at the startup...at least if I take the way of substituting the fans.
Given that, the quicker solution is gonna be leave the deltas, using a 555 controller to slow them down until 1300/1500 (hopefully acceptable and accepted by the system), and add the two corsair over the ram to compensate...after that, evaluate if the cpus temps are still acceptable, otherwise add 4 more fans on the heatsinks..I was also thinking to control all the non-delta fans with a voltage controller, but which could be a cheap and more efficient alternative to a simple pot?
 
Last edited:
just to update, I've kept on looking for info about dsp controller, but there's nothing commercially available for fans...I guess that it's the same story of the pwm controller, DIY is the only way..
 
The DSP is inside the fan motor. Look up "sensorless field oriented control" if you want to know more.
 
Back