Zak Kemble build an AVR based PWM fan controller. He writes:
So this is a bit of a continuation on my 555 timer based PWM controllers, but now using microcontrollers and MOSFETs instead of 555 ICs and transistors. I made 2 versions, one with switches for speeding up and down and the other with a potentiometer like the previous controllers. I used ATtiny25 controllers running at 31.25KHz (8MHz internal RC / 256 prescaler) with a 3.3V supply, the MOSFETs I used are STP36NF06L with 0.045Rds and 2.5Vgs max, perfect for 3.3V, the MOSFETs only generate ~180mW of heat at 2A ((0.045Rds * (2A * 2)) = 0.18W) so no heatsink needed, you can barely feel them getting warm.
AVR microcontroller based PWM fan controller – [Link]