Right, back again with an update on my idea for a kick-ass fanctroller. So far, I've been coding away and right now, I'm up to the point where the actual fan control is implemented (I've already written the LCD-commands, several input functions, a setup and a menu.) But I'm having some problems.

Now that the software is nearing it's end, I'm starting to think about the hardware again. I want to create a custom PCB for this thing. One of the things that bug me the most is the fan power delivery circuit. After a lot of testing (and I mean a lot), I came to the conclusion that the 3-pin fans I intend to use need a true analog voltage. If they're powered by PWM, the fan-speed readout is completely wrong.

That's where I'm at right now and I'd appreciate your input. How can I convert the PWM output (0-5V) of my arduino to a linear analog voltage between 0 and 12 volts with a power supply of 12 volts? I tried using the schematic below, but that gives me a maximum voltage of about 10.5 volts (because of the voltage drop over the darlington). Does anyone have a better idea?

R1 is the load (one or more fans/pumps)
R2 and R3 have been fiddled with endlessly
Q1 is a TIP112 Darlington pair
U1.1 is one of the two opamps in the TS272CN package
The most left wire goes to the PWM output of the arduino


Could you not just …

add a low pass filter between the load and the transistor/mosfet?


What would that do? There are no high frequency signals on that location, 'cause the low pass filter (cap) connected to the opamp already converted the PWM to an analog voltage.

The real problem is that I need to create an analog voltage of 0-12 volts when my psy only delivers 12V (so any transistor between the load and the 12V rail will reduce the maximum voltage that the load will get)

If you can find one at a

If you can find one at a decent price, a fancier “rail to rail” op amp will almost give you a true 0-12V output. That might be close enough for what you need.

Not sure how it fits in with your application, but you could switch the transistor to low-side drive and swap your 0-10.5V output for a 1.5-12V output.

The only way I can think of to get a true 0-12V output would be to use some voltage boosting circuitry (charge pump, SMPS, etc) to bump your 12V supply up to maybe 18V, and then feed that into your transistor. Slap a 12V zener diode on the output to stop it from exceeding 12V, just to be on the safe side.