I'm working on arduino pwn fan "controller", but it won't be a typical solution.
I have a proliant server, running with lower TDP cpus, and I will watercool it anyway. But still - I want to retain fans to some extend (there's a lot of other components to cool, not only cpus) and want also to retain original fan steering - especially in case of malfunction.
My idea was to use arduino to basically two things: 1. Read original PWM controlling signal value off 4-pin (well six in that case, but that's another story) 2. send new PWM signal to the fan, using original as a reference.
For now I want to focus on point 1. - reading original PWM value off the motherboard.
6-pin PWM fan headers on Proliant have basically same pinout as standard 4 pin, but two fans can be connected to one header (+12V1, GND, +12V2, Tacho1, PWM, Tacho2)
According to wiki https://en.wikipedia.org/wiki/Computer_fan_control#Pulse-width_modulation PWM signal is 25kHz:
"control pin is an open-drain or open-collector output, which requires a pull-up to 5 V or 3.3 V in the fan"
If I understand that correctly, voltage is delivered on the fan (arduino) side, with GND on the motherboard? Would it mean that it will be enough to define the pin as INPUT_PULLUP, and then follow http://www.benripley.com/diy/arduino/three-ways-to-read-a-pwm-signal-with-arduino/ ?