I have a fan control circuit with Arduino (PWM). I did all things and it worked. My question is why we did not directly connect the fan to Arduino. Why should we have a driver circuit?

  • 1
    Because physics will destroy your device. Jun 3 '16 at 17:37
  • I found an answer for that since we are applying a linear control on the fan,if we we connect directly to the arduino,we would not be able to any voltage rather than 0 and 5 volts(it will act like a switch).With driver circuit,we made our fan operate between 0-12 volts using feedback. However,this answer is not enough for me ,i did not understand the exact reason.
    – nixieh s
    Jun 3 '16 at 17:42
  • 1
    This question is on-topic and should remain open. Programming is included but not exclusively. Boards, clones, IDEs, libraries, and more, related to Arduino, are included.
    – JRobert
    Jul 8 '16 at 13:42

This is an electronics question, and it should be forwarded to the electronics stackexchange.

The fan needs to have a proper amount of current to spin, and because the microcontroller that controls the fan draw very little current on its output pins (check the datasheet for the exact value, but it should be a few milliamps), unless you have a miniature fan, wiring it directly on the microcontroller will not be able to move the fan.

And this is by design that microcontrollers cannot provide much current. Because to provide larger amount of current than what they do, they'd need to have bigger copper tracks between the transistor to avoid having they internal circuits building too much heat, and they would be much much bigger.

So as a work around, we use an transistor, which receives on the "Base" pin a voltage, drawing almost no current, which will "connect" the collector and emitter pins where you can have a much bigger current flowing (though be careful to respect the datasheet's nominal values for current! Or use either a MOSFET, a Triac or a Relay for bigger currents).


Arduino is a low voltage and low current device. Arduino max current output delivery capecity is 200ma, you can read about diffrent arduino's limitations here, http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations

Fan or anything that has a coil inside it, needs a huge amount of current during their start up. The current draw decreases as it gains its motion to some limit. The initial huge current is called surge current. There is a high chance that it will blow you pins dead.

Let's say we are using really small fan. And it managed to start and rotating, that dosen't meant there is no problem at all. When a coil is rotated inside a magnetic field an opposite voltage is induced called Back Emf . This is another huge potential concern. This is why we are always suggested to use a diode which will block the opposite flow of current.

Transistor, being a low voltage device and as it can deliver tremendous large amount of output current, It is very widely used to drive high current devices



Vin pin = 5V or 3.3V

You cannot use the 5V from the USB to power up the FAN and the LOAD because the USB port usually delivers only 100mA, and this is not enough to switch the relay and the LOAD. That is why you must use an external power supply (Vcc) that is between 7 to 12 volts to power up the Arduino board and the transistor + relay. The load uses its own power supply, for instance if you use a light bulb then you might connect it to the 110/220V mains or any other power source.


you can also use a fan that has one of the pins of the fan is a PWM input. The fan has an internal transistor to switch the 12V power when given a 0-5V input. That is the pin you want to connect to the actuator pin.

please get back to me if it was helpful


Actually the Arduino Uno dc current per I/O pin is 40mA. When fan is connected directly to Arduino Uno, it cannot withstand, because the fan draws more-than 20mA current.

The driver circuit provides sufficient current to rotate the fan. The TIP 121 can withstand up to 3A current.


I know this is an old link but MAXIM has a tutorial on using PWM to drive "normal" DC fans. The link is here: https://www.maximintegrated.com/en/app-notes/index.mvp/id/1784

It was helpful.

Personally, I am designing a simple 5-step temperature-driven device that uses an ATtiny13A to drive a 5 volt fan and a thermistor mounted to a heatsink. I was originally trying to use a PWM frequency of 4687Hz (CPUclk / 256) but it was way to high. The MAXIM article states that frequencies in the range of 20Hz to 160Hz are useful. Obviously, the 4687Hz was TOO HIGH. I dropped it down to 18Hz and everything works now. The problem was that the pulse width at 4687Hz was too short to give the DC fan enough electrical "momentum" to spin the fan. Using a lower PWM frequency gives more electrical energy to the fan to get it to spin. An analogy would be trying to push a toy car with short and rapid "pushes" as opposed to using longer and slower "pushes".

Hope this helps.

Peace and blessings.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy