I have been looking at ways to control computer fans with a microcontroller. I wanted to avoid using PWM because it makes fans louder and also prevents speed monitoring working properly on some fans. Linear voltage control is the best option.
The ideal method is with a nice DC-DC converter, but they are expensive and complex to control with an MCU it seems. There are some much simpler and cheaper methods.
One is to use a 7805 regulator. By biasing the sense line which is normally tied to ground, you can increase the output voltage. Basically the voltage at the sense pin is added to the baseline 5V output. A simple potential divider can set the bias voltage (see the datasheet for an example). Unfortunately more current that most digital potentiometers can handle is required to flow through the resistor, but a set of switched resistors can be attached to an MCU if you have enough I/O ports free.
A better method is to use a digi-pot to generate a reference voltage, then use an op-amp to multiply it over the scale you want and an NPN emitter-follower to boost the current. A LM324 and 2N2219A are ideal, as shown in the THMC50 datasheet:
